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// Polynomials coefficients and other constants.
36//
37// Note that in this algorithm, there is a different polynomial for
38// each breakpoint, so there are 32 sets of polynomial coefficients
39// as well as 32 instances of the other constants.
40//
41// The polynomial coefficients and constants are offset from the start
42// of the main block as follows:
43//
44//   0:  c8 | c0
45//  16:  c9 | c1
46//  32: c10 | c2
47//  48: c11 | c3
48//  64: c12 | c4
49//  80: c13 | c5
50//  96: c14 | c6
51// 112: c15 | c7
52// 128: T_hi
53// 136: T_lo
54// 144: Sigma
55// 152: T_hl
56// 160: Tau
57// 168: Mask
58// 176: (end of block)
59//
60// The total table size is therefore 5632 bytes.
61//
62// Note that c0 and c1 are always zero. We could try storing
63// other constants here, and just loading the low part of the
64// SIMD register in these cases, after ensuring the high part
65// is zero.
66//
67// The higher terms of the polynomial are computed in the *low*
68// part of the SIMD register. This is so we can overlap the
69// multiplication by r^8 and the unpacking of the other part.
70//
71// The constants are:
72// T_hi + T_lo = accurate constant term in power series
73// Sigma + T_hl = accurate coefficient of r in power series (Sigma=1 bit)
74// Tau = multiplier for the reciprocal, always -1 or 0
75//
76// The basic reconstruction formula using these constants is:
77//
78// High = tau * recip_hi + t_hi
79// Med = (sgn * r + t_hl * r)_hi
80// Low = (sgn * r + t_hl * r)_lo +
81//       tau * recip_lo + T_lo + (T_hl + sigma) * c + pol
82//
83// where pol = c0 + c1 * r + c2 * r^2 + ... + c15 * r^15
84//
85// (c0 = c1 = 0, but using them keeps SIMD regularity)
86//
87// We then do a compensated sum High + Med, add the low parts together
88// and then do the final sum.
89//
90// Here recip_hi + recip_lo is an accurate reciprocal of the remainder
91// modulo pi/2
92//
93// Special cases:
94//  tan(NaN) = quiet NaN, and raise invalid exception
95//  tan(INF) = NaN and raise invalid exception
96//  tan(+/-0) = +/-0
97//
98/******************************************************************************/
99
100#include <private/bionic_asm.h>
101# -- Begin  static_func
102        .text
103        .align __bionic_asm_align
104        .type static_func, @function
105static_func:
106..B1.1:
107        call      ..L2
108..L2:
109        popl      %eax
110        lea       _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax
111        lea       static_const_table@GOTOFF(%eax), %eax
112        ret
113        .size   static_func,.-static_func
114# -- End  static_func
115
116# -- Begin  tan
117ENTRY(tan)
118# parameter 1: 8 + %ebp
119..B2.1:
120..B2.2:
121        pushl     %ebp
122        movl      %esp, %ebp
123        subl      $120, %esp
124        movl      %ebx, 56(%esp)
125        call      static_func
126        movl      %eax, %ebx
127        movsd     128(%esp), %xmm0
128        pextrw    $3, %xmm0, %eax
129        andl      $32767, %eax
130        subl      $14368, %eax
131        cmpl      $2216, %eax
132        ja        .L_2TAG_PACKET_0.0.2
133        movapd    5840(%ebx), %xmm5
134        movapd    5856(%ebx), %xmm6
135        unpcklpd  %xmm0, %xmm0
136        movapd    5712(%ebx), %xmm4
137        andpd     %xmm0, %xmm4
138        movapd    5632(%ebx), %xmm1
139        mulpd     %xmm0, %xmm1
140        orpd      %xmm4, %xmm5
141        addpd     %xmm5, %xmm1
142        movapd    %xmm1, %xmm7
143        unpckhpd  %xmm7, %xmm7
144        cvttsd2si %xmm7, %edx
145        cvttpd2dq %xmm1, %xmm1
146        cvtdq2pd  %xmm1, %xmm1
147        mulpd     %xmm6, %xmm1
148        movapd    5664(%ebx), %xmm3
149        movsd     5728(%ebx), %xmm5
150        addl      $469248, %edx
151        movapd    5680(%ebx), %xmm4
152        mulpd     %xmm1, %xmm3
153        andl      $31, %edx
154        mulsd     %xmm1, %xmm5
155        movl      %edx, %ecx
156        mulpd     %xmm1, %xmm4
157        shll      $1, %ecx
158        subpd     %xmm3, %xmm0
159        mulpd     5696(%ebx), %xmm1
160        addl      %ecx, %edx
161        shll      $2, %ecx
162        addl      %ecx, %edx
163        addsd     %xmm0, %xmm5
164        movapd    %xmm0, %xmm2
165        subpd     %xmm4, %xmm0
166        movsd     5744(%ebx), %xmm6
167        shll      $4, %edx
168        lea       (%ebx), %eax
169        andpd     5776(%ebx), %xmm5
170        movapd    %xmm0, %xmm3
171        addl      %edx, %eax
172        subpd     %xmm0, %xmm2
173        unpckhpd  %xmm0, %xmm0
174        divsd     %xmm5, %xmm6
175        subpd     %xmm4, %xmm2
176        movapd    16(%eax), %xmm7
177        subsd     %xmm5, %xmm3
178        mulpd     %xmm0, %xmm7
179        subpd     %xmm1, %xmm2
180        movapd    48(%eax), %xmm1
181        mulpd     %xmm0, %xmm1
182        movapd    96(%eax), %xmm4
183        mulpd     %xmm0, %xmm4
184        addsd     %xmm3, %xmm2
185        movapd    %xmm0, %xmm3
186        mulpd     %xmm0, %xmm0
187        addpd     (%eax), %xmm7
188        addpd     32(%eax), %xmm1
189        mulpd     %xmm0, %xmm1
190        addpd     80(%eax), %xmm4
191        addpd     %xmm1, %xmm7
192        movapd    112(%eax), %xmm1
193        mulpd     %xmm0, %xmm1
194        mulpd     %xmm0, %xmm0
195        addpd     %xmm1, %xmm4
196        movapd    64(%eax), %xmm1
197        mulpd     %xmm0, %xmm1
198        addpd     %xmm1, %xmm7
199        movapd    %xmm3, %xmm1
200        mulpd     %xmm0, %xmm3
201        mulsd     %xmm0, %xmm0
202        mulpd     144(%eax), %xmm1
203        mulpd     %xmm3, %xmm4
204        movapd    %xmm1, %xmm3
205        addpd     %xmm4, %xmm7
206        movapd    %xmm1, %xmm4
207        mulsd     %xmm7, %xmm0
208        unpckhpd  %xmm7, %xmm7
209        addsd     %xmm7, %xmm0
210        unpckhpd  %xmm1, %xmm1
211        addsd     %xmm1, %xmm3
212        subsd     %xmm3, %xmm4
213        addsd     %xmm4, %xmm1
214        movapd    %xmm2, %xmm4
215        movsd     144(%eax), %xmm7
216        unpckhpd  %xmm2, %xmm2
217        addsd     152(%eax), %xmm7
218        mulsd     %xmm2, %xmm7
219        addsd     136(%eax), %xmm7
220        addsd     %xmm1, %xmm7
221        addsd     %xmm7, %xmm0
222        movsd     5744(%ebx), %xmm7
223        mulsd     %xmm6, %xmm4
224        movsd     168(%eax), %xmm2
225        andpd     %xmm6, %xmm2
226        mulsd     %xmm2, %xmm5
227        mulsd     160(%eax), %xmm6
228        subsd     %xmm5, %xmm7
229        subsd     128(%eax), %xmm2
230        subsd     %xmm4, %xmm7
231        mulsd     %xmm6, %xmm7
232        movapd    %xmm3, %xmm4
233        subsd     %xmm2, %xmm3
234        addsd     %xmm3, %xmm2
235        subsd     %xmm2, %xmm4
236        addsd     %xmm4, %xmm0
237        subsd     %xmm7, %xmm0
238        addsd     %xmm3, %xmm0
239        movsd     %xmm0, (%esp)
240        fldl      (%esp)
241        jmp       .L_2TAG_PACKET_1.0.2
242.L_2TAG_PACKET_0.0.2:
243        jg        .L_2TAG_PACKET_2.0.2
244        shrl      $4, %eax
245        cmpl      $268434558, %eax
246        jne       .L_2TAG_PACKET_3.0.2
247        movapd    %xmm0, %xmm3
248        mulsd     5808(%ebx), %xmm3
249.L_2TAG_PACKET_3.0.2:
250        movsd     5792(%ebx), %xmm3
251        mulsd     %xmm0, %xmm3
252        addsd     %xmm0, %xmm3
253        mulsd     5808(%ebx), %xmm3
254        movsd     %xmm3, (%esp)
255        fldl      (%esp)
256        jmp       .L_2TAG_PACKET_1.0.2
257.L_2TAG_PACKET_2.0.2:
258        movq      5712(%ebx), %xmm7
259        andpd     %xmm0, %xmm7
260        xorpd     %xmm0, %xmm7
261        ucomisd   5760(%ebx), %xmm7
262        je        .L_2TAG_PACKET_4.0.2
263        subl      $32, %esp
264        movsd     %xmm0, (%esp)
265        lea       40(%esp), %eax
266        movl      %eax, 8(%esp)
267        movl      $2, %eax
268        movl      %eax, 12(%esp)
269        call      __libm_tancot_huge
270        addl      $32, %esp
271        fldl      8(%esp)
272        jmp       .L_2TAG_PACKET_1.0.2
273.L_2TAG_PACKET_4.0.2:
274        movq      %xmm0, (%esp)
275        fldl      (%esp)
276        fsubl     (%esp)
277.L_2TAG_PACKET_1.0.2:
278        movl      56(%esp), %ebx
279        movl      %ebp, %esp
280        popl      %ebp
281        ret
282..B2.3:
283END(tan)
284# -- End  tan
285
286# Start file scope ASM
287ALIAS_SYMBOL(tanl, tan);
288# End file scope ASM
289	.section .rodata, "a"
290	.align 16
291	.align 16
292static_const_table:
293	.long	0
294	.long	0
295	.long	0
296	.long	0
297	.long	2284589306
298	.long	1066820852
299	.long	0
300	.long	0
301	.long	0
302	.long	0
303	.long	0
304	.long	0
305	.long	1441186365
306	.long	1065494243
307	.long	1431655765
308	.long	1070945621
309	.long	0
310	.long	0
311	.long	0
312	.long	0
313	.long	236289504
314	.long	1064135997
315	.long	286331153
316	.long	1069617425
317	.long	0
318	.long	0
319	.long	0
320	.long	0
321	.long	1160476131
322	.long	1062722102
323	.long	463583772
324	.long	1068212666
325	.long	0
326	.long	0
327	.long	0
328	.long	0
329	.long	0
330	.long	1072693248
331	.long	0
332	.long	0
333	.long	0
334	.long	0
335	.long	0
336	.long	0
337	.long	1313038235
338	.long	1066745731
339	.long	0
340	.long	0
341	.long	1013878342
342	.long	1067152618
343	.long	0
344	.long	0
345	.long	3663426833
346	.long	1065725283
347	.long	3693284251
348	.long	1069118808
349	.long	650852232
350	.long	1065882376
351	.long	1996245381
352	.long	1071000265
353	.long	2008746170
354	.long	1064664197
355	.long	3055842593
356	.long	1068578846
357	.long	1495406348
358	.long	1064652437
359	.long	2269530157
360	.long	1069711235
361	.long	285563696
362	.long	1063576465
363	.long	1046897440
364	.long	1067705865
365	.long	233429731
366	.long	1063453151
367	.long	522045958
368	.long	1068476590
369	.long	2354785698
370	.long	1069102779
371	.long	1317599141
372	.long	1012432133
373	.long	0
374	.long	1072693248
375	.long	2828230105
376	.long	1065606626
377	.long	0
378	.long	0
379	.long	0
380	.long	0
381	.long	1512545955
382	.long	1068119047
383	.long	0
384	.long	0
385	.long	1127048698
386	.long	1067909459
387	.long	0
388	.long	0
389	.long	2300200450
390	.long	1067254767
391	.long	3593250296
392	.long	1070233561
393	.long	3009365544
394	.long	1066902117
395	.long	1127373050
396	.long	1071173457
397	.long	3046103305
398	.long	1066371299
399	.long	24583402
400	.long	1069723988
401	.long	4082511758
402	.long	1065914199
403	.long	3223889699
404	.long	1070020367
405	.long	548927984
406	.long	1065415756
407	.long	558065897
408	.long	1068949418
409	.long	680073315
410	.long	1064940726
411	.long	388873200
412	.long	1068944270
413	.long	3763679576
414	.long	1070167541
415	.long	1497360404
416	.long	1009710547
417	.long	0
418	.long	1072693248
419	.long	64931152
420	.long	1067729411
421	.long	0
422	.long	0
423	.long	0
424	.long	0
425	.long	2467582782
426	.long	1069256389
427	.long	0
428	.long	0
429	.long	162150096
430	.long	1068946420
431	.long	0
432	.long	0
433	.long	3702794237
434	.long	1068579152
435	.long	3631919291
436	.long	1070936926
437	.long	3456821413
438	.long	1068217218
439	.long	2031366438
440	.long	1071495745
441	.long	1596664020
442	.long	1067799281
443	.long	1509038701
444	.long	1070601643
445	.long	583171477
446	.long	1067510148
447	.long	3785344682
448	.long	1070618476
449	.long	2402036048
450	.long	1067075736
451	.long	3233018412
452	.long	1069913186
453	.long	411280568
454	.long	1066710556
455	.long	1065584192
456	.long	1069747896
457	.long	895247324
458	.long	1070819848
459	.long	500078909
460	.long	3161288781
461	.long	0
462	.long	1072693248
463	.long	729983843
464	.long	1068994194
465	.long	0
466	.long	0
467	.long	0
468	.long	0
469	.long	1458794562
470	.long	1070398550
471	.long	0
472	.long	0
473	.long	2857777489
474	.long	1070137637
475	.long	0
476	.long	0
477	.long	1024359517
478	.long	1069876531
479	.long	2616040238
480	.long	1071582937
481	.long	1609024636
482	.long	1069675088
483	.long	2529240549
484	.long	1071836633
485	.long	1510128600
486	.long	1069440113
487	.long	2251697184
488	.long	1071253687
489	.long	1262761453
490	.long	1069142850
491	.long	1263091857
492	.long	1071190461
493	.long	3043383486
494	.long	1068885191
495	.long	2476932470
496	.long	1070842002
497	.long	3659995028
498	.long	1068669200
499	.long	855891755
500	.long	1070696894
501	.long	2583490354
502	.long	1071284857
503	.long	3062633575
504	.long	1014008623
505	.long	0
506	.long	1072693248
507	.long	2550940471
508	.long	1069938201
509	.long	0
510	.long	0
511	.long	0
512	.long	0
513	.long	3422807297
514	.long	1071640847
515	.long	0
516	.long	0
517	.long	1151658053
518	.long	1071494715
519	.long	0
520	.long	0
521	.long	929607071
522	.long	1071346340
523	.long	1037049034
524	.long	1072037305
525	.long	2786928657
526	.long	1071215282
527	.long	1447406859
528	.long	1072265209
529	.long	3490952107
530	.long	1071090851
531	.long	3205232916
532	.long	1071968658
533	.long	1297344304
534	.long	1070977120
535	.long	1066110976
536	.long	1071946035
537	.long	3803721480
538	.long	1070871082
539	.long	1496754229
540	.long	1071807201
541	.long	2982550683
542	.long	1070773243
543	.long	4014441989
544	.long	1071736222
545	.long	419968236
546	.long	1071717047
547	.long	3451266538
548	.long	3163444811
549	.long	0
550	.long	1072693248
551	.long	2960267235
552	.long	1070745841
553	.long	0
554	.long	0
555	.long	0
556	.long	0
557	.long	724322768
558	.long	1072881308
559	.long	0
560	.long	0
561	.long	643153048
562	.long	1072905816
563	.long	0
564	.long	0
565	.long	4285079458
566	.long	1072928558
567	.long	3912524733
568	.long	1072622983
569	.long	118362272
570	.long	1072952754
571	.long	4107767972
572	.long	1072827408
573	.long	2689502883
574	.long	1072976922
575	.long	946523347
576	.long	1072772766
577	.long	573204189
578	.long	1073001761
579	.long	581531518
580	.long	1072826391
581	.long	1386236526
582	.long	1073026959
583	.long	3718905905
584	.long	1072832823
585	.long	1145558140
586	.long	1073052673
587	.long	513572637
588	.long	1072861969
589	.long	716700048
590	.long	1071997368
591	.long	547126769
592	.long	1015523525
593	.long	0
594	.long	1072693248
595	.long	1097907398
596	.long	1071420120
597	.long	0
598	.long	0
599	.long	0
600	.long	0
601	.long	3349892442
602	.long	1074290212
603	.long	0
604	.long	0
605	.long	3913197405
606	.long	1074501181
607	.long	0
608	.long	0
609	.long	2494034522
610	.long	1074739170
611	.long	1264738763
612	.long	1073084804
613	.long	1520293906
614	.long	1074899632
615	.long	1958936600
616	.long	1073411493
617	.long	2133649635
618	.long	1075052171
619	.long	4270740730
620	.long	1073574708
621	.long	1728930189
622	.long	1075224844
623	.long	1303998552
624	.long	1073799186
625	.long	618611933
626	.long	1075420255
627	.long	1769828046
628	.long	1073938542
629	.long	2200537986
630	.long	1075641421
631	.long	433361110
632	.long	1074105369
633	.long	719595600
634	.long	1072317184
635	.long	294527206
636	.long	3162140088
637	.long	0
638	.long	1073741824
639	.long	3811788216
640	.long	3218400550
641	.long	0
642	.long	0
643	.long	0
644	.long	0
645	.long	1704352102
646	.long	1075943001
647	.long	0
648	.long	0
649	.long	2284589306
650	.long	1076258036
651	.long	0
652	.long	0
653	.long	2211264291
654	.long	1076659010
655	.long	0
656	.long	1073741824
657	.long	1441186365
658	.long	1077028579
659	.long	1431655765
660	.long	1074091349
661	.long	876943673
662	.long	1077353622
663	.long	2863311531
664	.long	1074440874
665	.long	236289504
666	.long	1077767485
667	.long	286331153
668	.long	1074860305
669	.long	2805473311
670	.long	1078115278
671	.long	95443718
672	.long	1075163227
673	.long	1160476131
674	.long	1078450742
675	.long	463583772
676	.long	1075552698
677	.long	0
678	.long	1072693248
679	.long	0
680	.long	0
681	.long	0
682	.long	1073741824
683	.long	0
684	.long	0
685	.long	0
686	.long	0
687	.long	0
688	.long	0
689	.long	1330165971
690	.long	3207850745
691	.long	0
692	.long	0
693	.long	217536623
694	.long	1059109098
695	.long	0
696	.long	0
697	.long	3492120849
698	.long	3205151475
699	.long	602185705
700	.long	3215678092
701	.long	760422958
702	.long	1056312597
703	.long	555127889
704	.long	1067545266
705	.long	3139784124
706	.long	3202470837
707	.long	3690544014
708	.long	3213150171
709	.long	95707915
710	.long	1053635428
711	.long	4003114407
712	.long	1064581412
713	.long	2034926231
714	.long	3199711161
715	.long	3759536023
716	.long	3210559989
717	.long	3826928214
718	.long	1050893819
719	.long	3837960785
720	.long	1061790379
721	.long	1526325248
722	.long	3217967566
723	.long	2356426521
724	.long	1025423456
725	.long	0
726	.long	0
727	.long	457728975
728	.long	1071088276
729	.long	0
730	.long	1072693248
731	.long	0
732	.long	4294967288
733	.long	1398462608
734	.long	3207303968
735	.long	0
736	.long	0
737	.long	26205983
738	.long	1058461213
739	.long	0
740	.long	0
741	.long	56226238
742	.long	3204528612
743	.long	2754706541
744	.long	3215359511
745	.long	2187799823
746	.long	1055634437
747	.long	790323742
748	.long	1067402587
749	.long	1372385848
750	.long	3201651479
751	.long	4097292716
752	.long	3212856302
753	.long	3348210357
754	.long	1052830099
755	.long	2442796466
756	.long	1064337602
757	.long	862608142
758	.long	3198830754
759	.long	170296152
760	.long	3210060867
761	.long	3755571428
762	.long	1049933343
763	.long	3614866008
764	.long	1061361670
765	.long	719978496
766	.long	3217669096
767	.long	1998842465
768	.long	3174703977
769	.long	0
770	.long	0
771	.long	3749156607
772	.long	1071048258
773	.long	0
774	.long	1072693248
775	.long	0
776	.long	4294967288
777	.long	3120498638
778	.long	3206749304
779	.long	0
780	.long	0
781	.long	2773578114
782	.long	1058009312
783	.long	0
784	.long	0
785	.long	2030783676
786	.long	3203817873
787	.long	2223654598
788	.long	3215071936
789	.long	2976134650
790	.long	1054987244
791	.long	706390066
792	.long	1067217386
793	.long	4258437615
794	.long	3200900378
795	.long	1066252975
796	.long	3212391267
797	.long	815777514
798	.long	1051989462
799	.long	3202745457
800	.long	1064010682
801	.long	2493556375
802	.long	3198004753
803	.long	1046243251
804	.long	3209678971
805	.long	2593078846
806	.long	1049017717
807	.long	2763962276
808	.long	1060970161
809	.long	701480960
810	.long	3217377742
811	.long	3205862232
812	.long	3174660915
813	.long	0
814	.long	0
815	.long	2267016812
816	.long	1071015664
817	.long	0
818	.long	1072693248
819	.long	0
820	.long	4294967288
821	.long	2107155798
822	.long	3206166872
823	.long	0
824	.long	0
825	.long	2642992129
826	.long	1057424578
827	.long	0
828	.long	0
829	.long	1936992811
830	.long	3203204426
831	.long	1485063559
832	.long	3214682643
833	.long	1432914553
834	.long	1054319398
835	.long	3996381654
836	.long	1067075828
837	.long	2833029256
838	.long	3200223545
839	.long	2866066872
840	.long	3211982662
841	.long	2432888737
842	.long	1051234178
843	.long	3669764559
844	.long	1063748136
845	.long	2458496952
846	.long	3197170774
847	.long	1948234989
848	.long	3209098147
849	.long	2843698787
850	.long	1048163519
851	.long	3398041407
852	.long	1060559728
853	.long	2829230080
854	.long	3217092115
855	.long	1034046433
856	.long	3174271903
857	.long	0
858	.long	0
859	.long	298675305
860	.long	1070989821
861	.long	0
862	.long	1072693248
863	.long	0
864	.long	4294967288
865	.long	437603223
866	.long	3205589761
867	.long	0
868	.long	0
869	.long	759330352
870	.long	1057048511
871	.long	0
872	.long	0
873	.long	3107463368
874	.long	3202507988
875	.long	3144465176
876	.long	3214191500
877	.long	2290961810
878	.long	1053841035
879	.long	1618153340
880	.long	1066971547
881	.long	3836869393
882	.long	3199400272
883	.long	584032116
884	.long	3211469261
885	.long	1245704358
886	.long	1050626462
887	.long	4247487438
888	.long	1063561943
889	.long	1669034927
890	.long	3196274812
891	.long	3844233498
892	.long	3208626322
893	.long	2706958524
894	.long	1047411374
895	.long	3857199098
896	.long	1060281647
897	.long	3593904128
898	.long	3216590719
899	.long	3267547836
900	.long	3172163321
901	.long	0
902	.long	0
903	.long	4076712227
904	.long	1070970214
905	.long	0
906	.long	1072693248
907	.long	0
908	.long	4294967288
909	.long	3290090340
910	.long	3204793485
911	.long	0
912	.long	0
913	.long	3685760367
914	.long	1056668370
915	.long	0
916	.long	0
917	.long	2655163949
918	.long	3201674917
919	.long	628750575
920	.long	3213566872
921	.long	680140505
922	.long	1053299777
923	.long	2954464709
924	.long	1066900026
925	.long	803201619
926	.long	3198516435
927	.long	1466315631
928	.long	3210837162
929	.long	1611220163
930	.long	1049972438
931	.long	2766187256
932	.long	1063437894
933	.long	1804579484
934	.long	3195331491
935	.long	3695969289
936	.long	3207854418
937	.long	2617238373
938	.long	1046675948
939	.long	3095830084
940	.long	1060095334
941	.long	3789570048
942	.long	3216034914
943	.long	23826559
944	.long	3172048060
945	.long	0
946	.long	0
947	.long	3870939386
948	.long	1070956467
949	.long	0
950	.long	1072693248
951	.long	0
952	.long	4294967288
953	.long	1571758758
954	.long	3203672535
955	.long	0
956	.long	0
957	.long	113026373
958	.long	1056416381
959	.long	0
960	.long	0
961	.long	1913766298
962	.long	3200523326
963	.long	2507068734
964	.long	3212502004
965	.long	4000648818
966	.long	1053003803
967	.long	2446607349
968	.long	1066858259
969	.long	912662124
970	.long	3197333001
971	.long	1349489537
972	.long	3209765608
973	.long	3412972607
974	.long	1049641401
975	.long	1721283327
976	.long	1063366855
977	.long	1466691883
978	.long	3194116746
979	.long	3852528092
980	.long	3206760861
981	.long	285443293
982	.long	1046158380
983	.long	1758739894
984	.long	1059895449
985	.long	1858781184
986	.long	3214984212
987	.long	3447575948
988	.long	1024675855
989	.long	0
990	.long	0
991	.long	2242038011
992	.long	1070948320
993	.long	0
994	.long	1072693248
995	.long	0
996	.long	4294967288
997	.long	0
998	.long	0
999	.long	0
1000	.long	0
1001	.long	737611454
1002	.long	1056336527
1003	.long	0
1004	.long	0
1005	.long	0
1006	.long	0
1007	.long	0
1008	.long	0
1009	.long	3594790527
1010	.long	1052911621
1011	.long	381774871
1012	.long	1066844524
1013	.long	0
1014	.long	0
1015	.long	0
1016	.long	0
1017	.long	3303051618
1018	.long	1049456050
1019	.long	3154187623
1020	.long	1063343722
1021	.long	0
1022	.long	0
1023	.long	0
1024	.long	0
1025	.long	528061788
1026	.long	1045944910
1027	.long	2469719819
1028	.long	1059831159
1029	.long	0
1030	.long	0
1031	.long	0
1032	.long	0
1033	.long	0
1034	.long	0
1035	.long	1431655765
1036	.long	1070945621
1037	.long	0
1038	.long	1072693248
1039	.long	0
1040	.long	4294967288
1041	.long	1571758758
1042	.long	1056188887
1043	.long	0
1044	.long	0
1045	.long	113026373
1046	.long	1056416381
1047	.long	0
1048	.long	0
1049	.long	1913766298
1050	.long	1053039678
1051	.long	2507068734
1052	.long	1065018356
1053	.long	4000648818
1054	.long	1053003803
1055	.long	2446607349
1056	.long	1066858259
1057	.long	912662124
1058	.long	1049849353
1059	.long	1349489537
1060	.long	1062281960
1061	.long	3412972607
1062	.long	1049641401
1063	.long	1721283327
1064	.long	1063366855
1065	.long	1466691883
1066	.long	1046633098
1067	.long	3852528092
1068	.long	1059277213
1069	.long	285443293
1070	.long	1046158380
1071	.long	1758739894
1072	.long	1059895449
1073	.long	1858781184
1074	.long	1067500564
1075	.long	3447575948
1076	.long	3172159503
1077	.long	0
1078	.long	0
1079	.long	2242038011
1080	.long	1070948320
1081	.long	0
1082	.long	1072693248
1083	.long	0
1084	.long	4294967288
1085	.long	3290090340
1086	.long	1057309837
1087	.long	0
1088	.long	0
1089	.long	3685760367
1090	.long	1056668370
1091	.long	0
1092	.long	0
1093	.long	2655163949
1094	.long	1054191269
1095	.long	628750575
1096	.long	1066083224
1097	.long	680140505
1098	.long	1053299777
1099	.long	2954464709
1100	.long	1066900026
1101	.long	803201619
1102	.long	1051032787
1103	.long	1466315631
1104	.long	1063353514
1105	.long	1611220163
1106	.long	1049972438
1107	.long	2766187256
1108	.long	1063437894
1109	.long	1804579484
1110	.long	1047847843
1111	.long	3695969289
1112	.long	1060370770
1113	.long	2617238373
1114	.long	1046675948
1115	.long	3095830084
1116	.long	1060095334
1117	.long	3789570048
1118	.long	1068551266
1119	.long	23826559
1120	.long	1024564412
1121	.long	0
1122	.long	0
1123	.long	3870939386
1124	.long	1070956467
1125	.long	0
1126	.long	1072693248
1127	.long	0
1128	.long	4294967288
1129	.long	437603223
1130	.long	1058106113
1131	.long	0
1132	.long	0
1133	.long	759330352
1134	.long	1057048511
1135	.long	0
1136	.long	0
1137	.long	3107463368
1138	.long	1055024340
1139	.long	3144465176
1140	.long	1066707852
1141	.long	2290961810
1142	.long	1053841035
1143	.long	1618153340
1144	.long	1066971547
1145	.long	3836869393
1146	.long	1051916624
1147	.long	584032116
1148	.long	1063985613
1149	.long	1245704358
1150	.long	1050626462
1151	.long	4247487438
1152	.long	1063561943
1153	.long	1669034927
1154	.long	1048791164
1155	.long	3844233498
1156	.long	1061142674
1157	.long	2706958524
1158	.long	1047411374
1159	.long	3857199098
1160	.long	1060281647
1161	.long	3593904128
1162	.long	1069107071
1163	.long	3267547836
1164	.long	1024679673
1165	.long	0
1166	.long	0
1167	.long	4076712227
1168	.long	1070970214
1169	.long	0
1170	.long	1072693248
1171	.long	0
1172	.long	4294967288
1173	.long	2107155798
1174	.long	1058683224
1175	.long	0
1176	.long	0
1177	.long	2642992129
1178	.long	1057424578
1179	.long	0
1180	.long	0
1181	.long	1936992811
1182	.long	1055720778
1183	.long	1485063559
1184	.long	1067198995
1185	.long	1432914553
1186	.long	1054319398
1187	.long	3996381654
1188	.long	1067075828
1189	.long	2833029256
1190	.long	1052739897
1191	.long	2866066872
1192	.long	1064499014
1193	.long	2432888737
1194	.long	1051234178
1195	.long	3669764559
1196	.long	1063748136
1197	.long	2458496952
1198	.long	1049687126
1199	.long	1948234989
1200	.long	1061614499
1201	.long	2843698787
1202	.long	1048163519
1203	.long	3398041407
1204	.long	1060559728
1205	.long	2829230080
1206	.long	1069608467
1207	.long	1034046433
1208	.long	1026788255
1209	.long	0
1210	.long	0
1211	.long	298675305
1212	.long	1070989821
1213	.long	0
1214	.long	1072693248
1215	.long	0
1216	.long	4294967288
1217	.long	3120498638
1218	.long	1059265656
1219	.long	0
1220	.long	0
1221	.long	2773578114
1222	.long	1058009312
1223	.long	0
1224	.long	0
1225	.long	2030783676
1226	.long	1056334225
1227	.long	2223654598
1228	.long	1067588288
1229	.long	2976134650
1230	.long	1054987244
1231	.long	706390066
1232	.long	1067217386
1233	.long	4258437615
1234	.long	1053416730
1235	.long	1066252975
1236	.long	1064907619
1237	.long	815777514
1238	.long	1051989462
1239	.long	3202745457
1240	.long	1064010682
1241	.long	2493556375
1242	.long	1050521105
1243	.long	1046243251
1244	.long	1062195323
1245	.long	2593078846
1246	.long	1049017717
1247	.long	2763962276
1248	.long	1060970161
1249	.long	701480960
1250	.long	1069894094
1251	.long	3205862232
1252	.long	1027177267
1253	.long	0
1254	.long	0
1255	.long	2267016812
1256	.long	1071015664
1257	.long	0
1258	.long	1072693248
1259	.long	0
1260	.long	4294967288
1261	.long	1398462608
1262	.long	1059820320
1263	.long	0
1264	.long	0
1265	.long	26205983
1266	.long	1058461213
1267	.long	0
1268	.long	0
1269	.long	56226238
1270	.long	1057044964
1271	.long	2754706541
1272	.long	1067875863
1273	.long	2187799823
1274	.long	1055634437
1275	.long	790323742
1276	.long	1067402587
1277	.long	1372385848
1278	.long	1054167831
1279	.long	4097292716
1280	.long	1065372654
1281	.long	3348210357
1282	.long	1052830099
1283	.long	2442796466
1284	.long	1064337602
1285	.long	862608142
1286	.long	1051347106
1287	.long	170296152
1288	.long	1062577219
1289	.long	3755571428
1290	.long	1049933343
1291	.long	3614866008
1292	.long	1061361670
1293	.long	719978496
1294	.long	1070185448
1295	.long	1998842465
1296	.long	1027220329
1297	.long	0
1298	.long	0
1299	.long	3749156607
1300	.long	1071048258
1301	.long	0
1302	.long	1072693248
1303	.long	0
1304	.long	4294967288
1305	.long	1330165971
1306	.long	1060367097
1307	.long	0
1308	.long	0
1309	.long	217536623
1310	.long	1059109098
1311	.long	0
1312	.long	0
1313	.long	3492120849
1314	.long	1057667827
1315	.long	602185705
1316	.long	1068194444
1317	.long	760422958
1318	.long	1056312597
1319	.long	555127889
1320	.long	1067545266
1321	.long	3139784124
1322	.long	1054987189
1323	.long	3690544014
1324	.long	1065666523
1325	.long	95707915
1326	.long	1053635428
1327	.long	4003114407
1328	.long	1064581412
1329	.long	2034926231
1330	.long	1052227513
1331	.long	3759536023
1332	.long	1063076341
1333	.long	3826928214
1334	.long	1050893819
1335	.long	3837960785
1336	.long	1061790379
1337	.long	1526325248
1338	.long	1070483918
1339	.long	2356426521
1340	.long	3172907104
1341	.long	0
1342	.long	0
1343	.long	457728975
1344	.long	1071088276
1345	.long	0
1346	.long	1072693248
1347	.long	0
1348	.long	4294967288
1349	.long	1704352102
1350	.long	3223426649
1351	.long	0
1352	.long	0
1353	.long	2284589306
1354	.long	1076258036
1355	.long	0
1356	.long	0
1357	.long	2211264291
1358	.long	3224142658
1359	.long	0
1360	.long	3221225472
1361	.long	1441186365
1362	.long	1077028579
1363	.long	1431655765
1364	.long	1074091349
1365	.long	876943673
1366	.long	3224837270
1367	.long	2863311531
1368	.long	3221924522
1369	.long	236289504
1370	.long	1077767485
1371	.long	286331153
1372	.long	1074860305
1373	.long	2805473311
1374	.long	3225598926
1375	.long	95443718
1376	.long	3222646875
1377	.long	1160476131
1378	.long	1078450742
1379	.long	463583772
1380	.long	1075552698
1381	.long	0
1382	.long	3220176896
1383	.long	0
1384	.long	0
1385	.long	0
1386	.long	1073741824
1387	.long	0
1388	.long	0
1389	.long	0
1390	.long	0
1391	.long	0
1392	.long	0
1393	.long	3349892442
1394	.long	3221773860
1395	.long	0
1396	.long	0
1397	.long	3913197405
1398	.long	1074501181
1399	.long	0
1400	.long	0
1401	.long	2494034522
1402	.long	3222222818
1403	.long	1264738763
1404	.long	3220568452
1405	.long	1520293906
1406	.long	1074899632
1407	.long	1958936600
1408	.long	1073411493
1409	.long	2133649635
1410	.long	3222535819
1411	.long	4270740730
1412	.long	3221058356
1413	.long	1728930189
1414	.long	1075224844
1415	.long	1303998552
1416	.long	1073799186
1417	.long	618611933
1418	.long	3222903903
1419	.long	1769828046
1420	.long	3221422190
1421	.long	2200537986
1422	.long	1075641421
1423	.long	433361110
1424	.long	1074105369
1425	.long	719595600
1426	.long	3219800832
1427	.long	294527206
1428	.long	1014656440
1429	.long	0
1430	.long	1073741824
1431	.long	3811788216
1432	.long	3218400550
1433	.long	0
1434	.long	0
1435	.long	0
1436	.long	0
1437	.long	724322768
1438	.long	3220364956
1439	.long	0
1440	.long	0
1441	.long	643153048
1442	.long	1072905816
1443	.long	0
1444	.long	0
1445	.long	4285079458
1446	.long	3220412206
1447	.long	3912524733
1448	.long	3220106631
1449	.long	118362272
1450	.long	1072952754
1451	.long	4107767972
1452	.long	1072827408
1453	.long	2689502883
1454	.long	3220460570
1455	.long	946523347
1456	.long	3220256414
1457	.long	573204189
1458	.long	1073001761
1459	.long	581531518
1460	.long	1072826391
1461	.long	1386236526
1462	.long	3220510607
1463	.long	3718905905
1464	.long	3220316471
1465	.long	1145558140
1466	.long	1073052673
1467	.long	513572637
1468	.long	1072861969
1469	.long	716700048
1470	.long	3219481016
1471	.long	547126769
1472	.long	3163007173
1473	.long	0
1474	.long	1072693248
1475	.long	1097907398
1476	.long	1071420120
1477	.long	0
1478	.long	0
1479	.long	0
1480	.long	0
1481	.long	3422807297
1482	.long	3219124495
1483	.long	0
1484	.long	0
1485	.long	1151658053
1486	.long	1071494715
1487	.long	0
1488	.long	0
1489	.long	929607071
1490	.long	3218829988
1491	.long	1037049034
1492	.long	3219520953
1493	.long	2786928657
1494	.long	1071215282
1495	.long	1447406859
1496	.long	1072265209
1497	.long	3490952107
1498	.long	3218574499
1499	.long	3205232916
1500	.long	3219452306
1501	.long	1297344304
1502	.long	1070977120
1503	.long	1066110976
1504	.long	1071946035
1505	.long	3803721480
1506	.long	3218354730
1507	.long	1496754229
1508	.long	3219290849
1509	.long	2982550683
1510	.long	1070773243
1511	.long	4014441989
1512	.long	1071736222
1513	.long	419968236
1514	.long	3219200695
1515	.long	3451266538
1516	.long	1015961163
1517	.long	0
1518	.long	1072693248
1519	.long	2960267235
1520	.long	1070745841
1521	.long	0
1522	.long	0
1523	.long	0
1524	.long	0
1525	.long	1458794562
1526	.long	3217882198
1527	.long	0
1528	.long	0
1529	.long	2857777489
1530	.long	1070137637
1531	.long	0
1532	.long	0
1533	.long	1024359517
1534	.long	3217360179
1535	.long	2616040238
1536	.long	3219066585
1537	.long	1609024636
1538	.long	1069675088
1539	.long	2529240549
1540	.long	1071836633
1541	.long	1510128600
1542	.long	3216923761
1543	.long	2251697184
1544	.long	3218737335
1545	.long	1262761453
1546	.long	1069142850
1547	.long	1263091857
1548	.long	1071190461
1549	.long	3043383486
1550	.long	3216368839
1551	.long	2476932470
1552	.long	3218325650
1553	.long	3659995028
1554	.long	1068669200
1555	.long	855891755
1556	.long	1070696894
1557	.long	2583490354
1558	.long	3218768505
1559	.long	3062633575
1560	.long	3161492271
1561	.long	0
1562	.long	1072693248
1563	.long	2550940471
1564	.long	1069938201
1565	.long	0
1566	.long	0
1567	.long	0
1568	.long	0
1569	.long	2467582782
1570	.long	3216740037
1571	.long	0
1572	.long	0
1573	.long	162150096
1574	.long	1068946420
1575	.long	0
1576	.long	0
1577	.long	3702794237
1578	.long	3216062800
1579	.long	3631919291
1580	.long	3218420574
1581	.long	3456821413
1582	.long	1068217218
1583	.long	2031366438
1584	.long	1071495745
1585	.long	1596664020
1586	.long	3215282929
1587	.long	1509038701
1588	.long	3218085291
1589	.long	583171477
1590	.long	1067510148
1591	.long	3785344682
1592	.long	1070618476
1593	.long	2402036048
1594	.long	3214559384
1595	.long	3233018412
1596	.long	3217396834
1597	.long	411280568
1598	.long	1066710556
1599	.long	1065584192
1600	.long	1069747896
1601	.long	895247324
1602	.long	3218303496
1603	.long	500078909
1604	.long	1013805133
1605	.long	0
1606	.long	1072693248
1607	.long	729983843
1608	.long	1068994194
1609	.long	0
1610	.long	0
1611	.long	0
1612	.long	0
1613	.long	1512545955
1614	.long	3215602695
1615	.long	0
1616	.long	0
1617	.long	1127048698
1618	.long	1067909459
1619	.long	0
1620	.long	0
1621	.long	2300200450
1622	.long	3214738415
1623	.long	3593250296
1624	.long	3217717209
1625	.long	3009365544
1626	.long	1066902117
1627	.long	1127373050
1628	.long	1071173457
1629	.long	3046103305
1630	.long	3213854947
1631	.long	24583402
1632	.long	3217207636
1633	.long	4082511758
1634	.long	1065914199
1635	.long	3223889699
1636	.long	1070020367
1637	.long	548927984
1638	.long	3212899404
1639	.long	558065897
1640	.long	3216433066
1641	.long	680073315
1642	.long	1064940726
1643	.long	388873200
1644	.long	1068944270
1645	.long	3763679576
1646	.long	3217651189
1647	.long	1497360404
1648	.long	3157194195
1649	.long	0
1650	.long	1072693248
1651	.long	64931152
1652	.long	1067729411
1653	.long	0
1654	.long	0
1655	.long	0
1656	.long	0
1657	.long	1313038235
1658	.long	3214229379
1659	.long	0
1660	.long	0
1661	.long	1013878342
1662	.long	1067152618
1663	.long	0
1664	.long	0
1665	.long	3663426833
1666	.long	3213208931
1667	.long	3693284251
1668	.long	3216602456
1669	.long	650852232
1670	.long	1065882376
1671	.long	1996245381
1672	.long	1071000265
1673	.long	2008746170
1674	.long	3212147845
1675	.long	3055842593
1676	.long	3216062494
1677	.long	1495406348
1678	.long	1064652437
1679	.long	2269530157
1680	.long	1069711235
1681	.long	285563696
1682	.long	3211060113
1683	.long	1046897440
1684	.long	3215189513
1685	.long	233429731
1686	.long	1063453151
1687	.long	522045958
1688	.long	1068476590
1689	.long	2354785698
1690	.long	3216586427
1691	.long	1317599141
1692	.long	3159915781
1693	.long	0
1694	.long	1072693248
1695	.long	2828230105
1696	.long	1065606626
1697	.long	0
1698	.long	0
1699	.long	0
1700	.long	0
1701	.long	1841940611
1702	.long	1071931184
1703	.long	1841940611
1704	.long	1076125488
1705	.long	0
1706	.long	1131937792
1707	.long	0
1708	.long	1127743488
1709	.long	1413758976
1710	.long	1069097467
1711	.long	1413742592
1712	.long	1069097467
1713	.long	1734819840
1714	.long	3174229945
1715	.long	1280049152
1716	.long	1028033571
1717	.long	923219018
1718	.long	984130272
1719	.long	57701189
1720	.long	988383790
1721	.long	0
1722	.long	2147483648
1723	.long	0
1724	.long	2147483648
1725	.long	1734816687
1726	.long	1026746297
1727	.long	0
1728	.long	0
1729	.long	0
1730	.long	1072693248
1731	.long	0
1732	.long	0
1733	.long	0
1734	.long	2146435072
1735	.long	0
1736	.long	0
1737	.long	4294705152
1738	.long	4294967295
1739	.long	0
1740	.long	0
1741	.long	0
1742	.long	1130364928
1743	.long	0
1744	.long	0
1745	.long	0
1746	.long	1015021568
1747	.long	0
1748	.long	0
1749	.long	0
1750	.long	1017118720
1751	.long	0
1752	.long	0
1753	.long	0
1754	.long	1071644672
1755	.long	0
1756	.long	1071644672
1757	.long	0
1758	.long	1076887552
1759	.long	0
1760	.long	1072693248
1761	.type	static_const_table,@object
1762	.size	static_const_table,5872
1763	.data
1764	.hidden __libm_tancot_huge
1765	.section .note.GNU-stack, ""
1766# End
1767