Patch ieee128-lib-patch005b
authorMichael Meissner <Michael Meissner meissner@linux.ibm.com>
Tue, 5 May 2020 17:33:34 +0000 (13:33 -0400)
committerMichael Meissner <Michael Meissner meissner@linux.ibm.com>
Tue, 5 May 2020 17:33:34 +0000 (13:33 -0400)
gcc/ChangeLog.meissner
gcc/config/rs6000/rs6000-c.c

index 342a439dafdaa60249990c12d5e6e10f56585b1b..4de6d61d555cc5237b59ceb0cb19b85eb10ed334 100644 (file)
@@ -1,3 +1,11 @@
+2020-05-05  Michael Meissner  <meissner@linux.ibm.com>
+
+       (ieee128-lib-patch005b)
+       * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): If long
+       double is IEEE 128-bit, map the old 'q' built-in functions to
+       'f128' versions.  Also map the silent NaN f128 function to the
+       long double version.
+
 2020-05-05  Michael Meissner  <meissner@linux.ibm.com>
 
        (ieee128-lib-patch004b)
@@ -24,4 +32,3 @@
 2020-05-05   Michael Meissner  <meissner@linux.ibm.com>
 
        Clone branch
-
index e59eff95cf4b11cd13f78b6bc97aac380525ed44..206230a290d74c033f98119cefadc58faa1b9474 100644 (file)
@@ -675,15 +675,31 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
       builtin_define ("__builtin_vsx_xvnmsubmsp=__builtin_vsx_xvnmsubsp");
     }
 
-  /* Map the old _Float128 'q' builtins into the new 'f128' builtins.  */
+  /* Map the old _Float128 'q' builtins into the new 'f128' builtins.  However,
+     if long double is IEEE 128-bit, map the built-in functions to the normal
+     long double version.  In addition, if the default long double type is
+     IEEE, the nans builtins seem to generate the normal nan builtin value.  */
   if (TARGET_FLOAT128_TYPE)
     {
-      builtin_define ("__builtin_fabsq=__builtin_fabsf128");
-      builtin_define ("__builtin_copysignq=__builtin_copysignf128");
-      builtin_define ("__builtin_nanq=__builtin_nanf128");
-      builtin_define ("__builtin_nansq=__builtin_nansf128");
-      builtin_define ("__builtin_infq=__builtin_inff128");
-      builtin_define ("__builtin_huge_valq=__builtin_huge_valf128");
+      if (TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128)
+       {
+         builtin_define ("__builtin_fabsq=__builtin_fabsl");
+         builtin_define ("__builtin_copysignq=__builtin_copysignl");
+         builtin_define ("__builtin_nanq=__builtin_nanl");
+         builtin_define ("__builtin_nansq=__builtin_nansl");
+         builtin_define ("__builtin_infq=__builtin_infl");
+         builtin_define ("__builtin_huge_valq=__builtin_huge_vall");
+         builtin_define ("__builtin_nansf128=__builtin_nansl");
+       }
+      else
+       {
+         builtin_define ("__builtin_fabsq=__builtin_fabsf128");
+         builtin_define ("__builtin_copysignq=__builtin_copysignf128");
+         builtin_define ("__builtin_nanq=__builtin_nanf128");
+         builtin_define ("__builtin_nansq=__builtin_nansf128");
+         builtin_define ("__builtin_infq=__builtin_inff128");
+         builtin_define ("__builtin_huge_valq=__builtin_huge_valf128");
+       }
     }
 
   /* Tell users they can use __builtin_bswap{16,64}.  */