diff options
author | Stefan Liebler <stli@linux.ibm.com> | 2019-12-11 15:09:14 +0100 |
---|---|---|
committer | Stefan Liebler <stli@linux.ibm.com> | 2019-12-11 15:12:11 +0100 |
commit | af123aa95091d3d2d1b4ff027cf806ca1721d29d (patch) | |
tree | f5ba1d48610e92f56d2bdfaa6100cbb2b9165a9e /sysdeps/ieee754/dbl-64/s_nearbyint.c | |
parent | b5a1271c76ad03a2e0ee044ecb46af03d771e40a (diff) | |
download | glibc-af123aa95091d3d2d1b4ff027cf806ca1721d29d.tar.gz glibc-af123aa95091d3d2d1b4ff027cf806ca1721d29d.tar.xz glibc-af123aa95091d3d2d1b4ff027cf806ca1721d29d.zip |
Always use wordsize-64 version of s_nearbyint.c.
This patch replaces s_nearbyint.c in sysdeps/dbl-64 with the one in sysdeps/dbl-64/wordsize-64 and removes the latter one. The code is not changed except changes in code style. Also adjusted the include path in x86_64 file. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps/ieee754/dbl-64/s_nearbyint.c')
-rw-r--r-- | sysdeps/ieee754/dbl-64/s_nearbyint.c | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/sysdeps/ieee754/dbl-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/s_nearbyint.c index 4ce570ac7f..c261885c5a 100644 --- a/sysdeps/ieee754/dbl-64/s_nearbyint.c +++ b/sysdeps/ieee754/dbl-64/s_nearbyint.c @@ -10,10 +10,6 @@ * ==================================================== */ -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_rint.c,v 1.8 1995/05/10 20:48:04 jtc Exp $"; -#endif - /* * rint(x) * Return x rounded to integral value according to the prevailing @@ -32,44 +28,42 @@ static char rcsid[] = "$NetBSD: s_rint.c,v 1.8 1995/05/10 20:48:04 jtc Exp $"; #include <libm-alias-double.h> static const double - TWO52[2] = { - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ +TWO52[2] = { + 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ + -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ }; double __nearbyint (double x) { fenv_t env; - int32_t i0, j0, sx; - double w, t; - GET_HIGH_WORD (i0, x); - sx = (i0 >> 31) & 1; - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - if (j0 < 52) + int64_t i0, sx; + int32_t j0; + EXTRACT_WORDS64 (i0, x); + sx = (i0 >> 63) & 1; + j0 = ((i0 >> 52) & 0x7ff) - 0x3ff; + if (__glibc_likely (j0 < 52)) { if (j0 < 0) { libc_feholdexcept (&env); - w = TWO52[sx] + math_opt_barrier (x); - t = w - TWO52[sx]; + double w = TWO52[sx] + math_opt_barrier (x); + double t = w - TWO52[sx]; math_force_eval (t); libc_fesetenv (&env); - GET_HIGH_WORD (i0, t); - SET_HIGH_WORD (t, (i0 & 0x7fffffff) | (sx << 31)); - return t; + return copysign (t, x); } } else { if (j0 == 0x400) - return x + x; /* inf or NaN */ + return x + x; /* inf or NaN */ else - return x; /* x is integral */ + return x; /* x is integral */ } libc_feholdexcept (&env); - w = TWO52[sx] + math_opt_barrier (x); - t = w - TWO52[sx]; + double w = TWO52[sx] + math_opt_barrier (x); + double t = w - TWO52[sx]; math_force_eval (t); libc_fesetenv (&env); return t; |