Small optimization of generic exp2

This commit is contained in:
Ulrich Drepper 2011-10-17 23:16:34 -04:00
parent 1004d1821e
commit 99ce7b04ed
2 changed files with 14 additions and 11 deletions

View File

@ -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

View 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;