aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurelien Jarno <aurelien@aurel32.net>2016-08-02 09:18:59 +0200
committerAurelien Jarno <aurelien@aurel32.net>2016-08-02 09:18:59 +0200
commitcb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b (patch)
tree43551aa2edac9c7863c3fce087e901f48c45cb1c
parent65cc568cf57156e5230db9a061645e54ff028a41 (diff)
downloadglibc-cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b.zip
glibc-cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b.tar.gz
glibc-cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b.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.
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/alpha/fpu/s_rint.c3
-rw-r--r--sysdeps/alpha/fpu/s_rintf.c3
3 files changed, 9 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d675adc..fa362a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,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-08-01 Carlos O'Donell <carlos@redhat.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