aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/arm
diff options
context:
space:
mode:
authorPrzemyslaw Wirkus <przemyslaw.wirkus@arm.com>2021-11-09 09:40:05 +0000
committerPrzemyslaw Wirkus <przemyslaw.wirkus@arm.com>2021-11-09 11:34:57 +0000
commit32ba7860ccaddd5219e6dae94a3d0653e124c9dd (patch)
treec07d88ed0f788f88393d972f138ce93297aa23e6 /gcc/config/arm
parentdf8690f28379795a44aa4b6c737df08828168b6a (diff)
downloadgcc-32ba7860ccaddd5219e6dae94a3d0653e124c9dd.zip
gcc-32ba7860ccaddd5219e6dae94a3d0653e124c9dd.tar.gz
gcc-32ba7860ccaddd5219e6dae94a3d0653e124c9dd.tar.bz2
arm: add armv9-a architecture to -march
In this patch: + Add `armv9-a` to -march. + Update multilib with armv9-a and armv9-a+simd. gcc/ChangeLog: * config/arm/arm-cpus.in (armv9): New define. (ARMv9a): New group. (armv9-a): New arch definition. * config/arm/arm-tables.opt: Regenerate. * config/arm/arm.h (BASE_ARCH_9A): New arch enum value. * config/arm/t-aprofile: Added armv9-a and armv9+simd. * config/arm/t-arm-elf: Added arm9-a, v9_fps and all_v9_archs to MULTILIB_MATCHES. * config/arm/t-multilib: Added v9_a_nosimd_variants and v9_a_simd_variants to MULTILIB_MATCHES. * doc/invoke.texi: Update docs. gcc/testsuite/ChangeLog: * gcc.target/arm/multilib.exp: Update test with armv9-a entries. * lib/target-supports.exp (v9a): Add new armflag. (__ARM_ARCH_9A__): Add new armdef.
Diffstat (limited to 'gcc/config/arm')
-rw-r--r--gcc/config/arm/arm-cpus.in19
-rw-r--r--gcc/config/arm/arm-tables.opt7
-rw-r--r--gcc/config/arm/arm.h3
-rw-r--r--gcc/config/arm/t-aprofile25
-rw-r--r--gcc/config/arm/t-arm-elf9
-rw-r--r--gcc/config/arm/t-multilib12
6 files changed, 68 insertions, 7 deletions
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index d0d0d0f..3756ba5 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -132,6 +132,9 @@ define feature cmse
# Architecture rel 8.1-M.
define feature armv8_1m_main
+# Architecture rel 9.0.
+define feature armv9
+
# Floating point and Neon extensions.
# VFPv1 is not supported in GCC.
@@ -293,6 +296,7 @@ define fgroup ARMv8m_base ARMv6m armv8 cmse tdiv
define fgroup ARMv8m_main ARMv7m armv8 cmse
define fgroup ARMv8r ARMv8a
define fgroup ARMv8_1m_main ARMv8m_main armv8_1m_main
+define fgroup ARMv9a ARMv8_5a armv9
# Useful combinations.
define fgroup VFPv2 vfpv2
@@ -751,6 +755,21 @@ begin arch armv8.1-m.main
option cdecp7 add cdecp7
end arch armv8.1-m.main
+begin arch armv9-a
+ tune for cortex-a53
+ tune flags CO_PROC
+ base 9A
+ profile A
+ isa ARMv9a
+ 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
+ option i8mm add i8mm FP_ARMv8 DOTPROD
+ option bf16 add bf16 FP_ARMv8 DOTPROD
+end arch armv9-a
+
begin arch iwmmxt
tune for iwmmxt
tune flags LDSCHED STRONG XSCALE
diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt
index 8bb0c9f..c00e252 100644
--- a/gcc/config/arm/arm-tables.opt
+++ b/gcc/config/arm/arm-tables.opt
@@ -383,10 +383,13 @@ EnumValue
Enum(arm_arch) String(armv8.1-m.main) Value(30)
EnumValue
-Enum(arm_arch) String(iwmmxt) Value(31)
+Enum(arm_arch) String(armv9-a) Value(31)
EnumValue
-Enum(arm_arch) String(iwmmxt2) Value(32)
+Enum(arm_arch) String(iwmmxt) Value(32)
+
+EnumValue
+Enum(arm_arch) String(iwmmxt2) Value(33)
Enum
Name(arm_fpu) Type(enum fpu_type)
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 015299c..3a8d223 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -452,7 +452,8 @@ enum base_architecture
BASE_ARCH_8A = 8,
BASE_ARCH_8M_BASE = 8,
BASE_ARCH_8M_MAIN = 8,
- BASE_ARCH_8R = 8
+ BASE_ARCH_8R = 8,
+ BASE_ARCH_9A = 9
};
/* The major revision number of the ARM Architecture implemented by the target. */
diff --git a/gcc/config/arm/t-aprofile b/gcc/config/arm/t-aprofile
index 8574ac3..68e2251 100644
--- a/gcc/config/arm/t-aprofile
+++ b/gcc/config/arm/t-aprofile
@@ -26,8 +26,8 @@
# Arch and FPU variants to build libraries with
-MULTI_ARCH_OPTS_A = march=armv7-a/march=armv7-a+fp/march=armv7-a+simd/march=armv7ve+simd/march=armv8-a/march=armv8-a+simd
-MULTI_ARCH_DIRS_A = v7-a v7-a+fp v7-a+simd v7ve+simd v8-a v8-a+simd
+MULTI_ARCH_OPTS_A = march=armv7-a/march=armv7-a+fp/march=armv7-a+simd/march=armv7ve+simd/march=armv8-a/march=armv8-a+simd/march=armv9-a/march=armv9-a+simd
+MULTI_ARCH_DIRS_A = v7-a v7-a+fp v7-a+simd v7ve+simd v8-a v8-a+simd v9-a v9-a+simd
# ARMv7-A - build nofp, fp-d16 and SIMD variants
@@ -46,6 +46,11 @@ MULTILIB_REQUIRED += mthumb/march=armv8-a/mfloat-abi=soft
MULTILIB_REQUIRED += mthumb/march=armv8-a+simd/mfloat-abi=hard
MULTILIB_REQUIRED += mthumb/march=armv8-a+simd/mfloat-abi=softfp
+# Armv9-A - build nofp and SIMD variants.
+MULTILIB_REQUIRED += mthumb/march=armv9-a/mfloat-abi=soft
+MULTILIB_REQUIRED += mthumb/march=armv9-a+simd/mfloat-abi=hard
+MULTILIB_REQUIRED += mthumb/march=armv9-a+simd/mfloat-abi=softfp
+
# Matches
# Arch Matches
@@ -129,17 +134,29 @@ MULTILIB_MATCHES += march?armv8-a=march?armv8.6-a
MULTILIB_MATCHES += $(foreach ARCH, $(v8_6_a_simd_variants), \
march?armv8-a+simd=march?armv8.6-a$(ARCH))
+# Armv9 without SIMD: map down to base architecture
+MULTILIB_MATCHES += $(foreach ARCH, $(v9_a_nosimd_variants), \
+ march?armv9-a=march?armv9-a$(ARCH))
+
+# Armv9 with SIMD: map down to base arch + simd
+MULTILIB_MATCHES += march?armv9-a+simd=march?armv9-a+crc+simd \
+ $(foreach ARCH, $(filter-out +simd, $(v9_a_simd_variants)), \
+ march?armv9-a+simd=march?armv9-a$(ARCH) \
+ march?armv9-a+simd=march?armv9-a+crc$(ARCH))
+
# Use Thumb libraries for everything.
MULTILIB_REUSE += mthumb/march.armv7-a/mfloat-abi.soft=marm/march.armv7-a/mfloat-abi.soft
MULTILIB_REUSE += mthumb/march.armv8-a/mfloat-abi.soft=marm/march.armv8-a/mfloat-abi.soft
+MULTILIB_REUSE += mthumb/march.armv9-a/mfloat-abi.soft=marm/march.armv9-a/mfloat-abi.soft
+
MULTILIB_REUSE += $(foreach ABI, hard softfp, \
- $(foreach ARCH, armv7-a+fp armv7-a+simd armv7ve+simd armv8-a+simd, \
+ $(foreach ARCH, armv7-a+fp armv7-a+simd armv7ve+simd armv8-a+simd armv9-a+simd, \
mthumb/march.$(ARCH)/mfloat-abi.$(ABI)=marm/march.$(ARCH)/mfloat-abi.$(ABI)))
# Softfp but no FP, use the soft-float libraries.
MULTILIB_REUSE += $(foreach MODE, arm thumb, \
- $(foreach ARCH, armv7-a armv8-a, \
+ $(foreach ARCH, armv7-a armv8-a armv9-a, \
mthumb/march.$(ARCH)/mfloat-abi.soft=m$(MODE)/march.$(ARCH)/mfloat-abi.softfp))
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
index d68def3..b3a900e 100644
--- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf
@@ -38,6 +38,8 @@ v7ve_fps := vfpv3-d16 vfpv3 vfpv3-d16-fp16 vfpv3-fp16 vfpv4 neon \
# it seems to work ok.
v8_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
+v9_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
+
# We don't do anything special with these. Pre-v4t probably doesn't work.
all_early_nofp := armv4 armv4t armv5t
@@ -49,6 +51,8 @@ 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 \
armv8.5-a armv8.6-a
+all_v9_archs := armv9-a
+
# No floating point variants, require thumb1 softfp
all_nofp_t := armv6-m armv6s-m armv8-m.base
@@ -110,6 +114,11 @@ MULTILIB_MATCHES += $(foreach ARCH, $(all_v8_archs), \
$(foreach FPARCH, $(v8_fps), \
march?armv7+fp=march?$(ARCH)+$(FPARCH)))
+MULTILIB_MATCHES += $(foreach ARCH, $(all_v9_archs), \
+ march?armv7+fp=march?$(ARCH) \
+ $(foreach FPARCH, $(v9_fps), \
+ march?armv7+fp=march?$(ARCH)+$(FPARCH)))
+
MULTILIB_MATCHES += $(foreach ARCH, armv7e-m armv8-m.mainline, \
march?armv7+fp=march?$(ARCH)+fp.dp)
diff --git a/gcc/config/arm/t-multilib b/gcc/config/arm/t-multilib
index ddc5033..d789b86 100644
--- a/gcc/config/arm/t-multilib
+++ b/gcc/config/arm/t-multilib
@@ -78,6 +78,8 @@ v8_4_a_simd_variants := $(call all_feat_combs, simd fp16 crypto i8mm bf16)
v8_5_a_simd_variants := $(call all_feat_combs, simd fp16 crypto i8mm bf16)
v8_6_a_simd_variants := $(call all_feat_combs, simd fp16 crypto i8mm bf16)
v8_r_nosimd_variants := +crc
+v9_a_nosimd_variants := +crc
+v9_a_simd_variants := $(call all_feat_combs, simd fp16 crypto i8mm bf16)
ifneq (,$(HAS_APROFILE))
include $(srcdir)/config/arm/t-aprofile
@@ -202,6 +204,16 @@ MULTILIB_MATCHES += march?armv7=march?armv8.6-a
MULTILIB_MATCHES += $(foreach ARCH, $(v8_6_a_simd_variants), \
march?armv7+fp=march?armv8.6-a$(ARCH))
+# Armv9
+MULTILIB_MATCHES += march?armv7=march?armv9-a
+MULTILIB_MATCHES += $(foreach ARCH, $(v9_a_nosimd_variants), \
+ march?armv7=march?armv9-a$(ARCH))
+
+# Armv9 with SIMD
+MULTILIB_MATCHES += march?armv7+fp=march?armv9-a+crc+simd \
+ $(foreach ARCH, $(v9_a_simd_variants), \
+ march?armv7+fp=march?armv9-a$(ARCH) \
+ march?armv7+fp=march?armv9-a+crc$(ARCH))
endif # Not APROFILE.
# Use Thumb libraries for everything.