From 5170e47ebd80005787c610e6c08a23526906e985 Mon Sep 17 00:00:00 2001 From: Andre Vieira Date: Thu, 19 Jul 2018 15:47:15 +0000 Subject: [PATCH] [PATCH, GCC, AARCH64] Add support for +profile extension This patch adds support for the Statistical Profiling Extension (SPE) on AArch64. Even though the compiler will not generate code any differently given this extension, it will need to pass it on to the assembler in order to let it correctly assemble inline asm containing accesses to the extension's system registers. The same applies when using the preprocessor on an assembly file as this first must pass through cc1. I left the hwcaps string for SPE empty as the kernel does not define a feature string for this extension. The current effect of this is that driver will disable profile feature bit in GCC. This is OK though because we don't, nor do we ever, enable this feature bit, as codegen is not affect by the SPE support and more importantly the driver will still pass the extension down to the assembler regardless. gcc/ChangeLog 2018-07-19 Andre Vieira * config/aarch64/aarch64-option-extensions.def: New entry for profile extension. * config/aarch64/aarch64.h (AARCH64_FL_PROFILE): New. * doc/invoke.texi (aarch64-feature-modifiers): New entry for profile extension. gcc/testsuite/ChangeLog 2018-07-19 Andre Vieira * gcc.target/aarch64/profile.c: New test. From-SVN: r262882 --- gcc/ChangeLog | 8 ++++++++ gcc/config/aarch64/aarch64-option-extensions.def | 3 +++ gcc/config/aarch64/aarch64.h | 3 +++ gcc/doc/invoke.texi | 3 +++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.target/aarch64/profile.c | 3 +++ 6 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/profile.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2f8d59cf6df..0c998afe459 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-07-19 Andre Vieira + + * config/aarch64/aarch64-option-extensions.def: New entry for profile + extension. + * config/aarch64/aarch64.h (AARCH64_FL_PROFILE): New. + * doc/invoke.texi (aarch64-feature-modifiers): New entry for profile + extension. + 2018-07-19 Andre Vieira PR target/83009 diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 5fe5e3f7ddd..69ab796a4e1 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -105,4 +105,7 @@ AARCH64_OPT_EXTENSION("fp16fml", AARCH64_FL_F16FML, AARCH64_FL_FP | AARCH64_FL_F Disabling "sve" just disables "sve". */ AARCH64_OPT_EXTENSION("sve", AARCH64_FL_SVE, AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16, 0, "sve") +/* Enabling/Disabling "profile" does not enable/disable any other feature. */ +AARCH64_OPT_EXTENSION("profile", AARCH64_FL_PROFILE, 0, 0, "") + #undef AARCH64_OPT_EXTENSION diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index f284e74bfb8..c1218503bab 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -158,6 +158,9 @@ extern unsigned aarch64_architecture_version; #define AARCH64_FL_SHA3 (1 << 18) /* Has ARMv8.4-a SHA3 and SHA512. */ #define AARCH64_FL_F16FML (1 << 19) /* Has ARMv8.4-a FP16 extensions. */ +/* Statistical Profiling extensions. */ +#define AARCH64_FL_PROFILE (1 << 20) + /* Has FP and SIMD. */ #define AARCH64_FL_FPSIMD (AARCH64_FL_FP | AARCH64_FL_SIMD) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 9804808f128..485f5998225 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -14845,6 +14845,9 @@ instructions. Use of this option with architectures prior to Armv8.2-A is not su @item sm4 Enable the sm3 and sm4 crypto extension. This also enables Advanced SIMD instructions. Use of this option with architectures prior to Armv8.2-A is not supported. +@item profile +Enable the Statistical Profiling extension. This option is only to enable the +extension at the assembler level and does not affect code generation. @end table diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 50a8cdf7972..2555ac0f8aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-07-19 Andre Vieira + + * gcc.target/aarch64/profile.c: New test. + 2018-07-19 Andre Vieira PR target/83009 diff --git a/gcc/testsuite/gcc.target/aarch64/profile.c b/gcc/testsuite/gcc.target/aarch64/profile.c new file mode 100644 index 00000000000..c2dd1124ca6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/profile.c @@ -0,0 +1,3 @@ +/* { dg-do compile } */ +/* { dg-options "-march=armv8.2-a+profile" } */ +/* { dg-final { scan-assembler "\\.arch armv8.2-a\[\^\n\]*\\+profile\[\^\n\]*\n" } } */ -- 2.30.2