xref: /netbsd-src/lib/libm/arch/i387/e_expf.S (revision 8ac07aec990b9d2e483062509d0a9fa5b4f57cf2)
1/*
2 * Written by J.T. Conklin <jtc@NetBSD.org>.
3 * Public domain.
4 */
5
6#include <machine/asm.h>
7
8#include "abi.h"
9
10
11RCSID("$NetBSD: e_expf.S,v 1.5 2003/07/26 19:24:58 salo Exp $")
12
13/* e^x = 2^(x * log2(e)) */
14ENTRY(__ieee754_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
30