No need for boundary case handling in x86-32 __ieee_logf
authorUlrich Drepper <drepper@gmail.com>
Sat, 15 Oct 2011 22:09:12 +0000 (18:09 -0400)
committerUlrich Drepper <drepper@gmail.com>
Sat, 15 Oct 2011 22:09:12 +0000 (18:09 -0400)
ChangeLog
sysdeps/i386/i686/fpu/e_logf.S

index 3e71646..44580a5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2011-10-15  Ulrich Drepper  <drepper@gmail.com>
 
+       * sysdeps/i386/i686/fpu/e_logf.S: No need for the fyl2xp1 use, fyl2x
+       is sufficient, at least on modern CPUs.
+
        * ctype/ctype-info.c (__ctype_init): Define.
        * include/ctype.h (__ctype_init): Declare.
        (__ctype_b_loc): The variable is always initialized.
index 64f8807..6fd39d5 100644 (file)
@@ -3,34 +3,11 @@
  * Public domain.
  * Adapted for float by Ulrich Drepper <drepper@cygnus.com>.
  *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
  * Adapted for i686 instructions.
  */
 
 #include <machine/asm.h>
 
-#ifdef __ELF__
-       .section .rodata.cst8,"aM",@progbits,8
-#else
-       .text
-#endif
-       .p2align 3
-       ASM_TYPE_DIRECTIVE(one,@object)
-one:   .double 1.0
-       ASM_SIZE_DIRECTIVE(one)
-       /* It is not important that this constant is precise.  It is only
-          a value which is known to be on the safe side for using the
-          fyl2xp1 instruction.  */
-       ASM_TYPE_DIRECTIVE(limit,@object)
-limit: .double 0.29
-       ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
 
        .text
 ENTRY(__ieee754_logf)
@@ -38,22 +15,6 @@ ENTRY(__ieee754_logf)
        flds    4(%esp)         // x : log(2)
        fucomi  %st
        jp      3f
-#ifdef PIC
-       LOAD_PIC_REG (dx)
-#endif
-       fld     %st             // x : x : log(2)
-       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)
-       fld     MO(limit)       // 0.29 : |x-1| : x-1 : x : log(2)
-       fcomip  %st(1)          // |x-1| : x-1 : x : log(2)
-       fstp    %st(0)          // x-1 : x : log(2)
-       jc      2f
-       fstp    %st(1)          // x-1 : log(2)
-       fyl2xp1                 // log(x)
-       ret
-
-2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
 
@@ -64,18 +25,6 @@ END (__ieee754_logf)
 ENTRY(__logf_finite)
        fldln2                  // log(2)
        flds    4(%esp)         // x : log(2)
-#ifdef PIC
-       LOAD_PIC_REG (dx)
-#endif
-       fld     %st             // x : x : log(2)
-       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)
-       fld     MO(limit)       // 0.29 : |x-1| : x-1 : x : log(2)
-       fcomip  %st(1)          // |x-1| : x-1 : x : log(2)
-       fstp    %st(0)          // x-1 : x : log(2)
-       jc      2b
-       fstp    %st(1)          // x-1 : log(2)
-       fyl2xp1                 // log(x)
+       fyl2x                   // log(x)
        ret
 END(__logf_finite)