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

Reply via email to