1.global expm1f
2.type expm1f,@function
3expm1f:
4	flds 4(%esp)
5	mov 4(%esp),%eax
6	add %eax,%eax
7	cmp $0x01000000,%eax
8	jae 1f
9		# subnormal x, return x with underflow
10	fnstsw %ax
11	and $16,%ax
12	jnz 2f
13	fld %st(0)
14	fmul %st(1)
15	fstps 4(%esp)
162:	ret
17
18.global expm1l
19.type expm1l,@function
20expm1l:
21	fldt 4(%esp)
22	jmp 1f
23
24.global expm1
25.type expm1,@function
26expm1:
27	fldl 4(%esp)
28	mov 8(%esp),%eax
29	add %eax,%eax
30	cmp $0x00200000,%eax
31	jae 1f
32		# subnormal x, return x with underflow
33	fnstsw %ax
34	and $16,%ax
35	jnz 2f
36	fsts 4(%esp)
372:	ret
381:	fldl2e
39	fmulp
40	mov $0xc2820000,%eax
41	push %eax
42	flds (%esp)
43	pop %eax
44	fucomp %st(1)
45	fnstsw %ax
46	sahf
47	fld1
48	jb 1f
49		# x*log2e < -65, return -1 without underflow
50	fstp %st(1)
51	fchs
52	ret
531:	fld %st(1)
54	fabs
55	fucom %st(1)
56	fnstsw %ax
57	fstp %st(0)
58	fstp %st(0)
59	sahf
60	ja 1f
61	f2xm1
62	ret
631:	call 1f
64	fld1
65	fsubrp
66	ret
67
68.global exp2f
69.type exp2f,@function
70exp2f:
71	flds 4(%esp)
72	jmp 1f
73
74.global exp2l
75.global __exp2l
76.hidden __exp2l
77.type exp2l,@function
78exp2l:
79__exp2l:
80	fldt 4(%esp)
81	jmp 1f
82
83.global expf
84.type expf,@function
85expf:
86	flds 4(%esp)
87	jmp 2f
88
89.global exp
90.type exp,@function
91exp:
92	fldl 4(%esp)
932:	fldl2e
94	fmulp
95	jmp 1f
96
97.global exp2
98.type exp2,@function
99exp2:
100	fldl 4(%esp)
1011:	sub $12,%esp
102	fld %st(0)
103	fstpt (%esp)
104	mov 8(%esp),%ax
105	and $0x7fff,%ax
106	cmp $0x3fff+13,%ax
107	jb 4f             # |x| < 8192
108	cmp $0x3fff+15,%ax
109	jae 3f            # |x| >= 32768
110	fsts (%esp)
111	cmpl $0xc67ff800,(%esp)
112	jb 2f             # x > -16382
113	movl $0x5f000000,(%esp)
114	flds (%esp)       # 0x1p63
115	fld %st(1)
116	fsub %st(1)
117	faddp
118	fucomp %st(1)
119	fnstsw
120	sahf
121	je 2f             # x - 0x1p63 + 0x1p63 == x
122	movl $1,(%esp)
123	flds (%esp)       # 0x1p-149
124	fdiv %st(1)
125	fstps (%esp)      # raise underflow
1262:	fld1
127	fld %st(1)
128	frndint
129	fxch %st(2)
130	fsub %st(2)       # st(0)=x-rint(x), st(1)=1, st(2)=rint(x)
131	f2xm1
132	faddp             # 2^(x-rint(x))
1331:	fscale
134	fstp %st(1)
135	add $12,%esp
136	ret
1373:	xor %eax,%eax
1384:	cmp $0x3fff-64,%ax
139	fld1
140	jb 1b             # |x| < 0x1p-64
141	fstpt (%esp)
142	fistl 8(%esp)
143	fildl 8(%esp)
144	fsubrp %st(1)
145	addl $0x3fff,8(%esp)
146	f2xm1
147	fld1
148	faddp             # 2^(x-rint(x))
149	fldt (%esp)       # 2^rint(x)
150	fmulp
151	add $12,%esp
152	ret
153