aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meissner <Michael Meissner meissner@linux.ibm.com>2020-05-05 13:33:34 -0400
committerMichael Meissner <Michael Meissner meissner@linux.ibm.com>2020-05-05 13:33:34 -0400
commit8f2973cbf7ee6dd5313343c32e7abe6c51f678d4 (patch)
treedcfdd378ed7316b2e44636a77080e83a5e87507b
parent18c2f7a740a61e317e1911ee0ad7dea6043ea511 (diff)
downloadgcc-8f2973cbf7ee6dd5313343c32e7abe6c51f678d4.zip
gcc-8f2973cbf7ee6dd5313343c32e7abe6c51f678d4.tar.gz
gcc-8f2973cbf7ee6dd5313343c32e7abe6c51f678d4.tar.bz2
Patch ieee128-lib-patch005b
-rw-r--r--gcc/ChangeLog.meissner9
-rw-r--r--gcc/config/rs6000/rs6000-c.c30
2 files changed, 31 insertions, 8 deletions
diff --git a/gcc/ChangeLog.meissner b/gcc/ChangeLog.meissner
index 342a439..4de6d61 100644
--- a/gcc/ChangeLog.meissner
+++ b/gcc/ChangeLog.meissner
@@ -1,5 +1,13 @@
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)
* config/rs6000/rs6000.c (rs6000_mangle_decl_assembler_name): Add
special cases for built-in functions that return or use long
@@ -24,4 +32,3 @@
2020-05-05 Michael Meissner <meissner@linux.ibm.com>
Clone branch
-
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index e59eff9..206230a 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -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}. */