diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | math/libm-test.inc | 4 | ||||
-rw-r--r-- | sysdeps/i386/fpu/s_nextafterl.c | 2 |
3 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 94a95f3c00..3e16edf9e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2016-06-03 Joseph Myers <joseph@codesourcery.com> + + [BZ #20205] + * sysdeps/i386/fpu/s_nextafterl.c (__nextafterl): Do not adjust + exponent when incrementing negative subnormal with low mantissa + word zero. + * math/libm-test.inc (nextafter_test_data) [TEST_COND_intel96]: + Add another test. + 2016-06-03 Florian Weimer <fweimer@redhat.com> * libio/wstrops.c (_IO_wstr_overflow, enlarge_userbuf): Use diff --git a/math/libm-test.inc b/math/libm-test.inc index 8c64c8e758..aaa01488ec 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -9965,6 +9965,10 @@ static const struct test_ff_f_data nextafter_test_data[] = TEST_ff_f (nextafter, -min_subnorm_value, 0, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_ERANGE), TEST_ff_f (nextafter, -min_subnorm_value, minus_zero, minus_zero, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_ERANGE), +#if TEST_COND_intel96 + TEST_ff_f (nextafter, -0x0.fffffffep-16382L, 0.0L, -0x0.fffffffdfffffffep-16382L, INEXACT_EXCEPTION|UNDERFLOW_EXCEPTION|ERRNO_ERANGE), +#endif + #if MANT_DIG >= 64 // XXX Enable once gcc is fixed. //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L), diff --git a/sysdeps/i386/fpu/s_nextafterl.c b/sysdeps/i386/fpu/s_nextafterl.c index 188dc2129a..600ad7a8d3 100644 --- a/sysdeps/i386/fpu/s_nextafterl.c +++ b/sysdeps/i386/fpu/s_nextafterl.c @@ -86,7 +86,7 @@ long double __nextafterl(long double x, long double y) if(esy>=0||(esx>esy||((esx==esy)&&(hx>hy||((hx==hy)&&(lx>ly)))))){ /* x < y, x -= ulp */ if(lx==0) { - if (hx <= 0x80000000) { + if (hx <= 0x80000000 && esx != 0xffff8000) { esx -= 1; hx = hx - 1; if ((esx&0x7fff) > 0) |