Merge branch 'vendor/BINUTILS220'
[dragonfly.git] / lib / libm / arch / i386 / e_expf.S
1 /*
2  * Written by J.T. Conklin <jtc@NetBSD.org>.
3  * Public domain.
4  *
5  * $NetBSD: e_expf.S,v 1.5 2003/07/26 19:24:58 salo Exp $
6  * $DragonFly: src/lib/libm/arch/i386/e_expf.S,v 1.1 2005/07/26 21:15:19 joerg Exp $
7  */
8
9 #include <machine/asm.h>
10
11 #include "abi.h"
12
13 /* e^x = 2^(x * log2(e)) */
14 ENTRY(expf)
15         XMM_ONE_ARG_FLOAT_PROLOGUE
16         flds    ARG_FLOAT_ONE
17         fldl2e
18         fmulp                           /* x * log2(e) */
19         fld     %st(0)
20         frndint                         /* int(x * log2(e)) */
21         fsubr   %st(0),%st(1)           /* fract(x * log2(e)) */
22         fxch
23         f2xm1                           /* 2^(fract(x * log2(e))) - 1 */
24         fld1
25         faddp                           /* 2^(fract(x * log2(e))) */
26         fscale                          /* e^x */
27         fstp    %st(1)
28         XMM_FLOAT_EPILOGUE
29         ret