diff options
author | Joseph Myers <joseph@codesourcery.com> | 2016-06-08 21:55:06 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2016-06-08 21:55:06 +0000 |
commit | 9bd3ef8e19b19fb3cfcf99a33a1493035891b990 (patch) | |
tree | ca830d25692074e5b5800ee2f530a2d314fa2a0b /math | |
parent | 9946e7a949d3b0f2795d930aa2f2ce7bda5e4f8a (diff) | |
download | glibc-9bd3ef8e19b19fb3cfcf99a33a1493035891b990.tar.gz glibc-9bd3ef8e19b19fb3cfcf99a33a1493035891b990.tar.xz glibc-9bd3ef8e19b19fb3cfcf99a33a1493035891b990.zip |
Fix i386/x86_64 expl, exp10l, expm1l for sNaN input (bug 20226).
The i386 and x86_64 implementations of expl, exp10l and expm1l (code shared between the functions) return sNaN for sNaN input. This patch fixes them to add NaN inputs to themselves so that qNaN is returned in this case. Tested for x86_64 and x86. [BZ #20226] * sysdeps/i386/fpu/e_expl.S (IEEE754_EXPL): Add NaN argument to itself. * sysdeps/x86_64/fpu/e_expl.S (IEEE754_EXPL): Likewise. * math/libm-test.inc (exp_test_data): Add sNaN tests. (exp10_test_data): Likewise. (expm1_test_data): Likewise.
Diffstat (limited to 'math')
-rw-r--r-- | math/libm-test.inc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/math/libm-test.inc b/math/libm-test.inc index 583c27cfc0..35a256c485 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -6992,6 +6992,8 @@ static const struct test_f_f_data exp_test_data[] = TEST_f_f (exp, minus_infty, 0, ERRNO_UNCHANGED|NO_TEST_INLINE), TEST_f_f (exp, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (exp, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (exp, snan_value, qnan_value, INVALID_EXCEPTION), + TEST_f_f (exp, -snan_value, qnan_value, INVALID_EXCEPTION), AUTO_TESTS_f_f (exp), }; @@ -7009,6 +7011,8 @@ static const struct test_f_f_data exp10_test_data[] = TEST_f_f (exp10, minus_infty, 0, ERRNO_UNCHANGED), TEST_f_f (exp10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (exp10, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (exp10, snan_value, qnan_value, INVALID_EXCEPTION), + TEST_f_f (exp10, -snan_value, qnan_value, INVALID_EXCEPTION), AUTO_TESTS_f_f (exp10), }; @@ -7052,6 +7056,8 @@ static const struct test_f_f_data expm1_test_data[] = TEST_f_f (expm1, minus_infty, -1, ERRNO_UNCHANGED|NO_TEST_INLINE), TEST_f_f (expm1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), TEST_f_f (expm1, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED), + TEST_f_f (expm1, snan_value, qnan_value, INVALID_EXCEPTION), + TEST_f_f (expm1, -snan_value, qnan_value, INVALID_EXCEPTION), AUTO_TESTS_f_f (expm1), }; |