]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libgfortran: Avoid using libquadmath APIs on powerpc64le on glibc 2.32+
authorJakub Jelinek <jakub@redhat.com>
Fri, 7 Jan 2022 17:42:46 +0000 (18:42 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 7 Jan 2022 17:42:46 +0000 (18:42 +0100)
On a glibc 2.32+ build, we still use some libquadmath APIs
when we shouldn't:
readelf -Wr /home/jakub/gcc/obj/powerpc64le-unknown-linux-gnu/libgfortran/.libs/libgfortran.so.5 | grep QUADMATH
00000000002502c8  0000002600000015 R_PPC64_JMP_SLOT       0000000000000000 fmaq@QUADMATH_1.0 + 0
00000000002505f8  0000006700000015 R_PPC64_JMP_SLOT       0000000000000000 tanq@QUADMATH_1.0 + 0
0000000000250930  0000009b00000015 R_PPC64_JMP_SLOT       0000000000000000 fabsq@QUADMATH_1.0 + 0
0000000000250940  0000009d00000015 R_PPC64_JMP_SLOT       0000000000000000 sinq@QUADMATH_1.0 + 0
0000000000250c98  000000cf00000015 R_PPC64_JMP_SLOT       0000000000000000 copysignq@QUADMATH_1.0 + 0
0000000000251038  0000010700000015 R_PPC64_JMP_SLOT       0000000000000000 cosq@QUADMATH_1.0 + 0
0000000000251068  0000010a00000015 R_PPC64_JMP_SLOT       0000000000000000 fmodq@QUADMATH_1.0 + 0
These should use __fmaieee128, __tanieee128 etc. instead.

2022-01-07  Jakub Jelinek  <jakub@redhat.com>

* libgfortran.h (__copysignieee128, __fmaieee128, __fmodieee128):
Declare.
* intrinsics/trigd.c (COPYSIGN, FMOD, FABS, FMA, SIN, COS, TAN): If
POWER_IEEE128 is defined, define these for kind 17 include.
* intrinsics/trigd_lib.inc (COPYSIGN, FMOD, FABS, FMA, SIN, COS, TAN):
Don't define if COPYSIGN is already defined.

libgfortran/intrinsics/trigd.c
libgfortran/intrinsics/trigd_lib.inc
libgfortran/libgfortran.h

index 9cc1b0b46cbf65568e4fd6b2e4400b4741f4bf11..24a98fa9fe61871ea97082c69ff87759838ca56e 100644 (file)
@@ -313,6 +313,16 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define HAVE_INFINITY_KIND
 #endif
 
+#ifdef POWER_IEEE128
+#define COPYSIGN __copysignieee128
+#define FMOD __fmodieee128
+#define FABS __fabsieee128
+#define FMA __fmaieee128
+#define SIN __sinieee128
+#define COS __cosieee128
+#define TAN __tanieee128
+#endif
+
 #include "trigd_lib.inc"
 
 #undef KIND
index 3f3c227b130770220f0bc8a51b9a6490e068c345..011cee59e48b509f661a4a00c18af7bd7ce694f7 100644 (file)
@@ -65,6 +65,7 @@ PIO180L               -- lower bits of pi/180 for FMA
 #define CONCAT(x,y) x ## y
 #define CONCAT_EXPAND(x,y) CONCAT(x,y)
 
+#ifndef COPYSIGN
 #define COPYSIGN LITERAL(copysign)
 #define FMOD LITERAL(fmod)
 #define FABS LITERAL(fabs)
@@ -72,6 +73,7 @@ PIO180L               -- lower bits of pi/180 for FMA
 #define SIN LITERAL(sin)
 #define COS LITERAL(cos)
 #define TAN LITERAL(tan)
+#endif
 
 #ifdef TINY
 #define TINY_LITERAL LITERAL(TINY)
index 4f49bbaf5672310bfc472fd18d9fed13e0799336..f0a549f682bfe52b73f9b5d5ec0760bc9bbb6c3f 100644 (file)
@@ -1956,6 +1956,8 @@ extern __float128 __atanhieee128 (__float128)
   __attribute__ ((__nothrow__, __leaf__));
 extern __float128 __atanieee128 (__float128)
   __attribute__ ((__nothrow__, __leaf__));
+extern __float128 __copysignieee128 (__float128, __float128)
+  __attribute__ ((__nothrow__, __leaf__));
 extern __float128 __coshieee128 (__float128)
   __attribute__ ((__nothrow__, __leaf__));
 extern __float128 __cosieee128 (__float128)
@@ -1968,6 +1970,10 @@ extern __float128 __expieee128 (__float128)
   __attribute__ ((__nothrow__, __leaf__));
 extern __float128 __fabsieee128 (__float128)
   __attribute__ ((__nothrow__, __leaf__));
+extern __float128 __fmaieee128 (__float128, __float128, __float128)
+  __attribute__ ((__nothrow__, __leaf__));
+extern __float128 __fmodieee128 (__float128, __float128)
+  __attribute__ ((__nothrow__, __leaf__));
 extern __float128 __jnieee128 (int, __float128)
   __attribute__ ((__nothrow__, __leaf__));
 extern __float128 __log10ieee128 (__float128)