]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
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 82c698d918e2cb387a3f37268aab47d642284d4d..42d296c93e3956f17a19ceb09152bcbf3b43ee3f 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 c16009b9ae090b6a6184a17e116e100c72a1acde..e2a4ed38bc086b5d3313b38aa317018e69dbcc42 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 45b9c6d21d02d03728f326420225502b2ab456e2..9326b197961abcfb1fbc995d74e07ee05ee43f0b 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 8fa61644c1f677b48477e0cdb41bf40cb0d7be93..e0cb88e32e35d5ff5cb356a8b6d23b7a291d7b93 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)