From 8fa8a330f95c2f39eae7960ccf2825e693789202 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 7 Jun 2016 23:08:32 +0000 Subject: [PATCH] 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. --- ChangeLog | 5 +++++ math/libm-test.inc | 2 ++ sysdeps/i386/fpu/e_atanhl.S | 1 + 3 files changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index cba504e..20b3dc0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2016-06-07 Joseph Myers + [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 fb7a71b..decda41 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 dc5ca51..ecfba3a 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) -- 2.7.4