From: Ulrich Drepper Date: Tue, 18 Oct 2011 03:16:34 +0000 (-0400) Subject: Small optimization of generic exp2 X-Git-Tag: glibc-2.15~213 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=99ce7b04edf17821a6abd19844f10e8c1cd3c724;p=platform%2Fupstream%2Fglibc.git Small optimization of generic exp2 --- diff --git a/ChangeLog b/ChangeLog index c47826c..ad7db01 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2011-10-17 Ulrich Drepper + * 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 diff --git a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c index 674cdb0..c973f35 100644 --- a/sysdeps/ieee754/dbl-64/e_exp2.c +++ b/sysdeps/ieee754/dbl-64/e_exp2.c @@ -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;