]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
2007-03-15 Jakub Jelinek <jakub@redhat.com>
authorJakub Jelinek <jakub@redhat.com>
Thu, 12 Jul 2007 14:58:36 +0000 (14:58 +0000)
committerJakub Jelinek <jakub@redhat.com>
Thu, 12 Jul 2007 14:58:36 +0000 (14:58 +0000)
[BZ #3919]
* math/libm-test.inc (log_test): Test -Inf and NaN.
(log10_test, log1p_test, log2_test): Test -Inf.
* sysdeps/i386/fpu/e_log.S (__ieee754_log): Don't raise
FE_INVALID when argument is qNaN.
* sysdeps/i386/fpu/e_logl.S (__ieee754_logl): Likewise.
* sysdeps/i386/fpu/e_logf.S (__ieee754_logf): Likewise.
* sysdeps/x86_64/fpu/e_logl.S (__ieee754_logl): Likewise.
* sysdeps/x86_64/fpu/e_log10l.S (__ieee754_log10l): Replace
andb $1, %ah with testb $1, %ah, don't test for parity, instead
testb $4, %ah and jump if non-zero.
* sysdeps/x86_64/fpu/e_log2l.S (__ieee754_log2l): Likewise.
* sysdeps/x86_64/fpu/s_log1pl.S (__log1pl): Likewise.

ChangeLog
math/libm-test.inc
sysdeps/i386/fpu/e_log.S
sysdeps/i386/fpu/e_logf.S
sysdeps/i386/fpu/e_logl.S
sysdeps/x86_64/fpu/e_log10l.S
sysdeps/x86_64/fpu/e_log2l.S
sysdeps/x86_64/fpu/e_logl.S
sysdeps/x86_64/fpu/s_log1pl.S

index 823115c96ee455a99882671f0d7f7b2a86555c11..a5099e0c390569b6cca4befc8a06346c8f46b65f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2007-03-15  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #3919]
+       * math/libm-test.inc (log_test): Test -Inf and NaN.
+       (log10_test, log1p_test, log2_test): Test -Inf.
+       * sysdeps/i386/fpu/e_log.S (__ieee754_log): Don't raise
+       FE_INVALID when argument is qNaN.
+       * sysdeps/i386/fpu/e_logl.S (__ieee754_logl): Likewise.
+       * sysdeps/i386/fpu/e_logf.S (__ieee754_logf): Likewise.
+       * sysdeps/x86_64/fpu/e_logl.S (__ieee754_logl): Likewise.
+       * sysdeps/x86_64/fpu/e_log10l.S (__ieee754_log10l): Replace
+       andb $1, %ah with testb $1, %ah, don't test for parity, instead
+       testb $4, %ah and jump if non-zero.
+       * sysdeps/x86_64/fpu/e_log2l.S (__ieee754_log2l): Likewise.
+       * sysdeps/x86_64/fpu/s_log1pl.S (__log1pl): Likewise.
+
 2007-03-06  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/posix/getaddrinfo.c (get_scope): Correct test for
index 972309f85f0ee37aa19827f1a85db613fef51234..81dd364f77ffb66f3a6e02ff24261a95661b147c 100644 (file)
@@ -4127,7 +4127,9 @@ log_test (void)
   TEST_f_f (log, 1, 0);
 
   TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
+  TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
   TEST_f_f (log, plus_infty, plus_infty);
+  TEST_f_f (log, nan_value, nan_value);
 
   TEST_f_f (log, M_El, 1);
   TEST_f_f (log, 1.0 / M_El, -1);
@@ -4157,6 +4159,7 @@ log10_test (void)
 
   /* log10 (x) == NaN plus invalid exception if x < 0.  */
   TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
+  TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
 
   TEST_f_f (log10, plus_infty, plus_infty);
   TEST_f_f (log10, nan_value, nan_value);
@@ -4188,6 +4191,7 @@ log1p_test (void)
 
   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
   TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
+  TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
 
   TEST_f_f (log1p, plus_infty, plus_infty);
   TEST_f_f (log1p, nan_value, nan_value);
@@ -4218,6 +4222,7 @@ log2_test (void)
   TEST_f_f (log2, 1, 0);
 
   TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
+  TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
 
   TEST_f_f (log2, plus_infty, plus_infty);
   TEST_f_f (log2, nan_value, nan_value);
index 5604e638f5f8eb4bc0c8ba6e0adc742db94e8299..ce55b72292ecccee37e977640d8e956edb81630c 100644 (file)
@@ -36,11 +36,15 @@ limit:      .double 0.29
 ENTRY(__ieee754_log)
        fldln2                  // log(2)
        fldl    4(%esp)         // x : log(2)
+       fxam
+       fnstsw
 #ifdef PIC
        LOAD_PIC_REG (dx)
 #endif
        fld     %st             // x : x : log(2)
-       fsubl   MO(one)         // x-1 : x : log(2)
+       sahf
+       jc      3f              // in case x is NaN or +-Inf
+4:     fsubl   MO(one)         // x-1 : x : log(2)
        fld     %st             // x-1 : x-1 : x : log(2)
        fabs                    // |x-1| : x-1 : x : log(2)
        fcompl  MO(limit)       // x-1 : x : log(2)
@@ -54,4 +58,9 @@ ENTRY(__ieee754_log)
 2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
+
+3:     jp      4b              // in case x is +-Inf
+       fstp    %st(1)
+       fstp    %st(1)
+       ret
 END (__ieee754_log)
index 128bb2754c414f9639fa1f82d3364459903e74e2..cd4538b594ed0704b62df209b1e7b529d9667f9d 100644 (file)
@@ -37,11 +37,15 @@ limit:      .double 0.29
 ENTRY(__ieee754_logf)
        fldln2                  // log(2)
        flds    4(%esp)         // x : log(2)
+       fxam
+       fnstsw
 #ifdef PIC
        LOAD_PIC_REG (dx)
 #endif
        fld     %st             // x : x : log(2)
-       fsubl   MO(one)         // x-1 : x : log(2)
+       sahf
+       jc      3f              // in case x is NaN or +-Inf
+4:     fsubl   MO(one)         // x-1 : x : log(2)
        fld     %st             // x-1 : x-1 : x : log(2)
        fabs                    // |x-1| : x-1 : x : log(2)
        fcompl  MO(limit)       // x-1 : x : log(2)
@@ -55,4 +59,9 @@ ENTRY(__ieee754_logf)
 2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
+
+3:     jp      4b              // in case x is +-Inf
+       fstp    %st(1)
+       fstp    %st(1)
+       ret
 END (__ieee754_logf)
index 5023d3012ffade32d472c1906cfef25002758452..551dcf1e464363845ad2eca986bfd3b8e94a0773 100644 (file)
@@ -37,11 +37,15 @@ limit:      .double 0.29
 ENTRY(__ieee754_logl)
        fldln2                  // log(2)
        fldt    4(%esp)         // x : log(2)
+       fxam
+       fnstsw
 #ifdef PIC
        LOAD_PIC_REG (dx)
 #endif
        fld     %st             // x : x : log(2)
-       fsubl   MO(one)         // x-1 : x : log(2)
+       sahf
+       jc      3f              // in case x is NaN or +-Inf
+4:     fsubl   MO(one)         // x-1 : x : log(2)
        fld     %st             // x-1 : x-1 : x : log(2)
        fabs                    // |x-1| : x-1 : x : log(2)
        fcompl  MO(limit)       // x-1 : x : log(2)
@@ -55,4 +59,9 @@ ENTRY(__ieee754_logl)
 2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
+
+3:     jp      4b              // in case x is +-Inf
+       fstp    %st(1)
+       fstp    %st(1)
+       ret
 END (__ieee754_logl)
index b4343bef4570ae0e97dc7247c972712e87d2f117..633234b74431c4f64e4c79958b97087a28761614 100644 (file)
@@ -42,7 +42,7 @@ ENTRY(__ieee754_log10l)
        fxam
        fnstsw
        fld     %st             // x : x : log10(2)
-       andb    $1,%ah
+       testb   $1, %ah
        jnz     3f              // in case x is NaN or ±Inf
 4:     fsubl   MO(one)         // x-1 : x : log10(2)
        fld     %st             // x-1 : x-1 : x : log10(2)
@@ -59,7 +59,8 @@ ENTRY(__ieee754_log10l)
        fyl2x                   // log10(x)
        ret
 
-3:     jp      4b              // in case x is ±Inf
+3:     testb   $4, %ah
+       jnz     4b              // in case x is ±Inf
        fstp    %st(1)
        fstp    %st(1)
        ret
index 7a89b94d9f0a8f5d3cb3473182ab5632f713bf09..f04d30a05a0ef5d63deb8d1f0c9d106e532a1030 100644 (file)
@@ -39,7 +39,7 @@ ENTRY(__ieee754_log2l)
        fxam
        fnstsw
        fld     %st             // x : x : 1
-       andb    $1,%ah
+       testb   $1, %ah
        jnz     3f              // in case x is NaN or ±Inf
 4:     fsub    %st(2), %st     // x-1 : x : 1
        fld     %st             // x-1 : x-1 : x : 1
@@ -56,7 +56,8 @@ ENTRY(__ieee754_log2l)
        fyl2x                   // log(x)
        ret
 
-3:     jp      4b              // in case x is ±Inf
+3:     testb   $4, %ah
+       jnz     4b              // in case x is ±Inf
        fstp    %st(1)
        fstp    %st(1)
        ret
index a0bed663c848dfca13e36132f2d416ccf160bdba..2ba91eedfdc365a9744078c01b6490388381a1c9 100644 (file)
@@ -38,8 +38,12 @@ limit:       .double 0.29
 ENTRY(__ieee754_logl)
        fldln2                  // log(2)
        fldt    8(%rsp)         // x : log(2)
+       fxam
+       fnstsw
        fld     %st             // x : x : log(2)
-       fsubl   MO(one)         // x-1 : x : log(2)
+       testb   $1, %ah
+       jnz     3f              // in case x is NaN or +-Inf
+4:     fsubl   MO(one)         // x-1 : x : log(2)
        fld     %st             // x-1 : x-1 : x : log(2)
        fabs                    // |x-1| : x-1 : x : log(2)
        fcompl  MO(limit)       // x-1 : x : log(2)
@@ -53,4 +57,10 @@ ENTRY(__ieee754_logl)
 2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
+
+3:     testb   $4, %ah
+       jnz     4b              // in case x is +-Inf
+       fstp    %st(1)
+       fstp    %st(1)
+       ret
 END (__ieee754_logl)
index 7fbd0e5aaad08ef1a2b9cf52c7700b94f6c185aa..ac2bd22a4fc5fc31b758beafff689fb73fe070a2 100644 (file)
@@ -45,7 +45,7 @@ ENTRY(__log1pl)
        fxam
        fnstsw
        fld     %st
-       andb    $1,%ah
+       testb   $1, %ah
        jnz     3f              // in case x is NaN or ±Inf
 4:
        fabs
@@ -62,7 +62,8 @@ ENTRY(__log1pl)
 2:     fyl2xp1
        ret
 
-3:     jp      4b              // in case x is ±Inf
+3:     testb   $4, %ah
+       jnz     4b              // in case x is ±Inf
        fstp    %st(1)
        fstp    %st(1)
        ret