|
|
1.1 root 1: /* @(#)atan.c 4.1/4.2 10/31/84 CCI-CPG */
2:
3:
4: /*
5: Double-precision arctangent function recoded with
6: new algorithm polynomial at CCI-CPG.
7: Coefficients are #4969 from Hart & etc. (17.92D)
8:
9: atan returns the value of the arctangent of its
10: argument in the range [-pi/2,pi/2].
11:
12: atan2 returns the arctangent of arg1/arg2
13: in the range [-pi,pi].
14:
15: there are no error returns.
16:
17: */
18: .data
19: .align 2
20: _sq2p1: .long 0x411a8279, 0x99fcef32 # .double 2.414213562373095
21: .align 2
22: _sq2m1: .long 0x3fd413cc, 0xcfe77992 # .double 0.41421356237309505
23: .align 2
24: _pio2: .long 0x40c90fda, 0xa22168c2 # .double 1.5707963267948966
25: .align 2
26: _pio4: .long 0x40490fda, 0xa22168c2 # .double 0.78539816339744831
27: .align 2
28: _p0: .long 0x40800000, 0x00000000 # .double 1
29: .align 2
30: _p1: .long 0xbfaaaaaa, 0xaaaaa984 # .double -0.33333333333333129
31: .align 2
32: _p2: .long 0x3f4ccccc, 0xccca47cb # .double 0.19999999999942712
33: .align 2
34: _p3: .long 0xbf124924, 0x91341847 # .double -0.14285714279414943
35: .align 2
36: _p4: .long 0x3ee38e38, 0x685c2f79 # .double 0.11111110752565144
37: .align 2
38: _p5: .long 0xbeba2e7b, 0x6e11c9ad # .double -0.090908970161966385
39: .align 2
40: _p6: .long 0x3e9d887d, 0x2d47ecb2 # .double 0.076920488304486365
41: .align 2
42: _p7: .long 0xbe887541, 0x84d86747 # .double -0.066629897944085704
43: .align 2
44: _p8: .long 0x3e6f7fbd, 0x60c7567d # .double 0.05847143150136491
45: .align 2
46: _p9: .long 0xbe4e48e7, 0x446d54d6 # .double -0.0503624948385852
47: .align 2
48: _p10: .long 0x3e1b9ee6, 0x004c28d5 # .double 0.03799333423809
49: .align 2
50: _p11: .long 0xbd921adf, 0x2d9e4583 # .double -0.017835079092898
51: .text
52: LL0: .align 1
53: .globl _atan
54: .set L28,0x0
55: .data
56: .text
57: _atan: .word L28
58: tstl 4(fp)
59: jleq L33
60: pushl 8(fp)
61: pushl 4(fp)
62: callf $12,_satan
63: ret
64: L33: lnd 4(fp)
65: pushd
66: callf $12,_satan
67: lnd r0
68: std r0
69: ret
70: .align 1
71: .globl _atan2
72: .set L35,0xc
73: .data
74: .text
75: .data
76: .align 2
77: L51: .long 0x40800000, 0x00000000 # .double 1
78: .text
79: .set L44,0xc
80: .data
81: .text
82: .set L54,0x0
83: .data
84: .text
85: _atan2: .word L35
86: subl3 $60,fp,sp
87: ldd 4(fp)
88: addd 12(fp)
89: cmpd 4(fp)
90: jneq L39
91: tstl 4(fp)
92: jlss L40
93: movl _pio2+4,r1
94: movl _pio2,r0
95: ret
96: L40: lnd _pio2
97: jbr L2000000
98: L2000003:
99: lnd 4(fp)
100: divd 12(fp)
101: pushd
102: callf $12,_satan
103: movl r1,-56(fp)
104: movl r0,-60(fp)
105: ldd _pio2
106: addd _pio2
107: L2000001:
108: subd -60(fp)
109: jbr L2000000
110: L2000005:
111: tstl 4(fp)
112: jgeq L2000003
113: ldd 4(fp)
114: divd 12(fp)
115: pushd
116: callf $12,_satan
117: lnd _pio2
118: subd _pio2
119: addd r0
120: L2000000:
121: std r0
122: ret
123: L39: tstl 12(fp)
124: jlss L2000005
125: tstl 4(fp)
126: jleq L43
127: ldd 4(fp)
128: divd 12(fp)
129: pushd
130: callf $12,_satan
131: ret
132: L43: lnd 4(fp)
133: divd 12(fp)
134: pushd
135: callf $12,_satan
136: lnd r0
137: jbr L2000000
138: .align 1
139: _satan: .word L44
140: subl3 $60,fp,sp
141: cmpd2 4(fp),_sq2m1
142: jgeq L49
143: pushl 8(fp)
144: pushl 4(fp)
145: callf $12,_xatan
146: ret
147: L49: cmpd2 4(fp),_sq2p1
148: jleq L50
149: ldd L51
150: divd 4(fp)
151: pushd
152: callf $12,_xatan
153: movl r1,-56(fp)
154: movl r0,-60(fp)
155: ldd _pio2
156: jbr L2000001
157: L50: ldd 4(fp)
158: subd L51
159: std r0
160: ldd 4(fp)
161: addd L51
162: std r2
163: ldd r0
164: divd r2
165: pushd
166: callf $12,_xatan
167: ldd r0
168: addd _pio4
169: jbr L2000000
170: .align 1
171: _xatan: .word L54
172: subl3 $68,fp,sp
173: ldd 4(fp)
174: muld 4(fp)
175: std -60(fp)
176: ldd _p11
177: muld -60(fp)
178: addd _p10
179: muld -60(fp)
180: addd _p9
181: muld -60(fp)
182: addd _p8
183: muld -60(fp)
184: addd _p7
185: muld -60(fp)
186: addd _p6
187: muld -60(fp)
188: addd _p5
189: muld -60(fp)
190: addd _p4
191: muld -60(fp)
192: addd _p3
193: muld -60(fp)
194: addd _p2
195: muld -60(fp)
196: addd _p1
197: muld -60(fp)
198: addd _p0
199: muld 4(fp)
200: std -68(fp)
201: movl -64(fp),r1
202: movl -68(fp),r0
203: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.