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