aboutsummaryrefslogtreecommitdiff
path: root/libm/x86/e_atan2.S
blob: 1efdf65820a0b1463be47f13769706ff51935719 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
/*
Copyright (c) 2014, Intel Corporation
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
    * this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright notice,
    * this list of conditions and the following disclaimer in the documentation
    * and/or other materials provided with the distribution.

    * Neither the name of Intel Corporation nor the names of its contributors
    * may be used to endorse or promote products derived from this software
    * without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/******************************************************************************/
//                     ALGORITHM DESCRIPTION
//                     ---------------------
//
//
//1. The method is based on the relationship of atan2(Y,X) to atan(|Y/X|)
//   as follows.
//                   /  sign(Y) atan(|Y/X|)                if X > 0
//       atan2(Y,X) =
//                   \  sign(Y)*pi  - sign(Y)*atan(|Y/X|)  if X < 0
//
//   Thus, atan2(Y,X) is of the form  atan2(Y,X) = PI + sgn*atan(|Y/X|)
//   where PI and sgn can be determined by the four possible combinations of
//   of the pair (sign(X),sign(Y)). We concentrate on the numerical method
//   for atan(|Y/X|).
//
//2. For |Y/X| < 2^(-64), atan(|Y/X|) ~=~ |Y/X|. Hence, atan2(Y,X) is  Y/X
//   if X > 0, and sign(Y)*pi otherwise.
//3. For |Y/X| >= 2^(65), atan(|Y/X|) ~=~ pi/2. Hence atan2(Y,X) is sign(Y)pi/2.
//4. For 2^(-64) <= |Y/X| < 2^(-5), atan(|Y/X|) is approximated by a polynomial
//   of the form  Z + Z*E*polynomial(E), where Z = |Y/X| and E = Z*Z.
//5. For |Y/X| > 2^(5), atan(|Y/X|) = pi/2 + atan(-|X/Y|), and atan(-|X/Y|) is
//   calculated using the polynomial in 4 above.
//6. For 2^(-5) <= |Y/X| <= 2^(5), we employ a table lookup method. First,
//   we obtain B = 2^k * 1.b1 b2 b3 b4 = 2^k * (1+k/16) that approximate
//   |Y/X| to approximately 5 significant bits. Hence, atan(|Y/X|) is
//
//      atan(|Y/X|)  =  atan(B) + atan(Z), where  Z = (|Y|-B|X|)/(|X|+B|Y|).
//                  ~=~   tau   + Z + Z*E*polynomial(E), where E = Z*Z.
//
//   B has the range from 2^(-6)*(1+14/16) to 2^5 = 2^(5)*(1+0/16), totally
//   163 possible values. These values are calculated beforehand and stored
//   in a table. The polynomial is the one used in 4.
//
// Special cases:
//  atan2(+-0, +0) = +-0
//  atan2(+-0, -0) = +-pi
//  atan2(+-0, x) = +-0, for x > 0, and +-pi, for x < 0
//  atan2(y, +-0) = +pi/2 for y > 0, and -pi/2 for y < 0
//  atan2(+-y, +INF) = +-0, for finite y > 0
//  atan2(+-y, -INF) = +-pi, for finite y > 0
//  atan2(+-INF, x) = +-pi/2, for finite x
//  atan2(+-INF, +INF) = +-pi/4
//  atan2(+-INF, -INF) = +-3*pi/4
//
/******************************************************************************/

#include <private/bionic_asm.h>
# -- Begin  static_func
        .text
        .align __bionic_asm_align
        .type static_func, @function
static_func:
..B1.1:
        call      ..L2
..L2:
        popl      %eax
        lea       _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax
        lea       static_const_table@GOTOFF(%eax), %eax
        ret
        .size   static_func,.-static_func
# -- End  static_func

# -- Begin  atan2
ENTRY(atan2)
# parameter 1: 8 + %ebp
# parameter 2: 16 + %ebp
..B2.1:
..B2.2:
        pushl     %ebp
        movl      %esp, %ebp
        subl      $120, %esp
        movl      %ebx, 64(%esp)
        call      static_func
        movl      %eax, %ebx
        movsd     136(%esp), %xmm1
        movsd     128(%esp), %xmm0
        pextrw    $3, %xmm0, %eax
        movq      %xmm0, 8(%esp)
        andl      $32752, %eax
        movq      %xmm1, 16(%esp)
        subl      $14448, %eax
        cmpl      $3840, %eax
        ja        .L_2TAG_PACKET_0.0.2
        pextrw    $3, %xmm1, %eax
        andl      $32752, %eax
        subl      $14448, %eax
        cmpl      $3840, %eax
        ja        .L_2TAG_PACKET_1.0.2
.L_2TAG_PACKET_2.0.2:
        unpcklpd  %xmm1, %xmm0
        xorpd     %xmm5, %xmm5
        xorpd     %xmm3, %xmm3
        movl      $2048, %eax
        pinsrw    $3, %eax, %xmm5
        paddw     %xmm1, %xmm5
        psrlq     $29, %xmm5
        rcpss     %xmm5, %xmm3
        xorpd     %xmm4, %xmm4
        movl      $14336, %ecx
        pinsrw    $3, %ecx, %xmm4
        psllq     $29, %xmm3
        paddw     %xmm4, %xmm3
        mulsd     %xmm0, %xmm3
        xorpd     %xmm2, %xmm2
        xorpd     %xmm6, %xmm6
        xorpd     %xmm7, %xmm7
        movl      $32768, %eax
        pinsrw    $2, %eax, %xmm6
        movl      $32767, %ecx
        pinsrw    $3, %ecx, %xmm7
        paddd     %xmm6, %xmm3
        andpd     %xmm7, %xmm3
        movapd    %xmm3, %xmm5
        pextrw    $3, %xmm3, %eax
        movl      $16448, %ecx
        pinsrw    $3, %ecx, %xmm2
        minsd     %xmm2, %xmm3
        movmskpd  %xmm0, %edx
        psllq     $1, %xmm0
        psrlq     $1, %xmm0
        cmpsd     $2, %xmm2, %xmm5
        psllq     $1, %xmm1
        psrlq     $1, %xmm1
        movapd    %xmm1, %xmm6
        movapd    %xmm1, %xmm7
        movapd    %xmm0, %xmm2
        movl      $0, %ecx
        pinsrw    $0, %ecx, %xmm6
        subsd     %xmm6, %xmm7
        movapd    %xmm0, %xmm4
        mulsd     %xmm3, %xmm6
        mulsd     %xmm3, %xmm4
        mulsd     %xmm3, %xmm7
        andpd     %xmm5, %xmm0
        subsd     %xmm6, %xmm0
        andpd     %xmm5, %xmm1
        addsd     %xmm1, %xmm4
        subsd     %xmm7, %xmm0
        andl      $32752, %eax
        subl      $16286, %eax
        cmpl      $1121, %eax
        ja        .L_2TAG_PACKET_3.0.2
        divsd     %xmm4, %xmm0
        pextrw    $3, %xmm3, %ecx
        movsd     2944(%ebx), %xmm2
        movsd     2960(%ebx), %xmm3
        pextrw    $0, %xmm5, %eax
        addl      %edx, %edx
        movapd    2688(%ebx,%edx,8), %xmm6
        movapd    2752(%ebx,%edx,8), %xmm1
        subl      $16286, %ecx
        notl      %eax
        andl      $1, %eax
        addl      %eax, %ecx
        addl      %ecx, %ecx
        movapd    (%ebx,%ecx,8), %xmm5
        xorpd     %xmm1, %xmm5
        addpd     %xmm6, %xmm5
        movapd    %xmm5, %xmm6
        unpckhpd  %xmm5, %xmm5
        xorpd     %xmm0, %xmm1
        movapd    %xmm1, %xmm4
        mulsd     %xmm0, %xmm0
        mulsd     %xmm0, %xmm2
        addsd     %xmm0, %xmm3
        addsd     %xmm6, %xmm1
        subsd     %xmm1, %xmm6
        addsd     %xmm4, %xmm6
        addsd     2952(%ebx), %xmm2
        mulsd     %xmm0, %xmm3
        mulsd     %xmm0, %xmm4
        addsd     %xmm5, %xmm6
        mulsd     %xmm4, %xmm2
        addsd     2968(%ebx), %xmm3
        mulsd     %xmm3, %xmm2
        addsd     %xmm6, %xmm2
        addsd     %xmm2, %xmm1
        movsd     %xmm1, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_3.0.2:
        addl      $942, %eax
        cmpl      $942, %eax
        ja        .L_2TAG_PACKET_5.0.2
        xorpd     %xmm4, %xmm4
        movl      $16368, %ecx
        pinsrw    $3, %ecx, %xmm4
        divsd     %xmm1, %xmm4
        addl      %edx, %edx
        movapd    2752(%ebx,%edx,8), %xmm6
        unpcklpd  %xmm3, %xmm3
        xorpd     %xmm6, %xmm0
        xorpd     %xmm6, %xmm2
        xorpd     %xmm6, %xmm3
        movapd    2816(%ebx,%edx,8), %xmm7
        movsd     2944(%ebx), %xmm1
        movsd     2960(%ebx), %xmm5
        andpd     2880(%ebx,%edx,8), %xmm3
        mulsd     %xmm4, %xmm2
        mulsd     %xmm4, %xmm0
        movapd    %xmm2, %xmm6
        mulsd     %xmm2, %xmm2
        mulsd     %xmm2, %xmm1
        addsd     %xmm2, %xmm5
        mulsd     %xmm2, %xmm6
        addsd     2952(%ebx), %xmm1
        mulsd     %xmm2, %xmm5
        addsd     %xmm0, %xmm7
        addpd     %xmm3, %xmm7
        mulsd     %xmm6, %xmm1
        addsd     2968(%ebx), %xmm5
        mulsd     %xmm1, %xmm5
        addsd     %xmm7, %xmm5
        unpckhpd  %xmm7, %xmm7
        addsd     %xmm7, %xmm5
        movsd     %xmm5, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_5.0.2:
        movsd     16(%esp), %xmm1
        movsd     8(%esp), %xmm0
        pextrw    $3, %xmm1, %eax
        andl      $32752, %eax
        pextrw    $3, %xmm0, %ecx
        andl      $32752, %ecx
        cmpl      %eax, %ecx
        jg        .L_2TAG_PACKET_6.0.2
        pextrw    $3, %xmm1, %ecx
        cmpl      $32767, %ecx
        jg        .L_2TAG_PACKET_7.0.2
        divsd     %xmm1, %xmm0
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_7.0.2:
        andpd     2672(%ebx), %xmm0
        movsd     2640(%ebx), %xmm2
        xorpd     %xmm2, %xmm0
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_6.0.2:
        andpd     2672(%ebx), %xmm0
        movsd     2624(%ebx), %xmm2
        xorpd     %xmm2, %xmm0
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_0.0.2:
.L_2TAG_PACKET_1.0.2:
        pextrw    $3, %xmm0, %ecx
        andl      $32752, %ecx
        pextrw    $3, %xmm1, %eax
        andl      $32752, %eax
        cmpl      $32752, %ecx
        je        .L_2TAG_PACKET_8.0.2
        cmpl      $32752, %eax
        je        .L_2TAG_PACKET_9.0.2
        movsd     2992(%ebx), %xmm3
        movl      $1024, %edx
        movsd     2976(%ebx), %xmm4
        xorpd     %xmm6, %xmm6
        movsd     3008(%ebx), %xmm7
        cmpl      $0, %ecx
        je        .L_2TAG_PACKET_10.0.2
.L_2TAG_PACKET_11.0.2:
        cmpl      $0, %eax
        je        .L_2TAG_PACKET_12.0.2
.L_2TAG_PACKET_13.0.2:
        addl      %ecx, %edx
        subl      %eax, %edx
        cmpl      $2048, %edx
        ja        .L_2TAG_PACKET_5.0.2
        addl      $15344, %edx
        pinsrw    $3, %edx, %xmm6
        andpd     %xmm4, %xmm0
        andpd     %xmm4, %xmm1
        orpd      %xmm6, %xmm0
        orpd      %xmm7, %xmm1
        jmp       .L_2TAG_PACKET_2.0.2
.L_2TAG_PACKET_10.0.2:
        subl      $880, %edx
        mulsd     %xmm3, %xmm0
        pextrw    $3, %xmm0, %ecx
        andl      $32752, %ecx
        cmpl      $0, %ecx
        je        .L_2TAG_PACKET_14.0.2
        jmp       .L_2TAG_PACKET_11.0.2
.L_2TAG_PACKET_12.0.2:
        addl      $880, %edx
        mulsd     %xmm3, %xmm1
        pextrw    $3, %xmm1, %eax
        andl      $32752, %eax
        cmpl      $0, %eax
        je        .L_2TAG_PACKET_15.0.2
        jmp       .L_2TAG_PACKET_13.0.2
.L_2TAG_PACKET_8.0.2:
        movd      %xmm0, %edx
        movapd    %xmm0, %xmm2
        psrlq     $32, %xmm2
        movd      %xmm2, %ecx
        andl      $1048575, %ecx
        orl       %edx, %ecx
        cmpl      $0, %ecx
        jne       .L_2TAG_PACKET_16.0.2
        psrlq     $63, %xmm0
        psllq     $63, %xmm0
        cmpl      $32752, %eax
        jae       .L_2TAG_PACKET_17.0.2
        movapd    2624(%ebx), %xmm5
        pshufd    $238, %xmm5, %xmm4
        addsd     %xmm4, %xmm5
        orpd      %xmm5, %xmm0
.L_2TAG_PACKET_18.0.2:
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_16.0.2:
        addsd     %xmm1, %xmm0
        jmp       .L_2TAG_PACKET_18.0.2
.L_2TAG_PACKET_17.0.2:
        movd      %xmm1, %eax
        movapd    %xmm1, %xmm2
        psrlq     $32, %xmm2
        movd      %xmm2, %ecx
        movl      $-2147483648, %edx
        andl      %ecx, %edx
        andl      $1048575, %ecx
        orl       %eax, %ecx
        cmpl      $0, %ecx
        jne       .L_2TAG_PACKET_19.0.2
        cmpl      $0, %edx
        jne       .L_2TAG_PACKET_20.0.2
        movapd    2656(%ebx), %xmm5
        pshufd    $238, %xmm5, %xmm4
        addsd     %xmm4, %xmm5
        orpd      %xmm5, %xmm0
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_19.0.2:
        movapd    %xmm1, %xmm0
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_20.0.2:
        movapd    2656(%ebx), %xmm5
        movapd    2624(%ebx), %xmm6
        addpd     %xmm6, %xmm5
        pshufd    $238, %xmm5, %xmm6
        addpd     %xmm6, %xmm5
        orpd      %xmm5, %xmm0
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_9.0.2:
        movd      %xmm1, %eax
        movapd    %xmm1, %xmm2
        psrlq     $32, %xmm2
        movd      %xmm2, %ecx
        movl      $-2147483648, %edx
        andl      %ecx, %edx
        andl      $1048575, %ecx
        orl       %eax, %ecx
        cmpl      $0, %ecx
        jne       .L_2TAG_PACKET_19.0.2
        psrlq     $63, %xmm0
        psllq     $63, %xmm0
        cmpl      $0, %edx
        jne       .L_2TAG_PACKET_21.0.2
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_21.0.2:
        movapd    2640(%ebx), %xmm5
        pshufd    $238, %xmm5, %xmm4
        addsd     %xmm4, %xmm5
        orpd      %xmm5, %xmm0
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_14.0.2:
        pextrw    $3, %xmm1, %edx
        andl      $32768, %edx
        cmpl      $0, %edx
        je        .L_2TAG_PACKET_22.0.2
        movapd    2640(%ebx), %xmm5
        pshufd    $238, %xmm5, %xmm4
        addsd     %xmm4, %xmm5
        comisd    %xmm0, %xmm1
        orpd      %xmm5, %xmm0
        jne       .L_2TAG_PACKET_23.0.2
.L_2TAG_PACKET_24.0.2:
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_23.0.2:
        movsd     %xmm0, (%esp)
        fldl      (%esp)
        jmp       .L_2TAG_PACKET_4.0.2
.L_2TAG_PACKET_22.0.2:
        comisd    %xmm0, %xmm1
        jne       .L_2TAG_PACKET_23.0.2
        je        .L_2TAG_PACKET_24.0.2
.L_2TAG_PACKET_15.0.2:
        movapd    2624(%ebx), %xmm5
        psrlq     $63, %xmm0
        psllq     $63, %xmm0
        pshufd    $238, %xmm5, %xmm4
        addsd     %xmm4, %xmm5
        orpd      %xmm5, %xmm0
        movsd     %xmm0, (%esp)
        fldl      (%esp)
.L_2TAG_PACKET_4.0.2:
        movl      64(%esp), %ebx
        movl      %ebp, %esp
        popl      %ebp
        ret       
..B2.3:
END(atan2)
# -- End  atan2

# Start file scope ASM
ALIAS_SYMBOL(atan2l, atan2);
# End file scope ASM
	.section .rodata, "a"
	.align 16
	.align 16
static_const_table:
	.long	3390881280
	.long	1067318733
	.long	1411116779
	.long	1018950063
	.long	2985987840
	.long	1067384211
	.long	2088903695
	.long	1018086027
	.long	3148445184
	.long	1067449685
	.long	2044163806
	.long	1017271335
	.long	3667629184
	.long	1067515494
	.long	2353092775
	.long	1019967309
	.long	1546568832
	.long	1067580954
	.long	611991315
	.long	1017602584
	.long	3815996800
	.long	1067646404
	.long	466038598
	.long	1019686426
	.long	4050241920
	.long	1067711845
	.long	3265026328
	.long	1019626952
	.long	120454912
	.long	1067777277
	.long	1542207696
	.long	1020155608
	.long	2784639744
	.long	1067842697
	.long	3883834623
	.long	1018602870
	.long	1328010624
	.long	1067908107
	.long	1791097456
	.long	1019053126
	.long	2217794048
	.long	1067973505
	.long	551619938
	.long	1018494194
	.long	3333520000
	.long	1068038891
	.long	2390331823
	.long	1019033022
	.long	2557052032
	.long	1068104265
	.long	2423976108
	.long	1019728674
	.long	2067649536
	.long	1068169626
	.long	3757397745
	.long	1018672362
	.long	4047094784
	.long	1068234973
	.long	481613184
	.long	1019275104
	.long	2089853184
	.long	1068300307
	.long	1733914374
	.long	1020124677
	.long	2678003840
	.long	1068365626
	.long	1373600282
	.long	1013935474
	.long	3706496128
	.long	1068430930
	.long	1000610902
	.long	1019673285
	.long	3073179008
	.long	1068496219
	.long	1497143008
	.long	1019900342
	.long	2803716736
	.long	1068562846
	.long	1476677416
	.long	1019444094
	.long	3204984128
	.long	1068628077
	.long	1192335905
	.long	1018748628
	.long	831146624
	.long	1068693273
	.long	2733586224
	.long	1018823295
	.long	243029376
	.long	1068758431
	.long	950106081
	.long	1019046675
	.long	1735561920
	.long	1068823549
	.long	3546440856
	.long	1020104712
	.long	1339217792
	.long	1068888626
	.long	3028812387
	.long	1019818321
	.long	3706342144
	.long	1068953659
	.long	3814564029
	.long	1017763871
	.long	637726976
	.long	1069018648
	.long	3584007699
	.long	1017976868
	.long	1148779264
	.long	1069083589
	.long	2282532133
	.long	1019483954
	.long	1406131392
	.long	1069148481
	.long	1547359113
	.long	1019786342
	.long	1908875904
	.long	1069213322
	.long	1315508410
	.long	1020009473
	.long	3194947520
	.long	1069278110
	.long	3845393201
	.long	1015803761
	.long	1547487744
	.long	1069342844
	.long	3863107865
	.long	1019810104
	.long	1881061952
	.long	1069407521
	.long	4288343548
	.long	1019687581
	.long	563086336
	.long	1069472140
	.long	2582230241
	.long	1020099350
	.long	2594975552
	.long	1069536698
	.long	2306443764
	.long	1019667244
	.long	3438545024
	.long	1069606573
	.long	957455549
	.long	1015587735
	.long	4211357472
	.long	1069670906
	.long	2611778754
	.long	1017877214
	.long	3002835424
	.long	1069735101
	.long	235580458
	.long	1020211685
	.long	3905315424
	.long	1069799150
	.long	3630647617
	.long	1018736849
	.long	2849656576
	.long	1069863047
	.long	2412165062
	.long	1019693004
	.long	507429472
	.long	1069926785
	.long	1397750723
	.long	1018412717
	.long	2307470272
	.long	1069990356
	.long	1796470904
	.long	1019796181
	.long	1271814912
	.long	1070053755
	.long	189761565
	.long	1016149115
	.long	3800538144
	.long	1070116974
	.long	2524871582
	.long	1018263353
	.long	3916203552
	.long	1070180008
	.long	127848658
	.long	1017672664
	.long	457192032
	.long	1070242851
	.long	4020400938
	.long	1019823010
	.long	1385324704
	.long	1070305495
	.long	564511179
	.long	1016079094
	.long	2322869856
	.long	1070367935
	.long	2347103319
	.long	1018927760
	.long	3743438624
	.long	1070430165
	.long	877973862
	.long	1019638162
	.long	2392255552
	.long	1070492180
	.long	2432782267
	.long	1018872629
	.long	4180443328
	.long	1070553973
	.long	3102990015
	.long	1020093101
	.long	2547540832
	.long	1070636485
	.long	3877738253
	.long	1017300424
	.long	2735468912
	.long	1070697461
	.long	2446470256
	.long	1019235378
	.long	542633792
	.long	1070757943
	.long	583606328
	.long	1018624131
	.long	923265984
	.long	1070817911
	.long	1793926708
	.long	1019714161
	.long	918728448
	.long	1070877348
	.long	3726463586
	.long	1019433296
	.long	2572275008
	.long	1070936237
	.long	1845354238
	.long	1019459238
	.long	50974688
	.long	1070994564
	.long	983808064
	.long	1016685418
	.long	1105518320
	.long	1071052313
	.long	2357496692
	.long	1015139882
	.long	1264825328
	.long	1071109472
	.long	2244129354
	.long	1019046344
	.long	961157920
	.long	1071166029
	.long	3124185339
	.long	1018541776
	.long	1162701584
	.long	1071221973
	.long	1279780948
	.long	1019268918
	.long	3284935664
	.long	1071277294
	.long	2670033472
	.long	1019833744
	.long	497441888
	.long	1071331985
	.long	1032737410
	.long	1019795212
	.long	3377383904
	.long	1071386036
	.long	2356897182
	.long	1020205553
	.long	1126962000
	.long	1071439443
	.long	3723724586
	.long	1015212418
	.long	90291008
	.long	1071492199
	.long	4178672431
	.long	1020186971
	.long	190059536
	.long	1071595741
	.long	1763589807
	.long	1019162163
	.long	2497392840
	.long	1071670654
	.long	3036997041
	.long	1020204325
	.long	2616971944
	.long	1071719773
	.long	300151069
	.long	1017041957
	.long	2883518128
	.long	1071767563
	.long	2203981414
	.long	1019190108
	.long	1496354352
	.long	1071814030
	.long	332287966
	.long	1016846435
	.long	483276728
	.long	1071859184
	.long	653845024
	.long	1018830914
	.long	3097401072
	.long	1071903039
	.long	1514746408
	.long	1019278972
	.long	2737217248
	.long	1071945615
	.long	1358845067
	.long	1017268275
	.long	2072577560
	.long	1071986933
	.long	3041024735
	.long	1019929672
	.long	2266405656
	.long	1072027017
	.long	1271261130
	.long	1012925070
	.long	958652544
	.long	1072065894
	.long	2158017058
	.long	1019955372
	.long	3312993840
	.long	1072103591
	.long	765809169
	.long	1019114443
	.long	3177001304
	.long	1072140139
	.long	144180084
	.long	1019822186
	.long	3071642184
	.long	1072175568
	.long	4004602424
	.long	1019420740
	.long	4283953648
	.long	1072209909
	.long	1511950430
	.long	1020176966
	.long	1413754136
	.long	1072243195
	.long	856972295
	.long	1015129638
	.long	4073202944
	.long	1072306725
	.long	4068194804
	.long	1019714860
	.long	946117760
	.long	1072366415
	.long	694980733
	.long	1020150135
	.long	3980632032
	.long	1072422512
	.long	1313251280
	.long	1019948709
	.long	1468297112
	.long	1072475260
	.long	330111143
	.long	1019809198
	.long	3478063816
	.long	1072524887
	.long	2930067044
	.long	1017784081
	.long	1153979856
	.long	1072571613
	.long	2225786102
	.long	1017634481
	.long	2089828808
	.long	1072615641
	.long	474621367
	.long	1017043414
	.long	3531732632
	.long	1072657163
	.long	2276396220
	.long	1018757240
	.long	775214612
	.long	1072694803
	.long	3209744818
	.long	1019963015
	.long	662307284
	.long	1072713319
	.long	1381696763
	.long	1019763781
	.long	1192776652
	.long	1072730830
	.long	3017932994
	.long	1015179769
	.long	744202396
	.long	1072747407
	.long	2073854034
	.long	1019512292
	.long	8337908
	.long	1072763115
	.long	16004448
	.long	1019599514
	.long	3589868768
	.long	1072778013
	.long	1374369804
	.long	1018019237
	.long	121647320
	.long	1072792159
	.long	128481634
	.long	1018115438
	.long	2464923204
	.long	1072805601
	.long	1787331214
	.long	1016798022
	.long	4093304372
	.long	1072830562
	.long	3306868969
	.long	1019384078
	.long	1436891684
	.long	1072853231
	.long	676347266
	.long	1017302183
	.long	1104571840
	.long	1072873890
	.long	2870400285
	.long	1019938149
	.long	2037009832
	.long	1072892781
	.long	2956702105
	.long	1016472908
	.long	3139037960
	.long	1072910111
	.long	916057147
	.long	1018364335
	.long	1826698064
	.long	1072926058
	.long	2171961098
	.long	1019669816
	.long	1353941060
	.long	1072940774
	.long	1722928782
	.long	1019926215
	.long	1803191644
	.long	1072954391
	.long	1547878639
	.long	1020259262
	.long	1092591296
	.long	1072967024
	.long	3070107923
	.long	1018320401
	.long	2205372832
	.long	1072978772
	.long	787328196
	.long	1014621351
	.long	1291577100
	.long	1072989723
	.long	2964757301
	.long	1020242528
	.long	4234512804
	.long	1072999952
	.long	3136030038
	.long	1017522144
	.long	3248069132
	.long	1073009528
	.long	1506192355
	.long	1018050472
	.long	3932628500
	.long	1073018509
	.long	1045823554
	.long	1019946655
	.long	4195697848
	.long	1073026948
	.long	233443322
	.long	1018917447
	.long	2501811452
	.long	1073034892
	.long	901427976
	.long	1017333852
	.long	866379428
	.long	1073049455
	.long	2437443742
	.long	1019678792
	.long	1376865888
	.long	1073062480
	.long	3365790232
	.long	1014547152
	.long	3290094268
	.long	1073074195
	.long	3898947415
	.long	1018683566
	.long	354764884
	.long	1073084787
	.long	3854322404
	.long	1019662058
	.long	3332975496
	.long	1073094406
	.long	3171701655
	.long	1017830922
	.long	1141460088
	.long	1073103181
	.long	3946082701
	.long	1020032019
	.long	745761284
	.long	1073111216
	.long	1347210591
	.long	1019106121
	.long	1673304508
	.long	1073118600
	.long	1760606642
	.long	1017324577
	.long	983388240
	.long	1073125409
	.long	3740651204
	.long	1019514104
	.long	3895509100
	.long	1073131706
	.long	2409629983
	.long	1020069322
	.long	2128523668
	.long	1073137548
	.long	3045605368
	.long	1018579174
	.long	2075485692
	.long	1073142981
	.long	3720571789
	.long	1017557436
	.long	121855976
	.long	1073148047
	.long	2391744767
	.long	1020160645
	.long	4181733780
	.long	1073152780
	.long	995028816
	.long	1019681295
	.long	2887813280
	.long	1073157214
	.long	218733247
	.long	1020003509
	.long	2862180896
	.long	1073161375
	.long	2043806490
	.long	1018602288
	.long	3909375184
	.long	1073168973
	.long	1559903412
	.long	1020103444
	.long	3533966292
	.long	1073175738
	.long	734884149
	.long	1018462962
	.long	3815044608
	.long	1073181799
	.long	3630523428
	.long	1017250093
	.long	739639376
	.long	1073187261
	.long	4167476661
	.long	1020008277
	.long	1068309648
	.long	1073192207
	.long	2110061437
	.long	1019295858
	.long	2350566352
	.long	1073196707
	.long	582596516
	.long	1018568821
	.long	2529520024
	.long	1073200819
	.long	745552787
	.long	1019053165
	.long	1841667508
	.long	1073204591
	.long	3982568700
	.long	1016503327
	.long	2242261080
	.long	1073208063
	.long	3433582258
	.long	1016196763
	.long	715134328
	.long	1073211270
	.long	355901358
	.long	1020087916
	.long	2700735876
	.long	1073214240
	.long	3640957736
	.long	1019780205
	.long	141607580
	.long	1073217000
	.long	2488245051
	.long	1020262395
	.long	287934404
	.long	1073219570
	.long	2392691085
	.long	1019883292
	.long	2363373988
	.long	1073221969
	.long	4194561737
	.long	1019237447
	.long	3829340424
	.long	1073224214
	.long	429455526
	.long	1019490975
	.long	1988805928
	.long	1073226320
	.long	3029848706
	.long	1018104889
	.long	1647572320
	.long	1073230161
	.long	10289938
	.long	1017394880
	.long	3988000624
	.long	1073233576
	.long	1957559169
	.long	1019434816
	.long	4263843944
	.long	1073236633
	.long	204710264
	.long	1019908761
	.long	663197724
	.long	1073239386
	.long	1921757578
	.long	1019778948
	.long	3560800700
	.long	1073241876
	.long	3994348896
	.long	1019230192
	.long	2441785656
	.long	1073244141
	.long	871468611
	.long	1014800505
	.long	3277400272
	.long	1073246209
	.long	4092218139
	.long	1020040842
	.long	3951990120
	.long	1073248105
	.long	4276546478
	.long	1019763677
	.long	2737338540
	.long	1073249850
	.long	252776012
	.long	1018794951
	.long	1511361316
	.long	1073251461
	.long	3119653999
	.long	1018514803
	.long	3969162516
	.long	1073252952
	.long	1037069016
	.long	1016792900
	.long	413985240
	.long	1073254338
	.long	4110171432
	.long	1020001345
	.long	3681283576
	.long	1073255627
	.long	1463092818
	.long	1020260354
	.long	3146455488
	.long	1073256831
	.long	1031209123
	.long	1016554799
	.long	95214512
	.long	1073257958
	.long	1373808632
	.long	1019493031
	.long	4250240828
	.long	1073259013
	.long	3891047882
	.long	1020108730
	.long	1413754136
	.long	1073291771
	.long	856972295
	.long	1016178214
	.long	1413754136
	.long	1073291771
	.long	856972295
	.long	1016178214
	.long	1413754136
	.long	1074340347
	.long	856972295
	.long	1017226790
	.long	1413754136
	.long	1072243195
	.long	856972295
	.long	1015129638
	.long	0
	.long	2147483648
	.long	0
	.long	2147483648
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	1413754136
	.long	1074340347
	.long	856972295
	.long	1017226790
	.long	1413754136
	.long	3221823995
	.long	856972295
	.long	3164710438
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	2147483648
	.long	0
	.long	2147483648
	.long	0
	.long	2147483648
	.long	0
	.long	2147483648
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	0
	.long	856972295
	.long	1017226790
	.long	1413754136
	.long	1074340347
	.long	856972295
	.long	3164710438
	.long	1413754136
	.long	3221823995
	.long	0
	.long	0
	.long	4294967295
	.long	4294967295
	.long	0
	.long	0
	.long	4294967295
	.long	4294967295
	.long	4294967295
	.long	4294967295
	.long	0
	.long	0
	.long	4294967295
	.long	4294967295
	.long	0
	.long	0
	.long	2006262985
	.long	1069310863
	.long	2358449471
	.long	3217342131
	.long	3845454352
	.long	1069952297
	.long	2829679149
	.long	1073771565
	.long	4294967295
	.long	2148532223
	.long	0
	.long	0
	.long	0
	.long	1130364928
	.long	0
	.long	0
	.long	0
	.long	1072693248
	.long	0
	.long	0
	.type	static_const_table,@object
	.size	static_const_table,3024
	.data
	.section .note.GNU-stack, ""
# End