Commit | Line | Data |
---|---|---|
a6730a00 | 1 | /* Katanf.s 1.4 90/12/04 */ |
2b252132 | 2 | |
9d1834ba | 3 | #include "../tahoe/SYS.h" |
2b252132 | 4 | |
8eb02f2a | 5 | .text |
2b252132 | 6 | ENTRY(Katanf, 0) |
8eb02f2a | 7 | tstl 4(fp) # if (arg > 0) |
2b252132 | 8 | jleq 1f |
8eb02f2a SL |
9 | pushl 20(fp) # hfs |
10 | pushl 8(fp) | |
11 | pushl 4(fp) | |
2b252132 | 12 | callf $16,satan |
8eb02f2a | 13 | ret # return(satan(arg)); |
2b252132 | 14 | 1: # else |
8eb02f2a SL |
15 | pushl 20(fp) # hfs |
16 | lnd 4(fp) | |
17 | pushd | |
2b252132 | 18 | callf $16,satan |
8eb02f2a SL |
19 | lnf r0 |
20 | stf r0 | |
21 | ret # return(-satan(-arg)); | |
8eb02f2a | 22 | |
9d1834ba | 23 | ASENTRY(satan, R2|R3) |
8eb02f2a SL |
24 | subl3 $60,fp,sp |
25 | cmpd2 4(fp),_sq2m1 # if (arg < sq2m1) | |
2b252132 | 26 | jgeq 1f |
8eb02f2a SL |
27 | pushl 12(fp) # hfs |
28 | pushl 8(fp) | |
29 | pushl 4(fp) | |
2b252132 | 30 | callf $16,xatan |
8eb02f2a | 31 | ret # return(xatan(arg)); |
2b252132 SL |
32 | 1: |
33 | cmpd2 4(fp),_sq2p1 # else if (arg > sq2p1) | |
34 | jgtr 9f | |
8eb02f2a | 35 | pushl 12(fp) # hfs |
2b252132 SL |
36 | ldd one; pushd |
37 | ldd 4(fp); pushd | |
8eb02f2a SL |
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 | |
2b252132 SL |
43 | ldd one; pushd |
44 | ldd 4(fp); pushd | |
8eb02f2a SL |
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 | |
2b252132 | 52 | callf $16,xatan # xatan((ag-1.0)/(arg+1.0)) |
8eb02f2a SL |
53 | pushl 12(fp) # hfs |
54 | pushl r1 | |
55 | pushl r0 | |
2b252132 | 56 | ldd _pio4; pushd |
8eb02f2a | 57 | callf $24,_Kaddd |
2b252132 | 58 | ldd r0; cvdf; stf r0 |
8eb02f2a SL |
59 | ret # return(pio4+xatan((xatan(...))); |
60 | ||
2b252132 SL |
61 | 9: |
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 | ||
9d1834ba | 78 | ASENTRY(xatan, 0) |
8eb02f2a SL |
79 | subl3 $68,fp,sp |
80 | pushl 12(fp) # hfs | |
2b252132 | 81 | ldd 4(fp); pushd; pushd |
8eb02f2a SL |
82 | callf $24,_Kmuld # argsq = arg*arg; |
83 | ldd r0 | |
84 | std -60(fp) # argsq | |
85 | pushl 12(fp) # hfs | |
86 | pushd | |
2b252132 | 87 | ldd _p5; pushd |
8eb02f2a SL |
88 | callf $24,_Kmuld # p5*argsq |
89 | pushl 12(fp) # hfs | |
2b252132 SL |
90 | ldd _p4; pushd |
91 | ldd r0; pushd | |
8eb02f2a SL |
92 | callf $24,_Kaddd # (p5*argsq+p4) |
93 | pushl 12(fp) # hfs | |
2b252132 SL |
94 | ldd -60(fp); pushd |
95 | ldd r0; pushd | |
8eb02f2a SL |
96 | callf $24,_Kmuld # (p5*argsq+p4)*argsq |
97 | pushl 12(fp) # hfs | |
2b252132 SL |
98 | ldd _p3; pushd |
99 | ldd r0; pushd | |
8eb02f2a SL |
100 | callf $24,_Kaddd # ((p5*argsq+p4)*argsq+p3) |
101 | pushl 12(fp) # hfs | |
2b252132 SL |
102 | ldd -60(fp); pushd |
103 | ldd r0; pushd | |
8eb02f2a SL |
104 | callf $24,_Kmuld # (..)*argsq |
105 | pushl 12(fp) # hfs | |
2b252132 SL |
106 | ldd _p2; pushd |
107 | ldd r0; pushd | |
8eb02f2a SL |
108 | callf $24,_Kaddd # (..)*argsq+p2) |
109 | pushl 12(fp) # hfs | |
2b252132 SL |
110 | ldd -60(fp); pushd |
111 | ldd r0; pushd | |
8eb02f2a SL |
112 | callf $24,_Kmuld # ((..)*argsq+p2)*argsq |
113 | pushl 12(fp) # hfs | |
2b252132 SL |
114 | ldd _p1; pushd |
115 | ldd r0; pushd | |
8eb02f2a SL |
116 | callf $24,_Kaddd # ((..)*argsq+p2)*argsq+p1) |
117 | pushl 12(fp) # hfs | |
2b252132 SL |
118 | ldd -60(fp); pushd |
119 | ldd r0; pushd | |
8eb02f2a SL |
120 | callf $24,_Kmuld # (..)*argsq |
121 | pushl 12(fp) # hfs | |
2b252132 SL |
122 | ldd _p0; pushd |
123 | ldd r0; pushd | |
8eb02f2a SL |
124 | callf $24,_Kaddd # ((..)*argsq+p1)*argsq+p0) |
125 | pushl 12(fp) # hfs | |
2b252132 SL |
126 | ldd 4(fp); pushd |
127 | ldd r0; pushd | |
8eb02f2a SL |
128 | callf $24,_Kmuld # (..)*arg |
129 | ldd r0 | |
2b252132 | 130 | std -68(fp); cvdf; stf r0 # value |
8eb02f2a | 131 | ret |
2b252132 SL |
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 | |
145 | one: .long 0x40800000, 0x00000000 # .double 1 |