aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-10-17 23:16:34 -0400
committerUlrich Drepper <drepper@gmail.com>2011-10-17 23:16:34 -0400
commit99ce7b04edf17821a6abd19844f10e8c1cd3c724 (patch)
tree93ebc971f19e0894419058dd8891ee766177ae9e /sysdeps
parent1004d1821ea9093f6b75e68047dc0b3d093578f7 (diff)
downloadglibc-99ce7b04edf17821a6abd19844f10e8c1cd3c724.tar
glibc-99ce7b04edf17821a6abd19844f10e8c1cd3c724.tar.gz
glibc-99ce7b04edf17821a6abd19844f10e8c1cd3c724.tar.bz2
glibc-99ce7b04edf17821a6abd19844f10e8c1cd3c724.zip
Small optimization of generic exp2
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/ieee754/dbl-64/e_exp2.c23
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;