summaryrefslogtreecommitdiffstats
path: root/libm/x86_64/s_sin.S
diff options
context:
space:
mode:
Diffstat (limited to 'libm/x86_64/s_sin.S')
-rw-r--r--libm/x86_64/s_sin.S1300
1 files changed, 1300 insertions, 0 deletions
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