summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2012-01-09 18:59:04 -0500
committerUlrich Drepper <drepper@gmail.com>2012-01-09 18:59:04 -0500
commitd6e97a1da05c1be8ac4cc2f735a98181c457d90b (patch)
treef0982c62e9e7e2bade0dfb87796c36aa0011f066
parente5f484c622fa0163379b7e577d5b289f0a0b49e7 (diff)
downloadglibc-d6e97a1da05c1be8ac4cc2f735a98181c457d90b.tar.gz
glibc-d6e97a1da05c1be8ac4cc2f735a98181c457d90b.tar.xz
glibc-d6e97a1da05c1be8ac4cc2f735a98181c457d90b.zip
Some branch prediction for log1p
-rw-r--r--ChangeLog4
-rw-r--r--sysdeps/ieee754/dbl-64/s_log1p.c6
2 files changed, 7 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 20358264bd..07fd067f61 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2012-01-09  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/ieee754/dbl-64/s_log1p.c (__log1p): Add branch prediction.
+
 2012-01-08  Ulrich Drepper  <drepper@gmail.com>
 
 	* io/bits/poll2.h: Add __BEGIN/__END_DECLS.
diff --git a/sysdeps/ieee754/dbl-64/s_log1p.c b/sysdeps/ieee754/dbl-64/s_log1p.c
index dc79a02bb3..f82048f204 100644
--- a/sysdeps/ieee754/dbl-64/s_log1p.c
+++ b/sysdeps/ieee754/dbl-64/s_log1p.c
@@ -106,11 +106,11 @@ __log1p(double x)
 
 	k = 1;
 	if (hx < 0x3FDA827A) {			/* x < 0.41422  */
-	    if(ax>=0x3ff00000) {		/* x <= -1.0 */
+	    if(__builtin_expect(ax>=0x3ff00000, 0)) { /* x <= -1.0 */
 		if(x==-1.0) return -two54/(x-x);/* log1p(-1)=+inf */
 		else return (x-x)/(x-x);	/* log1p(x<-1)=NaN */
 	    }
-	    if(ax<0x3e200000) {			/* |x| < 2**-29 */
+	    if(__builtin_expect(ax<0x3e200000, 0)) { /* |x| < 2**-29 */
 		math_force_eval(two54+x);	/* raise inexact */
 		if (ax<0x3c900000)		/* |x| < 2**-54 */
 		    return x;
@@ -120,7 +120,7 @@ __log1p(double x)
 	    if(hx>0||hx<=((int32_t)0xbfd2bec3)) {
 		k=0;f=x;hu=1;}	/* -0.2929<x<0.41422 */
 	}
-	if (hx >= 0x7ff00000) return x+x;
+	else if (__builtin_expect(hx >= 0x7ff00000, 0)) return x+x;
 	if(k!=0) {
 	    if(hx<0x43400000) {
 		u  = 1.0+x;