xref: /original-bsd/sys/tahoe/math/Kexpf.s (revision bdd86a84)
1/*	Kexpf.s	1.3	86/01/05	*/
2
3#include "../tahoe/SYS.h"
4
5	.text
6ENTRY(Kexpf, R4|R3)
7	subl3	$88,fp,sp
8	tstl	4(fp)
9	jneq	1f
10	movl	one,r0
11	ret
121:
13	lnd	_maxf
14	cmpd	4(fp)
15	jleq	1f
16	clrl	r0
17	ret
181:
19	cmpd2	4(fp),_maxf
20	jleq	1f
21	ldd	_HUGE
22	cvdf
23	stf	r0
24	ret
251:
26	pushl	20(fp)		# hfs
27	ldd	_log2e; pushd
28	ldd	4(fp); pushd
29	callf	$24,_Kmuld
30	ldd	r0
31	std	4(fp)
32
33	pushl	20(fp)		# hfs
34	pushl	8(fp)
35	pushl	4(fp)
36	callf	$16,_Kfloorf
37	movl	r0,-88(fp)	# (int)ent from Kfloorf
38
39	cvlf	-88(fp)
40	clrl	r1
41	stf	r0
42	pushl	20(fp)		# hfs
43	pushl	r1
44	pushl	r0
45	ldd	4(fp); pushd
46	callf	$24,_Ksubd	# (arg - ent)
47
48	pushl	20(fp)		# hfs
49	ldd	half; pushd
50	ldd	r0; pushd
51	callf	$24,_Ksubd
52	ldd	r0; std	-60(fp)	# fract
53
54	pushl	20(fp)		# hfs
55	pushd
56	pushd
57	callf	$24,_Kmuld
58	ldd	r0; std	-84(fp)	# xsq
59
60	pushl	20(fp)		# hfs
61	pushd			# xsq
62	ldd	_p2; pushd
63	callf	$24,_Kmuld
64
65	pushl	20(fp)		# hfs
66	ldd	_p1; pushd
67	ldd	r0; pushd
68	callf	$24,_Kaddd
69
70	pushl	20(fp)		# hfs
71	ldd	-84(fp); pushd
72	ldd	r0; pushd
73	callf	$24,_Kmuld
74
75	pushl	20(fp)		# hfs
76	ldd	_p0; pushd
77	ldd	r0; pushd
78	callf	$24,_Kaddd
79
80	pushl	20(fp)		# hfs
81	ldd	-60(fp); pushd	# fract
82	ldd	r0; pushd
83	callf	$24,_Kmuld
84	ldd	r0; std	-68(fp)	# temp1
85
86	pushl	20(fp)		# hfs
87	ldd	-84(fp); pushd	# xsq
88	ldd	_q2; pushd
89	callf	$24,_Kmuld
90
91	pushl	20(fp)		# hfs
92	ldd	_q1; pushd
93	ldd	r0; pushd
94	callf	$24,_Kaddd
95
96	pushl	20(fp)		# hfs
97	ldd	-84(fp); pushd
98	ldd	r0; pushd
99	callf	$24,_Kmuld
100
101	pushl	20(fp)		# hfs
102	ldd	_q0; pushd
103	ldd	r0; pushd
104	callf	$24,_Kaddd
105	ldd	r0; std	-76(fp)	# temp2
106
107	pushl	20(fp)		# hfs for Kldexpf
108	pushl	-88(fp)		# ent
109
110	pushl	20(fp)		# hfs tor temp2+temp1
111	ldd	-68(fp); pushd	# temp1
112	ldd	-76(fp); pushd	# temp2
113	callf	$24,_Kaddd
114
115	pushl	20(fp)		# hfs
116	ldd	_sqrt2; pushd
117	ldd	r0; pushd	# temp2+temp1
118	callf	$24,_Kmuld
119	ldd	r0; std	r2		# sqrt2*(temp2+temp1)
120
121	pushl	20(fp)		# hfs
122	ldd	-68(fp)
123	pushd
124	ldd	-76(fp)
125	pushd
126	callf	$24,_Ksubd	# temp2-temp1
127
128	pushl	20(fp)		# hfs
129	ldd	r0
130	pushd			# temp2-temp1
131	ldd	r2
132	pushd
133	callf	$24,_Kdivd
134
135	ldd	r0
136	pushd
137	callf	$20,_Kldexpf
138
139	#pushl	20(fp)		# hfs
140	#pushl	$0
141	#pushl	r0		# cvlf	r0
142	#pushl	$0
143	#pushl	$0
144	#callf	$24,_Kcvtld
145
146	#ldd	r0
147	#cvdf
148	#stf	r0
149	ret
150
151/* file : Kfloorf.x
152*/
153	.text
154	.globl	_Kfloorf
155	.data
156	.align	2
157L19:	.long	0x40800000, 0x00000000 # .double 1
158	.text
159	.set	L13,0x0
160	.data
161	.text
162_Kfloorf:
163	.word	L13
164	subl3	$60,fp,sp
165	tstl	4(fp)		# if (d<0.0) {
166	jgeq	L17
167	lnd	4(fp)
168	std	4(fp)		# d = -d;
169	pushl	12(fp)		# hfs
170	addl3	$4,fp,-(sp)	# &d
171	pushl	8(fp)
172	pushl	4(fp)
173	callf	$20,_Kmodf
174	clrl	-60+4(fp)
175	movl	r0,-60(fp)	# fract = modf(d,&d);
176	tstl	r0		# if (fract != 0.0)
177	jeql	L18
178	pushl	12(fp)		# hfs
179	ldd	L19
180	pushd
181	ldd	4(fp)
182	pushd
183	callf	$24,_Kaddd
184	ldd	r0
185	std	4(fp)		# d +=1;
186L18:	lnd	4(fp)
187	std	4(fp)		# d = -d;
188	jbr	L20
189L17:
190	pushl	12(fp)		# hfs
191	addl3	$4,fp,-(sp)
192	pushl	8(fp)
193	pushl	4(fp)
194	callf	$20,_Kmodf
195L20:	ldd	4(fp)
196	cvdl	r0		# for Kexpf call only!
197	ret
198
199	.data
200_p0:	.long	0x45BD3D04, 0x7F734DBD # .double 1513.9067990543389
201_p1:	.long	0x42A19DD4, 0x989F60DA # .double 20.202065651286927
202_p2:	.long	0x3DBD2E42, 0xAB70BDA9 # .double .023093347753750233
203_q0:	.long	0x468881B1, 0x7C3A6529 # .double 4368.2116627275583
204_q1:	.long	0x44692F28, 0x7AE89541 # .double 233.18421142748162
205_q2:	.long	0x40800000, 0x00000000 # .double 1
206_log2e:	.long	0x40B8AA3B, 0x295C17F0 # .double 1.4426950408889634
207_sqrt2:	.long	0x40B504F3, 0x33F9DE64 # .double 1.414213562373095
208_maxf:	.long	0x471C4000, 0x00000000 # .double 10000
209_HUGE:	.long	0x7FFFFFFE, 0xFFFFFFFC # .double 1.701411733192644e+38
210one:	.long	0x40800000 # .float 1
211half:	.long	0x40000000, 0x00000000 # .double .5
212