This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.14-357-g38ad40c


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  38ad40ceca8ba35761e79cfce4aaef0d0f7583e6 (commit)
      from  396a21b1d016c52e011f8921e0728aa62a1e9df0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=38ad40ceca8ba35761e79cfce4aaef0d0f7583e6

commit 38ad40ceca8ba35761e79cfce4aaef0d0f7583e6
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Fri Oct 14 23:41:47 2011 -0400

    Optimize x86-32 log

diff --git a/ChangeLog b/ChangeLog
index 499050b..e2d6f38 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2011-10-14  Ulrich Drepper  <drepper@gmail.com>
 
+	* sysdeps/i386/fpu/e_log.S: Add real definition of __log_finite.
+	* sysdeps/i386/fpu/e_logf.S: Add real definition of __logf_finite.
+	* sysdeps/i386/fpu/e_logl.S: Add real definition of __logl_finite.
+	* sysdeps/i386/i686/fpu/e_log.S: New file.
+	* sysdeps/i386/i686/fpu/e_logf.S: New file.
+	* sysdeps/i386/i686/fpu/e_logl.S: New file.
+
 	* ctype/ctype.h: Add support for inlined isXXX functions when
 	compiling C++ code.
 
diff --git a/sysdeps/i386/fpu/e_log.S b/sysdeps/i386/fpu/e_log.S
index 8110a84..a2e4d89 100644
--- a/sysdeps/i386/fpu/e_log.S
+++ b/sysdeps/i386/fpu/e_log.S
@@ -62,4 +62,22 @@ ENTRY(__ieee754_log)
 	fstp	%st(1)
 	ret
 END (__ieee754_log)
-strong_alias (__ieee754_log, __log_finite)
+
+ENTRY(__log_finite)
+	fldln2			// log(2)
+	fldl	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)
+	fcompl	MO(limit)	// x-1 : x : log(2)
+	fnstsw			// x-1 : x : log(2)
+	andb	$0x45, %ah
+	jz	2b
+	fstp	%st(1)		// x-1 : log(2)
+	fyl2xp1			// log(x)
+	ret
+END(__log_finite)
diff --git a/sysdeps/i386/fpu/e_logf.S b/sysdeps/i386/fpu/e_logf.S
index b683e13..1992cc2 100644
--- a/sysdeps/i386/fpu/e_logf.S
+++ b/sysdeps/i386/fpu/e_logf.S
@@ -63,4 +63,22 @@ ENTRY(__ieee754_logf)
 	fstp	%st(1)
 	ret
 END (__ieee754_logf)
-strong_alias (__ieee754_logf, __logf_finite)
+
+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)
+	fcompl	MO(limit)	// x-1 : x : log(2)
+	fnstsw			// x-1 : x : log(2)
+	andb	$0x45, %ah
+	jz	2b
+	fstp	%st(1)		// x-1 : log(2)
+	fyl2xp1			// log(x)
+	ret
+END(__logf_finite)
diff --git a/sysdeps/i386/fpu/e_logl.S b/sysdeps/i386/fpu/e_logl.S
index ee1fb16..bfb72a3 100644
--- a/sysdeps/i386/fpu/e_logl.S
+++ b/sysdeps/i386/fpu/e_logl.S
@@ -63,4 +63,22 @@ ENTRY(__ieee754_logl)
 	fstp	%st(1)
 	ret
 END (__ieee754_logl)
-strong_alias (__ieee754_logl, __logl_finite)
+
+ENTRY(__logl_finite)
+	fldln2			// log(2)
+	fldt	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)
+	fcompl	MO(limit)	// x-1 : x : log(2)
+	fnstsw			// x-1 : x : log(2)
+	andb	$0x45, %ah
+	jz	2b
+	fstp	%st(1)		// x-1 : log(2)
+	fyl2xp1			// log(x)
+	ret
+END(__logl_finite)
diff --git a/sysdeps/i386/fpu/e_log.S b/sysdeps/i386/i686/fpu/e_log.S
similarity index 59%
copy from sysdeps/i386/fpu/e_log.S
copy to sysdeps/i386/i686/fpu/e_log.S
index 8110a84..c6524b1 100644
--- a/sysdeps/i386/fpu/e_log.S
+++ b/sysdeps/i386/i686/fpu/e_log.S
@@ -3,6 +3,7 @@
  * Public domain.
  *
  * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
+ * Adapted for i686 instructions.
  */
 
 #include <machine/asm.h>
@@ -34,21 +35,19 @@ limit:	.double 0.29
 ENTRY(__ieee754_log)
 	fldln2			// log(2)
 	fldl	4(%esp)		// x : log(2)
-	fxam
-	fnstsw
+	fucomi	%st
+	jp	3f
 #ifdef PIC
 	LOAD_PIC_REG (dx)
 #endif
 	fld	%st		// x : x : log(2)
-	sahf
-	jc	3f		// in case x is NaN or +-Inf
-4:	fsubl	MO(one)		// x-1 : 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)
-	fcompl	MO(limit)	// x-1 : x : log(2)
-	fnstsw			// x-1 : x : log(2)
-	andb	$0x45, %ah
-	jz	2f
+	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
@@ -57,9 +56,25 @@ ENTRY(__ieee754_log)
 	fyl2x			// log(x)
 	ret
 
-3:	jp	4b		// in case x is +-Inf
-	fstp	%st(1)
-	fstp	%st(1)
+3:	fstp	%st(1)
 	ret
 END (__ieee754_log)
-strong_alias (__ieee754_log, __log_finite)
+
+ENTRY(__log_finite)
+	fldln2			// log(2)
+	fldl	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)
+	ret
+END(__log_finite)
diff --git a/sysdeps/i386/fpu/e_logf.S b/sysdeps/i386/i686/fpu/e_logf.S
similarity index 60%
copy from sysdeps/i386/fpu/e_logf.S
copy to sysdeps/i386/i686/fpu/e_logf.S
index b683e13..64f8807 100644
--- a/sysdeps/i386/fpu/e_logf.S
+++ b/sysdeps/i386/i686/fpu/e_logf.S
@@ -4,6 +4,7 @@
  * 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>
@@ -35,21 +36,19 @@ limit:	.double 0.29
 ENTRY(__ieee754_logf)
 	fldln2			// log(2)
 	flds	4(%esp)		// x : log(2)
-	fxam
-	fnstsw
+	fucomi	%st
+	jp	3f
 #ifdef PIC
 	LOAD_PIC_REG (dx)
 #endif
 	fld	%st		// x : x : log(2)
-	sahf
-	jc	3f		// in case x is NaN or +-Inf
-4:	fsubl	MO(one)		// x-1 : 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)
-	fcompl	MO(limit)	// x-1 : x : log(2)
-	fnstsw			// x-1 : x : log(2)
-	andb	$0x45, %ah
-	jz	2f
+	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
@@ -58,9 +57,25 @@ ENTRY(__ieee754_logf)
 	fyl2x			// log(x)
 	ret
 
-3:	jp	4b		// in case x is +-Inf
-	fstp	%st(1)
-	fstp	%st(1)
+3:	fstp	%st(1)
 	ret
 END (__ieee754_logf)
-strong_alias (__ieee754_logf, __logf_finite)
+
+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)
+	ret
+END(__logf_finite)
diff --git a/sysdeps/i386/fpu/e_logl.S b/sysdeps/i386/i686/fpu/e_logl.S
similarity index 57%
copy from sysdeps/i386/fpu/e_logl.S
copy to sysdeps/i386/i686/fpu/e_logl.S
index ee1fb16..4e79a5a 100644
--- a/sysdeps/i386/fpu/e_logl.S
+++ b/sysdeps/i386/i686/fpu/e_logl.S
@@ -3,11 +3,12 @@
  * Public domain.
  *
  * Adapted for `long double' 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
@@ -35,21 +36,19 @@ limit:	.double 0.29
 ENTRY(__ieee754_logl)
 	fldln2			// log(2)
 	fldt	4(%esp)		// x : log(2)
-	fxam
-	fnstsw
+	fucomi	%st
+	jp	3f
 #ifdef PIC
 	LOAD_PIC_REG (dx)
 #endif
 	fld	%st		// x : x : log(2)
-	sahf
-	jc	3f		// in case x is NaN or +-Inf
-4:	fsubl	MO(one)		// x-1 : 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)
-	fcompl	MO(limit)	// x-1 : x : log(2)
-	fnstsw			// x-1 : x : log(2)
-	andb	$0x45, %ah
-	jz	2f
+	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
@@ -58,9 +57,25 @@ ENTRY(__ieee754_logl)
 	fyl2x			// log(x)
 	ret
 
-3:	jp	4b		// in case x is +-Inf
-	fstp	%st(1)
-	fstp	%st(1)
+3:	fstp	%st(1)
 	ret
 END (__ieee754_logl)
-strong_alias (__ieee754_logl, __logl_finite)
+
+ENTRY(__logl_finite)
+	fldln2			// log(2)
+	fldt	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)
+	ret
+END(__logl_finite)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    7 +++
 sysdeps/i386/fpu/e_log.S                           |   20 +++++++-
 sysdeps/i386/fpu/e_logf.S                          |   20 +++++++-
 sysdeps/i386/fpu/e_logl.S                          |   20 +++++++-
 .../{x86_64/fpu/e_logl.S => i386/i686/fpu/e_log.S} |   55 ++++++++++----------
 sysdeps/i386/{ => i686}/fpu/e_logf.S               |   41 ++++++++++-----
 sysdeps/{x86_64 => i386/i686}/fpu/e_logl.S         |   48 +++++++++---------
 7 files changed, 143 insertions(+), 68 deletions(-)
 copy sysdeps/{x86_64/fpu/e_logl.S => i386/i686/fpu/e_log.S} (59%)
 copy sysdeps/i386/{ => i686}/fpu/e_logf.S (60%)
 copy sysdeps/{x86_64 => i386/i686}/fpu/e_logl.S (64%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]