Enabling 'fp' on v8.1-m.main (either via +fp, +fp.dp or +mve.dp)
enables support for fp16 types (and registers _Float16 in C++).
As the g++.dg/cpp23/ext-floating13.C testcase shows, this pulls
typeinfo for _Float16 at link time, but a toolchain built using
t-rmprofile currently relies on v8-m.main+fp libraries for
v8.1-m.main+fp, and v8-m does not support fp16, leading to undefined
reference.
To avoid this, the patch adds -march=armv8.1-m.main+fp and
-march=armv8.1-m.main+fp.dp multilibs in addition to the existing
march=armv8.1-m.main+fp/march=armv8.1-m.main+mve.
Instead of matching v8-main.fp for +fp +dsp+fp +mve.fp +fp+mve
versions of v8.1-m.main, they now match v8.1-m.main+fp (+fp is of
course removed from the list of matches, since it matches itself).
The same applies to +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp.
gcc/ChangeLog:
PR target/116447
* config/arm/t-rmprofile: Add -march=armv8.1-m.main+fp and
-march=armv8.1-m.main+fp.dp multilibs.
---
gcc/config/arm/t-rmprofile | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
index 9cddaaf85ef..2097846b0c8 100644
--- a/gcc/config/arm/t-rmprofile
+++ b/gcc/config/arm/t-rmprofile
@@ -27,8 +27,8 @@
# Arch and FPU variants to build libraries with
-MULTI_ARCH_OPTS_RM =
march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7e-m+fp/march=armv7e-m+fp.dp/march=armv8-m.base/march=armv8-m.main/march=armv8-m.main+fp/march=armv8-m.main+fp.dp/march=armv8.1-m.main+mve/march=armv8.1-m.main+pacbti/march=armv8.1-m.main+pacbti+fp/march=armv8.1-m.main+pacbti+fp.dp/march=armv8.1-m.main+pacbti+mve
-MULTI_ARCH_DIRS_RM = v6-m v7-m v7e-m v7e-m+fp v7e-m+dp v8-m.base v8-m.main
v8-m.main+fp v8-m.main+dp v8.1-m.main+mve v8.1-m.main+pacbti
v8.1-m.main+pacbti+fp v8.1-m.main+pacbti+dp v8.1-m.main+pacbti+mve
+MULTI_ARCH_OPTS_RM =
march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7e-m+fp/march=armv7e-m+fp.dp/march=armv8-m.base/march=armv8-m.main/march=armv8-m.main+fp/march=armv8-m.main+fp.dp/march=armv8.1-m.main+fp/march=armv8.1-m.main+fp.dp/march=armv8.1-m.main+mve/march=armv8.1-m.main+pacbti/march=armv8.1-m.main+pacbti+fp/march=armv8.1-m.main+pacbti+fp.dp/march=armv8.1-m.main+pacbti+mve
+MULTI_ARCH_DIRS_RM = v6-m v7-m v7e-m v7e-m+fp v7e-m+dp v8-m.base v8-m.main
v8-m.main+fp v8-m.main+dp v8.1-m.main+fp v8.1-m.main+dp v8.1-m.main+mve
v8.1-m.main+pacbti v8.1-m.main+pacbti+fp v8.1-m.main+pacbti+dp
v8.1-m.main+pacbti+mve
MULTI_ARCH_OPTS_RM += mbranch-protection=standard
MULTI_ARCH_DIRS_RM += bp
@@ -51,6 +51,8 @@ MULTILIB_REQUIRED +=
mthumb/march=armv8-m.main+fp/mfloat-abi=hard
MULTILIB_REQUIRED += mthumb/march=armv8-m.main+fp/mfloat-abi=softfp
MULTILIB_REQUIRED += mthumb/march=armv8-m.main+fp.dp/mfloat-abi=hard
MULTILIB_REQUIRED += mthumb/march=armv8-m.main+fp.dp/mfloat-abi=softfp
+MULTILIB_REQUIRED += mthumb/march=armv8.1-m.main+fp/mfloat-abi=hard
+MULTILIB_REQUIRED += mthumb/march=armv8.1-m.main+fp.dp/mfloat-abi=hard
MULTILIB_REQUIRED += mthumb/march=armv8.1-m.main+mve/mfloat-abi=hard
MULTILIB_REQUIRED +=
mthumb/march=armv8.1-m.main+pacbti/mbranch-protection=standard/mfloat-abi=soft
@@ -86,16 +88,16 @@ MULTILIB_MATCHES +=
march?armv8-m.main=mlibarch?armv8.1-m.main+dsp
MULTILIB_REUSE +=
mthumb/march.armv8-m\.main/mfloat-abi.soft=mthumb/march.armv8\.1-m\.main+mve/mfloat-abi.soft
MULTILIB_REUSE +=
mthumb/march.armv8-m\.main/mfloat-abi.soft=mthumb/march.armv8\.1-m\.main+mve/mfloat-abi.softfp
-v8_1m_sp_variants = +fp +dsp+fp +mve.fp +fp+mve
-v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
+v8_1m_sp_variants = +dsp+fp +mve.fp +fp+mve
+v8_1m_dp_variants = +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
-# Map all v8.1-m.main FP sp variants down to v8-m.
+# Map all v8.1-m.main FP sp variants down to v8.1-m.main+fp.
MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \
- march?armv8-m.main+fp=mlibarch?armv8.1-m.main$(FP))
+
march?armv8.1-m.main+fp=mlibarch?armv8.1-m.main$(FP))
-# Map all v8.1-m.main FP dp variants down to v8-m.
+# Map all v8.1-m.main FP dp variants down to v8.1-m.main+fp.dp.
MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \
-
march?armv8-m.main+fp.dp=mlibarch?armv8.1-m.main$(FP))
+
march?armv8.1-m.main+fp.dp=mlibarch?armv8.1-m.main$(FP))
# Map all mbranch-protection values other than 'none' to 'standard'.
MULTILIB_MATCHES += mbranch-protection?standard=mbranch-protection?bti
--
2.34.1