[PATCH 3/4] alpha: fix rint on sNaN input
Aurelien Jarno
aurelien@aurel32.net
Sun Jul 10 11:40:00 GMT 2016
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.
---
ChangeLog | 3 +++
sysdeps/alpha/fpu/s_rint.c | 3 +++
sysdeps/alpha/fpu/s_rintf.c | 3 +++
3 files changed, 9 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index 5528047..c7dbf18 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-07-08 Adhemerval Zanella <adhemerval.zanella@linaro.org>
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
--
2.8.1
More information about the Libc-alpha
mailing list