I over-restricted use of __builtin_mffsl, since I was unaware that it automatically uses mffs when mffsl is not available. Paul Clarke pointed this out in discussion of his SSE 4.1 compatibility patches.
2021-08-31 Bill Schmidt <wschm...@linux.ibm.com> gcc/ * config/rs6000/rs6000-call.c (__builtin_mffsl): Move from [power9] to [always]. --- gcc/config/rs6000/rs6000-builtin-new.def | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def index 6a28d5189f8..a8c6b9e988f 100644 --- a/gcc/config/rs6000/rs6000-builtin-new.def +++ b/gcc/config/rs6000/rs6000-builtin-new.def @@ -208,6 +208,12 @@ double __builtin_mffs (); MFFS rs6000_mffs {} +; Although the mffsl instruction is only available on POWER9 and later +; processors, this builtin automatically falls back to mffs on older +; platforms. Thus it appears here in the [always] stanza. + double __builtin_mffsl (); + MFFSL rs6000_mffsl {} + ; This thing really assumes long double == __ibm128, and I'm told it has ; been used as such within libgcc. Given that __builtin_pack_ibm128 ; exists for the same purpose, this should really not be used at all. @@ -2784,9 +2790,6 @@ signed long long __builtin_darn_raw (); DARN_RAW darn_raw {} - double __builtin_mffsl (); - MFFSL rs6000_mffsl {} - const signed int __builtin_dtstsfi_eq_dd (const int<6>, _Decimal64); TSTSFI_EQ_DD dfptstsfi_eq_dd {} -- 2.27.0