diff options
| author | Joseph Myers <joseph@codesourcery.com> | 2018-09-27 20:04:48 +0000 |
|---|---|---|
| committer | Joseph Myers <joseph@codesourcery.com> | 2018-09-27 20:04:48 +0000 |
| commit | 81dca813cc35f91414731fdd0ff6b756d5e1827f (patch) | |
| tree | faaeb7f7118b0e45299fdfe00f9a248f27e70450 | |
| parent | 9755bc4686d8cd6a0e9539040b903e9e9291c319 (diff) | |
| download | glibc-81dca813cc35f91414731fdd0ff6b756d5e1827f.tar.xz glibc-81dca813cc35f91414731fdd0ff6b756d5e1827f.zip | |
Use copysign functions not __copysign functions in glibc libm.
Continuing the move to use, within libm, public names for libm
functions that can be inlined as built-in functions on many
architectures, this patch moves calls to __copysign functions to call
the corresponding copysign names instead, with asm redirection to
__copysign when the calls are not inlined (all cases are inlined
except for IBM long double for powerpc soft-float / e500v1). This
eliminates the need for an inline function defining __copysign in
terms of __builtin_copysign.
Tested for x86_64, and with build-many-glibcs.py.
* include/math.h [!_ISOMAC && !(__FINITE_MATH_ONLY__ &&
__FINITE_MATH_ONLY__ > 0) && !NO_MATH_REDIRECT]
(MATH_REDIRECT_BINARY_ARGS): New macro.
[!_ISOMAC && !(__FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)
&& !NO_MATH_REDIRECT] (copysign): Redirect using MATH_REDIRECT.
* sysdeps/alpha/fpu/s_copysign.c: Define NO_MATH_REDIRECT before
header inclusion.
* sysdeps/alpha/fpu/s_copysignf.c: Likewise.
* sysdeps/ieee754/dbl-64/s_copysign.c: Likewise.
* sysdeps/ieee754/float128/s_copysignf128.c: Likewise.
* sysdeps/ieee754/flt-32/s_copysignf.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_copysignl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_copysignl.c: Likewise.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign.c:
Likewise.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysignf.c:
Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign.c: Likewise.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysignf.c: Likewise.
* sysdeps/riscv/rvd/s_copysign.c: Likewise.
* sysdeps/riscv/rvf/s_copysignf.c: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.c:
Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.c:
Likewise.
* sysdeps/generic/math_private_calls.h
[!__MATH_DECLARING_LONG_DOUBLE || !NO_LONG_DOUBLE] (__copysign):
Do not declare and define as an inline function.
* math/divtc3.c (__divtc3): Use copysign functions instead of
__copysign variants.
* math/multc3.c (__multc3): Likewise.
* sysdeps/generic/math-type-macros.h (M_COPYSIGN): Likewise.
* sysdeps/ieee754/dbl-64/e_atan2.c (signArctan2): Likewise.
* sysdeps/ieee754/dbl-64/e_atanh.c (__ieee754_atanh): Likewise.
* sysdeps/ieee754/dbl-64/e_gamma_r.c (__ieee754_gamma_r):
Likewise.
* sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_jn): Likewise.
(__ieee754_yn): Likewise.
* sysdeps/ieee754/dbl-64/s_asinh.c (__asinh): Likewise.
* sysdeps/ieee754/dbl-64/s_atan.c (__signArctan): Likewise.
* sysdeps/ieee754/dbl-64/s_scalbln.c (__scalbln): Likewise.
* sysdeps/ieee754/dbl-64/s_scalbn.c (__scalbn): Likewise.
* sysdeps/ieee754/dbl-64/s_sin.c (do_sin): Likewise.
(__sin): Likewise.
* sysdeps/ieee754/dbl-64/s_sincos.c (__sincos): Likewise.
* sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c (__nearbyint):
Likewise.
* sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c (__scalbln):
Likewise.
* sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c (__scalbn):
Likewise.
* sysdeps/ieee754/flt-32/e_atanhf.c (__ieee754_atanhf): Likewise.
* sysdeps/ieee754/flt-32/e_gammaf_r.c (__ieee754_gammaf_r):
Likewise.
* sysdeps/ieee754/flt-32/e_jnf.c (__ieee754_jnf): Likewise.
(__ieee754_ynf): Likewise.
* sysdeps/ieee754/flt-32/s_asinhf.c (__asinhf): Likewise.
* sysdeps/ieee754/flt-32/s_scalbnf.c (__scalbnf): Likewise.
* sysdeps/ieee754/k_standard.c (__kernel_standard): Likewise.
* sysdeps/ieee754/ldbl-128/e_gammal_r.c (__ieee754_gammal_r):
Likewise.
* sysdeps/ieee754/ldbl-128/e_jnl.c (__ieee754_jnl): Likewise.
(__ieee754_ynl): Likewise.
* sysdeps/ieee754/ldbl-128/s_scalblnl.c (__scalblnl): Likewise.
* sysdeps/ieee754/ldbl-128/s_scalbnl.c (__scalbnl): Likewise.
* sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (__ieee754_gammal_r):
Likewise.
* sysdeps/ieee754/ldbl-128ibm/e_jnl.c (__ieee754_jnl): Likewise.
(__ieee754_ynl): Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_fmal.c (__fmal): Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c (__scalblnl): Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c (__scalbnl): Likewise.
* sysdeps/ieee754/ldbl-96/e_gammal_r.c (__ieee754_gammal_r):
Likewise.
* sysdeps/ieee754/ldbl-96/e_jnl.c (__ieee754_jnl): Likewise.
(__ieee754_ynl)
* sysdeps/ieee754/ldbl-96/s_asinhl.c (__asinhl): Likewise.
* sysdeps/ieee754/ldbl-96/s_scalblnl.c (__scalblnl): Likewise.
* sysdeps/ieee754/ldbl-opt/nldbl-copysign.c (copysignl): Likewise.
* sysdeps/powerpc/power5+/fpu/s_modf.c (__modf): Likewise.
* sysdeps/powerpc/power5+/fpu/s_modff.c (__modff): Likewise.
57 files changed, 202 insertions, 110 deletions
@@ -1,6 +1,89 @@ 2018-09-27 Joseph Myers <joseph@codesourcery.com> * include/math.h [!_ISOMAC && !(__FINITE_MATH_ONLY__ && + __FINITE_MATH_ONLY__ > 0) && !NO_MATH_REDIRECT] + (MATH_REDIRECT_BINARY_ARGS): New macro. + [!_ISOMAC && !(__FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0) + && !NO_MATH_REDIRECT] (copysign): Redirect using MATH_REDIRECT. + * sysdeps/alpha/fpu/s_copysign.c: Define NO_MATH_REDIRECT before + header inclusion. + * sysdeps/alpha/fpu/s_copysignf.c: Likewise. + * sysdeps/ieee754/dbl-64/s_copysign.c: Likewise. + * sysdeps/ieee754/float128/s_copysignf128.c: Likewise. + * sysdeps/ieee754/flt-32/s_copysignf.c: Likewise. + * sysdeps/ieee754/ldbl-128/s_copysignl.c: Likewise. + * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: Likewise. + * sysdeps/ieee754/ldbl-96/s_copysignl.c: Likewise. + * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign.c: + Likewise. + * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysignf.c: + Likewise. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign.c: Likewise. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysignf.c: Likewise. + * sysdeps/riscv/rvd/s_copysign.c: Likewise. + * sysdeps/riscv/rvf/s_copysignf.c: Likewise. + * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.c: + Likewise. + * sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.c: + Likewise. + * sysdeps/generic/math_private_calls.h + [!__MATH_DECLARING_LONG_DOUBLE || !NO_LONG_DOUBLE] (__copysign): + Do not declare and define as an inline function. + * math/divtc3.c (__divtc3): Use copysign functions instead of + __copysign variants. + * math/multc3.c (__multc3): Likewise. + * sysdeps/generic/math-type-macros.h (M_COPYSIGN): Likewise. + * sysdeps/ieee754/dbl-64/e_atan2.c (signArctan2): Likewise. + * sysdeps/ieee754/dbl-64/e_atanh.c (__ieee754_atanh): Likewise. + * sysdeps/ieee754/dbl-64/e_gamma_r.c (__ieee754_gamma_r): + Likewise. + * sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_jn): Likewise. + (__ieee754_yn): Likewise. + * sysdeps/ieee754/dbl-64/s_asinh.c (__asinh): Likewise. + * sysdeps/ieee754/dbl-64/s_atan.c (__signArctan): Likewise. + * sysdeps/ieee754/dbl-64/s_scalbln.c (__scalbln): Likewise. + * sysdeps/ieee754/dbl-64/s_scalbn.c (__scalbn): Likewise. + * sysdeps/ieee754/dbl-64/s_sin.c (do_sin): Likewise. + (__sin): Likewise. + * sysdeps/ieee754/dbl-64/s_sincos.c (__sincos): Likewise. + * sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c (__nearbyint): + Likewise. + * sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c (__scalbln): + Likewise. + * sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c (__scalbn): + Likewise. + * sysdeps/ieee754/flt-32/e_atanhf.c (__ieee754_atanhf): Likewise. + * sysdeps/ieee754/flt-32/e_gammaf_r.c (__ieee754_gammaf_r): + Likewise. + * sysdeps/ieee754/flt-32/e_jnf.c (__ieee754_jnf): Likewise. + (__ieee754_ynf): Likewise. + * sysdeps/ieee754/flt-32/s_asinhf.c (__asinhf): Likewise. + * sysdeps/ieee754/flt-32/s_scalbnf.c (__scalbnf): Likewise. + * sysdeps/ieee754/k_standard.c (__kernel_standard): Likewise. + * sysdeps/ieee754/ldbl-128/e_gammal_r.c (__ieee754_gammal_r): + Likewise. + * sysdeps/ieee754/ldbl-128/e_jnl.c (__ieee754_jnl): Likewise. + (__ieee754_ynl): Likewise. + * sysdeps/ieee754/ldbl-128/s_scalblnl.c (__scalblnl): Likewise. + * sysdeps/ieee754/ldbl-128/s_scalbnl.c (__scalbnl): Likewise. + * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (__ieee754_gammal_r): + Likewise. + * sysdeps/ieee754/ldbl-128ibm/e_jnl.c (__ieee754_jnl): Likewise. + (__ieee754_ynl): Likewise. + * sysdeps/ieee754/ldbl-128ibm/s_fmal.c (__fmal): Likewise. + * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c (__scalblnl): Likewise. + * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c (__scalbnl): Likewise. + * sysdeps/ieee754/ldbl-96/e_gammal_r.c (__ieee754_gammal_r): + Likewise. + * sysdeps/ieee754/ldbl-96/e_jnl.c (__ieee754_jnl): Likewise. + (__ieee754_ynl) + * sysdeps/ieee754/ldbl-96/s_asinhl.c (__asinhl): Likewise. + * sysdeps/ieee754/ldbl-96/s_scalblnl.c (__scalblnl): Likewise. + * sysdeps/ieee754/ldbl-opt/nldbl-copysign.c (copysignl): Likewise. + * sysdeps/powerpc/power5+/fpu/s_modf.c (__modf): Likewise. + * sysdeps/powerpc/power5+/fpu/s_modff.c (__modff): Likewise. + + * include/math.h [!_ISOMAC && !(__FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0) && !NO_MATH_REDIRECT] (round): Redirect using MATH_REDIRECT. * sysdeps/aarch64/fpu/s_round.c: Define NO_MATH_REDIRECT before diff --git a/include/math.h b/include/math.h index ca9a1f0cd6..79ebbae359 100644 --- a/include/math.h +++ b/include/math.h @@ -100,12 +100,14 @@ fabsf128 (_Float128 x) # define MATH_REDIRECT_F128(FUNC, PREFIX, ARGS) # endif # define MATH_REDIRECT_UNARY_ARGS(TYPE) TYPE +# define MATH_REDIRECT_BINARY_ARGS(TYPE) TYPE, TYPE MATH_REDIRECT (sqrt, "__ieee754_", MATH_REDIRECT_UNARY_ARGS) MATH_REDIRECT (ceil, "__", MATH_REDIRECT_UNARY_ARGS) MATH_REDIRECT (floor, "__", MATH_REDIRECT_UNARY_ARGS) MATH_REDIRECT (rint, "__", MATH_REDIRECT_UNARY_ARGS) MATH_REDIRECT (trunc, "__", MATH_REDIRECT_UNARY_ARGS) MATH_REDIRECT (round, "__", MATH_REDIRECT_UNARY_ARGS) +MATH_REDIRECT (copysign, "__", MATH_REDIRECT_BINARY_ARGS) # endif # endif diff --git a/math/divtc3.c b/math/divtc3.c index b1df88bdb7..e83feca837 100644 --- a/math/divtc3.c +++ b/math/divtc3.c @@ -51,22 +51,22 @@ __divtc3 (long double a, long double b, long double c, long double d) { if (denom == 0.0 && (!isnan (a) || !isnan (b))) { - x = __copysignl (INFINITY, c) * a; - y = __copysignl (INFINITY, c) * b; + x = copysignl (INFINITY, c) * a; + y = copysignl (INFINITY, c) * b; } else if ((isinf (a) || isinf (b)) && isfinite (c) && isfinite (d)) { - a = __copysignl (isinf (a) ? 1 : 0, a); - b = __copysignl (isinf (b) ? 1 : 0, b); + a = copysignl (isinf (a) ? 1 : 0, a); + b = copysignl (isinf (b) ? 1 : 0, b); x = INFINITY * (a * c + b * d); y = INFINITY * (b * c - a * d); } else if ((isinf (c) || isinf (d)) && isfinite (a) && isfinite (b)) { - c = __copysignl (isinf (c) ? 1 : 0, c); - d = __copysignl (isinf (d) ? 1 : 0, d); + c = copysignl (isinf (c) ? 1 : 0, c); + d = copysignl (isinf (d) ? 1 : 0, d); x = 0.0 * (a * c + b * d); y = 0.0 * (b * c - a * d); } diff --git a/math/multc3.c b/math/multc3.c index 9943d705fd..775cbfbcce 100644 --- a/math/multc3.c +++ b/math/multc3.c @@ -42,20 +42,20 @@ __multc3 (long double a, long double b, long double c, long double d) { /* z is infinite. "Box" the infinity and change NaNs in the other factor to 0. */ - a = __copysignl (isinf (a) ? 1 : 0, a); - |
