aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorSudakshina Das <sudi.das@arm.com>2018-11-12 14:58:39 +0000
committerSudakshina Das <sudi@gcc.gnu.org>2018-11-12 14:58:39 +0000
commitae78a89f5210015ef21d107ad57d10bcb7ac852c (patch)
treeaf3d820d01d81196e0da79115a18ebd09b3b82e0 /gcc/config
parent27922d518d3c81c85df4b2d391bc54e85dab01f5 (diff)
downloadgcc-ae78a89f5210015ef21d107ad57d10bcb7ac852c.zip
gcc-ae78a89f5210015ef21d107ad57d10bcb7ac852c.tar.gz
gcc-ae78a89f5210015ef21d107ad57d10bcb7ac852c.tar.bz2
[GCC, ARM] Enable armv8.5-a and add +sb and +predres for previous ARMv8-a in ARM
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
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/arm/arm-cpus.in35
-rw-r--r--gcc/config/arm/arm-tables.opt13
-rw-r--r--gcc/config/arm/t-aprofile7
-rw-r--r--gcc/config/arm/t-arm-elf3
-rw-r--r--gcc/config/arm/t-multilib10
5 files changed, 61 insertions, 7 deletions
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 7189fc9..c71409e 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -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
diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt
index b314ec3..945a668 100644
--- a/gcc/config/arm/arm-tables.opt
+++ b/gcc/config/arm/arm-tables.opt
@@ -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)
diff --git a/gcc/config/arm/t-aprofile b/gcc/config/arm/t-aprofile
index 7b55599..945a938 100644
--- a/gcc/config/arm/t-aprofile
+++ b/gcc/config/arm/t-aprofile
@@ -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
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
index 3506b16..d8853aa 100644
--- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf
@@ -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
diff --git a/gcc/config/arm/t-multilib b/gcc/config/arm/t-multilib
index 25788ad..f05a994 100644
--- a/gcc/config/arm/t-multilib
+++ b/gcc/config/arm/t-multilib
@@ -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.