[Ping~,AArch64] Add commandline support for -march=armv8.3-a

Message ID 65fc4e53-a56e-1b16-89ee-871ca08afca0@foss.arm.com
State New
Headers show

Commit Message

Jiong Wang Jan. 6, 2017, 11:33 a.m.
On 11/11/16 18:22, Jiong Wang wrote:
> This patch add command line support for ARMv8.3-A through new architecture:

>

>    -march=armv8.3-a

>

> ARMv8.3-A implies all default features of ARMv8.2-A and meanwhile it includes

> the new pointer authentication extension.

>

>

> gcc/

> 2016-11-08  Jiong Wang<jiong.wang@arm.com>

>

>          * config/aarch64/aarch64-arches.def: New entry for "armv8.3-a".

>          * config/aarch64/aarch64.h (AARCH64_FL_PAUTH, AARCH64_FL_V8_3,

>          AARCH64_FL_FOR_ARCH8_3, AARCH64_ISA_PAUTH, AARCH64_ISA_V8_3,

>          TARGET_PAUTH, TARGET_ARMV8_3): New.

>          * doc/invoke.texi (AArch64 Options): Document "armv8.3-a".


Ping ~

As pointer authentication extension is defined to be mandatory extension on
ARMv8.3-A and is not optional, I adjusted the patch slightly.

This also let GCC treating pointer authentication extension in consistent way
with Binutils.

OK for trunk?

gcc/
2017-01-06  Jiong Wang  <jiong.wang@arm.com>

         * config/aarch64/aarch64-arches.def: New entry for "armv8.3-a".
         * config/aarch64/aarch64.h (AARCH64_FL_V8_3, AARCH64_FL_FOR_ARCH8_3,
         AARCH64_ISA_V8_3, TARGET_ARMV8_3): New.
         * doc/invoke.texi (AArch64 Options): Document "armv8.3-a".

Comments

James Greenhalgh Jan. 10, 2017, 5 p.m. | #1
On Fri, Jan 06, 2017 at 11:33:39AM +0000, Jiong Wang wrote:
> On 11/11/16 18:22, Jiong Wang wrote:

> >This patch add command line support for ARMv8.3-A through new architecture:

> >

> >   -march=armv8.3-a

> >

> >ARMv8.3-A implies all default features of ARMv8.2-A and meanwhile it includes

> >the new pointer authentication extension.

> >

> >

> >gcc/

> >2016-11-08  Jiong Wang<jiong.wang@arm.com>

> >

> >         * config/aarch64/aarch64-arches.def: New entry for "armv8.3-a".

> >         * config/aarch64/aarch64.h (AARCH64_FL_PAUTH, AARCH64_FL_V8_3,

> >         AARCH64_FL_FOR_ARCH8_3, AARCH64_ISA_PAUTH, AARCH64_ISA_V8_3,

> >         TARGET_PAUTH, TARGET_ARMV8_3): New.

> >         * doc/invoke.texi (AArch64 Options): Document "armv8.3-a".

> 

> Ping ~

> 

> As pointer authentication extension is defined to be mandatory extension on

> ARMv8.3-A and is not optional, I adjusted the patch slightly.

> 

> This also let GCC treating pointer authentication extension in consistent way

> with Binutils.

> 

> OK for trunk?


OK.

Thanks,
James

> 

> gcc/

> 2017-01-06  Jiong Wang  <jiong.wang@arm.com>

> 

>         * config/aarch64/aarch64-arches.def: New entry for "armv8.3-a".

>         * config/aarch64/aarch64.h (AARCH64_FL_V8_3, AARCH64_FL_FOR_ARCH8_3,

>         AARCH64_ISA_V8_3, TARGET_ARMV8_3): New.

>         * doc/invoke.texi (AArch64 Options): Document "armv8.3-a".

> 

>

Patch

diff --git a/gcc/config/aarch64/aarch64-arches.def b/gcc/config/aarch64/aarch64-arches.def
index 830a7cf545532c050847a8c915d21bef12152388..ce6f73b3e5853b3d40e07545b9581298c768edca 100644
--- a/gcc/config/aarch64/aarch64-arches.def
+++ b/gcc/config/aarch64/aarch64-arches.def
@@ -33,5 +33,6 @@ 
 AARCH64_ARCH("armv8-a",	      generic,	     8A,	8,  AARCH64_FL_FOR_ARCH8)
 AARCH64_ARCH("armv8.1-a",     generic,	     8_1A,	8,  AARCH64_FL_FOR_ARCH8_1)
 AARCH64_ARCH("armv8.2-a",     generic,	     8_2A,	8,  AARCH64_FL_FOR_ARCH8_2)
+AARCH64_ARCH("armv8.3-a",     generic,	     8_3A,	8,  AARCH64_FL_FOR_ARCH8_3)
 
 #undef AARCH64_ARCH
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 584ff5c43afcd1a7918019b09165371bb88bfda1..51916c95a736ade697a823f15d483336651ac99a 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -138,6 +138,8 @@  extern unsigned aarch64_architecture_version;
 /* ARMv8.2-A architecture extensions.  */
 #define AARCH64_FL_V8_2	      (1 << 8)  /* Has ARMv8.2-A features.  */
 #define AARCH64_FL_F16	      (1 << 9)  /* Has ARMv8.2-A FP16 extensions.  */
+/* ARMv8.3-A architecture extensions.  */
+#define AARCH64_FL_V8_3	      (1 << 10)  /* Has ARMv8.3-A features.  */
 
 /* Has FP and SIMD.  */
 #define AARCH64_FL_FPSIMD     (AARCH64_FL_FP | AARCH64_FL_SIMD)
@@ -151,6 +153,8 @@  extern unsigned aarch64_architecture_version;
   (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC | AARCH64_FL_V8_1)
 #define AARCH64_FL_FOR_ARCH8_2			\
   (AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_V8_2)
+#define AARCH64_FL_FOR_ARCH8_3			\
+  (AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_V8_3)
 
 /* Macros to test ISA flags.  */
 
@@ -162,6 +166,7 @@  extern unsigned aarch64_architecture_version;
 #define AARCH64_ISA_RDMA	   (aarch64_isa_flags & AARCH64_FL_V8_1)
 #define AARCH64_ISA_V8_2	   (aarch64_isa_flags & AARCH64_FL_V8_2)
 #define AARCH64_ISA_F16		   (aarch64_isa_flags & AARCH64_FL_F16)
+#define AARCH64_ISA_V8_3	   (aarch64_isa_flags & AARCH64_FL_V8_3)
 
 /* Crypto is an optional extension to AdvSIMD.  */
 #define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO)
@@ -176,6 +181,9 @@  extern unsigned aarch64_architecture_version;
 #define TARGET_FP_F16INST (TARGET_FLOAT && AARCH64_ISA_F16)
 #define TARGET_SIMD_F16INST (TARGET_SIMD && AARCH64_ISA_F16)
 
+/* ARMv8.3-A features.  */
+#define TARGET_ARMV8_3	(AARCH64_ISA_V8_3)
+
 /* Make sure this is always defined so we don't have to check for ifdefs
    but rather use normal ifs.  */
 #ifndef TARGET_FIX_ERR_A53_835769_DEFAULT
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 8e2f46617b8e44ccf16941c31029ab5625322867..791718831d7089c44dfadb137f5e93caa9cd05f0 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -13874,7 +13874,10 @@  more feature modifiers.  This option has the form
 @option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}.
 
 The permissible values for @var{arch} are @samp{armv8-a},
-@samp{armv8.1-a}, @samp{armv8.2-a} or @var{native}.
+@samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a} or @var{native}.
+
+The value @samp{armv8.3-a} implies @samp{armv8.2-a} and enables compiler
+support for the ARMv8.3-A architecture extensions.
 
 The value @samp{armv8.2-a} implies @samp{armv8.1-a} and enables compiler
 support for the ARMv8.2-A architecture extensions.