diff options
author | Aurelien Jarno <aurelien@aurel32.net> | 2016-08-02 09:18:59 +0200 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2016-08-02 09:18:59 +0200 |
commit | cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b (patch) | |
tree | 43551aa2edac9c7863c3fce087e901f48c45cb1c /sysdeps/alpha/fpu | |
parent | 65cc568cf57156e5230db9a061645e54ff028a41 (diff) | |
download | glibc-cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b.tar glibc-cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b.tar.gz glibc-cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b.tar.bz2 glibc-cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b.zip |
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.
Diffstat (limited to 'sysdeps/alpha/fpu')
-rw-r--r-- | sysdeps/alpha/fpu/s_rint.c | 3 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/s_rintf.c | 3 |
2 files changed, 6 insertions, 0 deletions
diff --git a/sysdeps/alpha/fpu/s_rint.c b/sysdeps/alpha/fpu/s_rint.c index f33fe72c11..259348afc0 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 1400dfe8d7..645728ad5b 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 |