2.5-18.1
[jlayton/glibc.git] / sysdeps / i386 / fpu / e_logf.S
index bdba1d3225479e63d73f309f243ed899ad914d3d..cd4538b594ed0704b62df209b1e7b529d9667f9d 100644 (file)
@@ -37,13 +37,15 @@ limit:      .double 0.29
 ENTRY(__ieee754_logf)
        fldln2                  // log(2)
        flds    4(%esp)         // x : log(2)
+       fxam
+       fnstsw
 #ifdef PIC
-       call    1f
-1:     popl    %edx
-       addl    $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
+       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)
@@ -57,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)