PowerPC: Don't assume all targets have GLIBC.
authorMichael Meissner <meissner@linux.ibm.com>
Fri, 30 Oct 2020 22:36:25 +0000 (18:36 -0400)
committerMichael Meissner <meissner@linux.ibm.com>
Fri, 30 Oct 2020 22:36:25 +0000 (18:36 -0400)
gcc/
2020-10-30  Michael Meissner  <meissner@linux.ibm.com>

* config/rs6000/rs6000.c (glibc_supports_ieee_128bit): New helper
function.
(rs6000_option_override_internal): Call it.

gcc/config/rs6000/rs6000.c

index bcd4c4a..1e506b8 100644 (file)
@@ -3539,6 +3539,20 @@ rs6000_linux64_override_options ()
 }
 #endif
 
+/* Return true if we are using GLIBC, and it supports IEEE 128-bit long double.
+   This support is only in little endian GLIBC 2.32 or newer.  */
+static bool
+glibc_supports_ieee_128bit (void)
+{
+#ifdef OPTION_GLIBC
+  if (OPTION_GLIBC && !BYTES_BIG_ENDIAN
+      && ((TARGET_GLIBC_MAJOR * 1000) + TARGET_GLIBC_MINOR) >= 2032)
+    return true;
+#endif /* OPTION_GLIBC.  */
+
+  return false;
+}
+
 /* Override command line options.
 
    Combine build-specific configuration information with options
@@ -4164,9 +4178,8 @@ rs6000_option_override_internal (bool global_init_p)
          static bool warned_change_long_double;
 
          if (!warned_change_long_double
-             && (!OPTION_GLIBC
-                 || (!lang_GNU_C () && !lang_GNU_CXX ())
-                 || ((TARGET_GLIBC_MAJOR * 1000) + TARGET_GLIBC_MINOR) < 2032))
+             && (!glibc_supports_ieee_128bit ()
+                 || (!lang_GNU_C () && !lang_GNU_CXX ())))
            {
              warned_change_long_double = true;
              if (TARGET_IEEEQUAD)