[PATCH] Add branch prediction favouring normal numbers

Siddhesh Poyarekar siddhesh@redhat.com
Wed Dec 26 10:37:00 GMT 2012


Hi,

Attached patch adds branch prediction to the mp to double conversion
code to favour normal numbers.  This speeds up code by about a tenth
of a second when tested using the program in the following blog:

http://entropymine.com/imageworsener/slowpow/

as follows:

time ./powtest 1000000 1.0000000000000020 1.5000000000500000

Tested to verify that this does not cause regressions on x86_64.  OK
for 2.18?

Siddhesh

ChangeLog:

	* sysdeps/ieee754/dbl-64/mpa.c (__mp_dbl): Favour normal
	numbers.

diff --git a/sysdeps/ieee754/dbl-64/mpa.c b/sysdeps/ieee754/dbl-64/mpa.c
index 1c93bdc..12e9dda 100644
--- a/sysdeps/ieee754/dbl-64/mpa.c
+++ b/sysdeps/ieee754/dbl-64/mpa.c
@@ -248,9 +248,10 @@ void __mp_dbl(const mp_no *x, double *y, int p) {
 
   if (X[0] == ZERO)  {*y = ZERO;  return; }
 
-  if      (EX> -42)                 norm(x,y,p);
-  else if (EX==-42 && X[1]>=TWO10)  norm(x,y,p);
-  else                              denorm(x,y,p);
+  if (__builtin_expect (EX> -42 || (EX==-42 && X[1]>=TWO10), 1))
+    norm(x,y,p);
+  else
+    denorm(x,y,p);
 }
 #endif
 



More information about the Libc-alpha mailing list