From 99ce7b04edf17821a6abd19844f10e8c1cd3c724 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 17 Oct 2011 23:16:34 -0400 Subject: Small optimization of generic exp2 --- sysdeps/ieee754/dbl-64/e_exp2.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'sysdeps') 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; -- cgit v1.2.3