aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2018-09-27 20:04:48 +0000
committerJoseph Myers <joseph@codesourcery.com>2018-09-27 20:04:48 +0000
commit81dca813cc35f91414731fdd0ff6b756d5e1827f (patch)
treefaaeb7f7118b0e45299fdfe00f9a248f27e70450
parent9755bc4686d8cd6a0e9539040b903e9e9291c319 (diff)
downloadglibc-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.
-rw-r--r--ChangeLog83
-rw-r--r--include/math.h2
-rw-r--r--math/divtc3.c12
-rw-r--r--math/multc3.c24
-rw-r--r--sysdeps/alpha/fpu/s_copysign.c1
-rw-r--r--sysdeps/alpha/fpu/s_copysignf.c1
-rw-r--r--sysdeps/generic/math-type-macros.h2
-rw-r--r--sysdeps/generic/math_private_calls.h9
-rw-r--r--sysdeps/ieee754/dbl-64/e_atan2.c2
-rw-r--r--sysdeps/ieee754/dbl-64/e_atanh.c2
-rw-r--r--sysdeps/ieee754/dbl-64/e_gamma_r.c8
-rw-r--r--sysdeps/ieee754/dbl-64/e_jn.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_asinh.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_atan.c2
-rw-r--r--sysdeps/ieee754/dbl-64/s_copysign.c1
-rw-r--r--sysdeps/ieee754/dbl-64/s_scalbln.c6
-rw-r--r--sysdeps/ieee754/dbl-64/s_scalbn.c6
-rw-r--r--sysdeps/ieee754/dbl-64/s_sin.c4
-rw-r--r--sysdeps/ieee754/dbl-64/s_sincos.c2
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c2
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c6
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c6
-rw-r--r--sysdeps/ieee754/float128/s_copysignf128.c1
-rw-r--r--sysdeps/ieee754/flt-32/e_atanhf.c2
-rw-r--r--sysdeps/ieee754/flt-32/e_gammaf_r.c8
-rw-r--r--sysdeps/ieee754/flt-32/e_jnf.c4
-rw-r--r--sysdeps/ieee754/flt-32/s_asinhf.c2
-rw-r--r--sysdeps/ieee754/flt-32/s_copysignf.c1
-rw-r--r--sysdeps/ieee754/flt-32/s_scalbnf.c6
-rw-r--r--sysdeps/ieee754/k_standard.c6
-rw-r--r--sysdeps/ieee754/ldbl-128/e_gammal_r.c8
-rw-r--r--sysdeps/ieee754/ldbl-128/e_jnl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128/s_copysignl.c1
-rw-r--r--sysdeps/ieee754/ldbl-128/s_scalblnl.c6
-rw-r--r--sysdeps/ieee754/ldbl-128/s_scalbnl.c6
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c8
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_jnl.c4
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_copysignl.c1
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_fmal.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c6
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c6
-rw-r--r--sysdeps/ieee754/ldbl-96/e_gammal_r.c8
-rw-r--r--sysdeps/ieee754/ldbl-96/e_jnl.c4
-rw-r--r--sysdeps/ieee754/ldbl-96/s_asinhl.c2
-rw-r--r--sysdeps/ieee754/ldbl-96/s_copysignl.c1
-rw-r--r--sysdeps/ieee754/ldbl-96/s_scalblnl.c6
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-copysign.c2
-rw-r--r--sysdeps/powerpc/power5+/fpu/s_modf.c6
-rw-r--r--sysdeps/powerpc/power5+/fpu/s_modff.c6
-rw-r--r--sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign.c1
-rw-r--r--sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysignf.c1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign.c1
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysignf.c1
-rw-r--r--sysdeps/riscv/rvd/s_copysign.c1
-rw-r--r--sysdeps/riscv/rvf/s_copysignf.c1
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.c1
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.c1
57 files changed, 202 insertions, 110 deletions
diff --git a/ChangeLog b/ChangeLog
index 4e438c88c4..0af91b490d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
-