Fix i386/x86_64 log10l (sNaN) (bug 20228).
authorJoseph Myers <joseph@codesourcery.com>
Wed, 8 Jun 2016 22:59:18 +0000 (22:59 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 8 Jun 2016 22:59:18 +0000 (22:59 +0000)
The i386/x86_64 versions of log10l return sNaN for sNaN input.  This
patch fixes them to add a NaN input to itself so that qNaN is returned
in this case.

Tested for x86_64 and x86.

[BZ #20228]
* sysdeps/i386/fpu/e_log10l.S (__ieee754_log10l): Add NaN input to
itself.
* sysdeps/x86_64/fpu/e_log10l.S (__ieee754_log10l): Likewise.
* math/libm-test.inc (log10_test_data): Add sNaN tests.

ChangeLog
math/libm-test.inc
sysdeps/i386/fpu/e_log10l.S
sysdeps/x86_64/fpu/e_log10l.S

index 82c698d..42d296c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2016-06-08  Joseph Myers  <joseph@codesourcery.com>
 
+       [BZ #20228]
+       * sysdeps/i386/fpu/e_log10l.S (__ieee754_log10l): Add NaN input to
+       itself.
+       * sysdeps/x86_64/fpu/e_log10l.S (__ieee754_log10l): Likewise.
+       * math/libm-test.inc (log10_test_data): Add sNaN tests.
+
        [BZ #20227]
        * sysdeps/i386/fpu/e_logl.S (__ieee754_logl): Add NaN input to
        itself.
index c16009b..e2a4ed3 100644 (file)
@@ -9026,6 +9026,8 @@ static const struct test_f_f_data log10_test_data[] =
     TEST_f_f (log10, plus_infty, plus_infty, ERRNO_UNCHANGED),
     TEST_f_f (log10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
     TEST_f_f (log10, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_f (log10, snan_value, qnan_value, INVALID_EXCEPTION),
+    TEST_f_f (log10, -snan_value, qnan_value, INVALID_EXCEPTION),
 
     AUTO_TESTS_f_f (log10),
   };
index 45b9c6d..9326b19 100644 (file)
@@ -65,6 +65,7 @@ ENTRY(__ieee754_log10l)
 3:     jp      4b              // in case x is ±Inf
        fstp    %st(1)
        fstp    %st(1)
+       fadd    %st(0)
        ret
 END(__ieee754_log10l)
 strong_alias (__ieee754_log10l, __log10l_finite)
index 8fa6164..e0cb88e 100644 (file)
@@ -64,6 +64,7 @@ ENTRY(__ieee754_log10l)
        jnz     4b              // in case x is ±Inf
        fstp    %st(1)
        fstp    %st(1)
+       fadd    %st(0)
        ret
 END(__ieee754_log10l)