aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurelien Jarno <aurelien@aurel32.net>2016-08-02 09:18:59 +0200
committerMike Frysinger <vapier@gentoo.org>2016-12-08 00:57:05 -0500
commit8eb9a92e0522f2d4f2d4167df919d066c85d3408 (patch)
treebac055ef554b285e86b08b3d25608400de069ddb
parent1912cc082df4739c2388c375f8d486afdaa7d49b (diff)
downloadglibc-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--ChangeLog5
-rw-r--r--sysdeps/alpha/fpu/s_rint.c3
-rw-r--r--sysdeps/alpha/fpu/s_rintf.c3
3 files changed, 11 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 77204f4..66cfa3d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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