Home | History | Annotate | Download | only in x86_64
      1 /*
      2 Copyright (c) 2014, Intel Corporation
      3 All rights reserved.
      4 
      5 Redistribution and use in source and binary forms, with or without
      6 modification, 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 
     19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     21 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     22 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
     23 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     24 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     26 ANY 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
     28 SOFTWARE, 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
    177 ENTRY(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:
    599 END(sin)
    600 # -- End  sin
    601 	.section .rodata, "a"
    602 	.align 16
    603 	.align 16
    604 ONEHALF:
    605 	.long	0
    606 	.long	1071644672
    607 	.long	0
    608 	.long	1071644672
    609 	.type	ONEHALF,@object
    610 	.size	ONEHALF,16
    611 	.align 16
    612 P_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
    620 SC_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
    628 Ctable:
    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
   1144 SC_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
   1152 SC_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
   1160 SC_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
   1168 PI_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
   1214 PI_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
   1222 PI32INV:
   1223 	.long	1841940611
   1224 	.long	1076125488
   1225 	.type	PI32INV,@object
   1226 	.size	PI32INV,8
   1227 	.align 8
   1228 SHIFTER:
   1229 	.long	0
   1230 	.long	1127743488
   1231 	.type	SHIFTER,@object
   1232 	.size	SHIFTER,8
   1233 	.align 8
   1234 SIGN_MASK:
   1235 	.long	0
   1236 	.long	2147483648
   1237 	.type	SIGN_MASK,@object
   1238 	.size	SIGN_MASK,8
   1239 	.align 8
   1240 P_3:
   1241 	.long	771977331
   1242 	.long	996350346
   1243 	.type	P_3,@object
   1244 	.size	P_3,8
   1245 	.align 8
   1246 ALL_ONES:
   1247 	.long	4294967295
   1248 	.long	1072693247
   1249 	.type	ALL_ONES,@object
   1250 	.size	ALL_ONES,8
   1251 	.align 8
   1252 TWO_POW_55:
   1253 	.long	0
   1254 	.long	1130364928
   1255 	.type	TWO_POW_55,@object
   1256 	.size	TWO_POW_55,8
   1257 	.align 8
   1258 TWO_POW_M55:
   1259 	.long	0
   1260 	.long	1015021568
   1261 	.type	TWO_POW_M55,@object
   1262 	.size	TWO_POW_M55,8
   1263 	.align 8
   1264 P_1:
   1265 	.long	1413480448
   1266 	.long	1069097467
   1267 	.type	P_1,@object
   1268 	.size	P_1,8
   1269 	.align 8
   1270 NEG_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