https://gcc.gnu.org/g:3ea2d4cac5c925398e9379e05fccb21b8266cda7
commit 3ea2d4cac5c925398e9379e05fccb21b8266cda7 Author: Michael Meissner <meiss...@linux.ibm.com> Date: Fri Jun 14 20:29:47 2024 -0400 Disable IEEE 128 on little endian 32-bit systems. 2024-06-14 Michael Meissner <meiss...@linux.ibm.com> gcc/ * config/rs6000/rs6000.cc (rs6000_option_override_internal): Do not allow IEEE 128-bit on little endian 32-bit systems. Diff: --- gcc/config/rs6000/rs6000.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index c5c4191127e4..ea36e651b446 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -4146,7 +4146,8 @@ rs6000_option_override_internal (bool global_init_p) the keyword as well as the type. */ TARGET_FLOAT128_TYPE = TARGET_FLOAT128_ENABLE_TYPE && TARGET_VSX; - /* IEEE 128-bit floating point requires VSX support. */ + /* IEEE 128-bit floating point requires VSX support. Disable IEEE 128-bit on + legacy 32-bit LE systems. */ if (TARGET_FLOAT128_KEYWORD) { if (!TARGET_VSX) @@ -4154,6 +4155,16 @@ rs6000_option_override_internal (bool global_init_p) if ((rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128_KEYWORD) != 0) error ("%qs requires VSX support", "-mfloat128"); + TARGET_FLOAT128_TYPE = 0; + rs6000_isa_flags &= ~(OPTION_MASK_FLOAT128_KEYWORD + | OPTION_MASK_FLOAT128_HW); + } + else if (!TARGET_POWERPC64 && !BYTES_BIG_ENDIAN) + { + if ((rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128_KEYWORD) != 0) + error ("%qs requires 64-bit support on little endian systems", + "-mfloat128"); + TARGET_FLOAT128_TYPE = 0; rs6000_isa_flags &= ~(OPTION_MASK_FLOAT128_KEYWORD | OPTION_MASK_FLOAT128_HW);