diff options
author | Aurelien Jarno <aurelien@aurel32.net> | 2016-08-02 09:18:59 +0200 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2016-12-08 00:57:05 -0500 |
commit | 8eb9a92e0522f2d4f2d4167df919d066c85d3408 (patch) | |
tree | bac055ef554b285e86b08b3d25608400de069ddb | |
parent | 1912cc082df4739c2388c375f8d486afdaa7d49b (diff) | |
download | glibc-8eb9a92e0522f2d4f2d4167df919d066c85d3408.zip glibc-8eb9a92e0522f2d4f2d4167df919d066c85d3408.tar.gz glibc-8eb9a92e0522f2d4f2d4167df919d066c85d3408.tar.bz2 |
alpha: fix rint on sNaN input
The alpha version of rint wrongly return sNaN for sNaN input. Fix that
by checking for NaN and by returning the input value added with itself
in that case.
Changelog:
* sysdeps/alpha/fpu/s_rint.c (__rint): Add argument with itself
when it is a NaN.
* sysdeps/alpha/fpu/s_rintf.c (__rintf): Likewise.
(cherry picked from commit cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b)
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/s_rint.c | 3 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/s_rintf.c | 3 |
3 files changed, 11 insertions, 0 deletions
@@ -1,5 +1,7 @@ 2016-08-02 Aurelien Jarno <aurelien@aurel32.net> +2016-08-02 Aurelien Jarno <aurelien@aurel32.net> + * sysdeps/alpha/fpu/s_ceil.c (__ceil): Add argument with itself when it is a NaN. [_IEEE_FP_INEXACT] Remove. @@ -8,6 +10,9 @@ when it is a NaN. [_IEEE_FP_INEXACT] Remove. * sysdeps/alpha/fpu/s_floorf.c (__floorf): Likewise. + * sysdeps/alpha/fpu/s_rint.c (__rint): Add argument with itself + when it is a NaN. + * sysdeps/alpha/fpu/s_rintf.c (__rintf): Likewise. 2016-11-30 H.J. Lu <hongjiu.lu@intel.com> diff --git a/sysdeps/alpha/fpu/s_rint.c b/sysdeps/alpha/fpu/s_rint.c index f33fe72..259348a 100644 --- a/sysdeps/alpha/fpu/s_rint.c +++ b/sysdeps/alpha/fpu/s_rint.c @@ -23,6 +23,9 @@ double __rint (double x) { + if (isnan (x)) + return x + x; + if (isless (fabs (x), 9007199254740992.0)) /* 1 << DBL_MANT_DIG */ { double tmp1, new_x; diff --git a/sysdeps/alpha/fpu/s_rintf.c b/sysdeps/alpha/fpu/s_rintf.c index 1400dfe..645728a 100644 --- a/sysdeps/alpha/fpu/s_rintf.c +++ b/sysdeps/alpha/fpu/s_rintf.c @@ -22,6 +22,9 @@ float __rintf (float x) { + if (isnanf (x)) + return x + x; + if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */ { /* Note that Alpha S_Floating is stored in registers in a |