]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/config/arm/t-aprofile
Update copyright years.
[thirdparty/gcc.git] / gcc / config / arm / t-aprofile
index ad7ccd187befa988fce12149e5f86d58d4b637e5..574951c5f0bcd6fe1a60b6b2421ae0970a4c0e48 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Copyright (C) 2012-2022 Free Software Foundation, Inc.
 #
 # This file is part of GCC.
 #
 # have their default values during the configure step.  We enforce
 # this during the top-level configury.
 
-MULTILIB_OPTIONS     =
-MULTILIB_DIRNAMES    =
-MULTILIB_EXCEPTIONS  =
-MULTILIB_MATCHES     =
-MULTILIB_REUSE      =
-
-# We have the following hierachy:
-#   ISA: A32 (.) or T32 (thumb)
-#   Architecture: ARMv7-A (v7-a), ARMv7VE (v7ve), or ARMv8-A (v8-a).
-#   FPU: VFPv3-D16 (fpv3), NEONv1 (simdv1), VFPv4-D16 (fpv4),
-#        NEON-VFPV4 (simdvfpv4), NEON for ARMv8 (simdv8), or None (.).
-#   Float-abi: Soft (.), softfp (softfp), or hard (hardfp).
-
-# We use the option -mcpu=cortex-a7 because we do not yet have march=armv7ve
-# or march=armv7a+virt as a command line option for the compiler.
-MULTILIB_OPTIONS       += mthumb
-MULTILIB_DIRNAMES      += thumb
-
-MULTILIB_OPTIONS       += march=armv7-a/mcpu=cortex-a7/march=armv8-a
-MULTILIB_DIRNAMES      += v7-a v7ve v8-a
-
-MULTILIB_OPTIONS       += mfpu=vfpv3-d16/mfpu=neon/mfpu=vfpv4-d16/mfpu=neon-vfpv4/mfpu=neon-fp-armv8
-MULTILIB_DIRNAMES      += fpv3 simdv1 fpv4 simdvfpv4 simdv8
-
-MULTILIB_OPTIONS       += mfloat-abi=softfp/mfloat-abi=hard
-MULTILIB_DIRNAMES      += softfp hard
-
-# We don't build no-float libraries with an FPU.
-MULTILIB_EXCEPTIONS    += *mfpu=vfpv3-d16
-MULTILIB_EXCEPTIONS    += *mfpu=neon
-MULTILIB_EXCEPTIONS    += *mfpu=vfpv4-d16
-MULTILIB_EXCEPTIONS    += *mfpu=neon-vfpv4
-MULTILIB_EXCEPTIONS    += *mfpu=neon-fp-armv8
-
-# We don't build libraries requiring an FPU at the CPU/Arch/ISA level.
-MULTILIB_EXCEPTIONS    += mfloat-abi=*
-MULTILIB_EXCEPTIONS    += mfpu=*
-MULTILIB_EXCEPTIONS    += mthumb/mfloat-abi=*
-MULTILIB_EXCEPTIONS    += mthumb/mfpu=*
-MULTILIB_EXCEPTIONS    += *march=armv7-a/mfloat-abi=*
-MULTILIB_EXCEPTIONS    += *mcpu=cortex-a7/mfloat-abi=*
-MULTILIB_EXCEPTIONS    += *march=armv8-a/mfloat-abi=*
-
-# Ensure the correct FPU variants apply to the correct base architectures.
-MULTILIB_EXCEPTIONS    += *mcpu=cortex-a7/*mfpu=vfpv3-d16*
-MULTILIB_EXCEPTIONS    += *mcpu=cortex-a7/*mfpu=neon/*
-MULTILIB_EXCEPTIONS    += *march=armv8-a/*mfpu=vfpv3-d16*
-MULTILIB_EXCEPTIONS    += *march=armv8-a/*mfpu=neon/*
-MULTILIB_EXCEPTIONS    += *march=armv7-a/*mfpu=vfpv4-d16*
-MULTILIB_EXCEPTIONS    += *march=armv7-a/*mfpu=neon-vfpv4*
-MULTILIB_EXCEPTIONS    += *march=armv8-a/*mfpu=vfpv4-d16*
-MULTILIB_EXCEPTIONS    += *march=armv8-a/*mfpu=neon-vfpv4*
-MULTILIB_EXCEPTIONS    += *march=armv7-a/*mfpu=neon-fp-armv8*
-MULTILIB_EXCEPTIONS    += *mcpu=cortex-a7/*mfpu=neon-fp-armv8*
-
-# CPU Matches
-MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a8
-MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a9
-MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a5
-MULTILIB_MATCHES       += mcpu?cortex-a7=mcpu?cortex-a15=mcpu?cortex-a12
-MULTILIB_MATCHES       += mcpu?cortex-a7=mcpu?cortex-a15.cortex-a7
-MULTILIB_MATCHES       += march?armv8-a=mcpu?cortex-a53
-MULTILIB_MATCHES       += march?armv8-a=mcpu?cortex-a57
-MULTILIB_MATCHES       += march?armv8-a=mcpu?cortex-a57.cortex-a53
-
-# FPU matches
-MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3
-MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3-fp16
-MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3-fp16-d16
-MULTILIB_MATCHES       += mfpu?vfpv4-d16=mfpu?vfpv4
-MULTILIB_MATCHES       += mfpu?neon-fp-armv8=mfpu?crypto-neon-fp-armv8
-
-
-# Map all requests for vfpv3 with a later CPU to vfpv3-d16 v7-a.
-# So if new CPUs are added above at the newer architecture levels,
-# do something to map them below here.
-# We take the approach of mapping down to v7-a regardless of what
-# the fp option is if the integer architecture brings things down.
-# This applies to any similar combination at the v7ve and v8-a arch
-# levels.
-
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mcpu.cortex-a7/mfpu.vfpv3-d16/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mcpu.cortex-a7/mfpu.vfpv3-d16/mfloat-abi.softfp
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv8-a/mfpu.vfpv3-d16/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv3-d16/mfloat-abi.softfp
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.softfp
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.fp-armv8/mfloat-abi.softfp
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.vfpv4/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.vfpv4/mfloat-abi.softfp
-
-
-MULTILIB_REUSE       += march.armv7-a/mfpu.neon/mfloat-abi.hard=mcpu.cortex-a7/mfpu.neon/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.neon/mfloat-abi.softfp=mcpu.cortex-a7/mfpu.neon/mfloat-abi.softfp
-MULTILIB_REUSE       += march.armv7-a/mfpu.neon/mfloat-abi.hard=march.armv8-a/mfpu.neon/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.neon/mfloat-abi.softfp=march.armv8-a/mfpu.neon/mfloat-abi.softfp
-MULTILIB_REUSE       += march.armv7-a/mfpu.neon/mfloat-abi.hard=march.armv7-a/mfpu.neon-vfpv4/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.neon/mfloat-abi.softfp=march.armv7-a/mfpu.neon-vfpv4/mfloat-abi.softfp
-MULTILIB_REUSE       += march.armv7-a/mfpu.neon/mfloat-abi.hard=march.armv7-a/mfpu.neon-fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE       += march.armv7-a/mfpu.neon/mfloat-abi.softfp=march.armv7-a/mfpu.neon-fp-armv8/mfloat-abi.softfp
-
-
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.hard=mcpu.cortex-a7/mfpu.fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.softfp=mcpu.cortex-a7/mfpu.fp-armv8/mfloat-abi.softfp
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.hard=march.armv8-a/mfpu.vfpv4/mfloat-abi.hard
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv4/mfloat-abi.softfp
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.hard=march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.hard
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.softfp
-
-
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.neon-vfpv4/mfloat-abi.hard=march.armv8-a/mfpu.neon-vfpv4/mfloat-abi.hard
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.neon-vfpv4/mfloat-abi.softfp=march.armv8-a/mfpu.neon-vfpv4/mfloat-abi.softfp
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.neon-vfpv4/mfloat-abi.hard=mcpu.cortex-a7/mfpu.neon-fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE       += mcpu.cortex-a7/mfpu.neon-vfpv4/mfloat-abi.softfp=mcpu.cortex-a7/mfpu.neon-fp-armv8/mfloat-abi.softfp
-
-
-
-# And again for mthumb.
-
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/mcpu.cortex-a7/mfpu.vfpv3-d16/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/mcpu.cortex-a7/mfpu.vfpv3-d16/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.vfpv3-d16/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv3-d16/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.fp-armv8/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.vfpv4/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.vfpv4/mfloat-abi.softfp
-
-
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.hard=mthumb/mcpu.cortex-a7/mfpu.neon/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.softfp=mthumb/mcpu.cortex-a7/mfpu.neon/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.neon/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.neon/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.neon-vfpv4/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.neon-vfpv4/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.neon-fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.neon-fp-armv8/mfloat-abi.softfp
-
-
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/mcpu.cortex-a7/mfpu.fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/mcpu.cortex-a7/mfpu.fp-armv8/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.vfpv4/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv4/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.softfp
-
-
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.neon-vfpv4/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.neon-vfpv4/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.neon-vfpv4/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.neon-vfpv4/mfloat-abi.softfp
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.neon-vfpv4/mfloat-abi.hard=mthumb/mcpu.cortex-a7/mfpu.neon-fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE       += mthumb/mcpu.cortex-a7/mfpu.neon-vfpv4/mfloat-abi.softfp=mthumb/mcpu.cortex-a7/mfpu.neon-fp-armv8/mfloat-abi.softfp
+# 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/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
+
+MULTILIB_REQUIRED      += mthumb/march=armv7-a/mfloat-abi=soft
+MULTILIB_REQUIRED      += mthumb/march=armv7-a+fp/mfloat-abi=hard
+MULTILIB_REQUIRED      += mthumb/march=armv7-a+fp/mfloat-abi=softfp
+MULTILIB_REQUIRED      += mthumb/march=armv7-a+simd/mfloat-abi=hard
+MULTILIB_REQUIRED      += mthumb/march=armv7-a+simd/mfloat-abi=softfp
+
+# ARMv7VE - only build a SIMD (+VFPv4) variant.
+MULTILIB_REQUIRED      += mthumb/march=armv7ve+simd/mfloat-abi=hard
+MULTILIB_REQUIRED      += mthumb/march=armv7ve+simd/mfloat-abi=softfp
+
+# ARMv8-A - build nofp and SIMD variants.
+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
+# Map all basic v7-a arch extensions to v7-a
+MULTILIB_MATCHES       += $(foreach ARCH, $(v7_a_arch_variants), \
+                            march?armv7-a=march?armv7-a$(ARCH))
+
+# Map all v7-a FP variants to vfpv3-d16 (+fp)
+MULTILIB_MATCHES       += $(foreach ARCH, $(filter-out +fp, $(v7_a_nosimd_variants)), \
+                            march?armv7-a+fp=march?armv7-a$(ARCH))
+
+MULTILIB_MATCHES       += $(foreach ARCHVAR, $(v7_a_arch_variants), \
+                            $(foreach ARCH, $(v7_a_nosimd_variants), \
+                              march?armv7-a+fp=march?armv7-a$(ARCHVAR)$(ARCH)))
+
+# Map all v7-a SIMD variants to neon-vfpv3 (+simd)
+MULTILIB_MATCHES       += $(foreach ARCH, $(filter-out +simd, $(v7_a_simd_variants)), \
+                            march?armv7-a+simd=march?armv7-a$(ARCH))
+
+MULTILIB_MATCHES       += $(foreach ARCHVAR, $(v7_a_arch_variants), \
+                            $(foreach ARCH, $(v7_a_simd_variants), \
+                              march?armv7-a+simd=march?armv7-a$(ARCHVAR)$(ARCH)))
+
+# Neither FP nor SIMD: map v7ve to v7-a
+MULTILIB_MATCHES       += march?armv7-a=march?armv7ve
+
+# ARMv7ve FP-only variants: map down to v7-a+fp
+MULTILIB_MATCHES       += $(foreach ARCH, $(v7ve_nosimd_variants), \
+                            march?armv7-a+fp=march?armv7ve$(ARCH))
+
+# ARMv7ve with SIMD, but SIMD is less capable than the default - map down to v7-a+simd
+MULTILIB_MATCHES       += $(foreach ARCH, $(v7ve_vfpv3_simd_variants), \
+                            march?armv7-a+simd=march?armv7ve$(ARCH))
+
+# ARMv8 without SIMD: map down to base architecture
+MULTILIB_MATCHES       += $(foreach ARCH, $(v8_a_nosimd_variants), \
+                            march?armv8-a=march?armv8-a$(ARCH))
+
+# ARMv8 with SIMD: map down to base arch + simd
+MULTILIB_MATCHES       += march?armv8-a+simd=march?armv8-a+crc+simd \
+                          $(foreach ARCH, $(filter-out +simd, $(v8_a_simd_variants)), \
+                            march?armv8-a+simd=march?armv8-a$(ARCH) \
+                            march?armv8-a+simd=march?armv8-a+crc$(ARCH))
+
+# Baseline v8.1-a: map down to baseline v8-a
+MULTILIB_MATCHES       += march?armv8-a=march?armv8.1-a
+
+# Map all v8.1-a SIMD variants to v8-a+simd
+MULTILIB_MATCHES       += $(foreach ARCH, $(v8_1_a_simd_variants), \
+                            march?armv8-a+simd=march?armv8.1-a$(ARCH))
+
+# Baseline v8.2-a: map down to baseline v8-a
+MULTILIB_MATCHES       += march?armv8-a=march?armv8.2-a
+
+# Baseline v8.3-a: map down to baseline v8-a
+MULTILIB_MATCHES       += march?armv8-a=march?armv8.3-a
+
+# Map all v8.2-a and v8.3-a SIMD variants to v8-a+simd
+MULTILIB_MATCHES       += $(foreach ARCH, $(v8_2_a_simd_variants), \
+                            march?armv8-a+simd=march?armv8.2-a$(ARCH) \
+                            march?armv8-a+simd=march?armv8.3-a$(ARCH))
+
+# Baseline v8.4-a: map down to baseline v8-a
+MULTILIB_MATCHES       += march?armv8-a=march?armv8.4-a
+
+# Map all v8.4-a SIMD variants to v8-a+simd
+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))
+
+# Baseline v8.6-a: map down to baseline v8-a
+MULTILIB_MATCHES       += march?armv8-a=march?armv8.6-a
+
+# Map all v8.6-a SIMD variants to v8-a+simd
+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 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 armv9-a, \
+                              mthumb/march.$(ARCH)/mfloat-abi.soft=m$(MODE)/march.$(ARCH)/mfloat-abi.softfp))