Wed May 29 12:53:10 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
[glibc.git] / sysdeps / libm-i387 / e_exp.S
blob3ed039bc870429e8045d16cecf8012842bb7bc3d
1 /*
2  * Written by J.T. Conklin <jtc@netbsd.org>.
3  * Public domain.
4  */
6 #include <machine/asm.h>
8 RCSID("$NetBSD: e_exp.S,v 1.4 1995/05/08 23:47:04 jtc Exp $")
10 /* e^x = 2^(x * log2(e)) */
11 ENTRY(__ieee754_exp)
12         fldl    4(%esp)
13         fxam
14         fstsw   %ax
15         sahf
16         jnc     .LnoInf
17         jp      .LisInf
18 .LnoInf:
19         fldl2e
20         fmulp                           /* x * log2(e) */
21         fstl    %st(1)
22         frndint                         /* int(x * log2(e)) */
23         fstl    %st(2)
24         fsubrp                          /* fract(x * log2(e)) */
25         f2xm1                           /* 2^(fract(x * log2(e))) - 1 */
26         fld1
27         faddp                           /* 2^(fract(x * log2(e))) */
28         fscale                          /* e^x */
29         ret
31 .LisInf:
32         andb    $2, %ah
33         jz      .LpInf
34         fldz
35 .LpInf: ret