summaryrefslogtreecommitdiff
path: root/sysdeps/libm-i387/e_exp.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/libm-i387/e_exp.S')
-rw-r--r--sysdeps/libm-i387/e_exp.S17
1 files changed, 10 insertions, 7 deletions
diff --git a/sysdeps/libm-i387/e_exp.S b/sysdeps/libm-i387/e_exp.S
index 3ed039bc87..144748e820 100644
--- a/sysdeps/libm-i387/e_exp.S
+++ b/sysdeps/libm-i387/e_exp.S
@@ -10,12 +10,15 @@ RCSID("$NetBSD: e_exp.S,v 1.4 1995/05/08 23:47:04 jtc Exp $")
/* e^x = 2^(x * log2(e)) */
ENTRY(__ieee754_exp)
fldl 4(%esp)
- fxam
+/* I added the following ugly construct because exp(+-Inf) resulted
+ in NaN. The ugliness results from the bright minds at Intel.
+ -- drepper@cygnus.com. */
+ fxam /* Is NaN or +-Inf? */
fstsw %ax
sahf
- jnc .LnoInf
- jp .LisInf
-.LnoInf:
+ jnc .LnoInfNaN /* No, jump. */
+ jp .LisInf /* Is +-Inf, jump. */
+.LnoInfNaN:
fldl2e
fmulp /* x * log2(e) */
fstl %st(1)
@@ -29,7 +32,7 @@ ENTRY(__ieee754_exp)
ret
.LisInf:
- andb $2, %ah
- jz .LpInf
- fldz
+ andb $2, %ah /* Test sign. */
+ jz .LpInf /* If positive, jump. */
+ fldz /* Set result to 0. */
.LpInf: ret