xref: /original-bsd/sys/tahoe/math/Katanf.s (revision 7211505a)
1/*	Katanf.s	1.3	86/01/05	*/
2
3#include "../tahoe/SYS.h"
4
5	.text
6ENTRY(Katanf, 0)
7	tstl	4(fp)			# if (arg > 0)
8	jleq	1f
9	pushl	20(fp)			# hfs
10	pushl	8(fp)
11	pushl	4(fp)
12	callf	$16,satan
13	ret				# return(satan(arg));
141:					# else
15	pushl	20(fp)			# hfs
16	lnd	4(fp)
17	pushd
18	callf	$16,satan
19	lnf	r0
20	stf	r0
21	ret				# return(-satan(-arg));
22
23ASENTRY(satan, R2|R3)
24	subl3	$60,fp,sp
25	cmpd2	4(fp),_sq2m1		# if (arg < sq2m1)
26	jgeq	1f
27	pushl	12(fp)			# hfs
28	pushl	8(fp)
29	pushl	4(fp)
30	callf	$16,xatan
31	ret				# return(xatan(arg));
321:
33	cmpd2	4(fp),_sq2p1		# else if (arg > sq2p1)
34	jgtr	9f
35	pushl	12(fp)			# hfs
36	ldd	one; pushd
37	ldd	4(fp); pushd
38	callf	$24,_Kaddd		# (arg+1.0)
39	pushl	12(fp)			# hfs of _Kdivd
40	pushl	r1
41	pushl	r0
42	pushl	12(fp)			# hfs
43	ldd	one; pushd
44	ldd	4(fp); pushd
45	callf	$24,_Ksubd		# (arg-1.0)
46	pushl	r1
47	pushl	r0
48	callf	$24,_Kdivd		# (arg-1.0)/(arg+1.0)
49	pushl	12(fp)			# hfs
50	pushl	r1
51	pushl	r0
52	callf	$16,xatan		# xatan((ag-1.0)/(arg+1.0))
53	pushl	12(fp)			# hfs
54	pushl	r1
55	pushl	r0
56	ldd	_pio4; pushd
57	callf	$24,_Kaddd
58	ldd	r0; cvdf; stf r0
59	ret				# return(pio4+xatan((xatan(...)));
60
619:
62	pushl	12(fp)
63	ldd	4(fp); pushd
64	ldd	one; pushd
65	callf	$24,_Kdivd		# (1.0/arg)
66	pushl	12(fp)			# hfs
67	ldd	r0; pushd
68	callf	$16,xatan
69					# clrl	-60+4(fp)
70					# movl	r0,-60(fp)
71	pushl	12(fp)			# hfs
72	ldd	r0; pushd
73	ldd	_pio2; pushd
74	callf	$24,_Ksubd
75	ldd	r0; cvdf; stf r0
76	ret
77
78ASENTRY(xatan, 0)
79	subl3	$68,fp,sp
80	pushl	12(fp)			# hfs
81	ldd	4(fp); pushd; pushd
82	callf	$24,_Kmuld		# argsq = arg*arg;
83	ldd	r0
84	std	-60(fp)			# argsq
85	pushl	12(fp)			# hfs
86	pushd
87	ldd	_p5; pushd
88	callf	$24,_Kmuld		# p5*argsq
89	pushl	12(fp)			# hfs
90	ldd	_p4; pushd
91	ldd	r0; pushd
92	callf	$24,_Kaddd		# (p5*argsq+p4)
93	pushl	12(fp)			# hfs
94	ldd	-60(fp); pushd
95	ldd	r0; pushd
96	callf	$24,_Kmuld		# (p5*argsq+p4)*argsq
97	pushl	12(fp)			# hfs
98	ldd	_p3; pushd
99	ldd	r0; pushd
100	callf	$24,_Kaddd		# ((p5*argsq+p4)*argsq+p3)
101	pushl	12(fp)			# hfs
102	ldd	-60(fp); pushd
103	ldd	r0; pushd
104	callf	$24,_Kmuld		# (..)*argsq
105	pushl	12(fp)			# hfs
106	ldd	_p2; pushd
107	ldd	r0; pushd
108	callf	$24,_Kaddd		# (..)*argsq+p2)
109	pushl	12(fp)			# hfs
110	ldd	-60(fp); pushd
111	ldd	r0; pushd
112	callf	$24,_Kmuld		# ((..)*argsq+p2)*argsq
113	pushl	12(fp)			# hfs
114	ldd	_p1; pushd
115	ldd	r0; pushd
116	callf	$24,_Kaddd		# ((..)*argsq+p2)*argsq+p1)
117	pushl	12(fp)			# hfs
118	ldd	-60(fp); pushd
119	ldd	r0; pushd
120	callf	$24,_Kmuld		# (..)*argsq
121	pushl	12(fp)			# hfs
122	ldd	_p0; pushd
123	ldd	r0; pushd
124	callf	$24,_Kaddd		# ((..)*argsq+p1)*argsq+p0)
125	pushl	12(fp)			# hfs
126	ldd	4(fp); pushd
127	ldd	r0; pushd
128	callf	$24,_Kmuld		# (..)*arg
129	ldd	r0
130	std	-68(fp); cvdf; stf r0	# value
131	ret
132
133	.data
134	.align	2
135_sq2p1:	.long	0x411A8279, 0x99FCEF31 # .double 2.414213562373095
136_sq2m1:	.long	0x3FD413CC, 0xCFE77990 # .double .41421356237309503
137_pio2:	.long	0x40C90FDA, 0xA22168C1 # .double 1.5707963267948966
138_pio4:	.long	0x40490FDA, 0xA22168C1 # .double .78539816339744829
139_p0:	.long	0x407FFFFF, 0xFD687A4B # .double .99999999939652999
140_p1:	.long	0xBFAAAAA2, 0x09F9DBF2 # .double -.3333330762079
141_p2:	.long	0x3F4CC820, 0x0670059B # .double .199982166665
142_p3:	.long	0xBF11D182, 0x6601878B # .double -.142400777317
143_p4:	.long	0x3ED88B47, 0x4EFC9AF9 # .double .10573440275
144_p5:	.long	0xBE772E4B, 0x0E689AEB # .double -.060346883
145one:	.long	0x40800000, 0x00000000 # .double 1
146