1/*
2 * Written by J.T. Conklin <jtc@netbsd.org>.
3 * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
4 * Public domain.
5 */
6
7#include <machine/asm.h>
8
9ENTRY(__ieee754_exp2l)
10	fldt	4(%esp)
11/* I added the following ugly construct because exp(+-Inf) resulted
12   in NaN.  The ugliness results from the bright minds at Intel.
13   For the i686 the code can be written better.
14   -- drepper@cygnus.com.  */
15	fxam				/* Is NaN or +-Inf?  */
16	fstsw	%ax
17	movb	$0x45, %dh
18	andb	%ah, %dh
19	cmpb	$0x05, %dh
20	je	1f			/* Is +-Inf, jump.  */
21	fld	%st
22	frndint				/* int(x) */
23	fsubr	%st,%st(1)		/* fract(x) */
24	fxch
25	f2xm1				/* 2^(fract(x)) - 1 */
26	fld1
27	faddp				/* 2^(fract(x)) */
28	fscale				/* e^x */
29	fstp	%st(1)
30	ret
31
321:	testl	$0x200, %eax		/* Test sign.  */
33	jz	2f			/* If positive, jump.  */
34	fstp	%st
35	fldz				/* Set result to 0.  */
362:	ret
37END (__ieee754_exp2l)
38