• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.global expm1l
2.type expm1l,@function
3expm1l:
4	fldt 4(%esp)
5	fldl2e
6	fmulp
7	mov $0xc2820000,%eax
8	push %eax
9	flds (%esp)
10	pop %eax
11	fucomp %st(1)
12	fnstsw %ax
13	sahf
14	fld1
15	jb 1f
16		# x*log2e < -65, return -1 without underflow
17	fstp %st(1)
18	fchs
19	ret
201:	fld %st(1)
21	fabs
22	fucom %st(1)
23	fnstsw %ax
24	fstp %st(0)
25	fstp %st(0)
26	sahf
27	ja 1f
28	f2xm1
29	ret
301:	call 1f
31	fld1
32	fsubrp
33	ret
34
35.global exp2l
36.global __exp2l
37.hidden __exp2l
38.type exp2l,@function
39exp2l:
40__exp2l:
41	fldt 4(%esp)
421:	sub $12,%esp
43	fld %st(0)
44	fstpt (%esp)
45	mov 8(%esp),%ax
46	and $0x7fff,%ax
47	cmp $0x3fff+13,%ax
48	jb 4f             # |x| < 8192
49	cmp $0x3fff+15,%ax
50	jae 3f            # |x| >= 32768
51	fsts (%esp)
52	cmpl $0xc67ff800,(%esp)
53	jb 2f             # x > -16382
54	movl $0x5f000000,(%esp)
55	flds (%esp)       # 0x1p63
56	fld %st(1)
57	fsub %st(1)
58	faddp
59	fucomp %st(1)
60	fnstsw
61	sahf
62	je 2f             # x - 0x1p63 + 0x1p63 == x
63	movl $1,(%esp)
64	flds (%esp)       # 0x1p-149
65	fdiv %st(1)
66	fstps (%esp)      # raise underflow
672:	fld1
68	fld %st(1)
69	frndint
70	fxch %st(2)
71	fsub %st(2)       # st(0)=x-rint(x), st(1)=1, st(2)=rint(x)
72	f2xm1
73	faddp             # 2^(x-rint(x))
741:	fscale
75	fstp %st(1)
76	add $12,%esp
77	ret
783:	xor %eax,%eax
794:	cmp $0x3fff-64,%ax
80	fld1
81	jb 1b             # |x| < 0x1p-64
82	fstpt (%esp)
83	fistl 8(%esp)
84	fildl 8(%esp)
85	fsubrp %st(1)
86	addl $0x3fff,8(%esp)
87	f2xm1
88	fld1
89	faddp             # 2^(x-rint(x))
90	fldt (%esp)       # 2^rint(x)
91	fmulp
92	add $12,%esp
93	ret
94