summaryrefslogtreecommitdiff
path: root/sys/src/libc/386/387/exp.s
blob: 0c73465ab41dc9786dfd2bee6761817727ef487c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
TEXT	exp(SB), $0
	FLDL2E
	FMULD	a+0(FP), F0	/* now we want 2^ this number */

	FMOVD	F0, F0		/* x, x */
	FRNDINT			/* ix, x -- this is best in round mode */
	FSUBD	F0, F1		/* ix, fx */
	FXCHD	F0, F1		/* fx, ix */
	F2XM1			/* 2^fx-1, ix */
	FADDD	$1.0, F0	/* 2^fx, ix */
	FSCALE			/* 2^(fx+ix), ix */
	FMOVDP	F0, F1		/* 2^(fx+ix) == 2^x */
	RET