diff options
author | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-07-20 15:20:51 -0500 |
---|---|---|
committer | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-08-31 10:38:11 -0500 |
commit | 15089e046b6c71bbefe29687fe4c7e569c9e1c03 (patch) | |
tree | 6e857cd8ec0519902d2e4cd16e4f31bda0402584 /sysdeps/ieee754/ldbl-128/s_fmal.c | |
parent | e9b424881a4f85284e56d8b561c54ff57a7c1c9b (diff) | |
download | glibc-15089e046b6c71bbefe29687fe4c7e569c9e1c03.zip glibc-15089e046b6c71bbefe29687fe4c7e569c9e1c03.tar.gz glibc-15089e046b6c71bbefe29687fe4c7e569c9e1c03.tar.bz2 |
ldbl-128: Rename 'long double' to '_Float128'
Add a layer of macro indirection for long double files
which need to be built using another typename. Likewise,
add the L(num) macro used in a later patch to override
real constants.
These macros are only defined through the ldbl-128
math_ldbl.h header, thereby implicitly restricting
these macros to machines which back long double
with an IEEE binary128 format.
Likewise, appropriate changes are made for the few
files which indirectly include such ldbl-128 files.
These changes produce identical binaries for s390x,
aarch64, and ppc64.
Diffstat (limited to 'sysdeps/ieee754/ldbl-128/s_fmal.c')
-rw-r--r-- | sysdeps/ieee754/ldbl-128/s_fmal.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/sysdeps/ieee754/ldbl-128/s_fmal.c b/sysdeps/ieee754/ldbl-128/s_fmal.c index 728949c..df01ab7 100644 --- a/sysdeps/ieee754/ldbl-128/s_fmal.c +++ b/sysdeps/ieee754/ldbl-128/s_fmal.c @@ -28,8 +28,8 @@ double rounding. See a paper by Boldo and Melquiond: http://www.lri.fr/~melquion/doc/08-tc.pdf */ -long double -__fmal (long double x, long double y, long double z) +_Float128 +__fmal (_Float128 x, _Float128 y, _Float128 z) { union ieee854_long_double u, v, w; int adjust = 0; @@ -75,7 +75,7 @@ __fmal (long double x, long double y, long double z) < IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG - 2) { int neg = u.ieee.negative ^ v.ieee.negative; - long double tiny = neg ? -0x1p-16494L : 0x1p-16494L; + _Float128 tiny = neg ? -0x1p-16494L : 0x1p-16494L; if (w.ieee.exponent >= 3) return tiny + z; /* Scaling up, adding TINY and scaling down produces the @@ -94,7 +94,7 @@ __fmal (long double x, long double y, long double z) && w.ieee.mantissa1 == 0 && w.ieee.mantissa0 == 0))) { - long double force_underflow = x * y; + _Float128 force_underflow = x * y; math_force_eval (force_underflow); } return v.d * 0x1p-114L; @@ -190,22 +190,22 @@ __fmal (long double x, long double y, long double z) /* Multiplication m1 + m2 = x * y using Dekker's algorithm. */ #define C ((1LL << (LDBL_MANT_DIG + 1) / 2) + 1) - long double x1 = x * C; - long double y1 = y * C; - long double m1 = x * y; + _Float128 x1 = x * C; + _Float128 y1 = y * C; + _Float128 m1 = x * y; x1 = (x - x1) + x1; y1 = (y - y1) + y1; - long double x2 = x - x1; - long double y2 = y - y1; - long double m2 = (((x1 * y1 - m1) + x1 * y2) + x2 * y1) + x2 * y2; + _Float128 x2 = x - x1; + _Float128 y2 = y - y1; + _Float128 m2 = (((x1 * y1 - m1) + x1 * y2) + x2 * y1) + x2 * y2; /* Addition a1 + a2 = z + m1 using Knuth's algorithm. */ - long double a1 = z + m1; - long double t1 = a1 - z; - long double t2 = a1 - t1; + _Float128 a1 = z + m1; + _Float128 t1 = a1 - z; + _Float128 t2 = a1 - t1; t1 = m1 - t1; t2 = z - t2; - long double a2 = t1 + t2; + _Float128 a2 = t1 + t2; /* Ensure the arithmetic is not scheduled after feclearexcept call. */ math_force_eval (m2); math_force_eval (a2); |