libgfortran: Avoid using libquadmath APIs on powerpc64le on glibc 2.32+

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.
This commit is contained in:
Jakub Jelinek 2022-01-07 18:42:46 +01:00
parent 7d8011fa00
commit 4d0e778fe3
3 changed files with 18 additions and 0 deletions

View 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

View 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)

View File

@ -1968,6 +1968,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)
@ -1980,6 +1982,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)