From: Aurelien Jarno Date: Tue, 2 Aug 2016 07:18:59 +0000 (+0200) Subject: alpha: fix rint on sNaN input X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8eb9a92e0522f2d4f2d4167df919d066c85d3408;p=thirdparty%2Fglibc.git 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) --- diff --git a/ChangeLog b/ChangeLog index 77204f41bc3..66cfa3d420c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,5 @@ +2016-08-02 Aurelien Jarno + 2016-08-02 Aurelien Jarno * sysdeps/alpha/fpu/s_ceil.c (__ceil): Add argument with itself @@ -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 diff --git a/sysdeps/alpha/fpu/s_rint.c b/sysdeps/alpha/fpu/s_rint.c index f33fe72c116..259348afc08 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 1400dfe8d76..645728ad5b0 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