[GCC, ARM] Enable armv8.5-a and add +sb and +predres for previous ARMv8-a in ARM
authorSudakshina Das <sudi.das@arm.com>
Mon, 12 Nov 2018 14:58:39 +0000 (14:58 +0000)
committerSudakshina Das <sudi@gcc.gnu.org>
Mon, 12 Nov 2018 14:58:39 +0000 (14:58 +0000)
This patch adds -march=armv8.5-a to the Arm backend.
Armv8.5-A also adds two new security features:
- Speculation Barrier instruction
- Execution and Data Prediction Restriction Instructions
These are made optional to all older Armv8-A versions. Thus we are adding two
new options "+sb" and "+predres" to all older Armv8-A. These are passed on to
the assembler and have no code generation effects and have already gone in the
trunk of binutils.

*** gcc/ChangeLog ***

2018-11-12  Sudakshina Das  <sudi.das@arm.com>

* config/arm/arm-cpus.in (armv8_5, sb, predres): New features.
(ARMv8_5a): New fgroup.
(armv8.5-a): New arch.
(armv8-a, armv8.1-a, armv8.2-a, armv8.3-a, armv8.4-a): New options
sb and predres.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/t-aprofile: Add matching rules for -march=armv8.5-a
* config/arm/t-arm-elf (all_v8_archs): Add armv8.5-a.
* config/arm/t-multilib (v8_5_a_simd_variants): New variable.
Add matching rules for -march=armv8.5-a and extensions.
* doc/invoke.texi (ARM options): Document -march=armv8.5-a.
Add sb and predres to all armv8-a except armv8.5-a.

*** gcc/testsuite/ChangeLog ***

2018-11-12  Sudakshina Das  <sudi.das@arm.com>

* gcc.target/arm/multilib.exp: Add some -march=armv8.5-a
combination tests.

From-SVN: r266031

gcc/ChangeLog
gcc/config/arm/arm-cpus.in
gcc/config/arm/arm-tables.opt
gcc/config/arm/t-aprofile
gcc/config/arm/t-arm-elf
gcc/config/arm/t-multilib
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/multilib.exp

index f458802acec7dfd382ff6eb5bea98bd4876f5e65..82da0eaadba7765698dc827b7837ce4f8aa6cfb7 100644 (file)
@@ -1,3 +1,18 @@
+2018-11-12  Sudakshina Das  <sudi.das@arm.com>
+
+       * config/arm/arm-cpus.in (armv8_5, sb, predres): New features.
+       (ARMv8_5a): New fgroup.
+       (armv8.5-a): New arch.
+       (armv8-a, armv8.1-a, armv8.2-a, armv8.3-a, armv8.4-a): New options
+       sb and predres.
+       * config/arm/arm-tables.opt: Regenerate.
+       * config/arm/t-aprofile: Add matching rules for -march=armv8.5-a
+       * config/arm/t-arm-elf (all_v8_archs): Add armv8.5-a.
+       * config/arm/t-multilib (v8_5_a_simd_variants): New variable.
+       Add matching rules for -march=armv8.5-a and extensions.
+       * doc/invoke.texi (ARM options): Document -march=armv8.5-a.
+       Add sb and predres to all armv8-a except armv8.5-a.
+
 2018-11-12  Richard Biener  <rguenther@suse.de>
 
        * tree-vrp.h (value_range[_base]::set): Make public.  Provide
index 7189fc9210d2c0524fc73d4e15381ba6fee6142c..c71409e5dd9bcad525ed98cefd839bed0fd6f8ee 100644 (file)
@@ -114,6 +114,9 @@ define feature armv8_3
 # Architecture rel 8.4.
 define feature armv8_4
 
+# Architecture rel 8.5.
+define feature armv8_5
+
 # M-Profile security extensions.
 define feature cmse
 
@@ -174,6 +177,14 @@ define feature quirk_cm3_ldrd
 # (Very) slow multiply operations.  Should probably be a tuning bit.
 define feature smallmul
 
+# Speculation Barrier Instruction for v8-A architectures, added by
+# default to v8.5-A
+define feature sb
+
+# Execution and Data Prediction Restriction Instruction for
+# v8-A architectures, added by default from v8.5-A
+define feature predres
+
 # Feature groups.  Conventionally all (or mostly) upper case.
 # ALL_FPU lists all the feature bits associated with the floating-point
 # unit; these will all be removed if the floating-point unit is disabled
@@ -235,6 +246,7 @@ define fgroup ARMv8_1a    ARMv8a crc32 armv8_1
 define fgroup ARMv8_2a    ARMv8_1a armv8_2
 define fgroup ARMv8_3a    ARMv8_2a armv8_3
 define fgroup ARMv8_4a    ARMv8_3a armv8_4
+define fgroup ARMv8_5a    ARMv8_4a armv8_5 sb predres
 define fgroup ARMv8m_base ARMv6m armv8 cmse tdiv
 define fgroup ARMv8m_main ARMv7m armv8 cmse
 define fgroup ARMv8r      ARMv8a
@@ -505,6 +517,8 @@ begin arch armv8-a
  option crypto add FP_ARMv8 CRYPTO
  option nocrypto remove ALL_CRYPTO
  option nofp remove ALL_FP
+ option sb add sb
+ option predres add predres
 end arch armv8-a
 
 begin arch armv8.1-a
@@ -517,6 +531,8 @@ begin arch armv8.1-a
  option crypto add FP_ARMv8 CRYPTO
  option nocrypto remove ALL_CRYPTO
  option nofp remove ALL_FP
+ option sb add sb
+ option predres add predres
 end arch armv8.1-a
 
 begin arch armv8.2-a
@@ -532,6 +548,8 @@ begin arch armv8.2-a
  option nocrypto remove ALL_CRYPTO
  option nofp remove ALL_FP
  option dotprod add FP_ARMv8 DOTPROD
+ option sb add sb
+ option predres add predres
 end arch armv8.2-a
 
 begin arch armv8.3-a
@@ -547,6 +565,8 @@ begin arch armv8.3-a
  option nocrypto remove ALL_CRYPTO
  option nofp remove ALL_FP
  option dotprod add FP_ARMv8 DOTPROD
+ option sb add sb
+ option predres add predres
 end arch armv8.3-a
 
 begin arch armv8.4-a
@@ -560,8 +580,23 @@ begin arch armv8.4-a
  option crypto add FP_ARMv8 CRYPTO DOTPROD
  option nocrypto remove ALL_CRYPTO
  option nofp remove ALL_FP
+ option sb add sb
+ option predres add predres
 end arch armv8.4-a
 
+begin arch armv8.5-a
+ tune for cortex-a53
+ tune flags CO_PROC
+ base 8A
+ profile A
+ isa ARMv8_5a
+ option simd add FP_ARMv8 DOTPROD
+ option fp16 add fp16 fp16fml FP_ARMv8 DOTPROD
+ option crypto add FP_ARMv8 CRYPTO DOTPROD
+ option nocrypto remove ALL_CRYPTO
+ option nofp remove ALL_FP
+end arch armv8.5-a
+
 begin arch armv8-m.base
  tune for cortex-m23
  base 8M_BASE
index b314ec30ede388ed6f660a0900106562ab32839d..945a668f061aabac0786e5b18e7ea5851fc86868 100644 (file)
@@ -332,19 +332,22 @@ EnumValue
 Enum(arm_arch) String(armv8.4-a) Value(24)
 
 EnumValue
-Enum(arm_arch) String(armv8-m.base) Value(25)
+Enum(arm_arch) String(armv8.5-a) Value(25)
 
 EnumValue
-Enum(arm_arch) String(armv8-m.main) Value(26)
+Enum(arm_arch) String(armv8-m.base) Value(26)
 
 EnumValue
-Enum(arm_arch) String(armv8-r) Value(27)
+Enum(arm_arch) String(armv8-m.main) Value(27)
 
 EnumValue
-Enum(arm_arch) String(iwmmxt) Value(28)
+Enum(arm_arch) String(armv8-r) Value(28)
 
 EnumValue
-Enum(arm_arch) String(iwmmxt2) Value(29)
+Enum(arm_arch) String(iwmmxt) Value(29)
+
+EnumValue
+Enum(arm_arch) String(iwmmxt2) Value(30)
 
 Enum
 Name(arm_fpu) Type(enum fpu_type)
index 7b55599d42947fea880483bf0a7a62f33bb1a1fb..945a938b4fed1283290224e836782fbb3069e9d9 100644 (file)
@@ -103,6 +103,13 @@ MULTILIB_MATCHES   += march?armv8-a=march?armv8.4-a
 MULTILIB_MATCHES       += $(foreach ARCH, $(v8_4_a_simd_variants), \
                             march?armv8-a+simd=march?armv8.4-a$(ARCH))
 
+# Baseline v8.5-a: map down to baseline v8-a
+MULTILIB_MATCHES       += march?armv8-a=march?armv8.5-a
+
+# Map all v8.5-a SIMD variants to v8-a+simd
+MULTILIB_MATCHES       += $(foreach ARCH, $(v8_5_a_simd_variants), \
+                            march?armv8-a+simd=march?armv8.5-a$(ARCH))
+
 # Use Thumb libraries for everything.
 
 MULTILIB_REUSE         += mthumb/march.armv7-a/mfloat-abi.soft=marm/march.armv7-a/mfloat-abi.soft
index 3506b16e929fa30af90e0a1bf20653ed6a098eaa..d8853aa8f5afcccb0e4f4187c44de01a23b89402 100644 (file)
@@ -46,7 +46,8 @@ all_early_arch        := armv5tej armv6 armv6j armv6k armv6z armv6kz \
 
 all_v7_a_r     := armv7-a armv7ve armv7-r
 
-all_v8_archs   := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a armv8.4-a
+all_v8_archs   := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a armv8.4-a \
+                  armv8.5-a
 
 # No floating point variants, require thumb1 softfp
 all_nofp_t     := armv6-m armv6s-m armv8-m.base
index 25788ad09851daf41038b1578307bf23b7f34a94..f05a994d7368e89978729c62131c1c61aaa6bddd 100644 (file)
@@ -70,6 +70,7 @@ v8_a_simd_variants    := $(call all_feat_combs, simd crypto)
 v8_1_a_simd_variants   := $(call all_feat_combs, simd crypto)
 v8_2_a_simd_variants   := $(call all_feat_combs, simd fp16 fp16fml crypto dotprod)
 v8_4_a_simd_variants   := $(call all_feat_combs, simd fp16 crypto)
+v8_5_a_simd_variants   := $(call all_feat_combs, simd fp16 crypto)
 v8_r_nosimd_variants   := +crc
 
 ifneq (,$(HAS_APROFILE))
@@ -163,6 +164,13 @@ MULTILIB_MATCHES   += march?armv7=march?armv8.4-a
 MULTILIB_MATCHES       += $(foreach ARCH, $(v8_4_a_simd_variants), \
                             march?armv7+fp=march?armv8.4-a$(ARCH))
 
+# Baseline v8.5-a: map down to baseline v8-a
+MULTILIB_MATCHES       += march?armv7=march?armv8.5-a
+
+# Map all v8.5-a SIMD variants
+MULTILIB_MATCHES       += $(foreach ARCH, $(v8_5_a_simd_variants), \
+                            march?armv7+fp=march?armv8.5-a$(ARCH))
+
 # Use Thumb libraries for everything.
 
 MULTILIB_REUSE         += mthumb/march.armv7/mfloat-abi.soft=marm/march.armv7/mfloat-abi.soft
@@ -176,4 +184,4 @@ MULTILIB_REUSE              += $(foreach MODE, arm thumb, \
                             $(foreach ARCH, armv7, \
                               mthumb/march.$(ARCH)/mfloat-abi.soft=m$(MODE)/march.$(ARCH)/mfloat-abi.softfp))
 
-endif          # Not APROFILE.
\ No newline at end of file
+endif          # Not APROFILE.
index e016dceadf4fe263b1c73204949f4bd77fc1f2bf..5eef746e7d1aaa5ce9ff7132b463921f993d2048 100644 (file)
@@ -16500,6 +16500,7 @@ Permissible names are:
 @samp{armv7}, @samp{armv7-a}, @samp{armv7ve}, 
 @samp{armv8-a}, @samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a},
 @samp{armv8.4-a},
+@samp{armv8.5-a},
 @samp{armv7-r},
 @samp{armv8-r},
 @samp{armv6-m}, @samp{armv6s-m},
@@ -16676,6 +16677,10 @@ The cryptographic instructions.
 Disable the cryptographic instructions.
 @item +nofp
 Disable the floating-point, Advanced SIMD and cryptographic instructions.
+@item +sb
+Speculation Barrier Instruction.
+@item +predres
+Execution and Data Prediction Restriction Instructions.
 @end table
 
 @item armv8.1-a
@@ -16692,6 +16697,12 @@ Disable the cryptographic instructions.
 
 @item +nofp
 Disable the floating-point, Advanced SIMD and cryptographic instructions.
+
+@item +sb
+Speculation Barrier Instruction.
+
+@item +predres
+Execution and Data Prediction Restriction Instructions.
 @end table
 
 @item armv8.2-a
@@ -16721,6 +16732,12 @@ Disable the cryptographic extension.
 
 @item +nofp
 Disable the floating-point, Advanced SIMD and cryptographic instructions.
+
+@item +sb
+Speculation Barrier Instruction.
+
+@item +predres
+Execution and Data Prediction Restriction Instructions.
 @end table
 
 @item armv8.4-a
@@ -16742,6 +16759,35 @@ floating-point instructions as well as the Dot Product extension.
 @item +nocrypto
 Disable the cryptographic extension.
 
+@item +nofp
+Disable the floating-point, Advanced SIMD and cryptographic instructions.
+
+@item +sb
+Speculation Barrier Instruction.
+
+@item +predres
+Execution and Data Prediction Restriction Instructions.
+@end table
+
+@item armv8.5-a
+@table @samp
+@item +fp16
+The half-precision floating-point data processing instructions.
+This also enables the Advanced SIMD and floating-point instructions as well
+as the Dot Product extension and the half-precision floating-point fmla
+extension.
+
+@item +simd
+The ARMv8.3-A Advanced SIMD and floating-point instructions as well as the
+Dot Product extension.
+
+@item +crypto
+The cryptographic instructions.  This also enables the Advanced SIMD and
+floating-point instructions as well as the Dot Product extension.
+
+@item +nocrypto
+Disable the cryptographic extension.
+
 @item +nofp
 Disable the floating-point, Advanced SIMD and cryptographic instructions.
 @end table
index 31ad101796cfab4b9151c4e7ed19eeaaaff75c02..ec4309b335bedb4dc6f42e3439987afce3a6b292 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-12  Sudakshina Das  <sudi.das@arm.com>
+
+       * gcc.target/arm/multilib.exp: Add some -march=armv8.5-a
+       combination tests.
+
 2018-11-11  Xianmiao Qu  <xianmiao_qu@c-sky.com>
 
        * gcc.target/csky/fnmul-1.c: New.
index 04da2b0a20eda299c5749e8702ac1c5a8c937900..cdd06f8265f9b1ac76d4aae9be003c519682eee6 100644 (file)
@@ -108,6 +108,14 @@ if {[multilib_config "aprofile"] } {
        {-march=armv8.4-a+simd+fp16 -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
        {-march=armv8.4-a+simd+fp16+nofp -mfloat-abi=softfp} "thumb/v8-a/nofp"
        {-march=armv8.4-a+simd+nofp+fp16 -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
+       {-march=armv8.5-a+crypto -mfloat-abi=soft} "thumb/v8-a/nofp"
+       {-march=armv8.5-a+simd+crypto -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
+       {-march=armv8.5-a+simd+crypto+nofp -mfloat-abi=softfp} "thumb/v8-a/nofp"
+       {-march=armv8.5-a+simd+nofp+crypto -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
+       {-march=armv8.5-a+fp16 -mfloat-abi=soft} "thumb/v8-a/nofp"
+       {-march=armv8.5-a+simd+fp16 -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
+       {-march=armv8.5-a+simd+fp16+nofp -mfloat-abi=softfp} "thumb/v8-a/nofp"
+       {-march=armv8.5-a+simd+nofp+fp16 -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
        {-mcpu=cortex-a53+crypto -mfloat-abi=hard} "thumb/v8-a+simd/hard"
        {-mcpu=cortex-a53+nofp -mfloat-abi=softfp} "thumb/v8-a/nofp"
        {-march=armv8-a+crc -mfloat-abi=hard -mfpu=vfp} "thumb/v8-a+simd/hard"