Small optimization of generic exp2
authorUlrich Drepper <drepper@gmail.com>
Tue, 18 Oct 2011 03:16:34 +0000 (23:16 -0400)
committerUlrich Drepper <drepper@gmail.com>
Tue, 18 Oct 2011 03:16:34 +0000 (23:16 -0400)
ChangeLog
sysdeps/ieee754/dbl-64/e_exp2.c

index c47826c..ad7db01 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2011-10-17  Ulrich Drepper  <drepper@gmail.com>
 
+       * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Small optimization.
+
        * sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c: New file.
 
        * sysdeps/x86_64/fpu/math_private.h: Relax asm requirements for
index 674cdb0..c973f35 100644 (file)
@@ -53,8 +53,19 @@ __ieee754_exp2 (double x)
   static const double lomark = (double) (DBL_MIN_EXP - DBL_MANT_DIG - 1);
 
   /* Check for usual case.  */
-  if (isless (x, himark) && isgreaterequal (x, lomark))
+  if (__builtin_expect (isless (x, himark), 1))
     {
+      /* Exceptional cases:  */
+      if (__builtin_expect (! isgreaterequal (x, lomark), 0))
+       {
+         if (__isinf (x))
+           /* e^-inf == 0, with no error.  */
+           return 0;
+         else
+           /* Underflow */
+           return TWOM1000 * TWOM1000;
+       }
+
       static const double THREEp42 = 13194139533312.0;
       int tval, unsafe;
       double rx, x22, result;
@@ -120,16 +131,6 @@ __ieee754_exp2 (double x)
       else
        return result * scale_u.d;
     }
-  /* Exceptional cases:  */
-  else if (isless (x, himark))
-    {
-      if (__isinf (x))
-       /* e^-inf == 0, with no error.  */
-       return 0;
-      else
-       /* Underflow */
-       return TWOM1000 * TWOM1000;
-    }
   else
     /* Return x, if x is a NaN or Inf; or overflow, otherwise.  */
     return TWO1023*x;