Add the optimized implementation of 18 math functions for x86 and x86_64 respectively

Change-Id: I31bf601448a9427f825517f3a0ff24de47f49bfa
Signed-off-by: Jingwei Zhang <jingwei.zhang@intel.com>
Signed-off-by: Mingwei Shi <mingwei.shi@intel.com>
diff --git a/libm/x86_64/s_sin.S b/libm/x86_64/s_sin.S
new file mode 100644
index 0000000..2f93a34
--- /dev/null
+++ b/libm/x86_64/s_sin.S
@@ -0,0 +1,1300 @@
+/*
+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. RANGE REDUCTION
+//
+//     We perform an initial range reduction from X to r with
+//
+//          X =~= N * pi/32 + r
+//
+//     so that |r| <= pi/64 + epsilon. We restrict inputs to those
+//     where |N| <= 932560. Beyond this, the range reduction is
+//     insufficiently accurate. For extremely small inputs, 
+//     denormalization can occur internally, impacting performance.
+//     This means that the main path is actually only taken for
+//     2^-252 <= |X| < 90112.
+//
+//     To avoid branches, we perform the range reduction to full
+//     accuracy each time.
+//
+//          X - N * (P_1 + P_2 + P_3)
+//
+//     where P_1 and P_2 are 32-bit numbers (so multiplication by N
+//     is exact) and P_3 is a 53-bit number. Together, these
+//     approximate pi well enough for all cases in the restricted
+//     range.
+//
+//     The main reduction sequence is:
+//
+//             y = 32/pi * x
+//             N = integer(y)
+//     (computed by adding and subtracting off SHIFTER)
+//
+//             m_1 = N * P_1
+//             m_2 = N * P_2
+//             r_1 = x - m_1
+//             r = r_1 - m_2
+//     (this r can be used for most of the calculation)
+//
+//             c_1 = r_1 - r
+//             m_3 = N * P_3
+//             c_2 = c_1 - m_2
+//             c = c_2 - m_3
+//
+//     2. MAIN ALGORITHM
+//
+//     The algorithm uses a table lookup based on B = M * pi / 32
+//     where M = N mod 64. The stored values are:
+//       sigma             closest power of 2 to cos(B)
+//       C_hl              53-bit cos(B) - sigma
+//       S_hi + S_lo       2 * 53-bit sin(B)
+//
+//     The computation is organized as follows:
+//
+//          sin(B + r + c) = [sin(B) + sigma * r] +
+//                           r * (cos(B) - sigma) +
+//                           sin(B) * [cos(r + c) - 1] +
+//                           cos(B) * [sin(r + c) - r]
+//
+//     which is approximately:
+//
+//          [S_hi + sigma * r] +
+//          C_hl * r +
+//          S_lo + S_hi * [(cos(r) - 1) - r * c] +
+//          (C_hl + sigma) * [(sin(r) - r) + c]
+//
+//     and this is what is actually computed. We separate this sum
+//     into four parts:
+//
+//          hi + med + pols + corr
+//
+//     where
+//
+//          hi       = S_hi + sigma r
+//          med      = C_hl * r
+//          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
+//          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
+//
+//     3. POLYNOMIAL
+//
+//     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
+//     (sin(r) - r) can be rearranged freely, since it is quite
+//     small, so we exploit parallelism to the fullest.
+//
+//          psc4       =   SC_4 * r_1
+//          msc4       =   psc4 * r
+//          r2         =   r * r
+//          msc2       =   SC_2 * r2
+//          r4         =   r2 * r2
+//          psc3       =   SC_3 + msc4
+//          psc1       =   SC_1 + msc2
+//          msc3       =   r4 * psc3
+//          sincospols =   psc1 + msc3
+//          pols       =   sincospols *
+//                         <S_hi * r^2 | (C_hl + sigma) * r^3>
+//
+//     4. CORRECTION TERM
+//
+//     This is where the "c" component of the range reduction is
+//     taken into account; recall that just "r" is used for most of
+//     the calculation.
+//
+//          -c   = m_3 - c_2
+//          -d   = S_hi * r - (C_hl + sigma)
+//          corr = -c * -d + S_lo
+//
+//     5. COMPENSATED SUMMATIONS
+//
+//     The two successive compensated summations add up the high
+//     and medium parts, leaving just the low parts to add up at
+//     the end.
+//
+//          rs        =  sigma * r
+//          res_int   =  S_hi + rs
+//          k_0       =  S_hi - res_int
+//          k_2       =  k_0 + rs
+//          med       =  C_hl * r
+//          res_hi    =  res_int + med
+//          k_1       =  res_int - res_hi
+//          k_3       =  k_1 + med
+//
+//     6. FINAL SUMMATION
+//
+//     We now add up all the small parts:
+//
+//          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
+//
+//     Now the overall result is just:
+//
+//          res_hi + res_lo
+//
+//     7. SMALL ARGUMENTS
+//
+//     If |x| < SNN (SNN meaning the smallest normal number), we
+//     simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we
+//     do 2^-55 * (2^55 * x - x).
+//
+// Special cases:
+//  sin(NaN) = quiet NaN, and raise invalid exception
+//  sin(INF) = NaN and raise invalid exception
+//  sin(+/-0) = +/-0
+//
+/******************************************************************************/
+
+#include <private/bionic_asm.h>
+# -- Begin  sin
+ENTRY(sin)
+# parameter 1: %xmm0
+..B1.1:
+..___tag_value_sin.1:
+        pushq     %rbx
+..___tag_value_sin.3:
+        subq      $16, %rsp
+..___tag_value_sin.5:
+        movsd     %xmm0, 8(%rsp)
+..B1.2:
+        movl      12(%rsp), %eax
+        movq      PI32INV(%rip), %xmm1
+        movq      SHIFTER(%rip), %xmm2
+        andl      $2147418112, %eax
+        subl      $808452096, %eax
+        cmpl      $281346048, %eax
+        ja        .L_2TAG_PACKET_0.0.1
+        mulsd     %xmm0, %xmm1
+        movapd    ONEHALF(%rip), %xmm5
+        movq      SIGN_MASK(%rip), %xmm4
+        andpd     %xmm0, %xmm4
+        orps      %xmm4, %xmm5
+        addpd     %xmm5, %xmm1
+        cvttsd2si %xmm1, %edx
+        cvtsi2sd  %edx, %xmm1
+        movapd    P_2(%rip), %xmm6
+        movq      $0x3fb921fb54400000, %r8
+        movd      %r8, %xmm3
+        movapd    SC_4(%rip), %xmm5
+        pshufd    $68, %xmm0, %xmm4
+        mulsd     %xmm1, %xmm3
+        movddup   %xmm1, %xmm1
+        andl      $63, %edx
+        shll      $5, %edx
+        lea       Ctable(%rip), %rax
+        addq      %rdx, %rax
+        mulpd     %xmm1, %xmm6
+        mulsd     P_3(%rip), %xmm1
+        subsd     %xmm3, %xmm4
+        movq      8(%rax), %xmm7
+        subsd     %xmm3, %xmm0
+        movddup   %xmm4, %xmm3
+        subsd     %xmm6, %xmm4
+        pshufd    $68, %xmm0, %xmm0
+        movapd    (%rax), %xmm2
+        mulpd     %xmm0, %xmm5
+        subpd     %xmm6, %xmm0
+        mulsd     %xmm4, %xmm7
+        subsd     %xmm4, %xmm3
+        mulpd     %xmm0, %xmm5
+        mulpd     %xmm0, %xmm0
+        subsd     %xmm6, %xmm3
+        movapd    SC_2(%rip), %xmm6
+        subsd     %xmm3, %xmm1
+        movq      24(%rax), %xmm3
+        addsd     %xmm3, %xmm2
+        subsd     %xmm2, %xmm7
+        mulsd     %xmm4, %xmm2
+        mulpd     %xmm0, %xmm6
+        mulsd     %xmm4, %xmm3
+        mulpd     %xmm0, %xmm2
+        mulpd     %xmm0, %xmm0
+        addpd     SC_3(%rip), %xmm5
+        mulsd     (%rax), %xmm4
+        addpd     SC_1(%rip), %xmm6
+        mulpd     %xmm0, %xmm5
+        movq      %xmm3, %xmm0
+        addsd     8(%rax), %xmm3
+        mulpd     %xmm7, %xmm1
+        movq      %xmm4, %xmm7
+        addsd     %xmm3, %xmm4
+        addpd     %xmm5, %xmm6
+        movq      8(%rax), %xmm5
+        subsd     %xmm3, %xmm5
+        subsd     %xmm4, %xmm3
+        addsd     16(%rax), %xmm1
+        mulpd     %xmm2, %xmm6
+        addsd     %xmm0, %xmm5
+        addsd     %xmm7, %xmm3
+        addsd     %xmm5, %xmm1
+        addsd     %xmm3, %xmm1
+        addsd     %xmm6, %xmm1
+        unpckhpd  %xmm6, %xmm6
+        movq      %xmm4, %xmm0
+        addsd     %xmm6, %xmm1
+        addsd     %xmm1, %xmm0
+        jmp       ..B1.4
+.L_2TAG_PACKET_0.0.1:
+        jg        .L_2TAG_PACKET_1.0.1
+        shrl      $20, %eax
+        cmpw      $3325, %ax
+        jne       .L_2TAG_PACKET_2.0.1
+        mulsd     ALL_ONES(%rip), %xmm0
+        jmp       ..B1.4
+.L_2TAG_PACKET_2.0.1:
+        movq      TWO_POW_55(%rip), %xmm3
+        mulsd     %xmm0, %xmm3
+        subsd     %xmm0, %xmm3
+        mulsd     TWO_POW_M55(%rip), %xmm3
+        jmp       ..B1.4
+.L_2TAG_PACKET_1.0.1:
+        pextrw    $3, %xmm0, %eax
+        andl      $32752, %eax
+        cmpl      $32752, %eax
+        je        .L_2TAG_PACKET_3.0.1
+        pextrw    $3, %xmm0, %ecx
+        andl      $32752, %ecx
+        subl      $16224, %ecx
+        shrl      $7, %ecx
+        andl      $65532, %ecx
+        lea       PI_INV_TABLE(%rip), %r11
+        addq      %r11, %rcx
+        movd      %xmm0, %rax
+        movl      20(%rcx), %r10d
+        movl      24(%rcx), %r8d
+        movl      %eax, %edx
+        shrq      $21, %rax
+        orl       $-2147483648, %eax
+        shrl      $11, %eax
+        movl      %r10d, %r9d
+        imulq     %rdx, %r10
+        imulq     %rax, %r9
+        imulq     %rax, %r8
+        movl      16(%rcx), %esi
+        movl      12(%rcx), %edi
+        movl      %r10d, %r11d
+        shrq      $32, %r10
+        addq      %r10, %r9
+        addq      %r8, %r11
+        movl      %r11d, %r8d
+        shrq      $32, %r11
+        addq      %r11, %r9
+        movl      %esi, %r10d
+        imulq     %rdx, %rsi
+        imulq     %rax, %r10
+        movl      %edi, %r11d
+        imulq     %rdx, %rdi
+        movl      %esi, %ebx
+        shrq      $32, %rsi
+        addq      %rbx, %r9
+        movl      %r9d, %ebx
+        shrq      $32, %r9
+        addq      %rsi, %r10
+        addq      %r9, %r10
+        shlq      $32, %rbx
+        orq       %rbx, %r8
+        imulq     %rax, %r11
+        movl      8(%rcx), %r9d
+        movl      4(%rcx), %esi
+        movl      %edi, %ebx
+        shrq      $32, %rdi
+        addq      %rbx, %r10
+        movl      %r10d, %ebx
+        shrq      $32, %r10
+        addq      %rdi, %r11
+        addq      %r10, %r11
+        movq      %r9, %rdi
+        imulq     %rdx, %r9
+        imulq     %rax, %rdi
+        movl      %r9d, %r10d
+        shrq      $32, %r9
+        addq      %r10, %r11
+        movl      %r11d, %r10d
+        shrq      $32, %r11
+        addq      %r9, %rdi
+        addq      %r11, %rdi
+        movq      %rsi, %r9
+        imulq     %rdx, %rsi
+        imulq     %rax, %r9
+        shlq      $32, %r10
+        orq       %rbx, %r10
+        movl      (%rcx), %eax
+        movl      %esi, %r11d
+        shrq      $32, %rsi
+        addq      %r11, %rdi
+        movl      %edi, %r11d
+        shrq      $32, %rdi
+        addq      %rsi, %r9
+        addq      %rdi, %r9
+        imulq     %rax, %rdx
+        pextrw    $3, %xmm0, %ebx
+        lea       PI_INV_TABLE(%rip), %rdi
+        subq      %rdi, %rcx
+        addl      %ecx, %ecx
+        addl      %ecx, %ecx
+        addl      %ecx, %ecx
+        addl      $19, %ecx
+        movl      $32768, %esi
+        andl      %ebx, %esi
+        shrl      $4, %ebx
+        andl      $2047, %ebx
+        subl      $1023, %ebx
+        subl      %ebx, %ecx
+        addq      %rdx, %r9
+        movl      %ecx, %edx
+        addl      $32, %edx
+        cmpl      $1, %ecx
+        jl        .L_2TAG_PACKET_4.0.1
+        negl      %ecx
+        addl      $29, %ecx
+        shll      %cl, %r9d
+        movl      %r9d, %edi
+        andl      $536870911, %r9d
+        testl     $268435456, %r9d
+        jne       .L_2TAG_PACKET_5.0.1
+        shrl      %cl, %r9d
+        movl      $0, %ebx
+        shlq      $32, %r9
+        orq       %r11, %r9
+.L_2TAG_PACKET_6.0.1:
+.L_2TAG_PACKET_7.0.1:
+        cmpq      $0, %r9
+        je        .L_2TAG_PACKET_8.0.1
+.L_2TAG_PACKET_9.0.1:
+        bsr       %r9, %r11
+        movl      $29, %ecx
+        subl      %r11d, %ecx
+        jle       .L_2TAG_PACKET_10.0.1
+        shlq      %cl, %r9
+        movq      %r10, %rax
+        shlq      %cl, %r10
+        addl      %ecx, %edx
+        negl      %ecx
+        addl      $64, %ecx
+        shrq      %cl, %rax
+        shrq      %cl, %r8
+        orq       %rax, %r9
+        orq       %r8, %r10
+.L_2TAG_PACKET_11.0.1:
+        cvtsi2sdq %r9, %xmm0
+        shrq      $1, %r10
+        cvtsi2sdq %r10, %xmm3
+        xorpd     %xmm4, %xmm4
+        shll      $4, %edx
+        negl      %edx
+        addl      $16368, %edx
+        orl       %esi, %edx
+        xorl      %ebx, %edx
+        pinsrw    $3, %edx, %xmm4
+        movq      PI_4(%rip), %xmm2
+        movq      8+PI_4(%rip), %xmm6
+        xorpd     %xmm5, %xmm5
+        subl      $1008, %edx
+        pinsrw    $3, %edx, %xmm5
+        mulsd     %xmm4, %xmm0
+        shll      $16, %esi
+        sarl      $31, %esi
+        mulsd     %xmm5, %xmm3
+        movq      %xmm0, %xmm1
+        mulsd     %xmm2, %xmm0
+        shrl      $29, %edi
+        addsd     %xmm3, %xmm1
+        mulsd     %xmm2, %xmm3
+        addl      %esi, %edi
+        xorl      %esi, %edi
+        mulsd     %xmm1, %xmm6
+        movl      %edi, %eax
+        addsd     %xmm3, %xmm6
+        movq      %xmm0, %xmm2
+        addsd     %xmm6, %xmm0
+        subsd     %xmm0, %xmm2
+        addsd     %xmm2, %xmm6
+.L_2TAG_PACKET_12.0.1:
+        movq      PI32INV(%rip), %xmm1
+        mulsd     %xmm0, %xmm1
+        movq      ONEHALF(%rip), %xmm5
+        movq      SIGN_MASK(%rip), %xmm4
+        andpd     %xmm0, %xmm4
+        orps      %xmm4, %xmm5
+        addpd     %xmm5, %xmm1
+        cvttsd2si %xmm1, %edx
+        cvtsi2sd  %edx, %xmm1
+        movq      P_1(%rip), %xmm3
+        movapd    P_2(%rip), %xmm2
+        mulsd     %xmm1, %xmm3
+        unpcklpd  %xmm1, %xmm1
+        shll      $3, %eax
+        addl      $1865216, %edx
+        movq      %xmm0, %xmm4
+        addl      %eax, %edx
+        andl      $63, %edx
+        movapd    SC_4(%rip), %xmm5
+        lea       Ctable(%rip), %rax
+        shll      $5, %edx
+        addq      %rdx, %rax
+        mulpd     %xmm1, %xmm2
+        subsd     %xmm3, %xmm0
+        mulsd     P_3(%rip), %xmm1
+        subsd     %xmm3, %xmm4
+        movq      8(%rax), %xmm7
+        unpcklpd  %xmm0, %xmm0
+        movq      %xmm4, %xmm3
+        subsd     %xmm2, %xmm4
+        mulpd     %xmm0, %xmm5
+        subpd     %xmm2, %xmm0
+        mulsd     %xmm4, %xmm7
+        subsd     %xmm4, %xmm3
+        mulpd     %xmm0, %xmm5
+        mulpd     %xmm0, %xmm0
+        subsd     %xmm2, %xmm3
+        movapd    (%rax), %xmm2
+        subsd     %xmm3, %xmm1
+        movq      24(%rax), %xmm3
+        addsd     %xmm3, %xmm2
+        subsd     %xmm2, %xmm7
+        subsd     %xmm6, %xmm1
+        movapd    SC_2(%rip), %xmm6
+        mulsd     %xmm4, %xmm2
+        mulpd     %xmm0, %xmm6
+        mulsd     %xmm4, %xmm3
+        mulpd     %xmm0, %xmm2
+        mulpd     %xmm0, %xmm0
+        addpd     SC_3(%rip), %xmm5
+        mulsd     (%rax), %xmm4
+        addpd     SC_1(%rip), %xmm6
+        mulpd     %xmm0, %xmm5
+        movq      %xmm3, %xmm0
+        addsd     8(%rax), %xmm3
+        mulpd     %xmm7, %xmm1
+        movq      %xmm4, %xmm7
+        addsd     %xmm3, %xmm4
+        addpd     %xmm5, %xmm6
+        movq      8(%rax), %xmm5
+        subsd     %xmm3, %xmm5
+        subsd     %xmm4, %xmm3
+        addsd     16(%rax), %xmm1
+        mulpd     %xmm2, %xmm6
+        addsd     %xmm0, %xmm5
+        addsd     %xmm7, %xmm3
+        addsd     %xmm5, %xmm1
+        addsd     %xmm3, %xmm1
+        addsd     %xmm6, %xmm1
+        unpckhpd  %xmm6, %xmm6
+        movq      %xmm4, %xmm0
+        addsd     %xmm6, %xmm1
+        addsd     %xmm1, %xmm0
+        jmp       ..B1.4
+.L_2TAG_PACKET_8.0.1:
+        addl      $64, %edx
+        movq      %r10, %r9
+        movq      %r8, %r10
+        movq      $0, %r8
+        cmpq      $0, %r9
+        jne       .L_2TAG_PACKET_9.0.1
+        addl      $64, %edx
+        movq      %r10, %r9
+        movq      %r8, %r10
+        cmpq      $0, %r9
+        jne       .L_2TAG_PACKET_9.0.1
+        xorpd     %xmm0, %xmm0
+        xorpd     %xmm6, %xmm6
+        jmp       .L_2TAG_PACKET_12.0.1
+.L_2TAG_PACKET_10.0.1:
+        je        .L_2TAG_PACKET_11.0.1
+        negl      %ecx
+        shrq      %cl, %r10
+        movq      %r9, %rax
+        shrq      %cl, %r9
+        subl      %ecx, %edx
+        negl      %ecx
+        addl      $64, %ecx
+        shlq      %cl, %rax
+        orq       %rax, %r10
+        jmp       .L_2TAG_PACKET_11.0.1
+.L_2TAG_PACKET_4.0.1:
+        negl      %ecx
+        shlq      $32, %r9
+        orq       %r11, %r9
+        shlq      %cl, %r9
+        movq      %r9, %rdi
+        testl     $-2147483648, %r9d
+        jne       .L_2TAG_PACKET_13.0.1
+        shrl      %cl, %r9d
+        movl      $0, %ebx
+        shrq      $3, %rdi
+        jmp       .L_2TAG_PACKET_7.0.1
+.L_2TAG_PACKET_5.0.1:
+        shrl      %cl, %r9d
+        movl      $536870912, %ebx
+        shrl      %cl, %ebx
+        shlq      $32, %r9
+        orq       %r11, %r9
+        shlq      $32, %rbx
+        addl      $536870912, %edi
+        movq      $0, %rcx
+        movq      $0, %r11
+        subq      %r8, %rcx
+        sbbq      %r10, %r11
+        sbbq      %r9, %rbx
+        movq      %rcx, %r8
+        movq      %r11, %r10
+        movq      %rbx, %r9
+        movl      $32768, %ebx
+        jmp       .L_2TAG_PACKET_6.0.1
+.L_2TAG_PACKET_13.0.1:
+        shrl      %cl, %r9d
+        movq      $0x100000000, %rbx
+        shrq      %cl, %rbx
+        movq      $0, %rcx
+        movq      $0, %r11
+        subq      %r8, %rcx
+        sbbq      %r10, %r11
+        sbbq      %r9, %rbx
+        movq      %rcx, %r8
+        movq      %r11, %r10
+        movq      %rbx, %r9
+        movl      $32768, %ebx
+        shrq      $3, %rdi
+        addl      $536870912, %edi
+        jmp       .L_2TAG_PACKET_7.0.1
+.L_2TAG_PACKET_3.0.1:
+        movq      8(%rsp), %xmm0
+        mulsd     NEG_ZERO(%rip), %xmm0
+        movq      %xmm0, (%rsp)
+.L_2TAG_PACKET_14.0.1:
+..B1.4:
+        addq      $16, %rsp
+..___tag_value_sin.6:
+        popq      %rbx
+..___tag_value_sin.8:
+        ret       
+..___tag_value_sin.9:
+END(sin)
+# -- End  sin
+	.section .rodata, "a"
+	.align 16
+	.align 16
+ONEHALF:
+	.long	0
+	.long	1071644672
+	.long	0
+	.long	1071644672
+	.type	ONEHALF,@object
+	.size	ONEHALF,16
+	.align 16
+P_2:
+	.long	442499072
+	.long	1032893537
+	.long	442499072
+	.long	1032893537
+	.type	P_2,@object
+	.size	P_2,16
+	.align 16
+SC_4:
+	.long	2773927732
+	.long	1053236707
+	.long	436314138
+	.long	1056571808
+	.type	SC_4,@object
+	.size	SC_4,16
+	.align 16
+Ctable:
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	1072693248
+	.long	393047345
+	.long	3212032302
+	.long	3156849708
+	.long	1069094822
+	.long	3758096384
+	.long	3158189848
+	.long	0
+	.long	1072693248
+	.long	18115067
+	.long	3214126342
+	.long	1013556747
+	.long	1070135480
+	.long	3221225472
+	.long	3160567065
+	.long	0
+	.long	1072693248
+	.long	2476548698
+	.long	3215330282
+	.long	785751814
+	.long	1070765062
+	.long	2684354560
+	.long	3161838221
+	.long	0
+	.long	1072693248
+	.long	2255197647
+	.long	3216211105
+	.long	2796464483
+	.long	1071152610
+	.long	3758096384
+	.long	3160878317
+	.long	0
+	.long	1072693248
+	.long	1945768569
+	.long	3216915048
+	.long	939980347
+	.long	1071524701
+	.long	536870912
+	.long	1012796809
+	.long	0
+	.long	1072693248
+	.long	1539668340
+	.long	3217396327
+	.long	967731400
+	.long	1071761211
+	.long	536870912
+	.long	1015752157
+	.long	0
+	.long	1072693248
+	.long	1403757309
+	.long	3217886718
+	.long	621354454
+	.long	1071926515
+	.long	536870912
+	.long	1013450602
+	.long	0
+	.long	1072693248
+	.long	2583490354
+	.long	1070236281
+	.long	1719614413
+	.long	1072079006
+	.long	536870912
+	.long	3163282740
+	.long	0
+	.long	1071644672
+	.long	2485417816
+	.long	1069626316
+	.long	1796544321
+	.long	1072217216
+	.long	536870912
+	.long	3162686945
+	.long	0
+	.long	1071644672
+	.long	2598800519
+	.long	1068266419
+	.long	688824739
+	.long	1072339814
+	.long	3758096384
+	.long	1010431536
+	.long	0
+	.long	1071644672
+	.long	2140183630
+	.long	3214756396
+	.long	4051746225
+	.long	1072445618
+	.long	2147483648
+	.long	3161907377
+	.long	0
+	.long	1071644672
+	.long	1699043957
+	.long	3216902261
+	.long	3476196678
+	.long	1072533611
+	.long	536870912
+	.long	1014257638
+	.long	0
+	.long	1071644672
+	.long	1991047213
+	.long	1067753521
+	.long	1455828442
+	.long	1072602945
+	.long	3758096384
+	.long	1015505073
+	.long	0
+	.long	1070596096
+	.long	240740309
+	.long	3215727903
+	.long	3489094832
+	.long	1072652951
+	.long	536870912
+	.long	1014325783
+	.long	0
+	.long	1070596096
+	.long	257503056
+	.long	3214647653
+	.long	2748392742
+	.long	1072683149
+	.long	1073741824
+	.long	3163061750
+	.long	0
+	.long	1069547520
+	.long	0
+	.long	0
+	.long	0
+	.long	1072693248
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	257503056
+	.long	1067164005
+	.long	2748392742
+	.long	1072683149
+	.long	1073741824
+	.long	3163061750
+	.long	0
+	.long	3217031168
+	.long	240740309
+	.long	1068244255
+	.long	3489094832
+	.long	1072652951
+	.long	536870912
+	.long	1014325783
+	.long	0
+	.long	3218079744
+	.long	1991047213
+	.long	3215237169
+	.long	1455828442
+	.long	1072602945
+	.long	3758096384
+	.long	1015505073
+	.long	0
+	.long	3218079744
+	.long	1699043957
+	.long	1069418613
+	.long	3476196678
+	.long	1072533611
+	.long	536870912
+	.long	1014257638
+	.long	0
+	.long	3219128320
+	.long	2140183630
+	.long	1067272748
+	.long	4051746225
+	.long	1072445618
+	.long	2147483648
+	.long	3161907377
+	.long	0
+	.long	3219128320
+	.long	2598800519
+	.long	3215750067
+	.long	688824739
+	.long	1072339814
+	.long	3758096384
+	.long	1010431536
+	.long	0
+	.long	3219128320
+	.long	2485417816
+	.long	3217109964
+	.long	1796544321
+	.long	1072217216
+	.long	536870912
+	.long	3162686945
+	.long	0
+	.long	3219128320
+	.long	2583490354
+	.long	3217719929
+	.long	1719614413
+	.long	1072079006
+	.long	536870912
+	.long	3163282740
+	.long	0
+	.long	3219128320
+	.long	1403757309
+	.long	1070403070
+	.long	621354454
+	.long	1071926515
+	.long	536870912
+	.long	1013450602
+	.long	0
+	.long	3220176896
+	.long	1539668340
+	.long	1069912679
+	.long	967731400
+	.long	1071761211
+	.long	536870912
+	.long	1015752157
+	.long	0
+	.long	3220176896
+	.long	1945768569
+	.long	1069431400
+	.long	939980347
+	.long	1071524701
+	.long	536870912
+	.long	1012796809
+	.long	0
+	.long	3220176896
+	.long	2255197647
+	.long	1068727457
+	.long	2796464483
+	.long	1071152610
+	.long	3758096384
+	.long	3160878317
+	.long	0
+	.long	3220176896
+	.long	2476548698
+	.long	1067846634
+	.long	785751814
+	.long	1070765062
+	.long	2684354560
+	.long	3161838221
+	.long	0
+	.long	3220176896
+	.long	18115067
+	.long	1066642694
+	.long	1013556747
+	.long	1070135480
+	.long	3221225472
+	.long	3160567065
+	.long	0
+	.long	3220176896
+	.long	393047345
+	.long	1064548654
+	.long	3156849708
+	.long	1069094822
+	.long	3758096384
+	.long	3158189848
+	.long	0
+	.long	3220176896
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	3220176896
+	.long	393047345
+	.long	1064548654
+	.long	3156849708
+	.long	3216578470
+	.long	3758096384
+	.long	1010706200
+	.long	0
+	.long	3220176896
+	.long	18115067
+	.long	1066642694
+	.long	1013556747
+	.long	3217619128
+	.long	3221225472
+	.long	1013083417
+	.long	0
+	.long	3220176896
+	.long	2476548698
+	.long	1067846634
+	.long	785751814
+	.long	3218248710
+	.long	2684354560
+	.long	1014354573
+	.long	0
+	.long	3220176896
+	.long	2255197647
+	.long	1068727457
+	.long	2796464483
+	.long	3218636258
+	.long	3758096384
+	.long	1013394669
+	.long	0
+	.long	3220176896
+	.long	1945768569
+	.long	1069431400
+	.long	939980347
+	.long	3219008349
+	.long	536870912
+	.long	3160280457
+	.long	0
+	.long	3220176896
+	.long	1539668340
+	.long	1069912679
+	.long	967731400
+	.long	3219244859
+	.long	536870912
+	.long	3163235805
+	.long	0
+	.long	3220176896
+	.long	1403757309
+	.long	1070403070
+	.long	621354454
+	.long	3219410163
+	.long	536870912
+	.long	3160934250
+	.long	0
+	.long	3220176896
+	.long	2583490354
+	.long	3217719929
+	.long	1719614413
+	.long	3219562654
+	.long	536870912
+	.long	1015799092
+	.long	0
+	.long	3219128320
+	.long	2485417816
+	.long	3217109964
+	.long	1796544321
+	.long	3219700864
+	.long	536870912
+	.long	1015203297
+	.long	0
+	.long	3219128320
+	.long	2598800519
+	.long	3215750067
+	.long	688824739
+	.long	3219823462
+	.long	3758096384
+	.long	3157915184
+	.long	0
+	.long	3219128320
+	.long	2140183630
+	.long	1067272748
+	.long	4051746225
+	.long	3219929266
+	.long	2147483648
+	.long	1014423729
+	.long	0
+	.long	3219128320
+	.long	1699043957
+	.long	1069418613
+	.long	3476196678
+	.long	3220017259
+	.long	536870912
+	.long	3161741286
+	.long	0
+	.long	3219128320
+	.long	1991047213
+	.long	3215237169
+	.long	1455828442
+	.long	3220086593
+	.long	3758096384
+	.long	3162988721
+	.long	0
+	.long	3218079744
+	.long	240740309
+	.long	1068244255
+	.long	3489094832
+	.long	3220136599
+	.long	536870912
+	.long	3161809431
+	.long	0
+	.long	3218079744
+	.long	257503056
+	.long	1067164005
+	.long	2748392742
+	.long	3220166797
+	.long	1073741824
+	.long	1015578102
+	.long	0
+	.long	3217031168
+	.long	0
+	.long	0
+	.long	0
+	.long	3220176896
+	.long	0
+	.long	0
+	.long	0
+	.long	0
+	.long	257503056
+	.long	3214647653
+	.long	2748392742
+	.long	3220166797
+	.long	1073741824
+	.long	1015578102
+	.long	0
+	.long	1069547520
+	.long	240740309
+	.long	3215727903
+	.long	3489094832
+	.long	3220136599
+	.long	536870912
+	.long	3161809431
+	.long	0
+	.long	1070596096
+	.long	1991047213
+	.long	1067753521
+	.long	1455828442
+	.long	3220086593
+	.long	3758096384
+	.long	3162988721
+	.long	0
+	.long	1070596096
+	.long	1699043957
+	.long	3216902261
+	.long	3476196678
+	.long	3220017259
+	.long	536870912
+	.long	3161741286
+	.long	0
+	.long	1071644672
+	.long	2140183630
+	.long	3214756396
+	.long	4051746225
+	.long	3219929266
+	.long	2147483648
+	.long	1014423729
+	.long	0
+	.long	1071644672
+	.long	2598800519
+	.long	1068266419
+	.long	688824739
+	.long	3219823462
+	.long	3758096384
+	.long	3157915184
+	.long	0
+	.long	1071644672
+	.long	2485417816
+	.long	1069626316
+	.long	1796544321
+	.long	3219700864
+	.long	536870912
+	.long	1015203297
+	.long	0
+	.long	1071644672
+	.long	2583490354
+	.long	1070236281
+	.long	1719614413
+	.long	3219562654
+	.long	536870912
+	.long	1015799092
+	.long	0
+	.long	1071644672
+	.long	1403757309
+	.long	3217886718
+	.long	621354454
+	.long	3219410163
+	.long	536870912
+	.long	3160934250
+	.long	0
+	.long	1072693248
+	.long	1539668340
+	.long	3217396327
+	.long	967731400
+	.long	3219244859
+	.long	536870912
+	.long	3163235805
+	.long	0
+	.long	1072693248
+	.long	1945768569
+	.long	3216915048
+	.long	939980347
+	.long	3219008349
+	.long	536870912
+	.long	3160280457
+	.long	0
+	.long	1072693248
+	.long	2255197647
+	.long	3216211105
+	.long	2796464483
+	.long	3218636258
+	.long	3758096384
+	.long	1013394669
+	.long	0
+	.long	1072693248
+	.long	2476548698
+	.long	3215330282
+	.long	785751814
+	.long	3218248710
+	.long	2684354560
+	.long	1014354573
+	.long	0
+	.long	1072693248
+	.long	18115067
+	.long	3214126342
+	.long	1013556747
+	.long	3217619128
+	.long	3221225472
+	.long	1013083417
+	.long	0
+	.long	1072693248
+	.long	393047345
+	.long	3212032302
+	.long	3156849708
+	.long	3216578470
+	.long	3758096384
+	.long	1010706200
+	.long	0
+	.long	1072693248
+	.type	Ctable,@object
+	.size	Ctable,2048
+	.align 16
+SC_2:
+	.long	286331153
+	.long	1065423121
+	.long	1431655765
+	.long	1067799893
+	.type	SC_2,@object
+	.size	SC_2,16
+	.align 16
+SC_3:
+	.long	436314138
+	.long	3207201184
+	.long	381774871
+	.long	3210133868
+	.type	SC_3,@object
+	.size	SC_3,16
+	.align 16
+SC_1:
+	.long	1431655765
+	.long	3217380693
+	.long	0
+	.long	3219128320
+	.type	SC_1,@object
+	.size	SC_1,16
+	.align 16
+PI_INV_TABLE:
+	.long	0
+	.long	0
+	.long	2734261102
+	.long	1313084713
+	.long	4230436817
+	.long	4113882560
+	.long	3680671129
+	.long	1011060801
+	.long	4266746795
+	.long	3736847713
+	.long	3072618042
+	.long	1112396512
+	.long	105459434
+	.long	164729372
+	.long	4263373596
+	.long	2972297022
+	.long	3900847605
+	.long	784024708
+	.long	3919343654
+	.long	3026157121
+	.long	965858873
+	.long	2203269620
+	.long	2625920907
+	.long	3187222587
+	.long	536385535
+	.long	3724908559
+	.long	4012839307
+	.long	1510632735
+	.long	1832287951
+	.long	667617719
+	.long	1330003814
+	.long	2657085997
+	.long	1965537991
+	.long	3957715323
+	.long	1023883767
+	.long	2320667370
+	.long	1811636145
+	.long	529358088
+	.long	1443049542
+	.long	4235946923
+	.long	4040145953
+	.type	PI_INV_TABLE,@object
+	.size	PI_INV_TABLE,164
+	.space 12, 0x00 	# pad
+	.align 16
+PI_4:
+	.long	1073741824
+	.long	1072243195
+	.long	407279769
+	.long	1046758445
+	.type	PI_4,@object
+	.size	PI_4,16
+	.align 8
+PI32INV:
+	.long	1841940611
+	.long	1076125488
+	.type	PI32INV,@object
+	.size	PI32INV,8
+	.align 8
+SHIFTER:
+	.long	0
+	.long	1127743488
+	.type	SHIFTER,@object
+	.size	SHIFTER,8
+	.align 8
+SIGN_MASK:
+	.long	0
+	.long	2147483648
+	.type	SIGN_MASK,@object
+	.size	SIGN_MASK,8
+	.align 8
+P_3:
+	.long	771977331
+	.long	996350346
+	.type	P_3,@object
+	.size	P_3,8
+	.align 8
+ALL_ONES:
+	.long	4294967295
+	.long	1072693247
+	.type	ALL_ONES,@object
+	.size	ALL_ONES,8
+	.align 8
+TWO_POW_55:
+	.long	0
+	.long	1130364928
+	.type	TWO_POW_55,@object
+	.size	TWO_POW_55,8
+	.align 8
+TWO_POW_M55:
+	.long	0
+	.long	1015021568
+	.type	TWO_POW_M55,@object
+	.size	TWO_POW_M55,8
+	.align 8
+P_1:
+	.long	1413480448
+	.long	1069097467
+	.type	P_1,@object
+	.size	P_1,8
+	.align 8
+NEG_ZERO:
+	.long	0
+	.long	2147483648
+	.type	NEG_ZERO,@object
+	.size	NEG_ZERO,8
+	.data
+	.section .note.GNU-stack, ""
+// -- Begin DWARF2 SEGMENT .eh_frame
+	.section .eh_frame,"a",@progbits
+.eh_frame_seg:
+	.align 1
+	.4byte 0x00000014
+	.8byte 0x00527a0100000000
+	.8byte 0x08070c1b01107801
+	.4byte 0x00000190
+	.4byte 0x0000002c
+	.4byte 0x0000001c
+	.4byte ..___tag_value_sin.1-.
+	.4byte ..___tag_value_sin.9-..___tag_value_sin.1
+	.2byte 0x0400
+	.4byte ..___tag_value_sin.3-..___tag_value_sin.1
+	.4byte 0x0283100e
+	.byte 0x04
+	.4byte ..___tag_value_sin.5-..___tag_value_sin.3
+	.2byte 0x200e
+	.byte 0x04
+	.4byte ..___tag_value_sin.6-..___tag_value_sin.5
+	.4byte 0x04c3100e
+	.4byte ..___tag_value_sin.8-..___tag_value_sin.6
+	.2byte 0x080e
+# End