Don't raise FE_INVALID when argument is qNaN.
authordrepper <drepper>
Thu, 15 Mar 2007 20:10:43 +0000 (20:10 +0000)
committerdrepper <drepper>
Thu, 15 Mar 2007 20:10:43 +0000 (20:10 +0000)
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 5604e63..ce55b72 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 128bb27..cd4538b 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 5023d30..551dcf1 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 b4343be..633234b 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 7a89b94..f04d30a 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 a0bed66..2ba91ee 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 7fbd0e5..ac2bd22 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