From bba14195895fa612a8ef484e9856127a1be4f80f Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Fri, 27 May 2016 13:59:24 +0000 Subject: Fix ldbl-128ibm ceill, rintl etc. for sNaN arguments (bug 20156). The ldbl-128ibm implementations of ceill, floorl, roundl, truncl, rintl and nearbyintl wrongly return an sNaN when given an sNaN argument. This patch fixes them to add such an argument to itself to turn it into a quiet NaN. (The code structure means this "else" case applies to any argument which is zero or not finite; it's OK to do this in all such cases.) Tested for powerpc. [BZ #20156] * sysdeps/ieee754/ldbl-128ibm/s_ceill.c (__ceill): Add high part to itself when zero or not finite. * sysdeps/ieee754/ldbl-128ibm/s_floorl.c (__floorl): Likewise. * sysdeps/ieee754/ldbl-128ibm/s_rintl.c (__rintl): Likewise. * sysdeps/ieee754/ldbl-128ibm/s_roundl.c (__roundl): Likewise. * sysdeps/ieee754/ldbl-128ibm/s_truncl.c (__truncl): Likewise. --- sysdeps/ieee754/ldbl-128ibm/s_floorl.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'sysdeps/ieee754/ldbl-128ibm/s_floorl.c') diff --git a/sysdeps/ieee754/ldbl-128ibm/s_floorl.c b/sysdeps/ieee754/ldbl-128ibm/s_floorl.c index a1469646b0..61ac568c60 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_floorl.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_floorl.c @@ -52,6 +52,9 @@ __floorl (long double x) ldbl_canonicalize_int (&xh, &xl); } } + else + /* Quiet signaling NaN arguments. */ + xh += xh; return ldbl_pack (xh, xl); } -- cgit 1.4.1