diff options
Diffstat (limited to 'sysdeps/libm-i387/e_exp.S')
-rw-r--r-- | sysdeps/libm-i387/e_exp.S | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sysdeps/libm-i387/e_exp.S b/sysdeps/libm-i387/e_exp.S index 8c41ce09dd..3ed039bc87 100644 --- a/sysdeps/libm-i387/e_exp.S +++ b/sysdeps/libm-i387/e_exp.S @@ -10,14 +10,26 @@ 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 + fstsw %ax + sahf + jnc .LnoInf + jp .LisInf +.LnoInf: fldl2e fmulp /* x * log2(e) */ fstl %st(1) frndint /* int(x * log2(e)) */ fstl %st(2) fsubrp /* fract(x * log2(e)) */ - f2xm1 /* 2^(fract(x * log2(e))) - 1 */ + f2xm1 /* 2^(fract(x * log2(e))) - 1 */ fld1 faddp /* 2^(fract(x * log2(e))) */ fscale /* e^x */ ret + +.LisInf: + andb $2, %ah + jz .LpInf + fldz +.LpInf: ret |