summaryrefslogtreecommitdiff
path: root/libc/math/w_exp2l.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/math/w_exp2l.c')
-rw-r--r--libc/math/w_exp2l.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/libc/math/w_exp2l.c b/libc/math/w_exp2l.c
index fea5425ac..ac8d231e2 100644
--- a/libc/math/w_exp2l.c
+++ b/libc/math/w_exp2l.c
@@ -4,28 +4,20 @@
#include <float.h>
#include <math.h>
-#include "math_private.h"
+#include <math_private.h>
static const long double o_threshold = (long double) LDBL_MAX_EXP;
static const long double u_threshold
= (long double) (LDBL_MIN_EXP - LDBL_MANT_DIG - 1);
long double
-__exp2l (long double x) /* wrapper exp2l */
+__exp2l (long double x)
{
-#ifdef _IEEE_LIBM
+ if (__builtin_expect (x <= u_threshold || x > o_threshold, 0)
+ && _LIB_VERSION != _IEEE_ && __finitel (x))
+ /* exp2 overflow: 244, exp2 underflow: 245 */
+ return __kernel_standard (x, x, 244 + (x <= o_threshold));
+
return __ieee754_exp2l (x);
-#else
- long double z;
- z = __ieee754_exp2l (x);
- if (_LIB_VERSION != _IEEE_ && __finitel (x))
- {
- if (x > o_threshold)
- return __kernel_standard (x, x, 244); /* exp2l overflow */
- else if (x <= u_threshold)
- return __kernel_standard (x, x, 245); /* exp2l underflow */
- }
- return z;
-#endif
}
weak_alias (__exp2l, exp2l)