exp.s 1.5 KB
Newer Older
R
Rich Felker 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
.global expm1f
.type expm1f,@function
expm1f:
	flds 4(%esp)
	jmp 1f

.global expm1l
.type expm1l,@function
expm1l:
	fldt 4(%esp)
	jmp 1f

.global expm1
.type expm1,@function
expm1:
	fldl 4(%esp)
1:	fldl2e
	fmulp
	fld1
	fld %st(1)
	fabs
	fucom %st(1)
	fnstsw %ax
	fstp %st(0)
	fstp %st(0)
	sahf
	ja 1f
	f2xm1
	ret
1:	call 1f
	fld1
	fsubrp
	ret

R
Rich Felker 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
.global exp2f
.type exp2f,@function
exp2f:
	flds 4(%esp)
	jmp 1f

.global exp2l
.type exp2l,@function
exp2l:
	fldt 4(%esp)
	jmp 1f

.global expf
.type expf,@function
expf:
	flds 4(%esp)
	jmp 2f

.global expl
.type expl,@function
expl:
	fldt 4(%esp)
	jmp 2f

.global exp
.type exp,@function
exp:
	fldl 4(%esp)
2:	fldl2e
	fmulp
	jmp 1f

.global exp2
.type exp2,@function
exp2:
	fldl 4(%esp)
R
Rich Felker 已提交
71
1:	pushl $0x467ff000
72
	flds (%esp)       # 16380
R
Rich Felker 已提交
73 74
	xorl %eax,%eax
	pushl $0x80000000
R
Rich Felker 已提交
75 76 77
	push %eax
	fld %st(1)
	fabs
78
	fucomp %st(1)
R
Rich Felker 已提交
79 80
	fnstsw
	fstp %st(0)
R
Rich Felker 已提交
81
	sahf
82 83
	ja 3f             # |x| > 16380
	jp 2f             # x is nan (avoid invalid except in fistp)
R
Rich Felker 已提交
84 85 86
	fld %st(0)
	fistpl 8(%esp)
	fildl 8(%esp)
R
Rich Felker 已提交
87 88
	fxch %st(1)
	fsub %st(1)
R
Rich Felker 已提交
89 90
	mov $0x3fff,%eax
	add %eax,8(%esp)
R
Rich Felker 已提交
91 92
	f2xm1
	fld1
93 94
	faddp             # 2^(x-rint(x))
	fldt (%esp)       # 2^rint(x)
R
Rich Felker 已提交
95
	fmulp
R
Rich Felker 已提交
96
	fstp %st(1)
97
2:	add $12,%esp
R
Rich Felker 已提交
98 99
	ret

100
3:	fld %st(0)
R
Rich Felker 已提交
101
	fstpt (%esp)
102 103 104 105 106 107
	fld1
	mov 8(%esp),%ax
	and $0x7fff,%ax
	cmp $0x7fff,%ax
	je 1f             # x = +-inf
	fld %st(1)
R
Rich Felker 已提交
108
	frndint
109 110
	fxch %st(2)
	fsub %st(2)       # st(0)=x-rint(x), st(1)=1, st(2)=rint(x)
R
Rich Felker 已提交
111
	f2xm1
112 113
	faddp             # 2^(x-rint(x))
1:	fscale
R
Rich Felker 已提交
114 115
	fstp %st(1)
	add $12,%esp
R
Rich Felker 已提交
116
	ret