From a4fb786185fce5048a13c7879f67dfbe59ff70be Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 18 Feb 2014 14:45:41 +0000 Subject: Fix gen-auto-libm-tests sticky bit setting for negative results. gen-auto-libm-tests has a bug in the logic for setting a sticky bit based on the ternary value from MPFR: it is correct for positive results, but for negative results mpz_setbit acts as if a two's complement representation is used, whereas the low bit needs setting based on the sign-magnitude representation GMP actually uses. (This showed up in converting fma tests to use auto-libm-test-in / gen-auto-libm-tests.) This patch fixes the problem by negating the mpz_t value to set its low bit. There are lots of changes to auto-libm-test-out (mainly 1ulp fixes to ldbl-128 expected results), but only a few ulps updates are needed on x86 / x86_64. In one case, a corrected expectation showed up a spurious underflow exception where the correct result is slightly outside the underflowing range. Tested x86_64 and x86 and ulps updated accordingly. * math/gen-auto-libm-tests.c (adjust_real): Ensure integers are non-negative before setting low bit. * math/auto-libm-test-in: Mark one asin test possibly having spurious underflow. * math/auto-libm-test-out: Regenerated. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. --- sysdeps/i386/fpu/libm-test-ulps | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'sysdeps/i386/fpu') diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps index 4a921b1..6a59247 100644 --- a/sysdeps/i386/fpu/libm-test-ulps +++ b/sysdeps/i386/fpu/libm-test-ulps @@ -53,28 +53,47 @@ ildouble: 1 ldouble: 1 # asin_downward +Test "asin_downward (-0x2p-16384)": +ildouble: 1 +ldouble: 1 Test "asin_downward (-0x4p-1024)": double: 1 idouble: 1 +ildouble: 1 +ldouble: 1 Test "asin_downward (-0x4p-1076)": double: 1 idouble: 1 +ildouble: 1 +ldouble: 1 Test "asin_downward (-0x4p-128)": double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "asin_downward (-0x4p-16384)": +ildouble: 1 +ldouble: 1 Test "asin_downward (-0x8p-152)": double: 1 float: 1 idouble: 1 ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "asin_downward (-0x8p-16448)": +ildouble: 1 +ldouble: 1 Test "asin_downward (-0x8p-4)": ildouble: 1 ldouble: 1 Test "asin_downward (-0x8p-972)": double: 1 idouble: 1 +ildouble: 1 +ldouble: 1 Test "asin_downward (-0xf.fffffff8p-4)": ildouble: 1 ldouble: 1 @@ -136,9 +155,13 @@ Test "asin_upward (-0x2p-16384)": ildouble: 1 ldouble: 1 Test "asin_upward (-0x4p-1024)": +double: 1 +idouble: 1 ildouble: 1 ldouble: 1 Test "asin_upward (-0x4p-1076)": +double: 1 +idouble: 1 ildouble: 1 ldouble: 1 Test "asin_upward (-0x4p-128)": @@ -3894,6 +3917,9 @@ ifloat: 1 Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)": double: 1 idouble: 1 +Test "Imaginary part of: ccos (0x4p-16328 + 0x1p-120 i)": +ildouble: 1 +ldouble: 1 Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)": double: 1 float: 1 @@ -6840,6 +6866,13 @@ float: 1 ifloat: 1 ildouble: 2 ldouble: 2 +Test "Imaginary part of: ctan_downward (-0xc.35p+12 - 0xc.35p+12 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Real part of: ctan_downward (0x1.921fb4p+0 + +0 i)": ildouble: 1 ldouble: 1 @@ -6982,6 +7015,13 @@ ifloat: 1 Test "Imaginary part of: ctan_downward (0x8p+16380 + 0x1p+0 i)": ildouble: 1 ldouble: 1 +Test "Imaginary part of: ctan_downward (0xc.35p+12 - 0xc.35p+12 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Real part of: ctan_downward (0xcp-4 + 0x1.4p+0 i)": double: 1 idouble: 1 @@ -7701,6 +7741,20 @@ double: 2 idouble: 2 ildouble: 1 ldouble: 1 +Test "Real part of: ctanh_downward (-0xc.35p+12 + 0xc.35p+12 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: ctanh_downward (-0xc.35p+12 - 0xc.35p+12 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 Test "Imaginary part of: ctanh_downward (0x1.63p+8 + 0x1p+0 i)": ildouble: 1 ldouble: 1 -- cgit v1.1