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//     1. RANGE REDUCTION
36//
37//     We perform an initial range reduction from X to r with
38//
39//          X =~= N * pi/32 + r
40//
41//     so that |r| <= pi/64 + epsilon. We restrict inputs to those
42//     where |N| <= 932560. Beyond this, the range reduction is
43//     insufficiently accurate. For extremely small inputs,
44//     denormalization can occur internally, impacting performance.
45//     This means that the main path is actually only taken for
46//     2^-252 <= |X| < 90112.
47//
48//     To avoid branches, we perform the range reduction to full
49//     accuracy each time.
50//
51//          X - N * (P_1 + P_2 + P_3)
52//
53//     where P_1 and P_2 are 32-bit numbers (so multiplication by N
54//     is exact) and P_3 is a 53-bit number. Together, these
55//     approximate pi well enough for all cases in the restricted
56//     range.
57//
58//     The main reduction sequence is:
59//
60//             y = 32/pi * x
61//             N = integer(y)
62//     (computed by adding and subtracting off SHIFTER)
63//
64//             m_1 = N * P_1
65//             m_2 = N * P_2
66//             r_1 = x - m_1
67//             r = r_1 - m_2
68//     (this r can be used for most of the calculation)
69//
70//             c_1 = r_1 - r
71//             m_3 = N * P_3
72//             c_2 = c_1 - m_2
73//             c = c_2 - m_3
74//
75//     2. MAIN ALGORITHM
76//
77//     The algorithm uses a table lookup based on B = M * pi / 32
78//     where M = N mod 64. The stored values are:
79//       sigma             closest power of 2 to cos(B)
80//       C_hl              53-bit cos(B) - sigma
81//       S_hi + S_lo       2 * 53-bit sin(B)
82//
83//     The computation is organized as follows:
84//
85//          sin(B + r + c) = [sin(B) + sigma * r] +
86//                           r * (cos(B) - sigma) +
87//                           sin(B) * [cos(r + c) - 1] +
88//                           cos(B) * [sin(r + c) - r]
89//
90//     which is approximately:
91//
92//          [S_hi + sigma * r] +
93//          C_hl * r +
94//          S_lo + S_hi * [(cos(r) - 1) - r * c] +
95//          (C_hl + sigma) * [(sin(r) - r) + c]
96//
97//     and this is what is actually computed. We separate this sum
98//     into four parts:
99//
100//          hi + med + pols + corr
101//
102//     where
103//
104//          hi       = S_hi + sigma r
105//          med      = C_hl * r
106//          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
107//          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
108//
109//     3. POLYNOMIAL
110//
111//     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
112//     (sin(r) - r) can be rearranged freely, since it is quite
113//     small, so we exploit parallelism to the fullest.
114//
115//          psc4       =   SC_4 * r_1
116//          msc4       =   psc4 * r
117//          r2         =   r * r
118//          msc2       =   SC_2 * r2
119//          r4         =   r2 * r2
120//          psc3       =   SC_3 + msc4
121//          psc1       =   SC_1 + msc2
122//          msc3       =   r4 * psc3
123//          sincospols =   psc1 + msc3
124//          pols       =   sincospols *
125//                         <S_hi * r^2 | (C_hl + sigma) * r^3>
126//
127//     4. CORRECTION TERM
128//
129//     This is where the "c" component of the range reduction is
130//     taken into account; recall that just "r" is used for most of
131//     the calculation.
132//
133//          -c   = m_3 - c_2
134//          -d   = S_hi * r - (C_hl + sigma)
135//          corr = -c * -d + S_lo
136//
137//     5. COMPENSATED SUMMATIONS
138//
139//     The two successive compensated summations add up the high
140//     and medium parts, leaving just the low parts to add up at
141//     the end.
142//
143//          rs        =  sigma * r
144//          res_int   =  S_hi + rs
145//          k_0       =  S_hi - res_int
146//          k_2       =  k_0 + rs
147//          med       =  C_hl * r
148//          res_hi    =  res_int + med
149//          k_1       =  res_int - res_hi
150//          k_3       =  k_1 + med
151//
152//     6. FINAL SUMMATION
153//
154//     We now add up all the small parts:
155//
156//          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
157//
158//     Now the overall result is just:
159//
160//          res_hi + res_lo
161//
162//     7. SMALL ARGUMENTS
163//
164//     If |x| < SNN (SNN meaning the smallest normal number), we
165//     simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we
166//     do 2^-55 * (2^55 * x - x).
167//
168// Special cases:
169//  sin(NaN) = quiet NaN, and raise invalid exception
170//  sin(INF) = NaN and raise invalid exception
171//  sin(+/-0) = +/-0
172//
173/******************************************************************************/
174
175#include <private/bionic_asm.h>
176# -- Begin  sin
177ENTRY(sin)
178# parameter 1: %xmm0
179..B1.1:
180..___tag_value_sin.1:
181        pushq     %rbx
182..___tag_value_sin.3:
183        subq      $16, %rsp
184..___tag_value_sin.5:
185        movsd     %xmm0, 8(%rsp)
186..B1.2:
187        movl      12(%rsp), %eax
188        movq      PI32INV(%rip), %xmm1
189        movq      SHIFTER(%rip), %xmm2
190        andl      $2147418112, %eax
191        subl      $808452096, %eax
192        cmpl      $281346048, %eax
193        ja        .L_2TAG_PACKET_0.0.1
194        mulsd     %xmm0, %xmm1
195        movapd    ONEHALF(%rip), %xmm5
196        movq      SIGN_MASK(%rip), %xmm4
197        andpd     %xmm0, %xmm4
198        orps      %xmm4, %xmm5
199        addpd     %xmm5, %xmm1
200        cvttsd2si %xmm1, %edx
201        cvtsi2sd  %edx, %xmm1
202        movapd    P_2(%rip), %xmm6
203        movq      $0x3fb921fb54400000, %r8
204        movd      %r8, %xmm3
205        movapd    SC_4(%rip), %xmm5
206        pshufd    $68, %xmm0, %xmm4
207        mulsd     %xmm1, %xmm3
208        movddup   %xmm1, %xmm1
209        andl      $63, %edx
210        shll      $5, %edx
211        lea       Ctable(%rip), %rax
212        addq      %rdx, %rax
213        mulpd     %xmm1, %xmm6
214        mulsd     P_3(%rip), %xmm1
215        subsd     %xmm3, %xmm4
216        movq      8(%rax), %xmm7
217        subsd     %xmm3, %xmm0
218        movddup   %xmm4, %xmm3
219        subsd     %xmm6, %xmm4
220        pshufd    $68, %xmm0, %xmm0
221        movapd    (%rax), %xmm2
222        mulpd     %xmm0, %xmm5
223        subpd     %xmm6, %xmm0
224        mulsd     %xmm4, %xmm7
225        subsd     %xmm4, %xmm3
226        mulpd     %xmm0, %xmm5
227        mulpd     %xmm0, %xmm0
228        subsd     %xmm6, %xmm3
229        movapd    SC_2(%rip), %xmm6
230        subsd     %xmm3, %xmm1
231        movq      24(%rax), %xmm3
232        addsd     %xmm3, %xmm2
233        subsd     %xmm2, %xmm7
234        mulsd     %xmm4, %xmm2
235        mulpd     %xmm0, %xmm6
236        mulsd     %xmm4, %xmm3
237        mulpd     %xmm0, %xmm2
238        mulpd     %xmm0, %xmm0
239        addpd     SC_3(%rip), %xmm5
240        mulsd     (%rax), %xmm4
241        addpd     SC_1(%rip), %xmm6
242        mulpd     %xmm0, %xmm5
243        movq      %xmm3, %xmm0
244        addsd     8(%rax), %xmm3
245        mulpd     %xmm7, %xmm1
246        movq      %xmm4, %xmm7
247        addsd     %xmm3, %xmm4
248        addpd     %xmm5, %xmm6
249        movq      8(%rax), %xmm5
250        subsd     %xmm3, %xmm5
251        subsd     %xmm4, %xmm3
252        addsd     16(%rax), %xmm1
253        mulpd     %xmm2, %xmm6
254        addsd     %xmm0, %xmm5
255        addsd     %xmm7, %xmm3
256        addsd     %xmm5, %xmm1
257        addsd     %xmm3, %xmm1
258        addsd     %xmm6, %xmm1
259        unpckhpd  %xmm6, %xmm6
260        movq      %xmm4, %xmm0
261        addsd     %xmm6, %xmm1
262        addsd     %xmm1, %xmm0
263        jmp       ..B1.4
264.L_2TAG_PACKET_0.0.1:
265        jg        .L_2TAG_PACKET_1.0.1
266        shrl      $20, %eax
267        cmpw      $3325, %ax
268        jne       .L_2TAG_PACKET_2.0.1
269        mulsd     ALL_ONES(%rip), %xmm0
270        jmp       ..B1.4
271.L_2TAG_PACKET_2.0.1:
272        movq      TWO_POW_55(%rip), %xmm3
273        mulsd     %xmm0, %xmm3
274        subsd     %xmm0, %xmm3
275        mulsd     TWO_POW_M55(%rip), %xmm3
276        jmp       ..B1.4
277.L_2TAG_PACKET_1.0.1:
278        pextrw    $3, %xmm0, %eax
279        andl      $32752, %eax
280        cmpl      $32752, %eax
281        je        .L_2TAG_PACKET_3.0.1
282        pextrw    $3, %xmm0, %ecx
283        andl      $32752, %ecx
284        subl      $16224, %ecx
285        shrl      $7, %ecx
286        andl      $65532, %ecx
287        lea       PI_INV_TABLE(%rip), %r11
288        addq      %r11, %rcx
289        movd      %xmm0, %rax
290        movl      20(%rcx), %r10d
291        movl      24(%rcx), %r8d
292        movl      %eax, %edx
293        shrq      $21, %rax
294        orl       $-2147483648, %eax
295        shrl      $11, %eax
296        movl      %r10d, %r9d
297        imulq     %rdx, %r10
298        imulq     %rax, %r9
299        imulq     %rax, %r8
300        movl      16(%rcx), %esi
301        movl      12(%rcx), %edi
302        movl      %r10d, %r11d
303        shrq      $32, %r10
304        addq      %r10, %r9
305        addq      %r8, %r11
306        movl      %r11d, %r8d
307        shrq      $32, %r11
308        addq      %r11, %r9
309        movl      %esi, %r10d
310        imulq     %rdx, %rsi
311        imulq     %rax, %r10
312        movl      %edi, %r11d
313        imulq     %rdx, %rdi
314        movl      %esi, %ebx
315        shrq      $32, %rsi
316        addq      %rbx, %r9
317        movl      %r9d, %ebx
318        shrq      $32, %r9
319        addq      %rsi, %r10
320        addq      %r9, %r10
321        shlq      $32, %rbx
322        orq       %rbx, %r8
323        imulq     %rax, %r11
324        movl      8(%rcx), %r9d
325        movl      4(%rcx), %esi
326        movl      %edi, %ebx
327        shrq      $32, %rdi
328        addq      %rbx, %r10
329        movl      %r10d, %ebx
330        shrq      $32, %r10
331        addq      %rdi, %r11
332        addq      %r10, %r11
333        movq      %r9, %rdi
334        imulq     %rdx, %r9
335        imulq     %rax, %rdi
336        movl      %r9d, %r10d
337        shrq      $32, %r9
338        addq      %r10, %r11
339        movl      %r11d, %r10d
340        shrq      $32, %r11
341        addq      %r9, %rdi
342        addq      %r11, %rdi
343        movq      %rsi, %r9
344        imulq     %rdx, %rsi
345        imulq     %rax, %r9
346        shlq      $32, %r10
347        orq       %rbx, %r10
348        movl      (%rcx), %eax
349        movl      %esi, %r11d
350        shrq      $32, %rsi
351        addq      %r11, %rdi
352        movl      %edi, %r11d
353        shrq      $32, %rdi
354        addq      %rsi, %r9
355        addq      %rdi, %r9
356        imulq     %rax, %rdx
357        pextrw    $3, %xmm0, %ebx
358        lea       PI_INV_TABLE(%rip), %rdi
359        subq      %rdi, %rcx
360        addl      %ecx, %ecx
361        addl      %ecx, %ecx
362        addl      %ecx, %ecx
363        addl      $19, %ecx
364        movl      $32768, %esi
365        andl      %ebx, %esi
366        shrl      $4, %ebx
367        andl      $2047, %ebx
368        subl      $1023, %ebx
369        subl      %ebx, %ecx
370        addq      %rdx, %r9
371        movl      %ecx, %edx
372        addl      $32, %edx
373        cmpl      $1, %ecx
374        jl        .L_2TAG_PACKET_4.0.1
375        negl      %ecx
376        addl      $29, %ecx
377        shll      %cl, %r9d
378        movl      %r9d, %edi
379        andl      $536870911, %r9d
380        testl     $268435456, %r9d
381        jne       .L_2TAG_PACKET_5.0.1
382        shrl      %cl, %r9d
383        movl      $0, %ebx
384        shlq      $32, %r9
385        orq       %r11, %r9
386.L_2TAG_PACKET_6.0.1:
387.L_2TAG_PACKET_7.0.1:
388        cmpq      $0, %r9
389        je        .L_2TAG_PACKET_8.0.1
390.L_2TAG_PACKET_9.0.1:
391        bsr       %r9, %r11
392        movl      $29, %ecx
393        subl      %r11d, %ecx
394        jle       .L_2TAG_PACKET_10.0.1
395        shlq      %cl, %r9
396        movq      %r10, %rax
397        shlq      %cl, %r10
398        addl      %ecx, %edx
399        negl      %ecx
400        addl      $64, %ecx
401        shrq      %cl, %rax
402        shrq      %cl, %r8
403        orq       %rax, %r9
404        orq       %r8, %r10
405.L_2TAG_PACKET_11.0.1:
406        cvtsi2sdq %r9, %xmm0
407        shrq      $1, %r10
408        cvtsi2sdq %r10, %xmm3
409        xorpd     %xmm4, %xmm4
410        shll      $4, %edx
411        negl      %edx
412        addl      $16368, %edx
413        orl       %esi, %edx
414        xorl      %ebx, %edx
415        pinsrw    $3, %edx, %xmm4
416        movq      PI_4(%rip), %xmm2
417        movq      8+PI_4(%rip), %xmm6
418        xorpd     %xmm5, %xmm5
419        subl      $1008, %edx
420        pinsrw    $3, %edx, %xmm5
421        mulsd     %xmm4, %xmm0
422        shll      $16, %esi
423        sarl      $31, %esi
424        mulsd     %xmm5, %xmm3
425        movq      %xmm0, %xmm1
426        mulsd     %xmm2, %xmm0
427        shrl      $29, %edi
428        addsd     %xmm3, %xmm1
429        mulsd     %xmm2, %xmm3
430        addl      %esi, %edi
431        xorl      %esi, %edi
432        mulsd     %xmm1, %xmm6
433        movl      %edi, %eax
434        addsd     %xmm3, %xmm6
435        movq      %xmm0, %xmm2
436        addsd     %xmm6, %xmm0
437        subsd     %xmm0, %xmm2
438        addsd     %xmm2, %xmm6
439.L_2TAG_PACKET_12.0.1:
440        movq      PI32INV(%rip), %xmm1
441        mulsd     %xmm0, %xmm1
442        movq      ONEHALF(%rip), %xmm5
443        movq      SIGN_MASK(%rip), %xmm4
444        andpd     %xmm0, %xmm4
445        orps      %xmm4, %xmm5
446        addpd     %xmm5, %xmm1
447        cvttsd2si %xmm1, %edx
448        cvtsi2sd  %edx, %xmm1
449        movq      P_1(%rip), %xmm3
450        movapd    P_2(%rip), %xmm2
451        mulsd     %xmm1, %xmm3
452        unpcklpd  %xmm1, %xmm1
453        shll      $3, %eax
454        addl      $1865216, %edx
455        movq      %xmm0, %xmm4
456        addl      %eax, %edx
457        andl      $63, %edx
458        movapd    SC_4(%rip), %xmm5
459        lea       Ctable(%rip), %rax
460        shll      $5, %edx
461        addq      %rdx, %rax
462        mulpd     %xmm1, %xmm2
463        subsd     %xmm3, %xmm0
464        mulsd     P_3(%rip), %xmm1
465        subsd     %xmm3, %xmm4
466        movq      8(%rax), %xmm7
467        unpcklpd  %xmm0, %xmm0
468        movq      %xmm4, %xmm3
469        subsd     %xmm2, %xmm4
470        mulpd     %xmm0, %xmm5
471        subpd     %xmm2, %xmm0
472        mulsd     %xmm4, %xmm7
473        subsd     %xmm4, %xmm3
474        mulpd     %xmm0, %xmm5
475        mulpd     %xmm0, %xmm0
476        subsd     %xmm2, %xmm3
477        movapd    (%rax), %xmm2
478        subsd     %xmm3, %xmm1
479        movq      24(%rax), %xmm3
480        addsd     %xmm3, %xmm2
481        subsd     %xmm2, %xmm7
482        subsd     %xmm6, %xmm1
483        movapd    SC_2(%rip), %xmm6
484        mulsd     %xmm4, %xmm2
485        mulpd     %xmm0, %xmm6
486        mulsd     %xmm4, %xmm3
487        mulpd     %xmm0, %xmm2
488        mulpd     %xmm0, %xmm0
489        addpd     SC_3(%rip), %xmm5
490        mulsd     (%rax), %xmm4
491        addpd     SC_1(%rip), %xmm6
492        mulpd     %xmm0, %xmm5
493        movq      %xmm3, %xmm0
494        addsd     8(%rax), %xmm3
495        mulpd     %xmm7, %xmm1
496        movq      %xmm4, %xmm7
497        addsd     %xmm3, %xmm4
498        addpd     %xmm5, %xmm6
499        movq      8(%rax), %xmm5
500        subsd     %xmm3, %xmm5
501        subsd     %xmm4, %xmm3
502        addsd     16(%rax), %xmm1
503        mulpd     %xmm2, %xmm6
504        addsd     %xmm0, %xmm5
505        addsd     %xmm7, %xmm3
506        addsd     %xmm5, %xmm1
507        addsd     %xmm3, %xmm1
508        addsd     %xmm6, %xmm1
509        unpckhpd  %xmm6, %xmm6
510        movq      %xmm4, %xmm0
511        addsd     %xmm6, %xmm1
512        addsd     %xmm1, %xmm0
513        jmp       ..B1.4
514.L_2TAG_PACKET_8.0.1:
515        addl      $64, %edx
516        movq      %r10, %r9
517        movq      %r8, %r10
518        movq      $0, %r8
519        cmpq      $0, %r9
520        jne       .L_2TAG_PACKET_9.0.1
521        addl      $64, %edx
522        movq      %r10, %r9
523        movq      %r8, %r10
524        cmpq      $0, %r9
525        jne       .L_2TAG_PACKET_9.0.1
526        xorpd     %xmm0, %xmm0
527        xorpd     %xmm6, %xmm6
528        jmp       .L_2TAG_PACKET_12.0.1
529.L_2TAG_PACKET_10.0.1:
530        je        .L_2TAG_PACKET_11.0.1
531        negl      %ecx
532        shrq      %cl, %r10
533        movq      %r9, %rax
534        shrq      %cl, %r9
535        subl      %ecx, %edx
536        negl      %ecx
537        addl      $64, %ecx
538        shlq      %cl, %rax
539        orq       %rax, %r10
540        jmp       .L_2TAG_PACKET_11.0.1
541.L_2TAG_PACKET_4.0.1:
542        negl      %ecx
543        shlq      $32, %r9
544        orq       %r11, %r9
545        shlq      %cl, %r9
546        movq      %r9, %rdi
547        testl     $-2147483648, %r9d
548        jne       .L_2TAG_PACKET_13.0.1
549        shrl      %cl, %r9d
550        movl      $0, %ebx
551        shrq      $3, %rdi
552        jmp       .L_2TAG_PACKET_7.0.1
553.L_2TAG_PACKET_5.0.1:
554        shrl      %cl, %r9d
555        movl      $536870912, %ebx
556        shrl      %cl, %ebx
557        shlq      $32, %r9
558        orq       %r11, %r9
559        shlq      $32, %rbx
560        addl      $536870912, %edi
561        movq      $0, %rcx
562        movq      $0, %r11
563        subq      %r8, %rcx
564        sbbq      %r10, %r11
565        sbbq      %r9, %rbx
566        movq      %rcx, %r8
567        movq      %r11, %r10
568        movq      %rbx, %r9
569        movl      $32768, %ebx
570        jmp       .L_2TAG_PACKET_6.0.1
571.L_2TAG_PACKET_13.0.1:
572        shrl      %cl, %r9d
573        movq      $0x100000000, %rbx
574        shrq      %cl, %rbx
575        movq      $0, %rcx
576        movq      $0, %r11
577        subq      %r8, %rcx
578        sbbq      %r10, %r11
579        sbbq      %r9, %rbx
580        movq      %rcx, %r8
581        movq      %r11, %r10
582        movq      %rbx, %r9
583        movl      $32768, %ebx
584        shrq      $3, %rdi
585        addl      $536870912, %edi
586        jmp       .L_2TAG_PACKET_7.0.1
587.L_2TAG_PACKET_3.0.1:
588        movq      8(%rsp), %xmm0
589        mulsd     NEG_ZERO(%rip), %xmm0
590        movq      %xmm0, (%rsp)
591.L_2TAG_PACKET_14.0.1:
592..B1.4:
593        addq      $16, %rsp
594..___tag_value_sin.6:
595        popq      %rbx
596..___tag_value_sin.8:
597        ret
598..___tag_value_sin.9:
599END(sin)
600# -- End  sin
601	.section .rodata, "a"
602	.align 16
603	.align 16
604ONEHALF:
605	.long	0
606	.long	1071644672
607	.long	0
608	.long	1071644672
609	.type	ONEHALF,@object
610	.size	ONEHALF,16
611	.align 16
612P_2:
613	.long	442499072
614	.long	1032893537
615	.long	442499072
616	.long	1032893537
617	.type	P_2,@object
618	.size	P_2,16
619	.align 16
620SC_4:
621	.long	2773927732
622	.long	1053236707
623	.long	436314138
624	.long	1056571808
625	.type	SC_4,@object
626	.size	SC_4,16
627	.align 16
628Ctable:
629	.long	0
630	.long	0
631	.long	0
632	.long	0
633	.long	0
634	.long	0
635	.long	0
636	.long	1072693248
637	.long	393047345
638	.long	3212032302
639	.long	3156849708
640	.long	1069094822
641	.long	3758096384
642	.long	3158189848
643	.long	0
644	.long	1072693248
645	.long	18115067
646	.long	3214126342
647	.long	1013556747
648	.long	1070135480
649	.long	3221225472
650	.long	3160567065
651	.long	0
652	.long	1072693248
653	.long	2476548698
654	.long	3215330282
655	.long	785751814
656	.long	1070765062
657	.long	2684354560
658	.long	3161838221
659	.long	0
660	.long	1072693248
661	.long	2255197647
662	.long	3216211105
663	.long	2796464483
664	.long	1071152610
665	.long	3758096384
666	.long	3160878317
667	.long	0
668	.long	1072693248
669	.long	1945768569
670	.long	3216915048
671	.long	939980347
672	.long	1071524701
673	.long	536870912
674	.long	1012796809
675	.long	0
676	.long	1072693248
677	.long	1539668340
678	.long	3217396327
679	.long	967731400
680	.long	1071761211
681	.long	536870912
682	.long	1015752157
683	.long	0
684	.long	1072693248
685	.long	1403757309
686	.long	3217886718
687	.long	621354454
688	.long	1071926515
689	.long	536870912
690	.long	1013450602
691	.long	0
692	.long	1072693248
693	.long	2583490354
694	.long	1070236281
695	.long	1719614413
696	.long	1072079006
697	.long	536870912
698	.long	3163282740
699	.long	0
700	.long	1071644672
701	.long	2485417816
702	.long	1069626316
703	.long	1796544321
704	.long	1072217216
705	.long	536870912
706	.long	3162686945
707	.long	0
708	.long	1071644672
709	.long	2598800519
710	.long	1068266419
711	.long	688824739
712	.long	1072339814
713	.long	3758096384
714	.long	1010431536
715	.long	0
716	.long	1071644672
717	.long	2140183630
718	.long	3214756396
719	.long	4051746225
720	.long	1072445618
721	.long	2147483648
722	.long	3161907377
723	.long	0
724	.long	1071644672
725	.long	1699043957
726	.long	3216902261
727	.long	3476196678
728	.long	1072533611
729	.long	536870912
730	.long	1014257638
731	.long	0
732	.long	1071644672
733	.long	1991047213
734	.long	1067753521
735	.long	1455828442
736	.long	1072602945
737	.long	3758096384
738	.long	1015505073
739	.long	0
740	.long	1070596096
741	.long	240740309
742	.long	3215727903
743	.long	3489094832
744	.long	1072652951
745	.long	536870912
746	.long	1014325783
747	.long	0
748	.long	1070596096
749	.long	257503056
750	.long	3214647653
751	.long	2748392742
752	.long	1072683149
753	.long	1073741824
754	.long	3163061750
755	.long	0
756	.long	1069547520
757	.long	0
758	.long	0
759	.long	0
760	.long	1072693248
761	.long	0
762	.long	0
763	.long	0
764	.long	0
765	.long	257503056
766	.long	1067164005
767	.long	2748392742
768	.long	1072683149
769	.long	1073741824
770	.long	3163061750
771	.long	0
772	.long	3217031168
773	.long	240740309
774	.long	1068244255
775	.long	3489094832
776	.long	1072652951
777	.long	536870912
778	.long	1014325783
779	.long	0
780	.long	3218079744
781	.long	1991047213
782	.long	3215237169
783	.long	1455828442
784	.long	1072602945
785	.long	3758096384
786	.long	1015505073
787	.long	0
788	.long	3218079744
789	.long	1699043957
790	.long	1069418613
791	.long	3476196678
792	.long	1072533611
793	.long	536870912
794	.long	1014257638
795	.long	0
796	.long	3219128320
797	.long	2140183630
798	.long	1067272748
799	.long	4051746225
800	.long	1072445618
801	.long	2147483648
802	.long	3161907377
803	.long	0
804	.long	3219128320
805	.long	2598800519
806	.long	3215750067
807	.long	688824739
808	.long	1072339814
809	.long	3758096384
810	.long	1010431536
811	.long	0
812	.long	3219128320
813	.long	2485417816
814	.long	3217109964
815	.long	1796544321
816	.long	1072217216
817	.long	536870912
818	.long	3162686945
819	.long	0
820	.long	3219128320
821	.long	2583490354
822	.long	3217719929
823	.long	1719614413
824	.long	1072079006
825	.long	536870912
826	.long	3163282740
827	.long	0
828	.long	3219128320
829	.long	1403757309
830	.long	1070403070
831	.long	621354454
832	.long	1071926515
833	.long	536870912
834	.long	1013450602
835	.long	0
836	.long	3220176896
837	.long	1539668340
838	.long	1069912679
839	.long	967731400
840	.long	1071761211
841	.long	536870912
842	.long	1015752157
843	.long	0
844	.long	3220176896
845	.long	1945768569
846	.long	1069431400
847	.long	939980347
848	.long	1071524701
849	.long	536870912
850	.long	1012796809
851	.long	0
852	.long	3220176896
853	.long	2255197647
854	.long	1068727457
855	.long	2796464483
856	.long	1071152610
857	.long	3758096384
858	.long	3160878317
859	.long	0
860	.long	3220176896
861	.long	2476548698
862	.long	1067846634
863	.long	785751814
864	.long	1070765062
865	.long	2684354560
866	.long	3161838221
867	.long	0
868	.long	3220176896
869	.long	18115067
870	.long	1066642694
871	.long	1013556747
872	.long	1070135480
873	.long	3221225472
874	.long	3160567065
875	.long	0
876	.long	3220176896
877	.long	393047345
878	.long	1064548654
879	.long	3156849708
880	.long	1069094822
881	.long	3758096384
882	.long	3158189848
883	.long	0
884	.long	3220176896
885	.long	0
886	.long	0
887	.long	0
888	.long	0
889	.long	0
890	.long	0
891	.long	0
892	.long	3220176896
893	.long	393047345
894	.long	1064548654
895	.long	3156849708
896	.long	3216578470
897	.long	3758096384
898	.long	1010706200
899	.long	0
900	.long	3220176896
901	.long	18115067
902	.long	1066642694
903	.long	1013556747
904	.long	3217619128
905	.long	3221225472
906	.long	1013083417
907	.long	0
908	.long	3220176896
909	.long	2476548698
910	.long	1067846634
911	.long	785751814
912	.long	3218248710
913	.long	2684354560
914	.long	1014354573
915	.long	0
916	.long	3220176896
917	.long	2255197647
918	.long	1068727457
919	.long	2796464483
920	.long	3218636258
921	.long	3758096384
922	.long	1013394669
923	.long	0
924	.long	3220176896
925	.long	1945768569
926	.long	1069431400
927	.long	939980347
928	.long	3219008349
929	.long	536870912
930	.long	3160280457
931	.long	0
932	.long	3220176896
933	.long	1539668340
934	.long	1069912679
935	.long	967731400
936	.long	3219244859
937	.long	536870912
938	.long	3163235805
939	.long	0
940	.long	3220176896
941	.long	1403757309
942	.long	1070403070
943	.long	621354454
944	.long	3219410163
945	.long	536870912
946	.long	3160934250
947	.long	0
948	.long	3220176896
949	.long	2583490354
950	.long	3217719929
951	.long	1719614413
952	.long	3219562654
953	.long	536870912
954	.long	1015799092
955	.long	0
956	.long	3219128320
957	.long	2485417816
958	.long	3217109964
959	.long	1796544321
960	.long	3219700864
961	.long	536870912
962	.long	1015203297
963	.long	0
964	.long	3219128320
965	.long	2598800519
966	.long	3215750067
967	.long	688824739
968	.long	3219823462
969	.long	3758096384
970	.long	3157915184
971	.long	0
972	.long	3219128320
973	.long	2140183630
974	.long	1067272748
975	.long	4051746225
976	.long	3219929266
977	.long	2147483648
978	.long	1014423729
979	.long	0
980	.long	3219128320
981	.long	1699043957
982	.long	1069418613
983	.long	3476196678
984	.long	3220017259
985	.long	536870912
986	.long	3161741286
987	.long	0
988	.long	3219128320
989	.long	1991047213
990	.long	3215237169
991	.long	1455828442
992	.long	3220086593
993	.long	3758096384
994	.long	3162988721
995	.long	0
996	.long	3218079744
997	.long	240740309
998	.long	1068244255
999	.long	3489094832
1000	.long	3220136599
1001	.long	536870912
1002	.long	3161809431
1003	.long	0
1004	.long	3218079744
1005	.long	257503056
1006	.long	1067164005
1007	.long	2748392742
1008	.long	3220166797
1009	.long	1073741824
1010	.long	1015578102
1011	.long	0
1012	.long	3217031168
1013	.long	0
1014	.long	0
1015	.long	0
1016	.long	3220176896
1017	.long	0
1018	.long	0
1019	.long	0
1020	.long	0
1021	.long	257503056
1022	.long	3214647653
1023	.long	2748392742
1024	.long	3220166797
1025	.long	1073741824
1026	.long	1015578102
1027	.long	0
1028	.long	1069547520
1029	.long	240740309
1030	.long	3215727903
1031	.long	3489094832
1032	.long	3220136599
1033	.long	536870912
1034	.long	3161809431
1035	.long	0
1036	.long	1070596096
1037	.long	1991047213
1038	.long	1067753521
1039	.long	1455828442
1040	.long	3220086593
1041	.long	3758096384
1042	.long	3162988721
1043	.long	0
1044	.long	1070596096
1045	.long	1699043957
1046	.long	3216902261
1047	.long	3476196678
1048	.long	3220017259
1049	.long	536870912
1050	.long	3161741286
1051	.long	0
1052	.long	1071644672
1053	.long	2140183630
1054	.long	3214756396
1055	.long	4051746225
1056	.long	3219929266
1057	.long	2147483648
1058	.long	1014423729
1059	.long	0
1060	.long	1071644672
1061	.long	2598800519
1062	.long	1068266419
1063	.long	688824739
1064	.long	3219823462
1065	.long	3758096384
1066	.long	3157915184
1067	.long	0
1068	.long	1071644672
1069	.long	2485417816
1070	.long	1069626316
1071	.long	1796544321
1072	.long	3219700864
1073	.long	536870912
1074	.long	1015203297
1075	.long	0
1076	.long	1071644672
1077	.long	2583490354
1078	.long	1070236281
1079	.long	1719614413
1080	.long	3219562654
1081	.long	536870912
1082	.long	1015799092
1083	.long	0
1084	.long	1071644672
1085	.long	1403757309
1086	.long	3217886718
1087	.long	621354454
1088	.long	3219410163
1089	.long	536870912
1090	.long	3160934250
1091	.long	0
1092	.long	1072693248
1093	.long	1539668340
1094	.long	3217396327
1095	.long	967731400
1096	.long	3219244859
1097	.long	536870912
1098	.long	3163235805
1099	.long	0
1100	.long	1072693248
1101	.long	1945768569
1102	.long	3216915048
1103	.long	939980347
1104	.long	3219008349
1105	.long	536870912
1106	.long	3160280457
1107	.long	0
1108	.long	1072693248
1109	.long	2255197647
1110	.long	3216211105
1111	.long	2796464483
1112	.long	3218636258
1113	.long	3758096384
1114	.long	1013394669
1115	.long	0
1116	.long	1072693248
1117	.long	2476548698
1118	.long	3215330282
1119	.long	785751814
1120	.long	3218248710
1121	.long	2684354560
1122	.long	1014354573
1123	.long	0
1124	.long	1072693248
1125	.long	18115067
1126	.long	3214126342
1127	.long	1013556747
1128	.long	3217619128
1129	.long	3221225472
1130	.long	1013083417
1131	.long	0
1132	.long	1072693248
1133	.long	393047345
1134	.long	3212032302
1135	.long	3156849708
1136	.long	3216578470
1137	.long	3758096384
1138	.long	1010706200
1139	.long	0
1140	.long	1072693248
1141	.type	Ctable,@object
1142	.size	Ctable,2048
1143	.align 16
1144SC_2:
1145	.long	286331153
1146	.long	1065423121
1147	.long	1431655765
1148	.long	1067799893
1149	.type	SC_2,@object
1150	.size	SC_2,16
1151	.align 16
1152SC_3:
1153	.long	436314138
1154	.long	3207201184
1155	.long	381774871
1156	.long	3210133868
1157	.type	SC_3,@object
1158	.size	SC_3,16
1159	.align 16
1160SC_1:
1161	.long	1431655765
1162	.long	3217380693
1163	.long	0
1164	.long	3219128320
1165	.type	SC_1,@object
1166	.size	SC_1,16
1167	.align 16
1168PI_INV_TABLE:
1169	.long	0
1170	.long	0
1171	.long	2734261102
1172	.long	1313084713
1173	.long	4230436817
1174	.long	4113882560
1175	.long	3680671129
1176	.long	1011060801
1177	.long	4266746795
1178	.long	3736847713
1179	.long	3072618042
1180	.long	1112396512
1181	.long	105459434
1182	.long	164729372
1183	.long	4263373596
1184	.long	2972297022
1185	.long	3900847605
1186	.long	784024708
1187	.long	3919343654
1188	.long	3026157121
1189	.long	965858873
1190	.long	2203269620
1191	.long	2625920907
1192	.long	3187222587
1193	.long	536385535
1194	.long	3724908559
1195	.long	4012839307
1196	.long	1510632735
1197	.long	1832287951
1198	.long	667617719
1199	.long	1330003814
1200	.long	2657085997
1201	.long	1965537991
1202	.long	3957715323
1203	.long	1023883767
1204	.long	2320667370
1205	.long	1811636145
1206	.long	529358088
1207	.long	1443049542
1208	.long	4235946923
1209	.long	4040145953
1210	.type	PI_INV_TABLE,@object
1211	.size	PI_INV_TABLE,164
1212	.space 12, 0x00 	# pad
1213	.align 16
1214PI_4:
1215	.long	1073741824
1216	.long	1072243195
1217	.long	407279769
1218	.long	1046758445
1219	.type	PI_4,@object
1220	.size	PI_4,16
1221	.align 8
1222PI32INV:
1223	.long	1841940611
1224	.long	1076125488
1225	.type	PI32INV,@object
1226	.size	PI32INV,8
1227	.align 8
1228SHIFTER:
1229	.long	0
1230	.long	1127743488
1231	.type	SHIFTER,@object
1232	.size	SHIFTER,8
1233	.align 8
1234SIGN_MASK:
1235	.long	0
1236	.long	2147483648
1237	.type	SIGN_MASK,@object
1238	.size	SIGN_MASK,8
1239	.align 8
1240P_3:
1241	.long	771977331
1242	.long	996350346
1243	.type	P_3,@object
1244	.size	P_3,8
1245	.align 8
1246ALL_ONES:
1247	.long	4294967295
1248	.long	1072693247
1249	.type	ALL_ONES,@object
1250	.size	ALL_ONES,8
1251	.align 8
1252TWO_POW_55:
1253	.long	0
1254	.long	1130364928
1255	.type	TWO_POW_55,@object
1256	.size	TWO_POW_55,8
1257	.align 8
1258TWO_POW_M55:
1259	.long	0
1260	.long	1015021568
1261	.type	TWO_POW_M55,@object
1262	.size	TWO_POW_M55,8
1263	.align 8
1264P_1:
1265	.long	1413480448
1266	.long	1069097467
1267	.type	P_1,@object
1268	.size	P_1,8
1269	.align 8
1270NEG_ZERO:
1271	.long	0
1272	.long	2147483648
1273	.type	NEG_ZERO,@object
1274	.size	NEG_ZERO,8
1275	.data
1276	.section .note.GNU-stack, ""
1277// -- Begin DWARF2 SEGMENT .eh_frame
1278	.section .eh_frame,"a",@progbits
1279.eh_frame_seg:
1280	.align 1
1281	.4byte 0x00000014
1282	.8byte 0x00527a0100000000
1283	.8byte 0x08070c1b01107801
1284	.4byte 0x00000190
1285	.4byte 0x0000002c
1286	.4byte 0x0000001c
1287	.4byte ..___tag_value_sin.1-.
1288	.4byte ..___tag_value_sin.9-..___tag_value_sin.1
1289	.2byte 0x0400
1290	.4byte ..___tag_value_sin.3-..___tag_value_sin.1
1291	.4byte 0x0283100e
1292	.byte 0x04
1293	.4byte ..___tag_value_sin.5-..___tag_value_sin.3
1294	.2byte 0x200e
1295	.byte 0x04
1296	.4byte ..___tag_value_sin.6-..___tag_value_sin.5
1297	.4byte 0x04c3100e
1298	.4byte ..___tag_value_sin.8-..___tag_value_sin.6
1299	.2byte 0x080e
1300# End
1301