aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2016-06-07 23:08:32 +0000
committerJoseph Myers <joseph@codesourcery.com>2016-06-07 23:08:32 +0000
commit8fa8a330f95c2f39eae7960ccf2825e693789202 (patch)
treee8f3db4b05b0255aa6a5f4f791fdf2ef04e25cea
parentc23805a95d9bc095118299b5965f7f8388e57fc4 (diff)
downloadglibc-8fa8a330f95c2f39eae7960ccf2825e693789202.tar
glibc-8fa8a330f95c2f39eae7960ccf2825e693789202.tar.gz
glibc-8fa8a330f95c2f39eae7960ccf2825e693789202.tar.bz2
glibc-8fa8a330f95c2f39eae7960ccf2825e693789202.zip
Fix i386 atanhl (sNaN) (bug 20219).
The i386 version of atanhl returns sNaN for sNaN input. This patch fixes it to add NaN arguments to themselves so it returns qNaN in this case. Tested for x86_64 and x86. [BZ #20219] * sysdeps/i386/fpu/e_atanhl.S (__ieee754_atanhl): Add NaN argument to itself. * math/libm-test.inc (atanh_test_data): Add sNaN tests.
-rw-r--r--ChangeLog5
-rw-r--r--math/libm-test.inc2
-rw-r--r--sysdeps/i386/fpu/e_atanhl.S1
3 files changed, 8 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index cba504e7b2..20b3dc0194 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2016-06-07 Joseph Myers <joseph@codesourcery.com>
+ [BZ #20219]
+ * sysdeps/i386/fpu/e_atanhl.S (__ieee754_atanhl): Add NaN argument
+ to itself.
+ * math/libm-test.inc (atanh_test_data): Add sNaN tests.
+
[BZ #20218]
* sysdeps/i386/fpu/s_asinhl.S (__asinhl): Add non-finite argument
to itself.
diff --git a/math/libm-test.inc b/math/libm-test.inc
index fb7a71baf8..decda41f2f 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -1915,6 +1915,8 @@ static const struct test_f_f_data atanh_test_data[] =
TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (atanh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_f_f (atanh, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+ TEST_f_f (atanh, snan_value, qnan_value, INVALID_EXCEPTION),
+ TEST_f_f (atanh, -snan_value, qnan_value, INVALID_EXCEPTION),
/* atanh (x) == qNaN plus invalid exception if |x| > 1. */
TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
diff --git a/sysdeps/i386/fpu/e_atanhl.S b/sysdeps/i386/fpu/e_atanhl.S
index dc5ca51a4b..ecfba3ae0e 100644
--- a/sysdeps/i386/fpu/e_atanhl.S
+++ b/sysdeps/i386/fpu/e_atanhl.S
@@ -121,6 +121,7 @@ ENTRY(__ieee754_atanhl)
cmpl $0, 4(%esp)
je 7b
6: fldt 4(%esp)
+ fadd %st(0)
ret
END(__ieee754_atanhl)
strong_alias (__ieee754_atanhl, __atanhl_finite)