diff options
author | Ulrich Drepper <drepper@gmail.com> | 2011-10-17 23:16:34 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-10-17 23:16:34 -0400 |
commit | 99ce7b04edf17821a6abd19844f10e8c1cd3c724 (patch) | |
tree | 93ebc971f19e0894419058dd8891ee766177ae9e /sysdeps/ieee754/dbl-64/e_exp2.c | |
parent | 1004d1821ea9093f6b75e68047dc0b3d093578f7 (diff) | |
download | glibc-99ce7b04edf17821a6abd19844f10e8c1cd3c724.tar.gz glibc-99ce7b04edf17821a6abd19844f10e8c1cd3c724.tar.xz glibc-99ce7b04edf17821a6abd19844f10e8c1cd3c724.zip |
Small optimization of generic exp2
Diffstat (limited to 'sysdeps/ieee754/dbl-64/e_exp2.c')
-rw-r--r-- | sysdeps/ieee754/dbl-64/e_exp2.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c index 674cdb058c..c973f35673 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; |