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