You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1301 lines
30 KiB
1301 lines
30 KiB
/*
|
|
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, "",@progbits
|
|
// -- 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
|