1/*
2Copyright (c) 2014, Intel Corporation
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are met:
7
8    * Redistributions of source code must retain the above copyright notice,
9    * this list of conditions and the following disclaimer.
10
11    * Redistributions in binary form must reproduce the above copyright notice,
12    * this list of conditions and the following disclaimer in the documentation
13    * and/or other materials provided with the distribution.
14
15    * Neither the name of Intel Corporation nor the names of its contributors
16    * may be used to endorse or promote products derived from this software
17    * without specific prior written permission.
18
19THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*/
30
31/******************************************************************************/
32//                     ALGORITHM DESCRIPTION
33//                     ---------------------
34//
35//
36//1. The method is based on the relationship of atan2(Y,X) to atan(|Y/X|)
37//   as follows.
38//                   /  sign(Y) atan(|Y/X|)                if X > 0
39//       atan2(Y,X) =
40//                   \  sign(Y)*pi  - sign(Y)*atan(|Y/X|)  if X < 0
41//
42//   Thus, atan2(Y,X) is of the form  atan2(Y,X) = PI + sgn*atan(|Y/X|)
43//   where PI and sgn can be determined by the four possible combinations of
44//   of the pair (sign(X),sign(Y)). We concentrate on the numerical method
45//   for atan(|Y/X|).
46//
47//2. For |Y/X| < 2^(-64), atan(|Y/X|) ~=~ |Y/X|. Hence, atan2(Y,X) is  Y/X
48//   if X > 0, and sign(Y)*pi otherwise.
49//3. For |Y/X| >= 2^(65), atan(|Y/X|) ~=~ pi/2. Hence atan2(Y,X) is sign(Y)pi/2.
50//4. For 2^(-64) <= |Y/X| < 2^(-5), atan(|Y/X|) is approximated by a polynomial
51//   of the form  Z + Z*E*polynomial(E), where Z = |Y/X| and E = Z*Z.
52//5. For |Y/X| > 2^(5), atan(|Y/X|) = pi/2 + atan(-|X/Y|), and atan(-|X/Y|) is
53//   calculated using the polynomial in 4 above.
54//6. For 2^(-5) <= |Y/X| <= 2^(5), we employ a table lookup method. First,
55//   we obtain B = 2^k * 1.b1 b2 b3 b4 = 2^k * (1+k/16) that approximate
56//   |Y/X| to approximately 5 significant bits. Hence, atan(|Y/X|) is
57//
58//      atan(|Y/X|)  =  atan(B) + atan(Z), where  Z = (|Y|-B|X|)/(|X|+B|Y|).
59//                  ~=~   tau   + Z + Z*E*polynomial(E), where E = Z*Z.
60//
61//   B has the range from 2^(-6)*(1+14/16) to 2^5 = 2^(5)*(1+0/16), totally
62//   163 possible values. These values are calculated beforehand and stored
63//   in a table. The polynomial is the one used in 4.
64//
65// Special cases:
66//  atan2(+-0, +0) = +-0
67//  atan2(+-0, -0) = +-pi
68//  atan2(+-0, x) = +-0, for x > 0, and +-pi, for x < 0
69//  atan2(y, +-0) = +pi/2 for y > 0, and -pi/2 for y < 0
70//  atan2(+-y, +INF) = +-0, for finite y > 0
71//  atan2(+-y, -INF) = +-pi, for finite y > 0
72//  atan2(+-INF, x) = +-pi/2, for finite x
73//  atan2(+-INF, +INF) = +-pi/4
74//  atan2(+-INF, -INF) = +-3*pi/4
75//
76/******************************************************************************/
77
78#include <private/bionic_asm.h>
79# -- Begin  atan2
80ENTRY(atan2)
81# parameter 1: %xmm0
82# parameter 2: %xmm1
83..B1.1:
84..___tag_value_atan2.1:
85        subq      $24, %rsp
86..___tag_value_atan2.3:
87        movsd     %xmm0, (%rsp)
88        movsd     %xmm1, 8(%rsp)
89..B1.2:
90        pextrw    $3, %xmm0, %eax
91        andl      $32752, %eax
92        subl      $14448, %eax
93        cmpl      $3840, %eax
94        ja        .L_2TAG_PACKET_0.0.2
95        pextrw    $3, %xmm1, %eax
96        andl      $32752, %eax
97        subl      $14448, %eax
98        cmpl      $3840, %eax
99        ja        .L_2TAG_PACKET_1.0.2
100.L_2TAG_PACKET_2.0.2:
101        unpcklpd  %xmm1, %xmm0
102        xorpd     %xmm5, %xmm5
103        xorpd     %xmm3, %xmm3
104        movl      $2048, %eax
105        pinsrw    $3, %eax, %xmm5
106        paddw     %xmm1, %xmm5
107        psrlq     $29, %xmm5
108        rcpss     %xmm5, %xmm3
109        xorpd     %xmm4, %xmm4
110        movl      $14336, %ecx
111        pinsrw    $3, %ecx, %xmm4
112        psllq     $29, %xmm3
113        paddw     %xmm4, %xmm3
114        mulsd     %xmm0, %xmm3
115        xorpd     %xmm2, %xmm2
116        xorpd     %xmm6, %xmm6
117        xorpd     %xmm7, %xmm7
118        movl      $32768, %eax
119        pinsrw    $2, %eax, %xmm6
120        movl      $32767, %ecx
121        pinsrw    $3, %ecx, %xmm7
122        paddd     %xmm6, %xmm3
123        andpd     %xmm7, %xmm3
124        movq      %xmm3, %xmm5
125        pextrw    $3, %xmm3, %eax
126        movl      $16448, %ecx
127        pinsrw    $3, %ecx, %xmm2
128        minsd     %xmm2, %xmm3
129        movmskpd  %xmm0, %edx
130        psllq     $1, %xmm0
131        psrlq     $1, %xmm0
132        cmpsd     $2, %xmm2, %xmm5
133        psllq     $1, %xmm1
134        psrlq     $1, %xmm1
135        movq      %xmm1, %xmm6
136        movq      %xmm1, %xmm7
137        movq      %xmm0, %xmm2
138        movl      $0, %ecx
139        pinsrw    $0, %ecx, %xmm6
140        subsd     %xmm6, %xmm7
141        movq      %xmm0, %xmm4
142        mulsd     %xmm3, %xmm6
143        mulsd     %xmm3, %xmm4
144        mulsd     %xmm3, %xmm7
145        andpd     %xmm5, %xmm0
146        subsd     %xmm6, %xmm0
147        andpd     %xmm5, %xmm1
148        addsd     %xmm1, %xmm4
149        subsd     %xmm7, %xmm0
150        andl      $32752, %eax
151        subl      $16286, %eax
152        cmpl      $1121, %eax
153        ja        .L_2TAG_PACKET_3.0.2
154        divsd     %xmm4, %xmm0
155        pextrw    $3, %xmm3, %ecx
156        movsd     a2(%rip), %xmm2
157        movsd     b2(%rip), %xmm3
158        pextrw    $0, %xmm5, %eax
159        addl      %edx, %edx
160        lea       P_TBL(%rip), %r8
161        movapd    (%r8,%rdx,8), %xmm6
162        lea       SGN_TBL(%rip), %r8
163        movapd    (%r8,%rdx,8), %xmm1
164        subl      $16286, %ecx
165        notl      %eax
166        andl      $1, %eax
167        addl      %eax, %ecx
168        addl      %ecx, %ecx
169        lea       ATAN_TBL(%rip), %r8
170        movapd    (%r8,%rcx,8), %xmm5
171        xorpd     %xmm1, %xmm5
172        addpd     %xmm6, %xmm5
173        movq      %xmm5, %xmm6
174        unpckhpd  %xmm5, %xmm5
175        xorpd     %xmm0, %xmm1
176        movq      %xmm1, %xmm4
177        mulsd     %xmm0, %xmm0
178        mulsd     %xmm0, %xmm2
179        addsd     %xmm0, %xmm3
180        addsd     %xmm6, %xmm1
181        subsd     %xmm1, %xmm6
182        addsd     %xmm4, %xmm6
183        addsd     8+a2(%rip), %xmm2
184        mulsd     %xmm0, %xmm3
185        mulsd     %xmm4, %xmm0
186        addsd     %xmm5, %xmm6
187        mulsd     %xmm2, %xmm0
188        addsd     8+b2(%rip), %xmm3
189        mulsd     %xmm3, %xmm0
190        addsd     %xmm6, %xmm0
191        addsd     %xmm1, %xmm0
192        jmp       ..B1.5
193.L_2TAG_PACKET_3.0.2:
194        addl      $942, %eax
195        cmpl      $942, %eax
196        ja        .L_2TAG_PACKET_4.0.2
197        xorpd     %xmm4, %xmm4
198        movl      $16368, %ecx
199        pinsrw    $3, %ecx, %xmm4
200        divsd     %xmm1, %xmm4
201        addl      %edx, %edx
202        lea       SGN_TBL(%rip), %r8
203        movapd    (%r8,%rdx,8), %xmm6
204        unpcklpd  %xmm3, %xmm3
205        xorpd     %xmm6, %xmm0
206        xorpd     %xmm6, %xmm2
207        xorpd     %xmm6, %xmm3
208        lea       P_TBL2(%rip), %r8
209        movapd    (%r8,%rdx,8), %xmm7
210        movsd     a2(%rip), %xmm1
211        movsd     b2(%rip), %xmm5
212        lea       SELECT_B(%rip), %r8
213        andpd     (%r8,%rdx,8), %xmm3
214        mulsd     %xmm4, %xmm2
215        mulsd     %xmm4, %xmm0
216        movq      %xmm2, %xmm6
217        mulsd     %xmm2, %xmm2
218        mulsd     %xmm2, %xmm1
219        addsd     %xmm2, %xmm5
220        mulsd     %xmm2, %xmm6
221        addsd     8+a2(%rip), %xmm1
222        mulsd     %xmm2, %xmm5
223        addsd     %xmm0, %xmm7
224        addpd     %xmm3, %xmm7
225        mulsd     %xmm6, %xmm1
226        addsd     8+b2(%rip), %xmm5
227        mulsd     %xmm1, %xmm5
228        addsd     %xmm7, %xmm5
229        pshufd    $238, %xmm7, %xmm0
230        addsd     %xmm5, %xmm0
231        jmp       ..B1.5
232.L_2TAG_PACKET_4.0.2:
233        movsd     8(%rsp), %xmm1
234        movsd     (%rsp), %xmm0
235        pextrw    $3, %xmm1, %eax
236        andl      $32752, %eax
237        pextrw    $3, %xmm0, %ecx
238        andl      $32752, %ecx
239        cmpl      %eax, %ecx
240        jg        .L_2TAG_PACKET_5.0.2
241        pextrw    $3, %xmm1, %ecx
242        cmpl      $32767, %ecx
243        jg        .L_2TAG_PACKET_6.0.2
244        divsd     %xmm1, %xmm0
245        jmp       ..B1.5
246.L_2TAG_PACKET_6.0.2:
247        andpd     SGNMASK(%rip), %xmm0
248        movsd     pi_table(%rip), %xmm2
249        xorpd     %xmm2, %xmm0
250        jmp       ..B1.5
251.L_2TAG_PACKET_5.0.2:
252        andpd     SGNMASK(%rip), %xmm0
253        movsd     pi2_table(%rip), %xmm2
254        xorpd     %xmm2, %xmm0
255        jmp       ..B1.5
256.L_2TAG_PACKET_0.0.2:
257.L_2TAG_PACKET_1.0.2:
258        pextrw    $3, %xmm0, %ecx
259        andl      $32752, %ecx
260        pextrw    $3, %xmm1, %eax
261        andl      $32752, %eax
262        cmpl      $32752, %ecx
263        je        .L_2TAG_PACKET_7.0.2
264        cmpl      $32752, %eax
265        je        .L_2TAG_PACKET_8.0.2
266        movsd     POW55(%rip), %xmm3
267        movl      $1024, %edx
268        movsd     INVEXPMASK(%rip), %xmm4
269        xorpd     %xmm6, %xmm6
270        movsd     EXPMASK(%rip), %xmm7
271        cmpl      $0, %ecx
272        je        .L_2TAG_PACKET_9.0.2
273.L_2TAG_PACKET_10.0.2:
274        cmpl      $0, %eax
275        je        .L_2TAG_PACKET_11.0.2
276.L_2TAG_PACKET_12.0.2:
277        addl      %ecx, %edx
278        subl      %eax, %edx
279        cmpl      $2048, %edx
280        ja        .L_2TAG_PACKET_4.0.2
281        addl      $15344, %edx
282        pinsrw    $3, %edx, %xmm6
283        andpd     %xmm4, %xmm0
284        andpd     %xmm4, %xmm1
285        orpd      %xmm6, %xmm0
286        orpd      %xmm7, %xmm1
287        jmp       .L_2TAG_PACKET_2.0.2
288.L_2TAG_PACKET_9.0.2:
289        subl      $880, %edx
290        mulsd     %xmm3, %xmm0
291        pextrw    $3, %xmm0, %ecx
292        andl      $32752, %ecx
293        cmpl      $0, %ecx
294        je        .L_2TAG_PACKET_13.0.2
295        jmp       .L_2TAG_PACKET_10.0.2
296.L_2TAG_PACKET_11.0.2:
297        addl      $880, %edx
298        mulsd     %xmm3, %xmm1
299        pextrw    $3, %xmm1, %eax
300        andl      $32752, %eax
301        cmpl      $0, %eax
302        je        .L_2TAG_PACKET_14.0.2
303        jmp       .L_2TAG_PACKET_12.0.2
304.L_2TAG_PACKET_7.0.2:
305        movd      %xmm0, %edx
306        movq      %xmm0, %xmm2
307        psrlq     $32, %xmm2
308        movd      %xmm2, %ecx
309        andl      $1048575, %ecx
310        orl       %edx, %ecx
311        cmpl      $0, %ecx
312        jne       .L_2TAG_PACKET_15.0.2
313        psrlq     $63, %xmm0
314        psllq     $63, %xmm0
315        cmpl      $32752, %eax
316        jae       .L_2TAG_PACKET_16.0.2
317        movapd    pi2_table(%rip), %xmm5
318        pshufd    $238, %xmm5, %xmm4
319        addsd     %xmm4, %xmm5
320        orpd      %xmm5, %xmm0
321        jmp       ..B1.5
322.L_2TAG_PACKET_15.0.2:
323        addsd     %xmm0, %xmm0
324        jmp       ..B1.5
325.L_2TAG_PACKET_16.0.2:
326        movd      %xmm1, %eax
327        movq      %xmm1, %xmm2
328        psrlq     $32, %xmm2
329        movd      %xmm2, %ecx
330        movl      $-2147483648, %edx
331        andl      %ecx, %edx
332        andl      $1048575, %ecx
333        orl       %eax, %ecx
334        cmpl      $0, %ecx
335        jne       .L_2TAG_PACKET_17.0.2
336        cmpl      $0, %edx
337        jne       .L_2TAG_PACKET_18.0.2
338        movapd    pi4_table(%rip), %xmm5
339        pshufd    $238, %xmm5, %xmm4
340        addsd     %xmm4, %xmm5
341        orpd      %xmm5, %xmm0
342        jmp       ..B1.5
343.L_2TAG_PACKET_17.0.2:
344        movq      %xmm1, %xmm0
345        addsd     %xmm0, %xmm0
346        jmp       ..B1.5
347.L_2TAG_PACKET_18.0.2:
348        movapd    pi4_table(%rip), %xmm5
349        movapd    pi2_table(%rip), %xmm6
350        addpd     %xmm6, %xmm5
351        pshufd    $238, %xmm5, %xmm6
352        addpd     %xmm6, %xmm5
353        orpd      %xmm5, %xmm0
354        jmp       ..B1.5
355.L_2TAG_PACKET_8.0.2:
356        movd      %xmm1, %eax
357        movq      %xmm1, %xmm2
358        psrlq     $32, %xmm2
359        movd      %xmm2, %ecx
360        movl      $-2147483648, %edx
361        andl      %ecx, %edx
362        andl      $1048575, %ecx
363        orl       %eax, %ecx
364        cmpl      $0, %ecx
365        jne       .L_2TAG_PACKET_17.0.2
366        psrlq     $63, %xmm0
367        psllq     $63, %xmm0
368        cmpl      $0, %edx
369        jne       .L_2TAG_PACKET_19.0.2
370        jmp       ..B1.5
371.L_2TAG_PACKET_19.0.2:
372        movapd    pi_table(%rip), %xmm5
373        pshufd    $238, %xmm5, %xmm4
374        addsd     %xmm4, %xmm5
375        orpd      %xmm5, %xmm0
376        jmp       ..B1.5
377.L_2TAG_PACKET_13.0.2:
378        pextrw    $3, %xmm1, %edx
379        andl      $32768, %edx
380        cmpl      $0, %edx
381        je        .L_2TAG_PACKET_20.0.2
382        movapd    pi_table(%rip), %xmm5
383        pshufd    $238, %xmm5, %xmm4
384        addsd     %xmm4, %xmm5
385        comisd    %xmm0, %xmm1
386        orpd      %xmm5, %xmm0
387        je        .L_2TAG_PACKET_21.0.2
388        jmp       ..B1.5
389.L_2TAG_PACKET_20.0.2:
390        comisd    %xmm0, %xmm1
391        je        .L_2TAG_PACKET_21.0.2
392        jmp       ..B1.5
393.L_2TAG_PACKET_14.0.2:
394        movapd    pi2_table(%rip), %xmm5
395        psrlq     $63, %xmm0
396        psllq     $63, %xmm0
397        pshufd    $238, %xmm5, %xmm4
398        addsd     %xmm4, %xmm5
399        orpd      %xmm5, %xmm0
400        jmp       ..B1.5
401.L_2TAG_PACKET_21.0.2:
402        movq      %xmm0, 16(%rsp)
403..B1.3:
404        movq      16(%rsp), %xmm0
405.L_2TAG_PACKET_22.0.2:
406..B1.5:
407        addq      $24, %rsp
408..___tag_value_atan2.4:
409        ret
410..___tag_value_atan2.5:
411END(atan2)
412# -- End  atan2
413	.section .rodata, "a"
414	.align 16
415	.align 16
416a2:
417	.long	2006262985
418	.long	1069310863
419	.long	2358449471
420	.long	3217342131
421	.type	a2,@object
422	.size	a2,16
423	.align 16
424b2:
425	.long	3845454352
426	.long	1069952297
427	.long	2829679149
428	.long	1073771565
429	.type	b2,@object
430	.size	b2,16
431	.align 16
432P_TBL:
433	.long	0
434	.long	0
435	.long	0
436	.long	0
437	.long	0
438	.long	0
439	.long	0
440	.long	0
441	.long	1413754136
442	.long	1074340347
443	.long	856972295
444	.long	1017226790
445	.long	1413754136
446	.long	3221823995
447	.long	856972295
448	.long	3164710438
449	.type	P_TBL,@object
450	.size	P_TBL,64
451	.align 16
452SGN_TBL:
453	.long	0
454	.long	0
455	.long	0
456	.long	0
457	.long	0
458	.long	2147483648
459	.long	0
460	.long	2147483648
461	.long	0
462	.long	2147483648
463	.long	0
464	.long	2147483648
465	.long	0
466	.long	0
467	.long	0
468	.long	0
469	.type	SGN_TBL,@object
470	.size	SGN_TBL,64
471	.align 16
472ATAN_TBL:
473	.long	3390881280
474	.long	1067318733
475	.long	1411116779
476	.long	1018950063
477	.long	2985987840
478	.long	1067384211
479	.long	2088903695
480	.long	1018086027
481	.long	3148445184
482	.long	1067449685
483	.long	2044163806
484	.long	1017271335
485	.long	3667629184
486	.long	1067515494
487	.long	2353092775
488	.long	1019967309
489	.long	1546568832
490	.long	1067580954
491	.long	611991315
492	.long	1017602584
493	.long	3815996800
494	.long	1067646404
495	.long	466038598
496	.long	1019686426
497	.long	4050241920
498	.long	1067711845
499	.long	3265026328
500	.long	1019626952
501	.long	120454912
502	.long	1067777277
503	.long	1542207696
504	.long	1020155608
505	.long	2784639744
506	.long	1067842697
507	.long	3883834623
508	.long	1018602870
509	.long	1328010624
510	.long	1067908107
511	.long	1791097456
512	.long	1019053126
513	.long	2217794048
514	.long	1067973505
515	.long	551619938
516	.long	1018494194
517	.long	3333520000
518	.long	1068038891
519	.long	2390331823
520	.long	1019033022
521	.long	2557052032
522	.long	1068104265
523	.long	2423976108
524	.long	1019728674
525	.long	2067649536
526	.long	1068169626
527	.long	3757397745
528	.long	1018672362
529	.long	4047094784
530	.long	1068234973
531	.long	481613184
532	.long	1019275104
533	.long	2089853184
534	.long	1068300307
535	.long	1733914374
536	.long	1020124677
537	.long	2678003840
538	.long	1068365626
539	.long	1373600282
540	.long	1013935474
541	.long	3706496128
542	.long	1068430930
543	.long	1000610902
544	.long	1019673285
545	.long	3073179008
546	.long	1068496219
547	.long	1497143008
548	.long	1019900342
549	.long	2803716736
550	.long	1068562846
551	.long	1476677416
552	.long	1019444094
553	.long	3204984128
554	.long	1068628077
555	.long	1192335905
556	.long	1018748628
557	.long	831146624
558	.long	1068693273
559	.long	2733586224
560	.long	1018823295
561	.long	243029376
562	.long	1068758431
563	.long	950106081
564	.long	1019046675
565	.long	1735561920
566	.long	1068823549
567	.long	3546440856
568	.long	1020104712
569	.long	1339217792
570	.long	1068888626
571	.long	3028812387
572	.long	1019818321
573	.long	3706342144
574	.long	1068953659
575	.long	3814564029
576	.long	1017763871
577	.long	637726976
578	.long	1069018648
579	.long	3584007699
580	.long	1017976868
581	.long	1148779264
582	.long	1069083589
583	.long	2282532133
584	.long	1019483954
585	.long	1406131392
586	.long	1069148481
587	.long	1547359113
588	.long	1019786342
589	.long	1908875904
590	.long	1069213322
591	.long	1315508410
592	.long	1020009473
593	.long	3194947520
594	.long	1069278110
595	.long	3845393201
596	.long	1015803761
597	.long	1547487744
598	.long	1069342844
599	.long	3863107865
600	.long	1019810104
601	.long	1881061952
602	.long	1069407521
603	.long	4288343548
604	.long	1019687581
605	.long	563086336
606	.long	1069472140
607	.long	2582230241
608	.long	1020099350
609	.long	2594975552
610	.long	1069536698
611	.long	2306443764
612	.long	1019667244
613	.long	3438545024
614	.long	1069606573
615	.long	957455549
616	.long	1015587735
617	.long	4211357472
618	.long	1069670906
619	.long	2611778754
620	.long	1017877214
621	.long	3002835424
622	.long	1069735101
623	.long	235580458
624	.long	1020211685
625	.long	3905315424
626	.long	1069799150
627	.long	3630647617
628	.long	1018736849
629	.long	2849656576
630	.long	1069863047
631	.long	2412165062
632	.long	1019693004
633	.long	507429472
634	.long	1069926785
635	.long	1397750723
636	.long	1018412717
637	.long	2307470272
638	.long	1069990356
639	.long	1796470904
640	.long	1019796181
641	.long	1271814912
642	.long	1070053755
643	.long	189761565
644	.long	1016149115
645	.long	3800538144
646	.long	1070116974
647	.long	2524871582
648	.long	1018263353
649	.long	3916203552
650	.long	1070180008
651	.long	127848658
652	.long	1017672664
653	.long	457192032
654	.long	1070242851
655	.long	4020400938
656	.long	1019823010
657	.long	1385324704
658	.long	1070305495
659	.long	564511179
660	.long	1016079094
661	.long	2322869856
662	.long	1070367935
663	.long	2347103319
664	.long	1018927760
665	.long	3743438624
666	.long	1070430165
667	.long	877973862
668	.long	1019638162
669	.long	2392255552
670	.long	1070492180
671	.long	2432782267
672	.long	1018872629
673	.long	4180443328
674	.long	1070553973
675	.long	3102990015
676	.long	1020093101
677	.long	2547540832
678	.long	1070636485
679	.long	3877738253
680	.long	1017300424
681	.long	2735468912
682	.long	1070697461
683	.long	2446470256
684	.long	1019235378
685	.long	542633792
686	.long	1070757943
687	.long	583606328
688	.long	1018624131
689	.long	923265984
690	.long	1070817911
691	.long	1793926708
692	.long	1019714161
693	.long	918728448
694	.long	1070877348
695	.long	3726463586
696	.long	1019433296
697	.long	2572275008
698	.long	1070936237
699	.long	1845354238
700	.long	1019459238
701	.long	50974688
702	.long	1070994564
703	.long	983808064
704	.long	1016685418
705	.long	1105518320
706	.long	1071052313
707	.long	2357496692
708	.long	1015139882
709	.long	1264825328
710	.long	1071109472
711	.long	2244129354
712	.long	1019046344
713	.long	961157920
714	.long	1071166029
715	.long	3124185339
716	.long	1018541776
717	.long	1162701584
718	.long	1071221973
719	.long	1279780948
720	.long	1019268918
721	.long	3284935664
722	.long	1071277294
723	.long	2670033472
724	.long	1019833744
725	.long	497441888
726	.long	1071331985
727	.long	1032737410
728	.long	1019795212
729	.long	3377383904
730	.long	1071386036
731	.long	2356897182
732	.long	1020205553
733	.long	1126962000
734	.long	1071439443
735	.long	3723724586
736	.long	1015212418
737	.long	90291008
738	.long	1071492199
739	.long	4178672431
740	.long	1020186971
741	.long	190059536
742	.long	1071595741
743	.long	1763589807
744	.long	1019162163
745	.long	2497392840
746	.long	1071670654
747	.long	3036997041
748	.long	1020204325
749	.long	2616971944
750	.long	1071719773
751	.long	300151069
752	.long	1017041957
753	.long	2883518128
754	.long	1071767563
755	.long	2203981414
756	.long	1019190108
757	.long	1496354352
758	.long	1071814030
759	.long	332287966
760	.long	1016846435
761	.long	483276728
762	.long	1071859184
763	.long	653845024
764	.long	1018830914
765	.long	3097401072
766	.long	1071903039
767	.long	1514746408
768	.long	1019278972
769	.long	2737217248
770	.long	1071945615
771	.long	1358845067
772	.long	1017268275
773	.long	2072577560
774	.long	1071986933
775	.long	3041024735
776	.long	1019929672
777	.long	2266405656
778	.long	1072027017
779	.long	1271261130
780	.long	1012925070
781	.long	958652544
782	.long	1072065894
783	.long	2158017058
784	.long	1019955372
785	.long	3312993840
786	.long	1072103591
787	.long	765809169
788	.long	1019114443
789	.long	3177001304
790	.long	1072140139
791	.long	144180084
792	.long	1019822186
793	.long	3071642184
794	.long	1072175568
795	.long	4004602424
796	.long	1019420740
797	.long	4283953648
798	.long	1072209909
799	.long	1511950430
800	.long	1020176966
801	.long	1413754136
802	.long	1072243195
803	.long	856972295
804	.long	1015129638
805	.long	4073202944
806	.long	1072306725
807	.long	4068194804
808	.long	1019714860
809	.long	946117760
810	.long	1072366415
811	.long	694980733
812	.long	1020150135
813	.long	3980632032
814	.long	1072422512
815	.long	1313251280
816	.long	1019948709
817	.long	1468297112
818	.long	1072475260
819	.long	330111143
820	.long	1019809198
821	.long	3478063816
822	.long	1072524887
823	.long	2930067044
824	.long	1017784081
825	.long	1153979856
826	.long	1072571613
827	.long	2225786102
828	.long	1017634481
829	.long	2089828808
830	.long	1072615641
831	.long	474621367
832	.long	1017043414
833	.long	3531732632
834	.long	1072657163
835	.long	2276396220
836	.long	1018757240
837	.long	775214612
838	.long	1072694803
839	.long	3209744818
840	.long	1019963015
841	.long	662307284
842	.long	1072713319
843	.long	1381696763
844	.long	1019763781
845	.long	1192776652
846	.long	1072730830
847	.long	3017932994
848	.long	1015179769
849	.long	744202396
850	.long	1072747407
851	.long	2073854034
852	.long	1019512292
853	.long	8337908
854	.long	1072763115
855	.long	16004448
856	.long	1019599514
857	.long	3589868768
858	.long	1072778013
859	.long	1374369804
860	.long	1018019237
861	.long	121647320
862	.long	1072792159
863	.long	128481634
864	.long	1018115438
865	.long	2464923204
866	.long	1072805601
867	.long	1787331214
868	.long	1016798022
869	.long	4093304372
870	.long	1072830562
871	.long	3306868969
872	.long	1019384078
873	.long	1436891684
874	.long	1072853231
875	.long	676347266
876	.long	1017302183
877	.long	1104571840
878	.long	1072873890
879	.long	2870400285
880	.long	1019938149
881	.long	2037009832
882	.long	1072892781
883	.long	2956702105
884	.long	1016472908
885	.long	3139037960
886	.long	1072910111
887	.long	916057147
888	.long	1018364335
889	.long	1826698064
890	.long	1072926058
891	.long	2171961098
892	.long	1019669816
893	.long	1353941060
894	.long	1072940774
895	.long	1722928782
896	.long	1019926215
897	.long	1803191644
898	.long	1072954391
899	.long	1547878639
900	.long	1020259262
901	.long	1092591296
902	.long	1072967024
903	.long	3070107923
904	.long	1018320401
905	.long	2205372832
906	.long	1072978772
907	.long	787328196
908	.long	1014621351
909	.long	1291577100
910	.long	1072989723
911	.long	2964757301
912	.long	1020242528
913	.long	4234512804
914	.long	1072999952
915	.long	3136030038
916	.long	1017522144
917	.long	3248069132
918	.long	1073009528
919	.long	1506192355
920	.long	1018050472
921	.long	3932628500
922	.long	1073018509
923	.long	1045823554
924	.long	1019946655
925	.long	4195697848
926	.long	1073026948
927	.long	233443322
928	.long	1018917447
929	.long	2501811452
930	.long	1073034892
931	.long	901427976
932	.long	1017333852
933	.long	866379428
934	.long	1073049455
935	.long	2437443742
936	.long	1019678792
937	.long	1376865888
938	.long	1073062480
939	.long	3365790232
940	.long	1014547152
941	.long	3290094268
942	.long	1073074195
943	.long	3898947415
944	.long	1018683566
945	.long	354764884
946	.long	1073084787
947	.long	3854322404
948	.long	1019662058
949	.long	3332975496
950	.long	1073094406
951	.long	3171701655
952	.long	1017830922
953	.long	1141460088
954	.long	1073103181
955	.long	3946082701
956	.long	1020032019
957	.long	745761284
958	.long	1073111216
959	.long	1347210591
960	.long	1019106121
961	.long	1673304508
962	.long	1073118600
963	.long	1760606642
964	.long	1017324577
965	.long	983388240
966	.long	1073125409
967	.long	3740651204
968	.long	1019514104
969	.long	3895509100
970	.long	1073131706
971	.long	2409629983
972	.long	1020069322
973	.long	2128523668
974	.long	1073137548
975	.long	3045605368
976	.long	1018579174
977	.long	2075485692
978	.long	1073142981
979	.long	3720571789
980	.long	1017557436
981	.long	121855976
982	.long	1073148047
983	.long	2391744767
984	.long	1020160645
985	.long	4181733780
986	.long	1073152780
987	.long	995028816
988	.long	1019681295
989	.long	2887813280
990	.long	1073157214
991	.long	218733247
992	.long	1020003509
993	.long	2862180896
994	.long	1073161375
995	.long	2043806490
996	.long	1018602288
997	.long	3909375184
998	.long	1073168973
999	.long	1559903412
1000	.long	1020103444
1001	.long	3533966292
1002	.long	1073175738
1003	.long	734884149
1004	.long	1018462962
1005	.long	3815044608
1006	.long	1073181799
1007	.long	3630523428
1008	.long	1017250093
1009	.long	739639376
1010	.long	1073187261
1011	.long	4167476661
1012	.long	1020008277
1013	.long	1068309648
1014	.long	1073192207
1015	.long	2110061437
1016	.long	1019295858
1017	.long	2350566352
1018	.long	1073196707
1019	.long	582596516
1020	.long	1018568821
1021	.long	2529520024
1022	.long	1073200819
1023	.long	745552787
1024	.long	1019053165
1025	.long	1841667508
1026	.long	1073204591
1027	.long	3982568700
1028	.long	1016503327
1029	.long	2242261080
1030	.long	1073208063
1031	.long	3433582258
1032	.long	1016196763
1033	.long	715134328
1034	.long	1073211270
1035	.long	355901358
1036	.long	1020087916
1037	.long	2700735876
1038	.long	1073214240
1039	.long	3640957736
1040	.long	1019780205
1041	.long	141607580
1042	.long	1073217000
1043	.long	2488245051
1044	.long	1020262395
1045	.long	287934404
1046	.long	1073219570
1047	.long	2392691085
1048	.long	1019883292
1049	.long	2363373988
1050	.long	1073221969
1051	.long	4194561737
1052	.long	1019237447
1053	.long	3829340424
1054	.long	1073224214
1055	.long	429455526
1056	.long	1019490975
1057	.long	1988805928
1058	.long	1073226320
1059	.long	3029848706
1060	.long	1018104889
1061	.long	1647572320
1062	.long	1073230161
1063	.long	10289938
1064	.long	1017394880
1065	.long	3988000624
1066	.long	1073233576
1067	.long	1957559169
1068	.long	1019434816
1069	.long	4263843944
1070	.long	1073236633
1071	.long	204710264
1072	.long	1019908761
1073	.long	663197724
1074	.long	1073239386
1075	.long	1921757578
1076	.long	1019778948
1077	.long	3560800700
1078	.long	1073241876
1079	.long	3994348896
1080	.long	1019230192
1081	.long	2441785656
1082	.long	1073244141
1083	.long	871468611
1084	.long	1014800505
1085	.long	3277400272
1086	.long	1073246209
1087	.long	4092218139
1088	.long	1020040842
1089	.long	3951990120
1090	.long	1073248105
1091	.long	4276546478
1092	.long	1019763677
1093	.long	2737338540
1094	.long	1073249850
1095	.long	252776012
1096	.long	1018794951
1097	.long	1511361316
1098	.long	1073251461
1099	.long	3119653999
1100	.long	1018514803
1101	.long	3969162516
1102	.long	1073252952
1103	.long	1037069016
1104	.long	1016792900
1105	.long	413985240
1106	.long	1073254338
1107	.long	4110171432
1108	.long	1020001345
1109	.long	3681283576
1110	.long	1073255627
1111	.long	1463092818
1112	.long	1020260354
1113	.long	3146455488
1114	.long	1073256831
1115	.long	1031209123
1116	.long	1016554799
1117	.long	95214512
1118	.long	1073257958
1119	.long	1373808632
1120	.long	1019493031
1121	.long	4250240828
1122	.long	1073259013
1123	.long	3891047882
1124	.long	1020108730
1125	.long	1413754136
1126	.long	1073291771
1127	.long	856972295
1128	.long	1016178214
1129	.type	ATAN_TBL,@object
1130	.size	ATAN_TBL,2624
1131	.align 16
1132P_TBL2:
1133	.long	0
1134	.long	0
1135	.long	0
1136	.long	0
1137	.long	0
1138	.long	0
1139	.long	0
1140	.long	0
1141	.long	856972295
1142	.long	1017226790
1143	.long	1413754136
1144	.long	1074340347
1145	.long	856972295
1146	.long	3164710438
1147	.long	1413754136
1148	.long	3221823995
1149	.type	P_TBL2,@object
1150	.size	P_TBL2,64
1151	.align 16
1152SELECT_B:
1153	.long	0
1154	.long	0
1155	.long	4294967295
1156	.long	4294967295
1157	.long	0
1158	.long	0
1159	.long	4294967295
1160	.long	4294967295
1161	.long	4294967295
1162	.long	4294967295
1163	.long	0
1164	.long	0
1165	.long	4294967295
1166	.long	4294967295
1167	.long	0
1168	.long	0
1169	.type	SELECT_B,@object
1170	.size	SELECT_B,64
1171	.align 16
1172SGNMASK:
1173	.long	0
1174	.long	2147483648
1175	.long	0
1176	.long	2147483648
1177	.type	SGNMASK,@object
1178	.size	SGNMASK,16
1179	.align 16
1180pi_table:
1181	.long	1413754136
1182	.long	1074340347
1183	.long	856972295
1184	.long	1017226790
1185	.type	pi_table,@object
1186	.size	pi_table,16
1187	.align 16
1188pi2_table:
1189	.long	1413754136
1190	.long	1073291771
1191	.long	856972295
1192	.long	1016178214
1193	.type	pi2_table,@object
1194	.size	pi2_table,16
1195	.align 16
1196pi4_table:
1197	.long	1413754136
1198	.long	1072243195
1199	.long	856972295
1200	.long	1015129638
1201	.type	pi4_table,@object
1202	.size	pi4_table,16
1203	.align 4
1204POW55:
1205	.long	0
1206	.long	1130364928
1207	.type	POW55,@object
1208	.size	POW55,8
1209	.align 4
1210INVEXPMASK:
1211	.long	4294967295
1212	.long	2148532223
1213	.type	INVEXPMASK,@object
1214	.size	INVEXPMASK,8
1215	.align 4
1216EXPMASK:
1217	.long	0
1218	.long	1072693248
1219	.type	EXPMASK,@object
1220	.size	EXPMASK,8
1221	.data
1222	.section .note.GNU-stack, ""
1223// -- Begin DWARF2 SEGMENT .eh_frame
1224	.section .eh_frame,"a",@progbits
1225.eh_frame_seg:
1226	.align 1
1227	.4byte 0x00000014
1228	.8byte 0x00527a0100000000
1229	.8byte 0x08070c1b01107801
1230	.4byte 0x00000190
1231	.4byte 0x0000001c
1232	.4byte 0x0000001c
1233	.4byte ..___tag_value_atan2.1-.
1234	.4byte ..___tag_value_atan2.5-..___tag_value_atan2.1
1235	.2byte 0x0400
1236	.4byte ..___tag_value_atan2.3-..___tag_value_atan2.1
1237	.2byte 0x200e
1238	.byte 0x04
1239	.4byte ..___tag_value_atan2.4-..___tag_value_atan2.3
1240	.2byte 0x080e
1241	.byte 0x00
1242# End
1243