1 /*
   2  * Copyright (c) 2015, Intel Corporation.
   3  * Intel Math Library (LIBM) Source Code
   4  *
   5  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   6  *
   7  * This code is free software; you can redistribute it and/or modify it
   8  * under the terms of the GNU General Public License version 2 only, as
   9  * published by the Free Software Foundation.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  *
  25  */
  26 
  27 #include "precompiled.hpp"
  28 #include "asm/assembler.hpp"
  29 #include "asm/assembler.inline.hpp"
  30 #include "runtime/stubRoutines.hpp"
  31 #include "macroAssembler_x86.hpp"
  32 
  33 #ifdef _MSC_VER
  34 #define ALIGNED_(x) __declspec(align(x))
  35 #else
  36 #define ALIGNED_(x) __attribute__ ((aligned(x)))
  37 #endif
  38 
  39 // The 32 bit code is at most SSE2 compliant
  40 
  41 /******************************************************************************/
  42 //                     ALGORITHM DESCRIPTION - EXP()
  43 //                     ---------------------
  44 //
  45 // Description:
  46 //  Let K = 64 (table size).
  47 //        x    x/log(2)     n
  48 //       e  = 2          = 2 * T[j] * (1 + P(y))
  49 //  where
  50 //       x = m*log(2)/K + y,    y in [-log(2)/K..log(2)/K]
  51 //       m = n*K + j,           m,n,j - signed integer, j in [-K/2..K/2]
  52 //                  j/K
  53 //       values of 2   are tabulated as T[j] = T_hi[j] ( 1 + T_lo[j]).
  54 //
  55 //       P(y) is a minimax polynomial approximation of exp(x)-1
  56 //       on small interval [-log(2)/K..log(2)/K] (were calculated by Maple V).
  57 //
  58 //  To avoid problems with arithmetic overflow and underflow,
  59 //            n                        n1  n2
  60 //  value of 2  is safely computed as 2 * 2 where n1 in [-BIAS/2..BIAS/2]
  61 //  where BIAS is a value of exponent bias.
  62 //
  63 // Special cases:
  64 //  exp(NaN) = NaN
  65 //  exp(+INF) = +INF
  66 //  exp(-INF) = 0
  67 //  exp(x) = 1 for subnormals
  68 //  for finite argument, only exp(0)=1 is exact
  69 //  For IEEE double
  70 //    if x >  709.782712893383973096 then exp(x) overflow
  71 //    if x < -745.133219101941108420 then exp(x) underflow
  72 //
  73 /******************************************************************************/
  74 
  75 ALIGNED_(16) juint _static_const_table[] =
  76 {
  77     0x00000000UL, 0xfff00000UL, 0x00000000UL, 0xfff00000UL, 0xffffffc0UL,
  78     0x00000000UL, 0xffffffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL,
  79     0x0000ffc0UL, 0x00000000UL, 0x00000000UL, 0x43380000UL, 0x00000000UL,
  80     0x43380000UL, 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL,
  81     0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL, 0xbc9e3b3aUL,
  82     0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xfffffffeUL, 0x3fdfffffUL,
  83     0xfffffffeUL, 0x3fdfffffUL, 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL,
  84     0x3fa55555UL, 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL,
  85     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0e03754dUL,
  86     0x3cad7bbfUL, 0x3e778060UL, 0x00002c9aUL, 0x3567f613UL, 0x3c8cd252UL,
  87     0xd3158574UL, 0x000059b0UL, 0x61e6c861UL, 0x3c60f74eUL, 0x18759bc8UL,
  88     0x00008745UL, 0x5d837b6cUL, 0x3c979aa6UL, 0x6cf9890fUL, 0x0000b558UL,
  89     0x702f9cd1UL, 0x3c3ebe3dUL, 0x32d3d1a2UL, 0x0000e3ecUL, 0x1e63bcd8UL,
  90     0x3ca3516eUL, 0xd0125b50UL, 0x00011301UL, 0x26f0387bUL, 0x3ca4c554UL,
  91     0xaea92ddfUL, 0x0001429aUL, 0x62523fb6UL, 0x3ca95153UL, 0x3c7d517aUL,
  92     0x000172b8UL, 0x3f1353bfUL, 0x3c8b898cUL, 0xeb6fcb75UL, 0x0001a35bUL,
  93     0x3e3a2f5fUL, 0x3c9aecf7UL, 0x3168b9aaUL, 0x0001d487UL, 0x44a6c38dUL,
  94     0x3c8a6f41UL, 0x88628cd6UL, 0x0002063bUL, 0xe3a8a894UL, 0x3c968efdUL,
  95     0x6e756238UL, 0x0002387aUL, 0x981fe7f2UL, 0x3c80472bUL, 0x65e27cddUL,
  96     0x00026b45UL, 0x6d09ab31UL, 0x3c82f7e1UL, 0xf51fdee1UL, 0x00029e9dUL,
  97     0x720c0ab3UL, 0x3c8b3782UL, 0xa6e4030bUL, 0x0002d285UL, 0x4db0abb6UL,
  98     0x3c834d75UL, 0x0a31b715UL, 0x000306feUL, 0x5dd3f84aUL, 0x3c8fdd39UL,
  99     0xb26416ffUL, 0x00033c08UL, 0xcc187d29UL, 0x3ca12f8cUL, 0x373aa9caUL,
 100     0x000371a7UL, 0x738b5e8bUL, 0x3ca7d229UL, 0x34e59ff6UL, 0x0003a7dbUL,
 101     0xa72a4c6dUL, 0x3c859f48UL, 0x4c123422UL, 0x0003dea6UL, 0x259d9205UL,
 102     0x3ca8b846UL, 0x21f72e29UL, 0x0004160aUL, 0x60c2ac12UL, 0x3c4363edUL,
 103     0x6061892dUL, 0x00044e08UL, 0xdaa10379UL, 0x3c6ecce1UL, 0xb5c13cd0UL,
 104     0x000486a2UL, 0xbb7aafb0UL, 0x3c7690ceUL, 0xd5362a27UL, 0x0004bfdaUL,
 105     0x9b282a09UL, 0x3ca083ccUL, 0x769d2ca6UL, 0x0004f9b2UL, 0xc1aae707UL,
 106     0x3ca509b0UL, 0x569d4f81UL, 0x0005342bUL, 0x18fdd78eUL, 0x3c933505UL,
 107     0x36b527daUL, 0x00056f47UL, 0xe21c5409UL, 0x3c9063e1UL, 0xdd485429UL,
 108     0x0005ab07UL, 0x2b64c035UL, 0x3c9432e6UL, 0x15ad2148UL, 0x0005e76fUL,
 109     0x99f08c0aUL, 0x3ca01284UL, 0xb03a5584UL, 0x0006247eUL, 0x0073dc06UL,
 110     0x3c99f087UL, 0x82552224UL, 0x00066238UL, 0x0da05571UL, 0x3c998d4dUL,
 111     0x667f3bccUL, 0x0006a09eUL, 0x86ce4786UL, 0x3ca52bb9UL, 0x3c651a2eUL,
 112     0x0006dfb2UL, 0x206f0dabUL, 0x3ca32092UL, 0xe8ec5f73UL, 0x00071f75UL,
 113     0x8e17a7a6UL, 0x3ca06122UL, 0x564267c8UL, 0x00075febUL, 0x461e9f86UL,
 114     0x3ca244acUL, 0x73eb0186UL, 0x0007a114UL, 0xabd66c55UL, 0x3c65ebe1UL,
 115     0x36cf4e62UL, 0x0007e2f3UL, 0xbbff67d0UL, 0x3c96fe9fUL, 0x994cce12UL,
 116     0x00082589UL, 0x14c801dfUL, 0x3c951f14UL, 0x9b4492ecUL, 0x000868d9UL,
 117     0xc1f0eab4UL, 0x3c8db72fUL, 0x422aa0dbUL, 0x0008ace5UL, 0x59f35f44UL,
 118     0x3c7bf683UL, 0x99157736UL, 0x0008f1aeUL, 0x9c06283cUL, 0x3ca360baUL,
 119     0xb0cdc5e4UL, 0x00093737UL, 0x20f962aaUL, 0x3c95e8d1UL, 0x9fde4e4fUL,
 120     0x00097d82UL, 0x2b91ce27UL, 0x3c71affcUL, 0x82a3f090UL, 0x0009c491UL,
 121     0x589a2ebdUL, 0x3c9b6d34UL, 0x7b5de564UL, 0x000a0c66UL, 0x9ab89880UL,
 122     0x3c95277cUL, 0xb23e255cUL, 0x000a5503UL, 0x6e735ab3UL, 0x3c846984UL,
 123     0x5579fdbfUL, 0x000a9e6bUL, 0x92cb3387UL, 0x3c8c1a77UL, 0x995ad3adUL,
 124     0x000ae89fUL, 0xdc2d1d96UL, 0x3ca22466UL, 0xb84f15faUL, 0x000b33a2UL,
 125     0xb19505aeUL, 0x3ca1112eUL, 0xf2fb5e46UL, 0x000b7f76UL, 0x0a5fddcdUL,
 126     0x3c74ffd7UL, 0x904bc1d2UL, 0x000bcc1eUL, 0x30af0cb3UL, 0x3c736eaeUL,
 127     0xdd85529cUL, 0x000c199bUL, 0xd10959acUL, 0x3c84e08fUL, 0x2e57d14bUL,
 128     0x000c67f1UL, 0x6c921968UL, 0x3c676b2cUL, 0xdcef9069UL, 0x000cb720UL,
 129     0x36df99b3UL, 0x3c937009UL, 0x4a07897bUL, 0x000d072dUL, 0xa63d07a7UL,
 130     0x3c74a385UL, 0xdcfba487UL, 0x000d5818UL, 0xd5c192acUL, 0x3c8e5a50UL,
 131     0x03db3285UL, 0x000da9e6UL, 0x1c4a9792UL, 0x3c98bb73UL, 0x337b9b5eUL,
 132     0x000dfc97UL, 0x603a88d3UL, 0x3c74b604UL, 0xe78b3ff6UL, 0x000e502eUL,
 133     0x92094926UL, 0x3c916f27UL, 0xa2a490d9UL, 0x000ea4afUL, 0x41aa2008UL,
 134     0x3c8ec3bcUL, 0xee615a27UL, 0x000efa1bUL, 0x31d185eeUL, 0x3c8a64a9UL,
 135     0x5b6e4540UL, 0x000f5076UL, 0x4d91cd9dUL, 0x3c77893bUL, 0x819e90d8UL,
 136     0x000fa7c1UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x7ff00000UL,
 137     0x00000000UL, 0x00000000UL, 0xffffffffUL, 0x7fefffffUL, 0x00000000UL,
 138     0x00100000UL
 139 };
 140 
 141 //registers,
 142 // input: (rbp + 8)
 143 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
 144 //          rax, rdx, rcx, rbx (tmp)
 145 
 146 // Code generated by Intel C compiler for LIBM library
 147 
 148 void MacroAssembler::fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
 149   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
 150   Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
 151   Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
 152   Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
 153 
 154   assert_different_registers(tmp, eax, ecx, edx);
 155   jmp(start);
 156   address static_const_table = (address)_static_const_table;
 157 
 158   bind(start);
 159   subl(rsp, 120);
 160   movl(Address(rsp, 64), tmp);
 161   lea(tmp, ExternalAddress(static_const_table));
 162   movdqu(xmm0, Address(rsp, 128));
 163   unpcklpd(xmm0, xmm0);
 164   movdqu(xmm1, Address(tmp, 64));          // 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL
 165   movdqu(xmm6, Address(tmp, 48));          // 0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL
 166   movdqu(xmm2, Address(tmp, 80));          // 0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL
 167   movdqu(xmm3, Address(tmp, 96));          // 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL
 168   pextrw(eax, xmm0, 3);
 169   andl(eax, 32767);
 170   movl(edx, 16527);
 171   subl(edx, eax);
 172   subl(eax, 15504);
 173   orl(edx, eax);
 174   cmpl(edx, INT_MIN);
 175   jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
 176   mulpd(xmm1, xmm0);
 177   addpd(xmm1, xmm6);
 178   movapd(xmm7, xmm1);
 179   subpd(xmm1, xmm6);
 180   mulpd(xmm2, xmm1);
 181   movdqu(xmm4, Address(tmp, 128));         // 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL
 182   mulpd(xmm3, xmm1);
 183   movdqu(xmm5, Address(tmp, 144));         // 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL
 184   subpd(xmm0, xmm2);
 185   movdl(eax, xmm7);
 186   movl(ecx, eax);
 187   andl(ecx, 63);
 188   shll(ecx, 4);
 189   sarl(eax, 6);
 190   movl(edx, eax);
 191   movdqu(xmm6, Address(tmp, 16));          // 0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL
 192   pand(xmm7, xmm6);
 193   movdqu(xmm6, Address(tmp, 32));          // 0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL
 194   paddq(xmm7, xmm6);
 195   psllq(xmm7, 46);
 196   subpd(xmm0, xmm3);
 197   movdqu(xmm2, Address(tmp, ecx, Address::times_1, 160));
 198   mulpd(xmm4, xmm0);
 199   movapd(xmm6, xmm0);
 200   movapd(xmm1, xmm0);
 201   mulpd(xmm6, xmm6);
 202   mulpd(xmm0, xmm6);
 203   addpd(xmm5, xmm4);
 204   mulsd(xmm0, xmm6);
 205   mulpd(xmm6, Address(tmp, 112));          // 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL, 0x3fdfffffUL
 206   addsd(xmm1, xmm2);
 207   unpckhpd(xmm2, xmm2);
 208   mulpd(xmm0, xmm5);
 209   addsd(xmm1, xmm0);
 210   por(xmm2, xmm7);
 211   unpckhpd(xmm0, xmm0);
 212   addsd(xmm0, xmm1);
 213   addsd(xmm0, xmm6);
 214   addl(edx, 894);
 215   cmpl(edx, 1916);
 216   jcc (Assembler::above, L_2TAG_PACKET_1_0_2);
 217   mulsd(xmm0, xmm2);
 218   addsd(xmm0, xmm2);
 219   jmp(L_2TAG_PACKET_2_0_2);
 220 
 221   bind(L_2TAG_PACKET_1_0_2);
 222   fnstcw(Address(rsp, 24));
 223   movzwl(edx, Address(rsp, 24));
 224   orl(edx, 768);
 225   movw(Address(rsp, 28), edx);
 226   fldcw(Address(rsp, 28));
 227   movl(edx, eax);
 228   sarl(eax, 1);
 229   subl(edx, eax);
 230   movdqu(xmm6, Address(tmp, 0));           // 0x00000000UL, 0xfff00000UL, 0x00000000UL, 0xfff00000UL
 231   pandn(xmm6, xmm2);
 232   addl(eax, 1023);
 233   movdl(xmm3, eax);
 234   psllq(xmm3, 52);
 235   por(xmm6, xmm3);
 236   addl(edx, 1023);
 237   movdl(xmm4, edx);
 238   psllq(xmm4, 52);
 239   movsd(Address(rsp, 8), xmm0);
 240   fld_d(Address(rsp, 8));
 241   movsd(Address(rsp, 16), xmm6);
 242   fld_d(Address(rsp, 16));
 243   fmula(1);
 244   faddp(1);
 245   movsd(Address(rsp, 8), xmm4);
 246   fld_d(Address(rsp, 8));
 247   fmulp(1);
 248   fstp_d(Address(rsp, 8));
 249   movsd(xmm0,Address(rsp, 8));
 250   fldcw(Address(rsp, 24));
 251   pextrw(ecx, xmm0, 3);
 252   andl(ecx, 32752);
 253   cmpl(ecx, 32752);
 254   jcc(Assembler::greaterEqual, L_2TAG_PACKET_3_0_2);
 255   cmpl(ecx, 0);
 256   jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
 257   jmp(L_2TAG_PACKET_2_0_2);
 258   cmpl(ecx, INT_MIN);
 259   jcc(Assembler::less, L_2TAG_PACKET_3_0_2);
 260   cmpl(ecx, -1064950997);
 261   jcc(Assembler::less, L_2TAG_PACKET_2_0_2);
 262   jcc(Assembler::greater, L_2TAG_PACKET_4_0_2);
 263   movl(edx, Address(rsp, 128));
 264   cmpl(edx ,-17155601);
 265   jcc(Assembler::less, L_2TAG_PACKET_2_0_2);
 266   jmp(L_2TAG_PACKET_4_0_2);
 267 
 268   bind(L_2TAG_PACKET_3_0_2);
 269   movl(edx, 14);
 270   jmp(L_2TAG_PACKET_5_0_2);
 271 
 272   bind(L_2TAG_PACKET_4_0_2);
 273   movl(edx, 15);
 274 
 275   bind(L_2TAG_PACKET_5_0_2);
 276   movsd(Address(rsp, 0), xmm0);
 277   movsd(xmm0, Address(rsp, 128));
 278   fld_d(Address(rsp, 0));
 279   jmp(L_2TAG_PACKET_6_0_2);
 280 
 281   bind(L_2TAG_PACKET_7_0_2);
 282   cmpl(eax, 2146435072);
 283   jcc(Assembler::greaterEqual, L_2TAG_PACKET_8_0_2);
 284   movl(eax, Address(rsp, 132));
 285   cmpl(eax, INT_MIN);
 286   jcc(Assembler::greaterEqual, L_2TAG_PACKET_9_0_2);
 287   movsd(xmm0, Address(tmp, 1208));         // 0xffffffffUL, 0x7fefffffUL
 288   mulsd(xmm0, xmm0);
 289   movl(edx, 14);
 290   jmp(L_2TAG_PACKET_5_0_2);
 291 
 292   bind(L_2TAG_PACKET_9_0_2);
 293   movsd(xmm0, Address(tmp, 1216));
 294   mulsd(xmm0, xmm0);
 295   movl(edx, 15);
 296   jmp(L_2TAG_PACKET_5_0_2);
 297 
 298   bind(L_2TAG_PACKET_8_0_2);
 299   movl(edx, Address(rsp, 128));
 300   cmpl(eax, 2146435072);
 301   jcc(Assembler::above, L_2TAG_PACKET_10_0_2);
 302   cmpl(edx, 0);
 303   jcc(Assembler::notEqual, L_2TAG_PACKET_10_0_2);
 304   movl(eax, Address(rsp, 132));
 305   cmpl(eax, 2146435072);
 306   jcc(Assembler::notEqual, L_2TAG_PACKET_11_0_2);
 307   movsd(xmm0, Address(tmp, 1192));         // 0x00000000UL, 0x7ff00000UL
 308   jmp(L_2TAG_PACKET_2_0_2);
 309 
 310   bind(L_2TAG_PACKET_11_0_2);
 311   movsd(xmm0, Address(tmp, 1200));         // 0x00000000UL, 0x00000000UL
 312   jmp(L_2TAG_PACKET_2_0_2);
 313 
 314   bind(L_2TAG_PACKET_10_0_2);
 315   movsd(xmm0, Address(rsp, 128));
 316   addsd(xmm0, xmm0);
 317   jmp(L_2TAG_PACKET_2_0_2);
 318 
 319   bind(L_2TAG_PACKET_0_0_2);
 320   movl(eax, Address(rsp, 132));
 321   andl(eax, 2147483647);
 322   cmpl(eax, 1083179008);
 323   jcc(Assembler::aboveEqual, L_2TAG_PACKET_7_0_2);
 324   movsd(xmm0, Address(rsp, 128));
 325   addsd(xmm0, Address(tmp, 1184));         // 0x00000000UL, 0x3ff00000UL
 326   jmp(L_2TAG_PACKET_2_0_2);
 327 
 328   bind(L_2TAG_PACKET_2_0_2);
 329   movsd(Address(rsp, 48), xmm0);
 330   fld_d(Address(rsp, 48));
 331 
 332   bind(L_2TAG_PACKET_6_0_2);
 333   movl(tmp, Address(rsp, 64));
 334 }
 335 
 336 /******************************************************************************/
 337 //                     ALGORITHM DESCRIPTION - LOG()
 338 //                     ---------------------
 339 //
 340 //    x=2^k * mx, mx in [1,2)
 341 //
 342 //    Get B~1/mx based on the output of rcpss instruction (B0)
 343 //    B = int((B0*2^7+0.5))/2^7
 344 //
 345 //    Reduced argument: r=B*mx-1.0 (computed accurately in high and low parts)
 346 //
 347 //    Result:  k*log(2) - log(B) + p(r) if |x-1| >= small value (2^-6)  and
 348 //             p(r) is a degree 7 polynomial
 349 //             -log(B) read from data table (high, low parts)
 350 //             Result is formed from high and low parts
 351 //
 352 // Special cases:
 353 //  log(NaN) = quiet NaN, and raise invalid exception
 354 //  log(+INF) = that INF
 355 //  log(0) = -INF with divide-by-zero exception raised
 356 //  log(1) = +0
 357 //  log(x) = NaN with invalid exception raised if x < -0, including -INF
 358 //
 359 /******************************************************************************/
 360 
 361 ALIGNED_(16) juint _static_const_table_log[] =
 362 {
 363   0xfefa3800UL, 0x3fe62e42UL, 0x93c76730UL, 0x3d2ef357UL, 0xaa241800UL,
 364   0x3fe5ee82UL, 0x0cda46beUL, 0x3d220238UL, 0x5c364800UL, 0x3fe5af40UL,
 365   0xac10c9fbUL, 0x3d2dfa63UL, 0x26bb8c00UL, 0x3fe5707aUL, 0xff3303ddUL,
 366   0x3d09980bUL, 0x26867800UL, 0x3fe5322eUL, 0x5d257531UL, 0x3d05ccc4UL,
 367   0x835a5000UL, 0x3fe4f45aUL, 0x6d93b8fbUL, 0xbd2e6c51UL, 0x6f970c00UL,
 368   0x3fe4b6fdUL, 0xed4c541cUL, 0x3cef7115UL, 0x27e8a400UL, 0x3fe47a15UL,
 369   0xf94d60aaUL, 0xbd22cb6aUL, 0xf2f92400UL, 0x3fe43d9fUL, 0x481051f7UL,
 370   0xbcfd984fUL, 0x2125cc00UL, 0x3fe4019cUL, 0x30f0c74cUL, 0xbd26ce79UL,
 371   0x0c36c000UL, 0x3fe3c608UL, 0x7cfe13c2UL, 0xbd02b736UL, 0x17197800UL,
 372   0x3fe38ae2UL, 0xbb5569a4UL, 0xbd218b7aUL, 0xad9d8c00UL, 0x3fe35028UL,
 373   0x9527e6acUL, 0x3d10b83fUL, 0x44340800UL, 0x3fe315daUL, 0xc5a0ed9cUL,
 374   0xbd274e93UL, 0x57b0e000UL, 0x3fe2dbf5UL, 0x07b9dc11UL, 0xbd17a6e5UL,
 375   0x6d0ec000UL, 0x3fe2a278UL, 0xe797882dUL, 0x3d206d2bUL, 0x1134dc00UL,
 376   0x3fe26962UL, 0x05226250UL, 0xbd0b61f1UL, 0xd8bebc00UL, 0x3fe230b0UL,
 377   0x6e48667bUL, 0x3d12fc06UL, 0x5fc61800UL, 0x3fe1f863UL, 0xc9fe81d3UL,
 378   0xbd2a7242UL, 0x49ae6000UL, 0x3fe1c078UL, 0xed70e667UL, 0x3cccacdeUL,
 379   0x40f23c00UL, 0x3fe188eeUL, 0xf8ab4650UL, 0x3d14cc4eUL, 0xf6f29800UL,
 380   0x3fe151c3UL, 0xa293ae49UL, 0xbd2edd97UL, 0x23c75c00UL, 0x3fe11af8UL,
 381   0xbb9ddcb2UL, 0xbd258647UL, 0x8611cc00UL, 0x3fe0e489UL, 0x07801742UL,
 382   0x3d1c2998UL, 0xe2d05400UL, 0x3fe0ae76UL, 0x887e7e27UL, 0x3d1f486bUL,
 383   0x0533c400UL, 0x3fe078bfUL, 0x41edf5fdUL, 0x3d268122UL, 0xbe760400UL,
 384   0x3fe04360UL, 0xe79539e0UL, 0xbd04c45fUL, 0xe5b20800UL, 0x3fe00e5aUL,
 385   0xb1727b1cUL, 0xbd053ba3UL, 0xaf7a4800UL, 0x3fdfb358UL, 0x3c164935UL,
 386   0x3d0085faUL, 0xee031800UL, 0x3fdf4aa7UL, 0x6f014a8bUL, 0x3d12cde5UL,
 387   0x56b41000UL, 0x3fdee2a1UL, 0x5a470251UL, 0x3d2f27f4UL, 0xc3ddb000UL,
 388   0x3fde7b42UL, 0x5372bd08UL, 0xbd246550UL, 0x1a272800UL, 0x3fde148aUL,
 389   0x07322938UL, 0xbd1326b2UL, 0x484c9800UL, 0x3fddae75UL, 0x60dc616aUL,
 390   0xbd1ea42dUL, 0x46def800UL, 0x3fdd4902UL, 0xe9a767a8UL, 0x3d235bafUL,
 391   0x18064800UL, 0x3fdce42fUL, 0x3ec7a6b0UL, 0xbd0797c3UL, 0xc7455800UL,
 392   0x3fdc7ff9UL, 0xc15249aeUL, 0xbd29b6ddUL, 0x693fa000UL, 0x3fdc1c60UL,
 393   0x7fe8e180UL, 0x3d2cec80UL, 0x1b80e000UL, 0x3fdbb961UL, 0xf40a666dUL,
 394   0x3d27d85bUL, 0x04462800UL, 0x3fdb56faUL, 0x2d841995UL, 0x3d109525UL,
 395   0x5248d000UL, 0x3fdaf529UL, 0x52774458UL, 0xbd217cc5UL, 0x3c8ad800UL,
 396   0x3fda93edUL, 0xbea77a5dUL, 0x3d1e36f2UL, 0x0224f800UL, 0x3fda3344UL,
 397   0x7f9d79f5UL, 0x3d23c645UL, 0xea15f000UL, 0x3fd9d32bUL, 0x10d0c0b0UL,
 398   0xbd26279eUL, 0x43135800UL, 0x3fd973a3UL, 0xa502d9f0UL, 0xbd152313UL,
 399   0x635bf800UL, 0x3fd914a8UL, 0x2ee6307dUL, 0xbd1766b5UL, 0xa88b3000UL,
 400   0x3fd8b639UL, 0xe5e70470UL, 0xbd205ae1UL, 0x776dc800UL, 0x3fd85855UL,
 401   0x3333778aUL, 0x3d2fd56fUL, 0x3bd81800UL, 0x3fd7fafaUL, 0xc812566aUL,
 402   0xbd272090UL, 0x687cf800UL, 0x3fd79e26UL, 0x2efd1778UL, 0x3d29ec7dUL,
 403   0x76c67800UL, 0x3fd741d8UL, 0x49dc60b3UL, 0x3d2d8b09UL, 0xe6af1800UL,
 404   0x3fd6e60eUL, 0x7c222d87UL, 0x3d172165UL, 0x3e9c6800UL, 0x3fd68ac8UL,
 405   0x2756eba0UL, 0x3d20a0d3UL, 0x0b3ab000UL, 0x3fd63003UL, 0xe731ae00UL,
 406   0xbd2db623UL, 0xdf596000UL, 0x3fd5d5bdUL, 0x08a465dcUL, 0xbd0a0b2aUL,
 407   0x53c8d000UL, 0x3fd57bf7UL, 0xee5d40efUL, 0x3d1fadedUL, 0x0738a000UL,
 408   0x3fd522aeUL, 0x8164c759UL, 0x3d2ebe70UL, 0x9e173000UL, 0x3fd4c9e0UL,
 409   0x1b0ad8a4UL, 0xbd2e2089UL, 0xc271c800UL, 0x3fd4718dUL, 0x0967d675UL,
 410   0xbd2f27ceUL, 0x23d5e800UL, 0x3fd419b4UL, 0xec90e09dUL, 0x3d08e436UL,
 411   0x77333000UL, 0x3fd3c252UL, 0xb606bd5cUL, 0x3d183b54UL, 0x76be1000UL,
 412   0x3fd36b67UL, 0xb0f177c8UL, 0x3d116ecdUL, 0xe1d36000UL, 0x3fd314f1UL,
 413   0xd3213cb8UL, 0xbd28e27aUL, 0x7cdc9000UL, 0x3fd2bef0UL, 0x4a5004f4UL,
 414   0x3d2a9cfaUL, 0x1134d800UL, 0x3fd26962UL, 0xdf5bb3b6UL, 0x3d2c93c1UL,
 415   0x6d0eb800UL, 0x3fd21445UL, 0xba46baeaUL, 0x3d0a87deUL, 0x635a6800UL,
 416   0x3fd1bf99UL, 0x5147bdb7UL, 0x3d2ca6edUL, 0xcbacf800UL, 0x3fd16b5cUL,
 417   0xf7a51681UL, 0x3d2b9acdUL, 0x8227e800UL, 0x3fd1178eUL, 0x63a5f01cUL,
 418   0xbd2c210eUL, 0x67616000UL, 0x3fd0c42dUL, 0x163ceae9UL, 0x3d27188bUL,
 419   0x604d5800UL, 0x3fd07138UL, 0x16ed4e91UL, 0x3cf89cdbUL, 0x5626c800UL,
 420   0x3fd01eaeUL, 0x1485e94aUL, 0xbd16f08cUL, 0x6cb3b000UL, 0x3fcf991cUL,
 421   0xca0cdf30UL, 0x3d1bcbecUL, 0xe4dd0000UL, 0x3fcef5adUL, 0x65bb8e11UL,
 422   0xbcca2115UL, 0xffe71000UL, 0x3fce530eUL, 0x6041f430UL, 0x3cc21227UL,
 423   0xb0d49000UL, 0x3fcdb13dUL, 0xf715b035UL, 0xbd2aff2aUL, 0xf2656000UL,
 424   0x3fcd1037UL, 0x75b6f6e4UL, 0xbd084a7eUL, 0xc6f01000UL, 0x3fcc6ffbUL,
 425   0xc5962bd2UL, 0xbcf1ec72UL, 0x383be000UL, 0x3fcbd087UL, 0x595412b6UL,
 426   0xbd2d4bc4UL, 0x575bd000UL, 0x3fcb31d8UL, 0x4eace1aaUL, 0xbd0c358dUL,
 427   0x3c8ae000UL, 0x3fca93edUL, 0x50562169UL, 0xbd287243UL, 0x07089000UL,
 428   0x3fc9f6c4UL, 0x6865817aUL, 0x3d29904dUL, 0xdcf70000UL, 0x3fc95a5aUL,
 429   0x58a0ff6fUL, 0x3d07f228UL, 0xeb390000UL, 0x3fc8beafUL, 0xaae92cd1UL,
 430   0xbd073d54UL, 0x6551a000UL, 0x3fc823c1UL, 0x9a631e83UL, 0x3d1e0ddbUL,
 431   0x85445000UL, 0x3fc7898dUL, 0x70914305UL, 0xbd1c6610UL, 0x8b757000UL,
 432   0x3fc6f012UL, 0xe59c21e1UL, 0xbd25118dUL, 0xbe8c1000UL, 0x3fc6574eUL,
 433   0x2c3c2e78UL, 0x3d19cf8bUL, 0x6b544000UL, 0x3fc5bf40UL, 0xeb68981cUL,
 434   0xbd127023UL, 0xe4a1b000UL, 0x3fc527e5UL, 0xe5697dc7UL, 0x3d2633e8UL,
 435   0x8333b000UL, 0x3fc4913dUL, 0x54fdb678UL, 0x3d258379UL, 0xa5993000UL,
 436   0x3fc3fb45UL, 0x7e6a354dUL, 0xbd2cd1d8UL, 0xb0159000UL, 0x3fc365fcUL,
 437   0x234b7289UL, 0x3cc62fa8UL, 0x0c868000UL, 0x3fc2d161UL, 0xcb81b4a1UL,
 438   0x3d039d6cUL, 0x2a49c000UL, 0x3fc23d71UL, 0x8fd3df5cUL, 0x3d100d23UL,
 439   0x7e23f000UL, 0x3fc1aa2bUL, 0x44389934UL, 0x3d2ca78eUL, 0x8227e000UL,
 440   0x3fc1178eUL, 0xce2d07f2UL, 0x3d21ef78UL, 0xb59e4000UL, 0x3fc08598UL,
 441   0x7009902cUL, 0xbd27e5ddUL, 0x39dbe000UL, 0x3fbfe891UL, 0x4fa10afdUL,
 442   0xbd2534d6UL, 0x830a2000UL, 0x3fbec739UL, 0xafe645e0UL, 0xbd2dc068UL,
 443   0x63844000UL, 0x3fbda727UL, 0x1fa71733UL, 0x3d1a8940UL, 0x01bc4000UL,
 444   0x3fbc8858UL, 0xc65aacd3UL, 0x3d2646d1UL, 0x8dad6000UL, 0x3fbb6ac8UL,
 445   0x2bf768e5UL, 0xbd139080UL, 0x40b1c000UL, 0x3fba4e76UL, 0xb94407c8UL,
 446   0xbd0e42b6UL, 0x5d594000UL, 0x3fb9335eUL, 0x3abd47daUL, 0x3d23115cUL,
 447   0x2f40e000UL, 0x3fb8197eUL, 0xf96ffdf7UL, 0x3d0f80dcUL, 0x0aeac000UL,
 448   0x3fb700d3UL, 0xa99ded32UL, 0x3cec1e8dUL, 0x4d97a000UL, 0x3fb5e95aUL,
 449   0x3c5d1d1eUL, 0xbd2c6906UL, 0x5d208000UL, 0x3fb4d311UL, 0x82f4e1efUL,
 450   0xbcf53a25UL, 0xa7d1e000UL, 0x3fb3bdf5UL, 0xa5db4ed7UL, 0x3d2cc85eUL,
 451   0xa4472000UL, 0x3fb2aa04UL, 0xae9c697dUL, 0xbd20b6e8UL, 0xd1466000UL,
 452   0x3fb1973bUL, 0x560d9e9bUL, 0xbd25325dUL, 0xb59e4000UL, 0x3fb08598UL,
 453   0x7009902cUL, 0xbd17e5ddUL, 0xc006c000UL, 0x3faeea31UL, 0x4fc93b7bUL,
 454   0xbd0e113eUL, 0xcdddc000UL, 0x3faccb73UL, 0x47d82807UL, 0xbd1a68f2UL,
 455   0xd0fb0000UL, 0x3faaaef2UL, 0x353bb42eUL, 0x3d20fc1aUL, 0x149fc000UL,
 456   0x3fa894aaUL, 0xd05a267dUL, 0xbd197995UL, 0xf2d4c000UL, 0x3fa67c94UL,
 457   0xec19afa2UL, 0xbd029efbUL, 0xd42e0000UL, 0x3fa466aeUL, 0x75bdfd28UL,
 458   0xbd2c1673UL, 0x2f8d0000UL, 0x3fa252f3UL, 0xe021b67bUL, 0x3d283e9aUL,
 459   0x89e74000UL, 0x3fa0415dUL, 0x5cf1d753UL, 0x3d0111c0UL, 0xec148000UL,
 460   0x3f9c63d2UL, 0x3f9eb2f3UL, 0x3d2578c6UL, 0x28c90000UL, 0x3f984925UL,
 461   0x325a0c34UL, 0xbd2aa0baUL, 0x25980000UL, 0x3f9432a9UL, 0x928637feUL,
 462   0x3d098139UL, 0x58938000UL, 0x3f902056UL, 0x06e2f7d2UL, 0xbd23dc5bUL,
 463   0xa3890000UL, 0x3f882448UL, 0xda74f640UL, 0xbd275577UL, 0x75890000UL,
 464   0x3f801015UL, 0x999d2be8UL, 0xbd10c76bUL, 0x59580000UL, 0x3f700805UL,
 465   0xcb31c67bUL, 0x3d2166afUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 466   0x80000000UL, 0xfefa3800UL, 0x3fa62e42UL, 0x93c76730UL, 0x3ceef357UL,
 467   0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL, 0x3d6fb175UL,
 468   0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL, 0x9999999aUL, 0x3fc99999UL,
 469   0x00000000UL, 0xbfe00000UL, 0x00000000UL, 0xffffe000UL, 0x00000000UL,
 470   0xffffe000UL
 471 };
 472 //registers,
 473 // input: xmm0
 474 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
 475 //          rax, rdx, rcx, rbx (tmp)
 476 
 477 void MacroAssembler::fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
 478   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
 479   Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
 480   Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2;
 481   Label L_2TAG_PACKET_10_0_2, start;
 482 
 483   assert_different_registers(tmp, eax, ecx, edx);
 484   jmp(start);
 485   address static_const_table = (address)_static_const_table_log;
 486 
 487   bind(start);
 488   subl(rsp, 104);
 489   movl(Address(rsp, 40), tmp);
 490   lea(tmp, ExternalAddress(static_const_table));
 491   xorpd(xmm2, xmm2);
 492   movl(eax, 16368);
 493   pinsrw(xmm2, eax, 3);
 494   xorpd(xmm3, xmm3);
 495   movl(edx, 30704);
 496   pinsrw(xmm3, edx, 3);
 497   movsd(xmm0, Address(rsp, 112));
 498   movapd(xmm1, xmm0);
 499   movl(ecx, 32768);
 500   movdl(xmm4, ecx);
 501   movsd(xmm5, Address(tmp, 2128));         // 0x00000000UL, 0xffffe000UL
 502   pextrw(eax, xmm0, 3);
 503   por(xmm0, xmm2);
 504   psllq(xmm0, 5);
 505   movl(ecx, 16352);
 506   psrlq(xmm0, 34);
 507   rcpss(xmm0, xmm0);
 508   psllq(xmm1, 12);
 509   pshufd(xmm6, xmm5, 228);
 510   psrlq(xmm1, 12);
 511   subl(eax, 16);
 512   cmpl(eax, 32736);
 513   jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
 514 
 515   bind(L_2TAG_PACKET_1_0_2);
 516   paddd(xmm0, xmm4);
 517   por(xmm1, xmm3);
 518   movdl(edx, xmm0);
 519   psllq(xmm0, 29);
 520   pand(xmm5, xmm1);
 521   pand(xmm0, xmm6);
 522   subsd(xmm1, xmm5);
 523   mulpd(xmm5, xmm0);
 524   andl(eax, 32752);
 525   subl(eax, ecx);
 526   cvtsi2sdl(xmm7, eax);
 527   mulsd(xmm1, xmm0);
 528   movsd(xmm6, Address(tmp, 2064));         // 0xfefa3800UL, 0x3fa62e42UL
 529   movdqu(xmm3, Address(tmp, 2080));        // 0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL
 530   subsd(xmm5, xmm2);
 531   andl(edx, 16711680);
 532   shrl(edx, 12);
 533   movdqu(xmm0, Address(tmp, edx));
 534   movdqu(xmm4, Address(tmp, 2096));        // 0x3d6fb175UL, 0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL
 535   addsd(xmm1, xmm5);
 536   movdqu(xmm2, Address(tmp, 2112));        // 0x9999999aUL, 0x3fc99999UL, 0x00000000UL, 0xbfe00000UL
 537   mulsd(xmm6, xmm7);
 538   pshufd(xmm5, xmm1, 68);
 539   mulsd(xmm7, Address(tmp, 2072));         // 0x93c76730UL, 0x3ceef357UL, 0x92492492UL, 0x3fc24924UL
 540   mulsd(xmm3, xmm1);
 541   addsd(xmm0, xmm6);
 542   mulpd(xmm4, xmm5);
 543   mulpd(xmm5, xmm5);
 544   pshufd(xmm6, xmm0, 228);
 545   addsd(xmm0, xmm1);
 546   addpd(xmm4, xmm2);
 547   mulpd(xmm3, xmm5);
 548   subsd(xmm6, xmm0);
 549   mulsd(xmm4, xmm1);
 550   pshufd(xmm2, xmm0, 238);
 551   addsd(xmm1, xmm6);
 552   mulsd(xmm5, xmm5);
 553   addsd(xmm7, xmm2);
 554   addpd(xmm4, xmm3);
 555   addsd(xmm1, xmm7);
 556   mulpd(xmm4, xmm5);
 557   addsd(xmm1, xmm4);
 558   pshufd(xmm5, xmm4, 238);
 559   addsd(xmm1, xmm5);
 560   addsd(xmm0, xmm1);
 561   jmp(L_2TAG_PACKET_2_0_2);
 562 
 563   bind(L_2TAG_PACKET_0_0_2);
 564   movsd(xmm0, Address(rsp, 112));
 565   movdqu(xmm1, xmm0);
 566   addl(eax, 16);
 567   cmpl(eax, 32768);
 568   jcc(Assembler::aboveEqual, L_2TAG_PACKET_3_0_2);
 569   cmpl(eax, 16);
 570   jcc(Assembler::below, L_2TAG_PACKET_4_0_2);
 571 
 572   bind(L_2TAG_PACKET_5_0_2);
 573   addsd(xmm0, xmm0);
 574   jmp(L_2TAG_PACKET_2_0_2);
 575 
 576   bind(L_2TAG_PACKET_6_0_2);
 577   jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
 578   cmpl(edx, 0);
 579   jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
 580   jmp(L_2TAG_PACKET_7_0_2);
 581 
 582   bind(L_2TAG_PACKET_3_0_2);
 583   movdl(edx, xmm1);
 584   psrlq(xmm1, 32);
 585   movdl(ecx, xmm1);
 586   addl(ecx, ecx);
 587   cmpl(ecx, -2097152);
 588   jcc(Assembler::aboveEqual, L_2TAG_PACKET_6_0_2);
 589   orl(edx, ecx);
 590   cmpl(edx, 0);
 591   jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
 592 
 593   bind(L_2TAG_PACKET_7_0_2);
 594   xorpd(xmm1, xmm1);
 595   xorpd(xmm0, xmm0);
 596   movl(eax, 32752);
 597   pinsrw(xmm1, eax, 3);
 598   movl(edx, 3);
 599   mulsd(xmm0, xmm1);
 600 
 601   bind(L_2TAG_PACKET_9_0_2);
 602   movsd(Address(rsp, 0), xmm0);
 603   movsd(xmm0, Address(rsp, 112));
 604   fld_d(Address(rsp, 0));
 605   jmp(L_2TAG_PACKET_10_0_2);
 606 
 607   bind(L_2TAG_PACKET_8_0_2);
 608   xorpd(xmm1, xmm1);
 609   xorpd(xmm0, xmm0);
 610   movl(eax, 49136);
 611   pinsrw(xmm0, eax, 3);
 612   divsd(xmm0, xmm1);
 613   movl(edx, 2);
 614   jmp(L_2TAG_PACKET_9_0_2);
 615 
 616   bind(L_2TAG_PACKET_4_0_2);
 617   movdl(edx, xmm1);
 618   psrlq(xmm1, 32);
 619   movdl(ecx, xmm1);
 620   orl(edx, ecx);
 621   cmpl(edx, 0);
 622   jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
 623   xorpd(xmm1, xmm1);
 624   movl(eax, 18416);
 625   pinsrw(xmm1, eax, 3);
 626   mulsd(xmm0, xmm1);
 627   movapd(xmm1, xmm0);
 628   pextrw(eax, xmm0, 3);
 629   por(xmm0, xmm2);
 630   psllq(xmm0, 5);
 631   movl(ecx, 18416);
 632   psrlq(xmm0, 34);
 633   rcpss(xmm0, xmm0);
 634   psllq(xmm1, 12);
 635   pshufd(xmm6, xmm5, 228);
 636   psrlq(xmm1, 12);
 637   jmp(L_2TAG_PACKET_1_0_2);
 638 
 639   bind(L_2TAG_PACKET_2_0_2);
 640   movsd(Address(rsp, 24), xmm0);
 641   fld_d(Address(rsp, 24));
 642 
 643   bind(L_2TAG_PACKET_10_0_2);
 644   movl(tmp, Address(rsp, 40));
 645 }
 646 
 647 /******************************************************************************/
 648 //                     ALGORITHM DESCRIPTION  - POW()
 649 //                     ---------------------
 650 //
 651 //    Let x=2^k * mx, mx in [1,2)
 652 //
 653 //    log2(x) calculation:
 654 //
 655 //    Get B~1/mx based on the output of rcpps instruction (B0)
 656 //    B = int((B0*LH*2^9+0.5))/2^9
 657 //    LH is a short approximation for log2(e)
 658 //
 659 //    Reduced argument, scaled by LH:
 660 //                r=B*mx-LH (computed accurately in high and low parts)
 661 //
 662 //    log2(x) result:  k - log2(B) + p(r)
 663 //             p(r) is a degree 8 polynomial
 664 //             -log2(B) read from data table (high, low parts)
 665 //             log2(x) is formed from high and low parts
 666 //    For |x| in [1-1/32, 1+1/16), a slower but more accurate computation
 667 //    based om the same table design is performed.
 668 //
 669 //   Main path is taken if | floor(log2(|log2(|x|)|) + floor(log2|y|) | < 8,
 670 //   to filter out all potential OF/UF cases.
 671 //   exp2(y*log2(x)) is computed using an 8-bit index table and a degree 5
 672 //   polynomial
 673 //
 674 // Special cases:
 675 //  pow(-0,y) = -INF and raises the divide-by-zero exception for y an odd
 676 //  integer < 0.
 677 //  pow(-0,y) = +INF and raises the divide-by-zero exception for y < 0 and
 678 //  not an odd integer.
 679 //  pow(-0,y) = -0 for y an odd integer > 0.
 680 //  pow(-0,y) = +0 for y > 0 and not an odd integer.
 681 //  pow(-1,-INF) = NaN.
 682 //  pow(+1,y) = NaN for any y, even a NaN.
 683 //  pow(x,-0) = 1 for any x, even a NaN.
 684 //  pow(x,y) = a NaN and raises the invalid exception for finite x < 0 and
 685 //  finite non-integer y.
 686 //  pow(x,-INF) = +INF for |x|<1.
 687 //  pow(x,-INF) = +0 for |x|>1.
 688 //  pow(x,+INF) = +0 for |x|<1.
 689 //  pow(x,+INF) = +INF for |x|>1.
 690 //  pow(-INF,y) = -0 for y an odd integer < 0.
 691 //  pow(-INF,y) = +0 for y < 0 and not an odd integer.
 692 //  pow(-INF,y) = -INF for y an odd integer > 0.
 693 //  pow(-INF,y) = +INF for y > 0 and not an odd integer.
 694 //  pow(+INF,y) = +0 for y <0.
 695 //  pow(+INF,y) = +INF for y >0.
 696 //
 697 /******************************************************************************/
 698 
 699 ALIGNED_(16) juint _static_const_table_pow[] =
 700 {
 701   0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL, 0xf8000000UL,
 702   0xffffffffUL, 0x00000000UL, 0xfffff800UL, 0x00000000UL, 0x3ff00000UL,
 703   0x00000000UL, 0x00000000UL, 0x20000000UL, 0x3feff00aUL, 0x96621f95UL,
 704   0x3e5b1856UL, 0xe0000000UL, 0x3fefe019UL, 0xe5916f9eUL, 0xbe325278UL,
 705   0x00000000UL, 0x3fefd02fUL, 0x859a1062UL, 0x3e595fb7UL, 0xc0000000UL,
 706   0x3fefc049UL, 0xb245f18fUL, 0xbe529c38UL, 0xe0000000UL, 0x3fefb069UL,
 707   0xad2880a7UL, 0xbe501230UL, 0x60000000UL, 0x3fefa08fUL, 0xc8e72420UL,
 708   0x3e597bd1UL, 0x80000000UL, 0x3fef90baUL, 0xc30c4500UL, 0xbe5d6c75UL,
 709   0xe0000000UL, 0x3fef80eaUL, 0x02c63f43UL, 0x3e2e1318UL, 0xc0000000UL,
 710   0x3fef7120UL, 0xb3d4ccccUL, 0xbe44c52aUL, 0x00000000UL, 0x3fef615cUL,
 711   0xdbd91397UL, 0xbe4e7d6cUL, 0xa0000000UL, 0x3fef519cUL, 0x65c5cd68UL,
 712   0xbe522dc8UL, 0xa0000000UL, 0x3fef41e2UL, 0x46d1306cUL, 0xbe5a840eUL,
 713   0xe0000000UL, 0x3fef322dUL, 0xd2980e94UL, 0x3e5071afUL, 0xa0000000UL,
 714   0x3fef227eUL, 0x773abadeUL, 0xbe5891e5UL, 0xa0000000UL, 0x3fef12d4UL,
 715   0xdc6bf46bUL, 0xbe5cccbeUL, 0xe0000000UL, 0x3fef032fUL, 0xbc7247faUL,
 716   0xbe2bab83UL, 0x80000000UL, 0x3feef390UL, 0xbcaa1e46UL, 0xbe53bb3bUL,
 717   0x60000000UL, 0x3feee3f6UL, 0x5f6c682dUL, 0xbe54c619UL, 0x80000000UL,
 718   0x3feed461UL, 0x5141e368UL, 0xbe4b6d86UL, 0xe0000000UL, 0x3feec4d1UL,
 719   0xec678f76UL, 0xbe369af6UL, 0x80000000UL, 0x3feeb547UL, 0x41301f55UL,
 720   0xbe2d4312UL, 0x60000000UL, 0x3feea5c2UL, 0x676da6bdUL, 0xbe4d8dd0UL,
 721   0x60000000UL, 0x3fee9642UL, 0x57a891c4UL, 0x3e51f991UL, 0xa0000000UL,
 722   0x3fee86c7UL, 0xe4eb491eUL, 0x3e579bf9UL, 0x20000000UL, 0x3fee7752UL,
 723   0xfddc4a2cUL, 0xbe3356e6UL, 0xc0000000UL, 0x3fee67e1UL, 0xd75b5bf1UL,
 724   0xbe449531UL, 0x80000000UL, 0x3fee5876UL, 0xbd423b8eUL, 0x3df54fe4UL,
 725   0x60000000UL, 0x3fee4910UL, 0x330e51b9UL, 0x3e54289cUL, 0x80000000UL,
 726   0x3fee39afUL, 0x8651a95fUL, 0xbe55aad6UL, 0xa0000000UL, 0x3fee2a53UL,
 727   0x5e98c708UL, 0xbe2fc4a9UL, 0xe0000000UL, 0x3fee1afcUL, 0x0989328dUL,
 728   0x3e23958cUL, 0x40000000UL, 0x3fee0babUL, 0xee642abdUL, 0xbe425dd8UL,
 729   0xa0000000UL, 0x3fedfc5eUL, 0xc394d236UL, 0x3e526362UL, 0x20000000UL,
 730   0x3feded17UL, 0xe104aa8eUL, 0x3e4ce247UL, 0xc0000000UL, 0x3fedddd4UL,
 731   0x265a9be4UL, 0xbe5bb77aUL, 0x40000000UL, 0x3fedce97UL, 0x0ecac52fUL,
 732   0x3e4a7cb1UL, 0xe0000000UL, 0x3fedbf5eUL, 0x124cb3b8UL, 0x3e257024UL,
 733   0x80000000UL, 0x3fedb02bUL, 0xe6d4febeUL, 0xbe2033eeUL, 0x20000000UL,
 734   0x3feda0fdUL, 0x39cca00eUL, 0xbe3ddabcUL, 0xc0000000UL, 0x3fed91d3UL,
 735   0xef8a552aUL, 0xbe543390UL, 0x40000000UL, 0x3fed82afUL, 0xb8e85204UL,
 736   0x3e513850UL, 0xe0000000UL, 0x3fed738fUL, 0x3d59fe08UL, 0xbe5db728UL,
 737   0x40000000UL, 0x3fed6475UL, 0x3aa7ead1UL, 0x3e58804bUL, 0xc0000000UL,
 738   0x3fed555fUL, 0xf8a35ba9UL, 0xbe5298b0UL, 0x00000000UL, 0x3fed464fUL,
 739   0x9a88dd15UL, 0x3e5a8cdbUL, 0x40000000UL, 0x3fed3743UL, 0xb0b0a190UL,
 740   0x3e598635UL, 0x80000000UL, 0x3fed283cUL, 0xe2113295UL, 0xbe5c1119UL,
 741   0x80000000UL, 0x3fed193aUL, 0xafbf1728UL, 0xbe492e9cUL, 0x60000000UL,
 742   0x3fed0a3dUL, 0xe4a4ccf3UL, 0x3e19b90eUL, 0x20000000UL, 0x3fecfb45UL,
 743   0xba3cbeb8UL, 0x3e406b50UL, 0xc0000000UL, 0x3fecec51UL, 0x110f7dddUL,
 744   0x3e0d6806UL, 0x40000000UL, 0x3fecdd63UL, 0x7dd7d508UL, 0xbe5a8943UL,
 745   0x80000000UL, 0x3fecce79UL, 0x9b60f271UL, 0xbe50676aUL, 0x80000000UL,
 746   0x3fecbf94UL, 0x0b9ad660UL, 0x3e59174fUL, 0x60000000UL, 0x3fecb0b4UL,
 747   0x00823d9cUL, 0x3e5bbf72UL, 0x20000000UL, 0x3feca1d9UL, 0x38a6ec89UL,
 748   0xbe4d38f9UL, 0x80000000UL, 0x3fec9302UL, 0x3a0b7d8eUL, 0x3e53dbfdUL,
 749   0xc0000000UL, 0x3fec8430UL, 0xc6826b34UL, 0xbe27c5c9UL, 0xc0000000UL,
 750   0x3fec7563UL, 0x0c706381UL, 0xbe593653UL, 0x60000000UL, 0x3fec669bUL,
 751   0x7df34ec7UL, 0x3e461ab5UL, 0xe0000000UL, 0x3fec57d7UL, 0x40e5e7e8UL,
 752   0xbe5c3daeUL, 0x00000000UL, 0x3fec4919UL, 0x5602770fUL, 0xbe55219dUL,
 753   0xc0000000UL, 0x3fec3a5eUL, 0xec7911ebUL, 0x3e5a5d25UL, 0x60000000UL,
 754   0x3fec2ba9UL, 0xb39ea225UL, 0xbe53c00bUL, 0x80000000UL, 0x3fec1cf8UL,
 755   0x967a212eUL, 0x3e5a8ddfUL, 0x60000000UL, 0x3fec0e4cUL, 0x580798bdUL,
 756   0x3e5f53abUL, 0x00000000UL, 0x3febffa5UL, 0xb8282df6UL, 0xbe46b874UL,
 757   0x20000000UL, 0x3febf102UL, 0xe33a6729UL, 0x3e54963fUL, 0x00000000UL,
 758   0x3febe264UL, 0x3b53e88aUL, 0xbe3adce1UL, 0x60000000UL, 0x3febd3caUL,
 759   0xc2585084UL, 0x3e5cde9fUL, 0x80000000UL, 0x3febc535UL, 0xa335c5eeUL,
 760   0xbe39fd9cUL, 0x20000000UL, 0x3febb6a5UL, 0x7325b04dUL, 0x3e42ba15UL,
 761   0x60000000UL, 0x3feba819UL, 0x1564540fUL, 0x3e3a9f35UL, 0x40000000UL,
 762   0x3feb9992UL, 0x83fff592UL, 0xbe5465ceUL, 0xa0000000UL, 0x3feb8b0fUL,
 763   0xb9da63d3UL, 0xbe4b1a0aUL, 0x80000000UL, 0x3feb7c91UL, 0x6d6f1ea4UL,
 764   0x3e557657UL, 0x00000000UL, 0x3feb6e18UL, 0x5e80a1bfUL, 0x3e4ddbb6UL,
 765   0x00000000UL, 0x3feb5fa3UL, 0x1c9eacb5UL, 0x3e592877UL, 0xa0000000UL,
 766   0x3feb5132UL, 0x6d40beb3UL, 0xbe51858cUL, 0xa0000000UL, 0x3feb42c6UL,
 767   0xd740c67bUL, 0x3e427ad2UL, 0x40000000UL, 0x3feb345fUL, 0xa3e0cceeUL,
 768   0xbe5c2fc4UL, 0x40000000UL, 0x3feb25fcUL, 0x8e752b50UL, 0xbe3da3c2UL,
 769   0xc0000000UL, 0x3feb179dUL, 0xa892e7deUL, 0x3e1fb481UL, 0xc0000000UL,
 770   0x3feb0943UL, 0x21ed71e9UL, 0xbe365206UL, 0x20000000UL, 0x3feafaeeUL,
 771   0x0e1380a3UL, 0x3e5c5b7bUL, 0x20000000UL, 0x3feaec9dUL, 0x3c3d640eUL,
 772   0xbe5dbbd0UL, 0x60000000UL, 0x3feade50UL, 0x8f97a715UL, 0x3e3a8ec5UL,
 773   0x20000000UL, 0x3fead008UL, 0x23ab2839UL, 0x3e2fe98aUL, 0x40000000UL,
 774   0x3feac1c4UL, 0xf4bbd50fUL, 0x3e54d8f6UL, 0xe0000000UL, 0x3feab384UL,
 775   0x14757c4dUL, 0xbe48774cUL, 0xc0000000UL, 0x3feaa549UL, 0x7c7b0eeaUL,
 776   0x3e5b51bbUL, 0x20000000UL, 0x3fea9713UL, 0xf56f7013UL, 0x3e386200UL,
 777   0xe0000000UL, 0x3fea88e0UL, 0xbe428ebeUL, 0xbe514af5UL, 0xe0000000UL,
 778   0x3fea7ab2UL, 0x8d0e4496UL, 0x3e4f9165UL, 0x60000000UL, 0x3fea6c89UL,
 779   0xdbacc5d5UL, 0xbe5c063bUL, 0x20000000UL, 0x3fea5e64UL, 0x3f19d970UL,
 780   0xbe5a0c8cUL, 0x20000000UL, 0x3fea5043UL, 0x09ea3e6bUL, 0x3e5065dcUL,
 781   0x80000000UL, 0x3fea4226UL, 0x78df246cUL, 0x3e5e05f6UL, 0x40000000UL,
 782   0x3fea340eUL, 0x4057d4a0UL, 0x3e431b2bUL, 0x40000000UL, 0x3fea25faUL,
 783   0x82867bb5UL, 0x3e4b76beUL, 0xa0000000UL, 0x3fea17eaUL, 0x9436f40aUL,
 784   0xbe5aad39UL, 0x20000000UL, 0x3fea09dfUL, 0x4b5253b3UL, 0x3e46380bUL,
 785   0x00000000UL, 0x3fe9fbd8UL, 0x8fc52466UL, 0xbe386f9bUL, 0x20000000UL,
 786   0x3fe9edd5UL, 0x22d3f344UL, 0xbe538347UL, 0x60000000UL, 0x3fe9dfd6UL,
 787   0x1ac33522UL, 0x3e5dbc53UL, 0x00000000UL, 0x3fe9d1dcUL, 0xeabdff1dUL,
 788   0x3e40fc0cUL, 0xe0000000UL, 0x3fe9c3e5UL, 0xafd30e73UL, 0xbe585e63UL,
 789   0xe0000000UL, 0x3fe9b5f3UL, 0xa52f226aUL, 0xbe43e8f9UL, 0x20000000UL,
 790   0x3fe9a806UL, 0xecb8698dUL, 0xbe515b36UL, 0x80000000UL, 0x3fe99a1cUL,
 791   0xf2b4e89dUL, 0x3e48b62bUL, 0x20000000UL, 0x3fe98c37UL, 0x7c9a88fbUL,
 792   0x3e44414cUL, 0x00000000UL, 0x3fe97e56UL, 0xda015741UL, 0xbe5d13baUL,
 793   0xe0000000UL, 0x3fe97078UL, 0x5fdace06UL, 0x3e51b947UL, 0x00000000UL,
 794   0x3fe962a0UL, 0x956ca094UL, 0x3e518785UL, 0x40000000UL, 0x3fe954cbUL,
 795   0x01164c1dUL, 0x3e5d5b57UL, 0xc0000000UL, 0x3fe946faUL, 0xe63b3767UL,
 796   0xbe4f84e7UL, 0x40000000UL, 0x3fe9392eUL, 0xe57cc2a9UL, 0x3e34eda3UL,
 797   0xe0000000UL, 0x3fe92b65UL, 0x8c75b544UL, 0x3e5766a0UL, 0xc0000000UL,
 798   0x3fe91da1UL, 0x37d1d087UL, 0xbe5e2ab1UL, 0x80000000UL, 0x3fe90fe1UL,
 799   0xa953dc20UL, 0x3e5fa1f3UL, 0x80000000UL, 0x3fe90225UL, 0xdbd3f369UL,
 800   0x3e47d6dbUL, 0xa0000000UL, 0x3fe8f46dUL, 0x1c9be989UL, 0xbe5e2b0aUL,
 801   0xa0000000UL, 0x3fe8e6b9UL, 0x3c93d76aUL, 0x3e5c8618UL, 0xe0000000UL,
 802   0x3fe8d909UL, 0x2182fc9aUL, 0xbe41aa9eUL, 0x20000000UL, 0x3fe8cb5eUL,
 803   0xe6b3539dUL, 0xbe530d19UL, 0x60000000UL, 0x3fe8bdb6UL, 0x49e58cc3UL,
 804   0xbe3bb374UL, 0xa0000000UL, 0x3fe8b012UL, 0xa7cfeb8fUL, 0x3e56c412UL,
 805   0x00000000UL, 0x3fe8a273UL, 0x8d52bc19UL, 0x3e1429b8UL, 0x60000000UL,
 806   0x3fe894d7UL, 0x4dc32c6cUL, 0xbe48604cUL, 0xc0000000UL, 0x3fe8873fUL,
 807   0x0c868e56UL, 0xbe564ee5UL, 0x00000000UL, 0x3fe879acUL, 0x56aee828UL,
 808   0x3e5e2fd8UL, 0x60000000UL, 0x3fe86c1cUL, 0x7ceab8ecUL, 0x3e493365UL,
 809   0xc0000000UL, 0x3fe85e90UL, 0x78d4dadcUL, 0xbe4f7f25UL, 0x00000000UL,
 810   0x3fe85109UL, 0x0ccd8280UL, 0x3e31e7a2UL, 0x40000000UL, 0x3fe84385UL,
 811   0x34ba4e15UL, 0x3e328077UL, 0x80000000UL, 0x3fe83605UL, 0xa670975aUL,
 812   0xbe53eee5UL, 0xa0000000UL, 0x3fe82889UL, 0xf61b77b2UL, 0xbe43a20aUL,
 813   0xa0000000UL, 0x3fe81b11UL, 0x13e6643bUL, 0x3e5e5fe5UL, 0xc0000000UL,
 814   0x3fe80d9dUL, 0x82cc94e8UL, 0xbe5ff1f9UL, 0xa0000000UL, 0x3fe8002dUL,
 815   0x8a0c9c5dUL, 0xbe42b0e7UL, 0x60000000UL, 0x3fe7f2c1UL, 0x22a16f01UL,
 816   0x3e5d9ea0UL, 0x20000000UL, 0x3fe7e559UL, 0xc38cd451UL, 0x3e506963UL,
 817   0xc0000000UL, 0x3fe7d7f4UL, 0x9902bc71UL, 0x3e4503d7UL, 0x40000000UL,
 818   0x3fe7ca94UL, 0xdef2a3c0UL, 0x3e3d98edUL, 0xa0000000UL, 0x3fe7bd37UL,
 819   0xed49abb0UL, 0x3e24c1ffUL, 0xe0000000UL, 0x3fe7afdeUL, 0xe3b0be70UL,
 820   0xbe40c467UL, 0x00000000UL, 0x3fe7a28aUL, 0xaf9f193cUL, 0xbe5dff6cUL,
 821   0xe0000000UL, 0x3fe79538UL, 0xb74cf6b6UL, 0xbe258ed0UL, 0xa0000000UL,
 822   0x3fe787ebUL, 0x1d9127c7UL, 0x3e345fb0UL, 0x40000000UL, 0x3fe77aa2UL,
 823   0x1028c21dUL, 0xbe4619bdUL, 0xa0000000UL, 0x3fe76d5cUL, 0x7cb0b5e4UL,
 824   0x3e40f1a2UL, 0xe0000000UL, 0x3fe7601aUL, 0x2b1bc4adUL, 0xbe32e8bbUL,
 825   0xe0000000UL, 0x3fe752dcUL, 0x6839f64eUL, 0x3e41f57bUL, 0xc0000000UL,
 826   0x3fe745a2UL, 0xc4121f7eUL, 0xbe52c40aUL, 0x60000000UL, 0x3fe7386cUL,
 827   0xd6852d72UL, 0xbe5c4e6bUL, 0xc0000000UL, 0x3fe72b39UL, 0x91d690f7UL,
 828   0xbe57f88fUL, 0xe0000000UL, 0x3fe71e0aUL, 0x627a2159UL, 0xbe4425d5UL,
 829   0xc0000000UL, 0x3fe710dfUL, 0x50a54033UL, 0x3e422b7eUL, 0x60000000UL,
 830   0x3fe703b8UL, 0x3b0b5f91UL, 0x3e5d3857UL, 0xe0000000UL, 0x3fe6f694UL,
 831   0x84d628a2UL, 0xbe51f090UL, 0x00000000UL, 0x3fe6e975UL, 0x306d8894UL,
 832   0xbe414d83UL, 0xe0000000UL, 0x3fe6dc58UL, 0x30bf24aaUL, 0xbe4650caUL,
 833   0x80000000UL, 0x3fe6cf40UL, 0xd4628d69UL, 0xbe5db007UL, 0xc0000000UL,
 834   0x3fe6c22bUL, 0xa2aae57bUL, 0xbe31d279UL, 0xc0000000UL, 0x3fe6b51aUL,
 835   0x860edf7eUL, 0xbe2d4c4aUL, 0x80000000UL, 0x3fe6a80dUL, 0xf3559341UL,
 836   0xbe5f7e98UL, 0xe0000000UL, 0x3fe69b03UL, 0xa885899eUL, 0xbe5c2011UL,
 837   0xe0000000UL, 0x3fe68dfdUL, 0x2bdc6d37UL, 0x3e224a82UL, 0xa0000000UL,
 838   0x3fe680fbUL, 0xc12ad1b9UL, 0xbe40cf56UL, 0x00000000UL, 0x3fe673fdUL,
 839   0x1bcdf659UL, 0xbdf52f2dUL, 0x00000000UL, 0x3fe66702UL, 0x5df10408UL,
 840   0x3e5663e0UL, 0xc0000000UL, 0x3fe65a0aUL, 0xa4070568UL, 0xbe40b12fUL,
 841   0x00000000UL, 0x3fe64d17UL, 0x71c54c47UL, 0x3e5f5e8bUL, 0x00000000UL,
 842   0x3fe64027UL, 0xbd4b7e83UL, 0x3e42ead6UL, 0xa0000000UL, 0x3fe6333aUL,
 843   0x61598bd2UL, 0xbe4c48d4UL, 0xc0000000UL, 0x3fe62651UL, 0x6f538d61UL,
 844   0x3e548401UL, 0xa0000000UL, 0x3fe6196cUL, 0x14344120UL, 0xbe529af6UL,
 845   0x00000000UL, 0x3fe60c8bUL, 0x5982c587UL, 0xbe3e1e4fUL, 0x00000000UL,
 846   0x3fe5ffadUL, 0xfe51d4eaUL, 0xbe4c897aUL, 0x80000000UL, 0x3fe5f2d2UL,
 847   0xfd46ebe1UL, 0x3e552e00UL, 0xa0000000UL, 0x3fe5e5fbUL, 0xa4695699UL,
 848   0x3e5ed471UL, 0x60000000UL, 0x3fe5d928UL, 0x80d118aeUL, 0x3e456b61UL,
 849   0xa0000000UL, 0x3fe5cc58UL, 0x304c330bUL, 0x3e54dc29UL, 0x80000000UL,
 850   0x3fe5bf8cUL, 0x0af2dedfUL, 0xbe3aa9bdUL, 0xe0000000UL, 0x3fe5b2c3UL,
 851   0x15fc9258UL, 0xbe479a37UL, 0xc0000000UL, 0x3fe5a5feUL, 0x9292c7eaUL,
 852   0x3e188650UL, 0x20000000UL, 0x3fe5993dUL, 0x33b4d380UL, 0x3e5d6d93UL,
 853   0x20000000UL, 0x3fe58c7fUL, 0x02fd16c7UL, 0x3e2fe961UL, 0xa0000000UL,
 854   0x3fe57fc4UL, 0x4a05edb6UL, 0xbe4d55b4UL, 0xa0000000UL, 0x3fe5730dUL,
 855   0x3d443abbUL, 0xbe5e6954UL, 0x00000000UL, 0x3fe5665aUL, 0x024acfeaUL,
 856   0x3e50e61bUL, 0x00000000UL, 0x3fe559aaUL, 0xcc9edd09UL, 0xbe325403UL,
 857   0x60000000UL, 0x3fe54cfdUL, 0x1fe26950UL, 0x3e5d500eUL, 0x60000000UL,
 858   0x3fe54054UL, 0x6c5ae164UL, 0xbe4a79b4UL, 0xc0000000UL, 0x3fe533aeUL,
 859   0x154b0287UL, 0xbe401571UL, 0xa0000000UL, 0x3fe5270cUL, 0x0673f401UL,
 860   0xbe56e56bUL, 0xe0000000UL, 0x3fe51a6dUL, 0x751b639cUL, 0x3e235269UL,
 861   0xa0000000UL, 0x3fe50dd2UL, 0x7c7b2bedUL, 0x3ddec887UL, 0xc0000000UL,
 862   0x3fe5013aUL, 0xafab4e17UL, 0x3e5e7575UL, 0x60000000UL, 0x3fe4f4a6UL,
 863   0x2e308668UL, 0x3e59aed6UL, 0x80000000UL, 0x3fe4e815UL, 0xf33e2a76UL,
 864   0xbe51f184UL, 0xe0000000UL, 0x3fe4db87UL, 0x839f3e3eUL, 0x3e57db01UL,
 865   0xc0000000UL, 0x3fe4cefdUL, 0xa9eda7bbUL, 0x3e535e0fUL, 0x00000000UL,
 866   0x3fe4c277UL, 0x2a8f66a5UL, 0x3e5ce451UL, 0xc0000000UL, 0x3fe4b5f3UL,
 867   0x05192456UL, 0xbe4e8518UL, 0xc0000000UL, 0x3fe4a973UL, 0x4aa7cd1dUL,
 868   0x3e46784aUL, 0x40000000UL, 0x3fe49cf7UL, 0x8e23025eUL, 0xbe5749f2UL,
 869   0x00000000UL, 0x3fe4907eUL, 0x18d30215UL, 0x3e360f39UL, 0x20000000UL,
 870   0x3fe48408UL, 0x63dcf2f3UL, 0x3e5e00feUL, 0xc0000000UL, 0x3fe47795UL,
 871   0x46182d09UL, 0xbe5173d9UL, 0xa0000000UL, 0x3fe46b26UL, 0x8f0e62aaUL,
 872   0xbe48f281UL, 0xe0000000UL, 0x3fe45ebaUL, 0x5775c40cUL, 0xbe56aad4UL,
 873   0x60000000UL, 0x3fe45252UL, 0x0fe25f69UL, 0x3e48bd71UL, 0x40000000UL,
 874   0x3fe445edUL, 0xe9989ec5UL, 0x3e590d97UL, 0x80000000UL, 0x3fe4398bUL,
 875   0xb3d9ffe3UL, 0x3e479dbcUL, 0x20000000UL, 0x3fe42d2dUL, 0x388e4d2eUL,
 876   0xbe5eed80UL, 0xe0000000UL, 0x3fe420d1UL, 0x6f797c18UL, 0x3e554b4cUL,
 877   0x20000000UL, 0x3fe4147aUL, 0x31048bb4UL, 0xbe5b1112UL, 0x80000000UL,
 878   0x3fe40825UL, 0x2efba4f9UL, 0x3e48ebc7UL, 0x40000000UL, 0x3fe3fbd4UL,
 879   0x50201119UL, 0x3e40b701UL, 0x40000000UL, 0x3fe3ef86UL, 0x0a4db32cUL,
 880   0x3e551de8UL, 0xa0000000UL, 0x3fe3e33bUL, 0x0c9c148bUL, 0xbe50c1f6UL,
 881   0x20000000UL, 0x3fe3d6f4UL, 0xc9129447UL, 0x3e533fa0UL, 0x00000000UL,
 882   0x3fe3cab0UL, 0xaae5b5a0UL, 0xbe22b68eUL, 0x20000000UL, 0x3fe3be6fUL,
 883   0x02305e8aUL, 0xbe54fc08UL, 0x60000000UL, 0x3fe3b231UL, 0x7f908258UL,
 884   0x3e57dc05UL, 0x00000000UL, 0x3fe3a5f7UL, 0x1a09af78UL, 0x3e08038bUL,
 885   0xe0000000UL, 0x3fe399bfUL, 0x490643c1UL, 0xbe5dbe42UL, 0xe0000000UL,
 886   0x3fe38d8bUL, 0x5e8ad724UL, 0xbe3c2b72UL, 0x20000000UL, 0x3fe3815bUL,
 887   0xc67196b6UL, 0x3e1713cfUL, 0xa0000000UL, 0x3fe3752dUL, 0x6182e429UL,
 888   0xbe3ec14cUL, 0x40000000UL, 0x3fe36903UL, 0xab6eb1aeUL, 0x3e5a2cc5UL,
 889   0x40000000UL, 0x3fe35cdcUL, 0xfe5dc064UL, 0xbe5c5878UL, 0x40000000UL,
 890   0x3fe350b8UL, 0x0ba6b9e4UL, 0x3e51619bUL, 0x80000000UL, 0x3fe34497UL,
 891   0x857761aaUL, 0x3e5fff53UL, 0x00000000UL, 0x3fe3387aUL, 0xf872d68cUL,
 892   0x3e484f4dUL, 0xa0000000UL, 0x3fe32c5fUL, 0x087e97c2UL, 0x3e52842eUL,
 893   0x80000000UL, 0x3fe32048UL, 0x73d6d0c0UL, 0xbe503edfUL, 0x80000000UL,
 894   0x3fe31434UL, 0x0c1456a1UL, 0xbe5f72adUL, 0xa0000000UL, 0x3fe30823UL,
 895   0x83a1a4d5UL, 0xbe5e65ccUL, 0xe0000000UL, 0x3fe2fc15UL, 0x855a7390UL,
 896   0xbe506438UL, 0x40000000UL, 0x3fe2f00bUL, 0xa2898287UL, 0x3e3d22a2UL,
 897   0xe0000000UL, 0x3fe2e403UL, 0x8b56f66fUL, 0xbe5aa5fdUL, 0x80000000UL,
 898   0x3fe2d7ffUL, 0x52db119aUL, 0x3e3a2e3dUL, 0x60000000UL, 0x3fe2cbfeUL,
 899   0xe2ddd4c0UL, 0xbe586469UL, 0x40000000UL, 0x3fe2c000UL, 0x6b01bf10UL,
 900   0x3e352b9dUL, 0x40000000UL, 0x3fe2b405UL, 0xb07a1cdfUL, 0x3e5c5cdaUL,
 901   0x80000000UL, 0x3fe2a80dUL, 0xc7b5f868UL, 0xbe5668b3UL, 0xc0000000UL,
 902   0x3fe29c18UL, 0x185edf62UL, 0xbe563d66UL, 0x00000000UL, 0x3fe29027UL,
 903   0xf729e1ccUL, 0x3e59a9a0UL, 0x80000000UL, 0x3fe28438UL, 0x6433c727UL,
 904   0xbe43cc89UL, 0x00000000UL, 0x3fe2784dUL, 0x41782631UL, 0xbe30750cUL,
 905   0xa0000000UL, 0x3fe26c64UL, 0x914911b7UL, 0xbe58290eUL, 0x40000000UL,
 906   0x3fe2607fUL, 0x3dcc73e1UL, 0xbe4269cdUL, 0x00000000UL, 0x3fe2549dUL,
 907   0x2751bf70UL, 0xbe5a6998UL, 0xc0000000UL, 0x3fe248bdUL, 0x4248b9fbUL,
 908   0xbe4ddb00UL, 0x80000000UL, 0x3fe23ce1UL, 0xf35cf82fUL, 0x3e561b71UL,
 909   0x60000000UL, 0x3fe23108UL, 0x8e481a2dUL, 0x3e518fb9UL, 0x60000000UL,
 910   0x3fe22532UL, 0x5ab96edcUL, 0xbe5fafc5UL, 0x40000000UL, 0x3fe2195fUL,
 911   0x80943911UL, 0xbe07f819UL, 0x40000000UL, 0x3fe20d8fUL, 0x386f2d6cUL,
 912   0xbe54ba8bUL, 0x40000000UL, 0x3fe201c2UL, 0xf29664acUL, 0xbe5eb815UL,
 913   0x20000000UL, 0x3fe1f5f8UL, 0x64f03390UL, 0x3e5e320cUL, 0x20000000UL,
 914   0x3fe1ea31UL, 0x747ff696UL, 0x3e5ef0a5UL, 0x40000000UL, 0x3fe1de6dUL,
 915   0x3e9ceb51UL, 0xbe5f8d27UL, 0x20000000UL, 0x3fe1d2acUL, 0x4ae0b55eUL,
 916   0x3e5faa21UL, 0x20000000UL, 0x3fe1c6eeUL, 0x28569a5eUL, 0x3e598a4fUL,
 917   0x20000000UL, 0x3fe1bb33UL, 0x54b33e07UL, 0x3e46130aUL, 0x20000000UL,
 918   0x3fe1af7bUL, 0x024f1078UL, 0xbe4dbf93UL, 0x00000000UL, 0x3fe1a3c6UL,
 919   0xb0783bfaUL, 0x3e419248UL, 0xe0000000UL, 0x3fe19813UL, 0x2f02b836UL,
 920   0x3e4e02b7UL, 0xc0000000UL, 0x3fe18c64UL, 0x28dec9d4UL, 0x3e09064fUL,
 921   0x80000000UL, 0x3fe180b8UL, 0x45cbf406UL, 0x3e5b1f46UL, 0x40000000UL,
 922   0x3fe1750fUL, 0x03d9964cUL, 0x3e5b0a79UL, 0x00000000UL, 0x3fe16969UL,
 923   0x8b5b882bUL, 0xbe238086UL, 0xa0000000UL, 0x3fe15dc5UL, 0x73bad6f8UL,
 924   0xbdf1fca4UL, 0x20000000UL, 0x3fe15225UL, 0x5385769cUL, 0x3e5e8d76UL,
 925   0xa0000000UL, 0x3fe14687UL, 0x1676dc6bUL, 0x3e571d08UL, 0x20000000UL,
 926   0x3fe13aedUL, 0xa8c41c7fUL, 0xbe598a25UL, 0x60000000UL, 0x3fe12f55UL,
 927   0xc4e1aaf0UL, 0x3e435277UL, 0xa0000000UL, 0x3fe123c0UL, 0x403638e1UL,
 928   0xbe21aa7cUL, 0xc0000000UL, 0x3fe1182eUL, 0x557a092bUL, 0xbdd0116bUL,
 929   0xc0000000UL, 0x3fe10c9fUL, 0x7d779f66UL, 0x3e4a61baUL, 0xc0000000UL,
 930   0x3fe10113UL, 0x2b09c645UL, 0xbe5d586eUL, 0x20000000UL, 0x3fe0ea04UL,
 931   0xea2cad46UL, 0x3e5aa97cUL, 0x20000000UL, 0x3fe0d300UL, 0x23190e54UL,
 932   0x3e50f1a7UL, 0xa0000000UL, 0x3fe0bc07UL, 0x1379a5a6UL, 0xbe51619dUL,
 933   0x60000000UL, 0x3fe0a51aUL, 0x926a3d4aUL, 0x3e5cf019UL, 0xa0000000UL,
 934   0x3fe08e38UL, 0xa8c24358UL, 0x3e35241eUL, 0x20000000UL, 0x3fe07762UL,
 935   0x24317e7aUL, 0x3e512cfaUL, 0x00000000UL, 0x3fe06097UL, 0xfd9cf274UL,
 936   0xbe55bef3UL, 0x00000000UL, 0x3fe049d7UL, 0x3689b49dUL, 0xbe36d26dUL,
 937   0x40000000UL, 0x3fe03322UL, 0xf72ef6c4UL, 0xbe54cd08UL, 0xa0000000UL,
 938   0x3fe01c78UL, 0x23702d2dUL, 0xbe5900bfUL, 0x00000000UL, 0x3fe005daUL,
 939   0x3f59c14cUL, 0x3e57d80bUL, 0x40000000UL, 0x3fdfde8dUL, 0xad67766dUL,
 940   0xbe57fad4UL, 0x40000000UL, 0x3fdfb17cUL, 0x644f4ae7UL, 0x3e1ee43bUL,
 941   0x40000000UL, 0x3fdf8481UL, 0x903234d2UL, 0x3e501a86UL, 0x40000000UL,
 942   0x3fdf579cUL, 0xafe9e509UL, 0xbe267c3eUL, 0x00000000UL, 0x3fdf2acdUL,
 943   0xb7dfda0bUL, 0xbe48149bUL, 0x40000000UL, 0x3fdefe13UL, 0x3b94305eUL,
 944   0x3e5f4ea7UL, 0x80000000UL, 0x3fded16fUL, 0x5d95da61UL, 0xbe55c198UL,
 945   0x00000000UL, 0x3fdea4e1UL, 0x406960c9UL, 0xbdd99a19UL, 0x00000000UL,
 946   0x3fde7868UL, 0xd22f3539UL, 0x3e470c78UL, 0x80000000UL, 0x3fde4c04UL,
 947   0x83eec535UL, 0xbe3e1232UL, 0x40000000UL, 0x3fde1fb6UL, 0x3dfbffcbUL,
 948   0xbe4b7d71UL, 0x40000000UL, 0x3fddf37dUL, 0x7e1be4e0UL, 0xbe5b8f8fUL,
 949   0x40000000UL, 0x3fddc759UL, 0x46dae887UL, 0xbe350458UL, 0x80000000UL,
 950   0x3fdd9b4aUL, 0xed6ecc49UL, 0xbe5f0045UL, 0x80000000UL, 0x3fdd6f50UL,
 951   0x2e9e883cUL, 0x3e2915daUL, 0x80000000UL, 0x3fdd436bUL, 0xf0bccb32UL,
 952   0x3e4a68c9UL, 0x80000000UL, 0x3fdd179bUL, 0x9bbfc779UL, 0xbe54a26aUL,
 953   0x00000000UL, 0x3fdcebe0UL, 0x7cea33abUL, 0x3e43c6b7UL, 0x40000000UL,
 954   0x3fdcc039UL, 0xe740fd06UL, 0x3e5526c2UL, 0x40000000UL, 0x3fdc94a7UL,
 955   0x9eadeb1aUL, 0xbe396d8dUL, 0xc0000000UL, 0x3fdc6929UL, 0xf0a8f95aUL,
 956   0xbe5c0ab2UL, 0x80000000UL, 0x3fdc3dc0UL, 0x6ee2693bUL, 0x3e0992e6UL,
 957   0xc0000000UL, 0x3fdc126bUL, 0x5ac6b581UL, 0xbe2834b6UL, 0x40000000UL,
 958   0x3fdbe72bUL, 0x8cc226ffUL, 0x3e3596a6UL, 0x00000000UL, 0x3fdbbbffUL,
 959   0xf92a74bbUL, 0x3e3c5813UL, 0x00000000UL, 0x3fdb90e7UL, 0x479664c0UL,
 960   0xbe50d644UL, 0x00000000UL, 0x3fdb65e3UL, 0x5004975bUL, 0xbe55258fUL,
 961   0x00000000UL, 0x3fdb3af3UL, 0xe4b23194UL, 0xbe588407UL, 0xc0000000UL,
 962   0x3fdb1016UL, 0xe65d4d0aUL, 0x3e527c26UL, 0x80000000UL, 0x3fdae54eUL,
 963   0x814fddd6UL, 0x3e5962a2UL, 0x40000000UL, 0x3fdaba9aUL, 0xe19d0913UL,
 964   0xbe562f4eUL, 0x80000000UL, 0x3fda8ff9UL, 0x43cfd006UL, 0xbe4cfdebUL,
 965   0x40000000UL, 0x3fda656cUL, 0x686f0a4eUL, 0x3e5e47a8UL, 0xc0000000UL,
 966   0x3fda3af2UL, 0x7200d410UL, 0x3e5e1199UL, 0xc0000000UL, 0x3fda108cUL,
 967   0xabd2266eUL, 0x3e5ee4d1UL, 0x40000000UL, 0x3fd9e63aUL, 0x396f8f2cUL,
 968   0x3e4dbffbUL, 0x00000000UL, 0x3fd9bbfbUL, 0xe32b25ddUL, 0x3e5c3a54UL,
 969   0x40000000UL, 0x3fd991cfUL, 0x431e4035UL, 0xbe457925UL, 0x80000000UL,
 970   0x3fd967b6UL, 0x7bed3dd3UL, 0x3e40c61dUL, 0x00000000UL, 0x3fd93db1UL,
 971   0xd7449365UL, 0x3e306419UL, 0x80000000UL, 0x3fd913beUL, 0x1746e791UL,
 972   0x3e56fcfcUL, 0x40000000UL, 0x3fd8e9dfUL, 0xf3a9028bUL, 0xbe5041b9UL,
 973   0xc0000000UL, 0x3fd8c012UL, 0x56840c50UL, 0xbe26e20aUL, 0x40000000UL,
 974   0x3fd89659UL, 0x19763102UL, 0xbe51f466UL, 0x80000000UL, 0x3fd86cb2UL,
 975   0x7032de7cUL, 0xbe4d298aUL, 0x80000000UL, 0x3fd8431eUL, 0xdeb39fabUL,
 976   0xbe4361ebUL, 0x40000000UL, 0x3fd8199dUL, 0x5d01cbe0UL, 0xbe5425b3UL,
 977   0x80000000UL, 0x3fd7f02eUL, 0x3ce99aa9UL, 0x3e146fa8UL, 0x80000000UL,
 978   0x3fd7c6d2UL, 0xd1a262b9UL, 0xbe5a1a69UL, 0xc0000000UL, 0x3fd79d88UL,
 979   0x8606c236UL, 0x3e423a08UL, 0x80000000UL, 0x3fd77451UL, 0x8fd1e1b7UL,
 980   0x3e5a6a63UL, 0xc0000000UL, 0x3fd74b2cUL, 0xe491456aUL, 0x3e42c1caUL,
 981   0x40000000UL, 0x3fd7221aUL, 0x4499a6d7UL, 0x3e36a69aUL, 0x00000000UL,
 982   0x3fd6f91aUL, 0x5237df94UL, 0xbe0f8f02UL, 0x00000000UL, 0x3fd6d02cUL,
 983   0xb6482c6eUL, 0xbe5abcf7UL, 0x00000000UL, 0x3fd6a750UL, 0x1919fd61UL,
 984   0xbe57ade2UL, 0x00000000UL, 0x3fd67e86UL, 0xaa7a994dUL, 0xbe3f3fbdUL,
 985   0x00000000UL, 0x3fd655ceUL, 0x67db014cUL, 0x3e33c550UL, 0x00000000UL,
 986   0x3fd62d28UL, 0xa82856b7UL, 0xbe1409d1UL, 0xc0000000UL, 0x3fd60493UL,
 987   0x1e6a300dUL, 0x3e55d899UL, 0x80000000UL, 0x3fd5dc11UL, 0x1222bd5cUL,
 988   0xbe35bfc0UL, 0xc0000000UL, 0x3fd5b3a0UL, 0x6e8dc2d3UL, 0x3e5d4d79UL,
 989   0x00000000UL, 0x3fd58b42UL, 0xe0e4ace6UL, 0xbe517303UL, 0x80000000UL,
 990   0x3fd562f4UL, 0xb306e0a8UL, 0x3e5edf0fUL, 0xc0000000UL, 0x3fd53ab8UL,
 991   0x6574bc54UL, 0x3e5ee859UL, 0x80000000UL, 0x3fd5128eUL, 0xea902207UL,
 992   0x3e5f6188UL, 0xc0000000UL, 0x3fd4ea75UL, 0x9f911d79UL, 0x3e511735UL,
 993   0x80000000UL, 0x3fd4c26eUL, 0xf9c77397UL, 0xbe5b1643UL, 0x40000000UL,
 994   0x3fd49a78UL, 0x15fc9258UL, 0x3e479a37UL, 0x80000000UL, 0x3fd47293UL,
 995   0xd5a04dd9UL, 0xbe426e56UL, 0xc0000000UL, 0x3fd44abfUL, 0xe04042f5UL,
 996   0x3e56f7c6UL, 0x40000000UL, 0x3fd422fdUL, 0x1d8bf2c8UL, 0x3e5d8810UL,
 997   0x00000000UL, 0x3fd3fb4cUL, 0x88a8ddeeUL, 0xbe311454UL, 0xc0000000UL,
 998   0x3fd3d3abUL, 0x3e3b5e47UL, 0xbe5d1b72UL, 0x40000000UL, 0x3fd3ac1cUL,
 999   0xc2ab5d59UL, 0x3e31b02bUL, 0xc0000000UL, 0x3fd3849dUL, 0xd4e34b9eUL,
1000   0x3e51cb2fUL, 0x40000000UL, 0x3fd35d30UL, 0x177204fbUL, 0xbe2b8cd7UL,
1001   0x80000000UL, 0x3fd335d3UL, 0xfcd38c82UL, 0xbe4356e1UL, 0x80000000UL,
1002   0x3fd30e87UL, 0x64f54accUL, 0xbe4e6224UL, 0x00000000UL, 0x3fd2e74cUL,
1003   0xaa7975d9UL, 0x3e5dc0feUL, 0x80000000UL, 0x3fd2c021UL, 0x516dab3fUL,
1004   0xbe50ffa3UL, 0x40000000UL, 0x3fd29907UL, 0x2bfb7313UL, 0x3e5674a2UL,
1005   0xc0000000UL, 0x3fd271fdUL, 0x0549fc99UL, 0x3e385d29UL, 0xc0000000UL,
1006   0x3fd24b04UL, 0x55b63073UL, 0xbe500c6dUL, 0x00000000UL, 0x3fd2241cUL,
1007   0x3f91953aUL, 0x3e389977UL, 0xc0000000UL, 0x3fd1fd43UL, 0xa1543f71UL,
1008   0xbe3487abUL, 0xc0000000UL, 0x3fd1d67bUL, 0x4ec8867cUL, 0x3df6a2dcUL,
1009   0x00000000UL, 0x3fd1afc4UL, 0x4328e3bbUL, 0x3e41d9c0UL, 0x80000000UL,
1010   0x3fd1891cUL, 0x2e1cda84UL, 0x3e3bdd87UL, 0x40000000UL, 0x3fd16285UL,
1011   0x4b5331aeUL, 0xbe53128eUL, 0x00000000UL, 0x3fd13bfeUL, 0xb9aec164UL,
1012   0xbe52ac98UL, 0xc0000000UL, 0x3fd11586UL, 0xd91e1316UL, 0xbe350630UL,
1013   0x80000000UL, 0x3fd0ef1fUL, 0x7cacc12cUL, 0x3e3f5219UL, 0x40000000UL,
1014   0x3fd0c8c8UL, 0xbce277b7UL, 0x3e3d30c0UL, 0x00000000UL, 0x3fd0a281UL,
1015   0x2a63447dUL, 0xbe541377UL, 0x80000000UL, 0x3fd07c49UL, 0xfac483b5UL,
1016   0xbe5772ecUL, 0xc0000000UL, 0x3fd05621UL, 0x36b8a570UL, 0xbe4fd4bdUL,
1017   0xc0000000UL, 0x3fd03009UL, 0xbae505f7UL, 0xbe450388UL, 0x80000000UL,
1018   0x3fd00a01UL, 0x3e35aeadUL, 0xbe5430fcUL, 0x80000000UL, 0x3fcfc811UL,
1019   0x707475acUL, 0x3e38806eUL, 0x80000000UL, 0x3fcf7c3fUL, 0xc91817fcUL,
1020   0xbe40cceaUL, 0x80000000UL, 0x3fcf308cUL, 0xae05d5e9UL, 0xbe4919b8UL,
1021   0x80000000UL, 0x3fcee4f8UL, 0xae6cc9e6UL, 0xbe530b94UL, 0x00000000UL,
1022   0x3fce9983UL, 0x1efe3e8eUL, 0x3e57747eUL, 0x00000000UL, 0x3fce4e2dUL,
1023   0xda78d9bfUL, 0xbe59a608UL, 0x00000000UL, 0x3fce02f5UL, 0x8abe2c2eUL,
1024   0x3e4a35adUL, 0x00000000UL, 0x3fcdb7dcUL, 0x1495450dUL, 0xbe0872ccUL,
1025   0x80000000UL, 0x3fcd6ce1UL, 0x86ee0ba0UL, 0xbe4f59a0UL, 0x00000000UL,
1026   0x3fcd2205UL, 0xe81ca888UL, 0x3e5402c3UL, 0x00000000UL, 0x3fccd747UL,
1027   0x3b4424b9UL, 0x3e5dfdc3UL, 0x80000000UL, 0x3fcc8ca7UL, 0xd305b56cUL,
1028   0x3e202da6UL, 0x00000000UL, 0x3fcc4226UL, 0x399a6910UL, 0xbe482a1cUL,
1029   0x80000000UL, 0x3fcbf7c2UL, 0x747f7938UL, 0xbe587372UL, 0x80000000UL,
1030   0x3fcbad7cUL, 0x6fc246a0UL, 0x3e50d83dUL, 0x00000000UL, 0x3fcb6355UL,
1031   0xee9e9be5UL, 0xbe5c35bdUL, 0x80000000UL, 0x3fcb194aUL, 0x8416c0bcUL,
1032   0x3e546d4fUL, 0x00000000UL, 0x3fcacf5eUL, 0x49f7f08fUL, 0x3e56da76UL,
1033   0x00000000UL, 0x3fca858fUL, 0x5dc30de2UL, 0x3e5f390cUL, 0x00000000UL,
1034   0x3fca3bdeUL, 0x950583b6UL, 0xbe5e4169UL, 0x80000000UL, 0x3fc9f249UL,
1035   0x33631553UL, 0x3e52aeb1UL, 0x00000000UL, 0x3fc9a8d3UL, 0xde8795a6UL,
1036   0xbe59a504UL, 0x00000000UL, 0x3fc95f79UL, 0x076bf41eUL, 0x3e5122feUL,
1037   0x80000000UL, 0x3fc9163cUL, 0x2914c8e7UL, 0x3e3dd064UL, 0x00000000UL,
1038   0x3fc8cd1dUL, 0x3a30eca3UL, 0xbe21b4aaUL, 0x80000000UL, 0x3fc8841aUL,
1039   0xb2a96650UL, 0xbe575444UL, 0x80000000UL, 0x3fc83b34UL, 0x2376c0cbUL,
1040   0xbe2a74c7UL, 0x80000000UL, 0x3fc7f26bUL, 0xd8a0b653UL, 0xbe5181b6UL,
1041   0x00000000UL, 0x3fc7a9bfUL, 0x32257882UL, 0xbe4a78b4UL, 0x00000000UL,
1042   0x3fc7612fUL, 0x1eee8bd9UL, 0xbe1bfe9dUL, 0x80000000UL, 0x3fc718bbUL,
1043   0x0c603cc4UL, 0x3e36fdc9UL, 0x80000000UL, 0x3fc6d064UL, 0x3728b8cfUL,
1044   0xbe1e542eUL, 0x80000000UL, 0x3fc68829UL, 0xc79a4067UL, 0x3e5c380fUL,
1045   0x00000000UL, 0x3fc6400bUL, 0xf69eac69UL, 0x3e550a84UL, 0x80000000UL,
1046   0x3fc5f808UL, 0xb7a780a4UL, 0x3e5d9224UL, 0x80000000UL, 0x3fc5b022UL,
1047   0xad9dfb1eUL, 0xbe55242fUL, 0x00000000UL, 0x3fc56858UL, 0x659b18beUL,
1048   0xbe4bfda3UL, 0x80000000UL, 0x3fc520a9UL, 0x66ee3631UL, 0xbe57d769UL,
1049   0x80000000UL, 0x3fc4d916UL, 0x1ec62819UL, 0x3e2427f7UL, 0x80000000UL,
1050   0x3fc4919fUL, 0xdec25369UL, 0xbe435431UL, 0x00000000UL, 0x3fc44a44UL,
1051   0xa8acfc4bUL, 0xbe3c62e8UL, 0x00000000UL, 0x3fc40304UL, 0xcf1d3eabUL,
1052   0xbdfba29fUL, 0x80000000UL, 0x3fc3bbdfUL, 0x79aba3eaUL, 0xbdf1b7c8UL,
1053   0x80000000UL, 0x3fc374d6UL, 0xb8d186daUL, 0xbe5130cfUL, 0x80000000UL,
1054   0x3fc32de8UL, 0x9d74f152UL, 0x3e2285b6UL, 0x00000000UL, 0x3fc2e716UL,
1055   0x50ae7ca9UL, 0xbe503920UL, 0x80000000UL, 0x3fc2a05eUL, 0x6caed92eUL,
1056   0xbe533924UL, 0x00000000UL, 0x3fc259c2UL, 0x9cb5034eUL, 0xbe510e31UL,
1057   0x80000000UL, 0x3fc21340UL, 0x12c4d378UL, 0xbe540b43UL, 0x80000000UL,
1058   0x3fc1ccd9UL, 0xcc418706UL, 0x3e59887aUL, 0x00000000UL, 0x3fc1868eUL,
1059   0x921f4106UL, 0xbe528e67UL, 0x80000000UL, 0x3fc1405cUL, 0x3969441eUL,
1060   0x3e5d8051UL, 0x00000000UL, 0x3fc0fa46UL, 0xd941ef5bUL, 0x3e5f9079UL,
1061   0x80000000UL, 0x3fc0b44aUL, 0x5a3e81b2UL, 0xbe567691UL, 0x00000000UL,
1062   0x3fc06e69UL, 0x9d66afe7UL, 0xbe4d43fbUL, 0x00000000UL, 0x3fc028a2UL,
1063   0x0a92a162UL, 0xbe52f394UL, 0x00000000UL, 0x3fbfc5eaUL, 0x209897e5UL,
1064   0x3e529e37UL, 0x00000000UL, 0x3fbf3ac5UL, 0x8458bd7bUL, 0x3e582831UL,
1065   0x00000000UL, 0x3fbeafd5UL, 0xb8d8b4b8UL, 0xbe486b4aUL, 0x00000000UL,
1066   0x3fbe2518UL, 0xe0a3b7b6UL, 0x3e5bafd2UL, 0x00000000UL, 0x3fbd9a90UL,
1067   0x2bf2710eUL, 0x3e383b2bUL, 0x00000000UL, 0x3fbd103cUL, 0x73eb6ab7UL,
1068   0xbe56d78dUL, 0x00000000UL, 0x3fbc861bUL, 0x32ceaff5UL, 0xbe32dc5aUL,
1069   0x00000000UL, 0x3fbbfc2eUL, 0xbee04cb7UL, 0xbe4a71a4UL, 0x00000000UL,
1070   0x3fbb7274UL, 0x35ae9577UL, 0x3e38142fUL, 0x00000000UL, 0x3fbae8eeUL,
1071   0xcbaddab4UL, 0xbe5490f0UL, 0x00000000UL, 0x3fba5f9aUL, 0x95ce1114UL,
1072   0x3e597c71UL, 0x00000000UL, 0x3fb9d67aUL, 0x6d7c0f78UL, 0x3e3abc2dUL,
1073   0x00000000UL, 0x3fb94d8dUL, 0x2841a782UL, 0xbe566cbcUL, 0x00000000UL,
1074   0x3fb8c4d2UL, 0x6ed429c6UL, 0xbe3cfff9UL, 0x00000000UL, 0x3fb83c4aUL,
1075   0xe4a49fbbUL, 0xbe552964UL, 0x00000000UL, 0x3fb7b3f4UL, 0x2193d81eUL,
1076   0xbe42fa72UL, 0x00000000UL, 0x3fb72bd0UL, 0xdd70c122UL, 0x3e527a8cUL,
1077   0x00000000UL, 0x3fb6a3dfUL, 0x03108a54UL, 0xbe450393UL, 0x00000000UL,
1078   0x3fb61c1fUL, 0x30ff7954UL, 0x3e565840UL, 0x00000000UL, 0x3fb59492UL,
1079   0xdedd460cUL, 0xbe5422b5UL, 0x00000000UL, 0x3fb50d36UL, 0x950f9f45UL,
1080   0xbe5313f6UL, 0x00000000UL, 0x3fb4860bUL, 0x582cdcb1UL, 0x3e506d39UL,
1081   0x00000000UL, 0x3fb3ff12UL, 0x7216d3a6UL, 0x3e4aa719UL, 0x00000000UL,
1082   0x3fb3784aUL, 0x57a423fdUL, 0x3e5a9b9fUL, 0x00000000UL, 0x3fb2f1b4UL,
1083   0x7a138b41UL, 0xbe50b418UL, 0x00000000UL, 0x3fb26b4eUL, 0x2fbfd7eaUL,
1084   0x3e23a53eUL, 0x00000000UL, 0x3fb1e519UL, 0x18913ccbUL, 0x3e465fc1UL,
1085   0x00000000UL, 0x3fb15f15UL, 0x7ea24e21UL, 0x3e042843UL, 0x00000000UL,
1086   0x3fb0d941UL, 0x7c6d9c77UL, 0x3e59f61eUL, 0x00000000UL, 0x3fb0539eUL,
1087   0x114efd44UL, 0x3e4ccab7UL, 0x00000000UL, 0x3faf9c56UL, 0x1777f657UL,
1088   0x3e552f65UL, 0x00000000UL, 0x3fae91d2UL, 0xc317b86aUL, 0xbe5a61e0UL,
1089   0x00000000UL, 0x3fad87acUL, 0xb7664efbUL, 0xbe41f64eUL, 0x00000000UL,
1090   0x3fac7de6UL, 0x5d3d03a9UL, 0x3e0807a0UL, 0x00000000UL, 0x3fab7480UL,
1091   0x743c38ebUL, 0xbe3726e1UL, 0x00000000UL, 0x3faa6b78UL, 0x06a253f1UL,
1092   0x3e5ad636UL, 0x00000000UL, 0x3fa962d0UL, 0xa35f541bUL, 0x3e5a187aUL,
1093   0x00000000UL, 0x3fa85a88UL, 0x4b86e446UL, 0xbe508150UL, 0x00000000UL,
1094   0x3fa7529cUL, 0x2589cacfUL, 0x3e52938aUL, 0x00000000UL, 0x3fa64b10UL,
1095   0xaf6b11f2UL, 0xbe3454cdUL, 0x00000000UL, 0x3fa543e2UL, 0x97506fefUL,
1096   0xbe5fdec5UL, 0x00000000UL, 0x3fa43d10UL, 0xe75f7dd9UL, 0xbe388dd3UL,
1097   0x00000000UL, 0x3fa3369cUL, 0xa4139632UL, 0xbdea5177UL, 0x00000000UL,
1098   0x3fa23086UL, 0x352d6f1eUL, 0xbe565ad6UL, 0x00000000UL, 0x3fa12accUL,
1099   0x77449eb7UL, 0xbe50d5c7UL, 0x00000000UL, 0x3fa0256eUL, 0x7478da78UL,
1100   0x3e404724UL, 0x00000000UL, 0x3f9e40dcUL, 0xf59cef7fUL, 0xbe539d0aUL,
1101   0x00000000UL, 0x3f9c3790UL, 0x1511d43cUL, 0x3e53c2c8UL, 0x00000000UL,
1102   0x3f9a2f00UL, 0x9b8bff3cUL, 0xbe43b3e1UL, 0x00000000UL, 0x3f982724UL,
1103   0xad1e22a5UL, 0x3e46f0bdUL, 0x00000000UL, 0x3f962000UL, 0x130d9356UL,
1104   0x3e475ba0UL, 0x00000000UL, 0x3f941994UL, 0x8f86f883UL, 0xbe513d0bUL,
1105   0x00000000UL, 0x3f9213dcUL, 0x914d0dc8UL, 0xbe534335UL, 0x00000000UL,
1106   0x3f900ed8UL, 0x2d73e5e7UL, 0xbe22ba75UL, 0x00000000UL, 0x3f8c1510UL,
1107   0xc5b7d70eUL, 0x3e599c5dUL, 0x00000000UL, 0x3f880de0UL, 0x8a27857eUL,
1108   0xbe3d28c8UL, 0x00000000UL, 0x3f840810UL, 0xda767328UL, 0x3e531b3dUL,
1109   0x00000000UL, 0x3f8003b0UL, 0x77bacaf3UL, 0xbe5f04e3UL, 0x00000000UL,
1110   0x3f780150UL, 0xdf4b0720UL, 0x3e5a8bffUL, 0x00000000UL, 0x3f6ffc40UL,
1111   0x34c48e71UL, 0xbe3fcd99UL, 0x00000000UL, 0x3f5ff6c0UL, 0x1ad218afUL,
1112   0xbe4c78a7UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL,
1113   0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL, 0x00000000UL,
1114   0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL, 0x6dc96112UL, 0xbf836578UL,
1115   0xee241472UL, 0xbf9b0301UL, 0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL,
1116   0xbfd619b6UL, 0x518775e3UL, 0x3f9004f2UL, 0xac8349bbUL, 0x3fa76c9bUL,
1117   0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL, 0x9f95985aUL,
1118   0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL, 0x486ececbUL, 0x3fc4635eUL,
1119   0x412055ccUL, 0xbdd61bb2UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL,
1120   0xffffffffUL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3b700000UL,
1121   0xfa5abcbfUL, 0x3ff00b1aUL, 0xa7609f71UL, 0xbc84f6b2UL, 0xa9fb3335UL,
1122   0x3ff0163dUL, 0x9ab8cdb7UL, 0x3c9b6129UL, 0x143b0281UL, 0x3ff02168UL,
1123   0x0fc54eb6UL, 0xbc82bf31UL, 0x3e778061UL, 0x3ff02c9aUL, 0x535b085dUL,
1124   0xbc719083UL, 0x2e11bbccUL, 0x3ff037d4UL, 0xeeade11aUL, 0x3c656811UL,
1125   0xe86e7f85UL, 0x3ff04315UL, 0x1977c96eUL, 0xbc90a31cUL, 0x72f654b1UL,
1126   0x3ff04e5fUL, 0x3aa0d08cUL, 0x3c84c379UL, 0xd3158574UL, 0x3ff059b0UL,
1127   0xa475b465UL, 0x3c8d73e2UL, 0x0e3c1f89UL, 0x3ff0650aUL, 0x5799c397UL,
1128   0xbc95cb7bUL, 0x29ddf6deUL, 0x3ff0706bUL, 0xe2b13c27UL, 0xbc8c91dfUL,
1129   0x2b72a836UL, 0x3ff07bd4UL, 0x54458700UL, 0x3c832334UL, 0x18759bc8UL,
1130   0x3ff08745UL, 0x4bb284ffUL, 0x3c6186beUL, 0xf66607e0UL, 0x3ff092bdUL,
1131   0x800a3fd1UL, 0xbc968063UL, 0xcac6f383UL, 0x3ff09e3eUL, 0x18316136UL,
1132   0x3c914878UL, 0x9b1f3919UL, 0x3ff0a9c7UL, 0x873d1d38UL, 0x3c85d16cUL,
1133   0x6cf9890fUL, 0x3ff0b558UL, 0x4adc610bUL, 0x3c98a62eUL, 0x45e46c85UL,
1134   0x3ff0c0f1UL, 0x06d21cefUL, 0x3c94f989UL, 0x2b7247f7UL, 0x3ff0cc92UL,
1135   0x16e24f71UL, 0x3c901edcUL, 0x23395decUL, 0x3ff0d83bUL, 0xe43f316aUL,
1136   0xbc9bc14dUL, 0x32d3d1a2UL, 0x3ff0e3ecUL, 0x27c57b52UL, 0x3c403a17UL,
1137   0x5fdfa9c5UL, 0x3ff0efa5UL, 0xbc54021bUL, 0xbc949db9UL, 0xaffed31bUL,
1138   0x3ff0fb66UL, 0xc44ebd7bUL, 0xbc6b9bedUL, 0x28d7233eUL, 0x3ff10730UL,
1139   0x1692fdd5UL, 0x3c8d46ebUL, 0xd0125b51UL, 0x3ff11301UL, 0x39449b3aUL,
1140   0xbc96c510UL, 0xab5e2ab6UL, 0x3ff11edbUL, 0xf703fb72UL, 0xbc9ca454UL,
1141   0xc06c31ccUL, 0x3ff12abdUL, 0xb36ca5c7UL, 0xbc51b514UL, 0x14f204abUL,
1142   0x3ff136a8UL, 0xba48dcf0UL, 0xbc67108fUL, 0xaea92de0UL, 0x3ff1429aUL,
1143   0x9af1369eUL, 0xbc932fbfUL, 0x934f312eUL, 0x3ff14e95UL, 0x39bf44abUL,
1144   0xbc8b91e8UL, 0xc8a58e51UL, 0x3ff15a98UL, 0xb9eeab0aUL, 0x3c82406aUL,
1145   0x5471c3c2UL, 0x3ff166a4UL, 0x82ea1a32UL, 0x3c58f23bUL, 0x3c7d517bUL,
1146   0x3ff172b8UL, 0xb9d78a76UL, 0xbc819041UL, 0x8695bbc0UL, 0x3ff17ed4UL,
1147   0xe2ac5a64UL, 0x3c709e3fUL, 0x388c8deaUL, 0x3ff18af9UL, 0xd1970f6cUL,
1148   0xbc911023UL, 0x58375d2fUL, 0x3ff19726UL, 0x85f17e08UL, 0x3c94aaddUL,
1149   0xeb6fcb75UL, 0x3ff1a35bUL, 0x7b4968e4UL, 0x3c8e5b4cUL, 0xf8138a1cUL,
1150   0x3ff1af99UL, 0xa4b69280UL, 0x3c97bf85UL, 0x84045cd4UL, 0x3ff1bbe0UL,
1151   0x352ef607UL, 0xbc995386UL, 0x95281c6bUL, 0x3ff1c82fUL, 0x8010f8c9UL,
1152   0x3c900977UL, 0x3168b9aaUL, 0x3ff1d487UL, 0x00a2643cUL, 0x3c9e016eUL,
1153   0x5eb44027UL, 0x3ff1e0e7UL, 0x088cb6deUL, 0xbc96fdd8UL, 0x22fcd91dUL,
1154   0x3ff1ed50UL, 0x027bb78cUL, 0xbc91df98UL, 0x8438ce4dUL, 0x3ff1f9c1UL,
1155   0xa097af5cUL, 0xbc9bf524UL, 0x88628cd6UL, 0x3ff2063bUL, 0x814a8495UL,
1156   0x3c8dc775UL, 0x3578a819UL, 0x3ff212beUL, 0x2cfcaac9UL, 0x3c93592dUL,
1157   0x917ddc96UL, 0x3ff21f49UL, 0x9494a5eeUL, 0x3c82a97eUL, 0xa27912d1UL,
1158   0x3ff22bddUL, 0x5577d69fUL, 0x3c8d34fbUL, 0x6e756238UL, 0x3ff2387aUL,
1159   0xb6c70573UL, 0x3c99b07eUL, 0xfb82140aUL, 0x3ff2451fUL, 0x911ca996UL,
1160   0x3c8acfccUL, 0x4fb2a63fUL, 0x3ff251ceUL, 0xbef4f4a4UL, 0x3c8ac155UL,
1161   0x711ece75UL, 0x3ff25e85UL, 0x4ac31b2cUL, 0x3c93e1a2UL, 0x65e27cddUL,
1162   0x3ff26b45UL, 0x9940e9d9UL, 0x3c82bd33UL, 0x341ddf29UL, 0x3ff2780eUL,
1163   0x05f9e76cUL, 0x3c9e067cUL, 0xe1f56381UL, 0x3ff284dfUL, 0x8c3f0d7eUL,
1164   0xbc9a4c3aUL, 0x7591bb70UL, 0x3ff291baUL, 0x28401cbdUL, 0xbc82cc72UL,
1165   0xf51fdee1UL, 0x3ff29e9dUL, 0xafad1255UL, 0x3c8612e8UL, 0x66d10f13UL,
1166   0x3ff2ab8aUL, 0x191690a7UL, 0xbc995743UL, 0xd0dad990UL, 0x3ff2b87fUL,
1167   0xd6381aa4UL, 0xbc410adcUL, 0x39771b2fUL, 0x3ff2c57eUL, 0xa6eb5124UL,
1168   0xbc950145UL, 0xa6e4030bUL, 0x3ff2d285UL, 0x54db41d5UL, 0x3c900247UL,
1169   0x1f641589UL, 0x3ff2df96UL, 0xfbbce198UL, 0x3c9d16cfUL, 0xa93e2f56UL,
1170   0x3ff2ecafUL, 0x45d52383UL, 0x3c71ca0fUL, 0x4abd886bUL, 0x3ff2f9d2UL,
1171   0x532bda93UL, 0xbc653c55UL, 0x0a31b715UL, 0x3ff306feUL, 0xd23182e4UL,
1172   0x3c86f46aUL, 0xedeeb2fdUL, 0x3ff31432UL, 0xf3f3fcd1UL, 0x3c8959a3UL,
1173   0xfc4cd831UL, 0x3ff32170UL, 0x8e18047cUL, 0x3c8a9ce7UL, 0x3ba8ea32UL,
1174   0x3ff32eb8UL, 0x3cb4f318UL, 0xbc9c45e8UL, 0xb26416ffUL, 0x3ff33c08UL,
1175   0x843659a6UL, 0x3c932721UL, 0x66e3fa2dUL, 0x3ff34962UL, 0x930881a4UL,
1176   0xbc835a75UL, 0x5f929ff1UL, 0x3ff356c5UL, 0x5c4e4628UL, 0xbc8b5ceeUL,
1177   0xa2de883bUL, 0x3ff36431UL, 0xa06cb85eUL, 0xbc8c3144UL, 0x373aa9cbUL,
1178   0x3ff371a7UL, 0xbf42eae2UL, 0xbc963aeaUL, 0x231e754aUL, 0x3ff37f26UL,
1179   0x9eceb23cUL, 0xbc99f5caUL, 0x6d05d866UL, 0x3ff38caeUL, 0x3c9904bdUL,
1180   0xbc9e958dUL, 0x1b7140efUL, 0x3ff39a40UL, 0xfc8e2934UL, 0xbc99a9a5UL,
1181   0x34e59ff7UL, 0x3ff3a7dbUL, 0xd661f5e3UL, 0xbc75e436UL, 0xbfec6cf4UL,
1182   0x3ff3b57fUL, 0xe26fff18UL, 0x3c954c66UL, 0xc313a8e5UL, 0x3ff3c32dUL,
1183   0x375d29c3UL, 0xbc9efff8UL, 0x44ede173UL, 0x3ff3d0e5UL, 0x8c284c71UL,
1184   0x3c7fe8d0UL, 0x4c123422UL, 0x3ff3dea6UL, 0x11f09ebcUL, 0x3c8ada09UL,
1185   0xdf1c5175UL, 0x3ff3ec70UL, 0x7b8c9bcaUL, 0xbc8af663UL, 0x04ac801cUL,
1186   0x3ff3fa45UL, 0xf956f9f3UL, 0xbc97d023UL, 0xc367a024UL, 0x3ff40822UL,
1187   0xb6f4d048UL, 0x3c8bddf8UL, 0x21f72e2aUL, 0x3ff4160aUL, 0x1c309278UL,
1188   0xbc5ef369UL, 0x2709468aUL, 0x3ff423fbUL, 0xc0b314ddUL, 0xbc98462dUL,
1189   0xd950a897UL, 0x3ff431f5UL, 0xe35f7999UL, 0xbc81c7ddUL, 0x3f84b9d4UL,
1190   0x3ff43ffaUL, 0x9704c003UL, 0x3c8880beUL, 0x6061892dUL, 0x3ff44e08UL,
1191   0x04ef80d0UL, 0x3c489b7aUL, 0x42a7d232UL, 0x3ff45c20UL, 0x82fb1f8eUL,
1192   0xbc686419UL, 0xed1d0057UL, 0x3ff46a41UL, 0xd1648a76UL, 0x3c9c944bUL,
1193   0x668b3237UL, 0x3ff4786dUL, 0xed445733UL, 0xbc9c20f0UL, 0xb5c13cd0UL,
1194   0x3ff486a2UL, 0xb69062f0UL, 0x3c73c1a3UL, 0xe192aed2UL, 0x3ff494e1UL,
1195   0x5e499ea0UL, 0xbc83b289UL, 0xf0d7d3deUL, 0x3ff4a32aUL, 0xf3d1be56UL,
1196   0x3c99cb62UL, 0xea6db7d7UL, 0x3ff4b17dUL, 0x7f2897f0UL, 0xbc8125b8UL,
1197   0xd5362a27UL, 0x3ff4bfdaUL, 0xafec42e2UL, 0x3c7d4397UL, 0xb817c114UL,
1198   0x3ff4ce41UL, 0x690abd5dUL, 0x3c905e29UL, 0x99fddd0dUL, 0x3ff4dcb2UL,
1199   0xbc6a7833UL, 0x3c98ecdbUL, 0x81d8abffUL, 0x3ff4eb2dUL, 0x2e5d7a52UL,
1200   0xbc95257dUL, 0x769d2ca7UL, 0x3ff4f9b2UL, 0xd25957e3UL, 0xbc94b309UL,
1201   0x7f4531eeUL, 0x3ff50841UL, 0x49b7465fUL, 0x3c7a249bUL, 0xa2cf6642UL,
1202   0x3ff516daUL, 0x69bd93efUL, 0xbc8f7685UL, 0xe83f4eefUL, 0x3ff5257dUL,
1203   0x43efef71UL, 0xbc7c998dUL, 0x569d4f82UL, 0x3ff5342bUL, 0x1db13cadUL,
1204   0xbc807abeUL, 0xf4f6ad27UL, 0x3ff542e2UL, 0x192d5f7eUL, 0x3c87926dUL,
1205   0xca5d920fUL, 0x3ff551a4UL, 0xefede59bUL, 0xbc8d689cUL, 0xdde910d2UL,
1206   0x3ff56070UL, 0x168eebf0UL, 0xbc90fb6eUL, 0x36b527daUL, 0x3ff56f47UL,
1207   0x011d93adUL, 0x3c99bb2cUL, 0xdbe2c4cfUL, 0x3ff57e27UL, 0x8a57b9c4UL,
1208   0xbc90b98cUL, 0xd497c7fdUL, 0x3ff58d12UL, 0x5b9a1de8UL, 0x3c8295e1UL,
1209   0x27ff07ccUL, 0x3ff59c08UL, 0xe467e60fUL, 0xbc97e2ceUL, 0xdd485429UL,
1210   0x3ff5ab07UL, 0x054647adUL, 0x3c96324cUL, 0xfba87a03UL, 0x3ff5ba11UL,
1211   0x4c233e1aUL, 0xbc9b77a1UL, 0x8a5946b7UL, 0x3ff5c926UL, 0x816986a2UL,
1212   0x3c3c4b1bUL, 0x90998b93UL, 0x3ff5d845UL, 0xa8b45643UL, 0xbc9cd6a7UL,
1213   0x15ad2148UL, 0x3ff5e76fUL, 0x3080e65eUL, 0x3c9ba6f9UL, 0x20dceb71UL,
1214   0x3ff5f6a3UL, 0xe3cdcf92UL, 0xbc89eaddUL, 0xb976dc09UL, 0x3ff605e1UL,
1215   0x9b56de47UL, 0xbc93e242UL, 0xe6cdf6f4UL, 0x3ff6152aUL, 0x4ab84c27UL,
1216   0x3c9e4b3eUL, 0xb03a5585UL, 0x3ff6247eUL, 0x7e40b497UL, 0xbc9383c1UL,
1217   0x1d1929fdUL, 0x3ff633ddUL, 0xbeb964e5UL, 0x3c984710UL, 0x34ccc320UL,
1218   0x3ff64346UL, 0x759d8933UL, 0xbc8c483cUL, 0xfebc8fb7UL, 0x3ff652b9UL,
1219   0xc9a73e09UL, 0xbc9ae3d5UL, 0x82552225UL, 0x3ff66238UL, 0x87591c34UL,
1220   0xbc9bb609UL, 0xc70833f6UL, 0x3ff671c1UL, 0x586c6134UL, 0xbc8e8732UL,
1221   0xd44ca973UL, 0x3ff68155UL, 0x44f73e65UL, 0x3c6038aeUL, 0xb19e9538UL,
1222   0x3ff690f4UL, 0x9aeb445dUL, 0x3c8804bdUL, 0x667f3bcdUL, 0x3ff6a09eUL,
1223   0x13b26456UL, 0xbc9bdd34UL, 0xfa75173eUL, 0x3ff6b052UL, 0x2c9a9d0eUL,
1224   0x3c7a38f5UL, 0x750bdabfUL, 0x3ff6c012UL, 0x67ff0b0dUL, 0xbc728956UL,
1225   0xddd47645UL, 0x3ff6cfdcUL, 0xb6f17309UL, 0x3c9c7aa9UL, 0x3c651a2fUL,
1226   0x3ff6dfb2UL, 0x683c88abUL, 0xbc6bbe3aUL, 0x98593ae5UL, 0x3ff6ef92UL,
1227   0x9e1ac8b2UL, 0xbc90b974UL, 0xf9519484UL, 0x3ff6ff7dUL, 0x25860ef6UL,
1228   0xbc883c0fUL, 0x66f42e87UL, 0x3ff70f74UL, 0xd45aa65fUL, 0x3c59d644UL,
1229   0xe8ec5f74UL, 0x3ff71f75UL, 0x86887a99UL, 0xbc816e47UL, 0x86ead08aUL,
1230   0x3ff72f82UL, 0x2cd62c72UL, 0xbc920aa0UL, 0x48a58174UL, 0x3ff73f9aUL,
1231   0x6c65d53cUL, 0xbc90a8d9UL, 0x35d7cbfdUL, 0x3ff74fbdUL, 0x618a6e1cUL,
1232   0x3c9047fdUL, 0x564267c9UL, 0x3ff75febUL, 0x57316dd3UL, 0xbc902459UL,
1233   0xb1ab6e09UL, 0x3ff77024UL, 0x169147f8UL, 0x3c9b7877UL, 0x4fde5d3fUL,
1234   0x3ff78069UL, 0x0a02162dUL, 0x3c9866b8UL, 0x38ac1cf6UL, 0x3ff790b9UL,
1235   0x62aadd3eUL, 0x3c9349a8UL, 0x73eb0187UL, 0x3ff7a114UL, 0xee04992fUL,
1236   0xbc841577UL, 0x0976cfdbUL, 0x3ff7b17bUL, 0x8468dc88UL, 0xbc9bebb5UL,
1237   0x0130c132UL, 0x3ff7c1edUL, 0xd1164dd6UL, 0x3c9f124cUL, 0x62ff86f0UL,
1238   0x3ff7d26aUL, 0xfb72b8b4UL, 0x3c91bddbUL, 0x36cf4e62UL, 0x3ff7e2f3UL,
1239   0xba15797eUL, 0x3c705d02UL, 0x8491c491UL, 0x3ff7f387UL, 0xcf9311aeUL,
1240   0xbc807f11UL, 0x543e1a12UL, 0x3ff80427UL, 0x626d972bUL, 0xbc927c86UL,
1241   0xadd106d9UL, 0x3ff814d2UL, 0x0d151d4dUL, 0x3c946437UL, 0x994cce13UL,
1242   0x3ff82589UL, 0xd41532d8UL, 0xbc9d4c1dUL, 0x1eb941f7UL, 0x3ff8364cUL,
1243   0x31df2bd5UL, 0x3c999b9aUL, 0x4623c7adUL, 0x3ff8471aUL, 0xa341cdfbUL,
1244   0xbc88d684UL, 0x179f5b21UL, 0x3ff857f4UL, 0xf8b216d0UL, 0xbc5ba748UL,
1245   0x9b4492edUL, 0x3ff868d9UL, 0x9bd4f6baUL, 0xbc9fc6f8UL, 0xd931a436UL,
1246   0x3ff879caUL, 0xd2db47bdUL, 0x3c85d2d7UL, 0xd98a6699UL, 0x3ff88ac7UL,
1247   0xf37cb53aUL, 0x3c9994c2UL, 0xa478580fUL, 0x3ff89bd0UL, 0x4475202aUL,
1248   0x3c9d5395UL, 0x422aa0dbUL, 0x3ff8ace5UL, 0x56864b27UL, 0x3c96e9f1UL,
1249   0xbad61778UL, 0x3ff8be05UL, 0xfc43446eUL, 0x3c9ecb5eUL, 0x16b5448cUL,
1250   0x3ff8cf32UL, 0x32e9e3aaUL, 0xbc70d55eUL, 0x5e0866d9UL, 0x3ff8e06aUL,
1251   0x6fc9b2e6UL, 0xbc97114aUL, 0x99157736UL, 0x3ff8f1aeUL, 0xa2e3976cUL,
1252   0x3c85cc13UL, 0xd0282c8aUL, 0x3ff902feUL, 0x85fe3fd2UL, 0x3c9592caUL,
1253   0x0b91ffc6UL, 0x3ff9145bUL, 0x2e582524UL, 0xbc9dd679UL, 0x53aa2fe2UL,
1254   0x3ff925c3UL, 0xa639db7fUL, 0xbc83455fUL, 0xb0cdc5e5UL, 0x3ff93737UL,
1255   0x81b57ebcUL, 0xbc675fc7UL, 0x2b5f98e5UL, 0x3ff948b8UL, 0x797d2d99UL,
1256   0xbc8dc3d6UL, 0xcbc8520fUL, 0x3ff95a44UL, 0x96a5f039UL, 0xbc764b7cUL,
1257   0x9a7670b3UL, 0x3ff96bddUL, 0x7f19c896UL, 0xbc5ba596UL, 0x9fde4e50UL,
1258   0x3ff97d82UL, 0x7c1b85d1UL, 0xbc9d185bUL, 0xe47a22a2UL, 0x3ff98f33UL,
1259   0xa24c78ecUL, 0x3c7cabdaUL, 0x70ca07baUL, 0x3ff9a0f1UL, 0x91cee632UL,
1260   0xbc9173bdUL, 0x4d53fe0dUL, 0x3ff9b2bbUL, 0x4df6d518UL, 0xbc9dd84eUL,
1261   0x82a3f090UL, 0x3ff9c491UL, 0xb071f2beUL, 0x3c7c7c46UL, 0x194bb8d5UL,
1262   0x3ff9d674UL, 0xa3dd8233UL, 0xbc9516beUL, 0x19e32323UL, 0x3ff9e863UL,
1263   0x78e64c6eUL, 0x3c7824caUL, 0x8d07f29eUL, 0x3ff9fa5eUL, 0xaaf1faceUL,
1264   0xbc84a9ceUL, 0x7b5de565UL, 0x3ffa0c66UL, 0x5d1cd533UL, 0xbc935949UL,
1265   0xed8eb8bbUL, 0x3ffa1e7aUL, 0xee8be70eUL, 0x3c9c6618UL, 0xec4a2d33UL,
1266   0x3ffa309bUL, 0x7ddc36abUL, 0x3c96305cUL, 0x80460ad8UL, 0x3ffa42c9UL,
1267   0x589fb120UL, 0xbc9aa780UL, 0xb23e255dUL, 0x3ffa5503UL, 0xdb8d41e1UL,
1268   0xbc9d2f6eUL, 0x8af46052UL, 0x3ffa674aUL, 0x30670366UL, 0x3c650f56UL,
1269   0x1330b358UL, 0x3ffa799eUL, 0xcac563c7UL, 0x3c9bcb7eUL, 0x53c12e59UL,
1270   0x3ffa8bfeUL, 0xb2ba15a9UL, 0xbc94f867UL, 0x5579fdbfUL, 0x3ffa9e6bUL,
1271   0x0ef7fd31UL, 0x3c90fac9UL, 0x21356ebaUL, 0x3ffab0e5UL, 0xdae94545UL,
1272   0x3c889c31UL, 0xbfd3f37aUL, 0x3ffac36bUL, 0xcae76cd0UL, 0xbc8f9234UL,
1273   0x3a3c2774UL, 0x3ffad5ffUL, 0xb6b1b8e5UL, 0x3c97ef3bUL, 0x995ad3adUL,
1274   0x3ffae89fUL, 0x345dcc81UL, 0x3c97a1cdUL, 0xe622f2ffUL, 0x3ffafb4cUL,
1275   0x0f315ecdUL, 0xbc94b2fcUL, 0x298db666UL, 0x3ffb0e07UL, 0x4c80e425UL,
1276   0xbc9bdef5UL, 0x6c9a8952UL, 0x3ffb20ceUL, 0x4a0756ccUL, 0x3c94dd02UL,
1277   0xb84f15fbUL, 0x3ffb33a2UL, 0x3084d708UL, 0xbc62805eUL, 0x15b749b1UL,
1278   0x3ffb4684UL, 0xe9df7c90UL, 0xbc7f763dUL, 0x8de5593aUL, 0x3ffb5972UL,
1279   0xbbba6de3UL, 0xbc9c71dfUL, 0x29f1c52aUL, 0x3ffb6c6eUL, 0x52883f6eUL,
1280   0x3c92a8f3UL, 0xf2fb5e47UL, 0x3ffb7f76UL, 0x7e54ac3bUL, 0xbc75584fUL,
1281   0xf22749e4UL, 0x3ffb928cUL, 0x54cb65c6UL, 0xbc9b7216UL, 0x30a1064aUL,
1282   0x3ffba5b0UL, 0x0e54292eUL, 0xbc9efcd3UL, 0xb79a6f1fUL, 0x3ffbb8e0UL,
1283   0xc9696205UL, 0xbc3f52d1UL, 0x904bc1d2UL, 0x3ffbcc1eUL, 0x7a2d9e84UL,
1284   0x3c823dd0UL, 0xc3f3a207UL, 0x3ffbdf69UL, 0x60ea5b53UL, 0xbc3c2623UL,
1285   0x5bd71e09UL, 0x3ffbf2c2UL, 0x3f6b9c73UL, 0xbc9efdcaUL, 0x6141b33dUL,
1286   0x3ffc0628UL, 0xa1fbca34UL, 0xbc8d8a5aUL, 0xdd85529cUL, 0x3ffc199bUL,
1287   0x895048ddUL, 0x3c811065UL, 0xd9fa652cUL, 0x3ffc2d1cUL, 0x17c8a5d7UL,
1288   0xbc96e516UL, 0x5fffd07aUL, 0x3ffc40abUL, 0xe083c60aUL, 0x3c9b4537UL,
1289   0x78fafb22UL, 0x3ffc5447UL, 0x2493b5afUL, 0x3c912f07UL, 0x2e57d14bUL,
1290   0x3ffc67f1UL, 0xff483cadUL, 0x3c92884dUL, 0x8988c933UL, 0x3ffc7ba8UL,
1291   0xbe255559UL, 0xbc8e76bbUL, 0x9406e7b5UL, 0x3ffc8f6dUL, 0x48805c44UL,
1292   0x3c71acbcUL, 0x5751c4dbUL, 0x3ffca340UL, 0xd10d08f5UL, 0xbc87f2beUL,
1293   0xdcef9069UL, 0x3ffcb720UL, 0xd1e949dbUL, 0x3c7503cbUL, 0x2e6d1675UL,
1294   0x3ffccb0fUL, 0x86009092UL, 0xbc7d220fUL, 0x555dc3faUL, 0x3ffcdf0bUL,
1295   0x53829d72UL, 0xbc8dd83bUL, 0x5b5bab74UL, 0x3ffcf315UL, 0xb86dff57UL,
1296   0xbc9a08e9UL, 0x4a07897cUL, 0x3ffd072dUL, 0x43797a9cUL, 0xbc9cbc37UL,
1297   0x2b08c968UL, 0x3ffd1b53UL, 0x219a36eeUL, 0x3c955636UL, 0x080d89f2UL,
1298   0x3ffd2f87UL, 0x719d8578UL, 0xbc9d487bUL, 0xeacaa1d6UL, 0x3ffd43c8UL,
1299   0xbf5a1614UL, 0x3c93db53UL, 0xdcfba487UL, 0x3ffd5818UL, 0xd75b3707UL,
1300   0x3c82ed02UL, 0xe862e6d3UL, 0x3ffd6c76UL, 0x4a8165a0UL, 0x3c5fe87aUL,
1301   0x16c98398UL, 0x3ffd80e3UL, 0x8beddfe8UL, 0xbc911ec1UL, 0x71ff6075UL,
1302   0x3ffd955dUL, 0xbb9af6beUL, 0x3c9a052dUL, 0x03db3285UL, 0x3ffda9e6UL,
1303   0x696db532UL, 0x3c9c2300UL, 0xd63a8315UL, 0x3ffdbe7cUL, 0x926b8be4UL,
1304   0xbc9b76f1UL, 0xf301b460UL, 0x3ffdd321UL, 0x78f018c3UL, 0x3c92da57UL,
1305   0x641c0658UL, 0x3ffde7d5UL, 0x8e79ba8fUL, 0xbc9ca552UL, 0x337b9b5fUL,
1306   0x3ffdfc97UL, 0x4f184b5cUL, 0xbc91a5cdUL, 0x6b197d17UL, 0x3ffe1167UL,
1307   0xbd5c7f44UL, 0xbc72b529UL, 0x14f5a129UL, 0x3ffe2646UL, 0x817a1496UL,
1308   0xbc97b627UL, 0x3b16ee12UL, 0x3ffe3b33UL, 0x31fdc68bUL, 0xbc99f4a4UL,
1309   0xe78b3ff6UL, 0x3ffe502eUL, 0x80a9cc8fUL, 0x3c839e89UL, 0x24676d76UL,
1310   0x3ffe6539UL, 0x7522b735UL, 0xbc863ff8UL, 0xfbc74c83UL, 0x3ffe7a51UL,
1311   0xca0c8de2UL, 0x3c92d522UL, 0x77cdb740UL, 0x3ffe8f79UL, 0x80b054b1UL,
1312   0xbc910894UL, 0xa2a490daUL, 0x3ffea4afUL, 0x179c2893UL, 0xbc9e9c23UL,
1313   0x867cca6eUL, 0x3ffeb9f4UL, 0x2293e4f2UL, 0x3c94832fUL, 0x2d8e67f1UL,
1314   0x3ffecf48UL, 0xb411ad8cUL, 0xbc9c93f3UL, 0xa2188510UL, 0x3ffee4aaUL,
1315   0xa487568dUL, 0x3c91c68dUL, 0xee615a27UL, 0x3ffefa1bUL, 0x86a4b6b0UL,
1316   0x3c9dc7f4UL, 0x1cb6412aUL, 0x3fff0f9cUL, 0x65181d45UL, 0xbc932200UL,
1317   0x376bba97UL, 0x3fff252bUL, 0xbf0d8e43UL, 0x3c93a1a5UL, 0x48dd7274UL,
1318   0x3fff3ac9UL, 0x3ed837deUL, 0xbc795a5aUL, 0x5b6e4540UL, 0x3fff5076UL,
1319   0x2dd8a18bUL, 0x3c99d3e1UL, 0x798844f8UL, 0x3fff6632UL, 0x3539343eUL,
1320   0x3c9fa37bUL, 0xad9cbe14UL, 0x3fff7bfdUL, 0xd006350aUL, 0xbc9dbb12UL,
1321   0x02243c89UL, 0x3fff91d8UL, 0xa779f689UL, 0xbc612ea8UL, 0x819e90d8UL,
1322   0x3fffa7c1UL, 0xf3a5931eUL, 0x3c874853UL, 0x3692d514UL, 0x3fffbdbaUL,
1323   0x15098eb6UL, 0xbc796773UL, 0x2b8f71f1UL, 0x3fffd3c2UL, 0x966579e7UL,
1324   0x3c62eb74UL, 0x6b2a23d9UL, 0x3fffe9d9UL, 0x7442fde3UL, 0x3c74a603UL,
1325   0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL, 0x6fba4e77UL,
1326   0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL, 0xfefa39efUL, 0x3fe62e42UL,
1327   0x00000000UL, 0x00000000UL, 0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL,
1328   0xbfe62e42UL, 0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL,
1329   0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL
1330 
1331 };
1332 
1333 //registers,
1334 // input: xmm0, xmm1
1335 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
1336 //          eax, edx, ecx, ebx
1337 
1338 // Code generated by Intel C compiler for LIBM library
1339 
1340 void MacroAssembler::fast_pow(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
1341   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
1342   Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
1343   Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
1344   Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, L_2TAG_PACKET_14_0_2, L_2TAG_PACKET_15_0_2;
1345   Label L_2TAG_PACKET_16_0_2, L_2TAG_PACKET_17_0_2, L_2TAG_PACKET_18_0_2, L_2TAG_PACKET_19_0_2;
1346   Label L_2TAG_PACKET_20_0_2, L_2TAG_PACKET_21_0_2, L_2TAG_PACKET_22_0_2, L_2TAG_PACKET_23_0_2;
1347   Label L_2TAG_PACKET_24_0_2, L_2TAG_PACKET_25_0_2, L_2TAG_PACKET_26_0_2, L_2TAG_PACKET_27_0_2;
1348   Label L_2TAG_PACKET_28_0_2, L_2TAG_PACKET_29_0_2, L_2TAG_PACKET_30_0_2, L_2TAG_PACKET_31_0_2;
1349   Label L_2TAG_PACKET_32_0_2, L_2TAG_PACKET_33_0_2, L_2TAG_PACKET_34_0_2, L_2TAG_PACKET_35_0_2;
1350   Label L_2TAG_PACKET_36_0_2, L_2TAG_PACKET_37_0_2, L_2TAG_PACKET_38_0_2, L_2TAG_PACKET_39_0_2;
1351   Label L_2TAG_PACKET_40_0_2, L_2TAG_PACKET_41_0_2, L_2TAG_PACKET_42_0_2, L_2TAG_PACKET_43_0_2;
1352   Label L_2TAG_PACKET_44_0_2, L_2TAG_PACKET_45_0_2, L_2TAG_PACKET_46_0_2, L_2TAG_PACKET_47_0_2;
1353   Label L_2TAG_PACKET_48_0_2, L_2TAG_PACKET_49_0_2, L_2TAG_PACKET_50_0_2, L_2TAG_PACKET_51_0_2;
1354   Label L_2TAG_PACKET_52_0_2, L_2TAG_PACKET_53_0_2, L_2TAG_PACKET_54_0_2, L_2TAG_PACKET_55_0_2;
1355   Label L_2TAG_PACKET_56_0_2, L_2TAG_PACKET_57_0_2, L_2TAG_PACKET_58_0_2, start;
1356 
1357   assert_different_registers(tmp, eax, ecx, edx);
1358 
1359   address static_const_table_pow = (address)_static_const_table_pow;
1360 
1361   bind(start);
1362   subl(rsp, 120);
1363   movl(Address(rsp, 64), tmp);
1364   lea(tmp, ExternalAddress(static_const_table_pow));
1365   movsd(xmm0, Address(rsp, 128));
1366   movsd(xmm1, Address(rsp, 136));
1367   xorpd(xmm2, xmm2);
1368   movl(eax, 16368);
1369   pinsrw(xmm2, eax, 3);
1370   movl(ecx, 1069088768);
1371   movdl(xmm7, ecx);
1372   movsd(Address(rsp, 16), xmm1);
1373   xorpd(xmm1, xmm1);
1374   movl(edx, 30704);
1375   pinsrw(xmm1, edx, 3);
1376   movsd(Address(rsp, 8), xmm0);
1377   movdqu(xmm3, xmm0);
1378   movl(edx, 8192);
1379   movdl(xmm4, edx);
1380   movdqu(xmm6, Address(tmp, 8240));
1381   pextrw(eax, xmm0, 3);
1382   por(xmm0, xmm2);
1383   psllq(xmm0, 5);
1384   movsd(xmm2, Address(tmp, 8256));
1385   psrlq(xmm0, 34);
1386   movl(edx, eax);
1387   andl(edx, 32752);
1388   subl(edx, 16368);
1389   movl(ecx, edx);
1390   sarl(edx, 31);
1391   addl(ecx, edx);
1392   xorl(ecx, edx);
1393   rcpss(xmm0, xmm0);
1394   psllq(xmm3, 12);
1395   addl(ecx, 16);
1396   bsrl(ecx, ecx);
1397   psrlq(xmm3, 12);
1398   movl(Address(rsp, 24), rsi);
1399   subl(eax, 16);
1400   cmpl(eax, 32736);
1401   jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
1402   movl(rsi, 0);
1403 
1404   bind(L_2TAG_PACKET_1_0_2);
1405   mulss(xmm0, xmm7);
1406   movl(edx, -1);
1407   subl(ecx, 4);
1408   shll(edx);
1409   movdl(xmm5, edx);
1410   por(xmm3, xmm1);
1411   subl(eax, 16351);
1412   cmpl(eax, 1);
1413   jcc(Assembler::belowEqual, L_2TAG_PACKET_2_0_2);
1414   paddd(xmm0, xmm4);
1415   psllq(xmm5, 32);
1416   movdl(edx, xmm0);
1417   psllq(xmm0, 29);
1418   pand(xmm5, xmm3);
1419 
1420   bind(L_2TAG_PACKET_3_0_2);
1421   pand(xmm0, xmm6);
1422   subsd(xmm3, xmm5);
1423   subl(eax, 1);
1424   sarl(eax, 4);
1425   cvtsi2sdl(xmm7, eax);
1426   mulpd(xmm5, xmm0);
1427 
1428   bind(L_2TAG_PACKET_4_0_2);
1429   mulsd(xmm3, xmm0);
1430   movdqu(xmm1, Address(tmp, 8272));
1431   subsd(xmm5, xmm2);
1432   movdqu(xmm4, Address(tmp, 8288));
1433   movl(ecx, eax);
1434   sarl(eax, 31);
1435   addl(ecx, eax);
1436   xorl(eax, ecx);
1437   addl(eax, 1);
1438   bsrl(eax, eax);
1439   unpcklpd(xmm5, xmm3);
1440   movdqu(xmm6, Address(tmp, 8304));
1441   addsd(xmm3, xmm5);
1442   andl(edx, 16760832);
1443   shrl(edx, 10);
1444   addpd(xmm5, Address(tmp, edx, Address::times_1, -3616));
1445   movdqu(xmm0, Address(tmp, 8320));
1446   pshufd(xmm2, xmm3, 68);
1447   mulsd(xmm3, xmm3);
1448   mulpd(xmm1, xmm2);
1449   mulpd(xmm4, xmm2);
1450   addsd(xmm5, xmm7);
1451   mulsd(xmm2, xmm3);
1452   addpd(xmm6, xmm1);
1453   mulsd(xmm3, xmm3);
1454   addpd(xmm0, xmm4);
1455   movsd(xmm1, Address(rsp, 16));
1456   movzwl(ecx, Address(rsp, 22));
1457   pshufd(xmm7, xmm5, 238);
1458   movsd(xmm4, Address(tmp, 8368));
1459   mulpd(xmm6, xmm2);
1460   pshufd(xmm3, xmm3, 68);
1461   mulpd(xmm0, xmm2);
1462   shll(eax, 4);
1463   subl(eax, 15872);
1464   andl(ecx, 32752);
1465   addl(eax, ecx);
1466   mulpd(xmm3, xmm6);
1467   cmpl(eax, 624);
1468   jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
1469   xorpd(xmm6, xmm6);
1470   movl(edx, 17080);
1471   pinsrw(xmm6, edx, 3);
1472   movdqu(xmm2, xmm1);
1473   pand(xmm4, xmm1);
1474   subsd(xmm1, xmm4);
1475   mulsd(xmm4, xmm5);
1476   addsd(xmm0, xmm7);
1477   mulsd(xmm1, xmm5);
1478   movdqu(xmm7, xmm6);
1479   addsd(xmm6, xmm4);
1480   addpd(xmm3, xmm0);
1481   movdl(edx, xmm6);
1482   subsd(xmm6, xmm7);
1483   pshufd(xmm0, xmm3, 238);
1484   subsd(xmm4, xmm6);
1485   addsd(xmm0, xmm3);
1486   movl(ecx, edx);
1487   andl(edx, 255);
1488   addl(edx, edx);
1489   movdqu(xmm5, Address(tmp, edx, Address::times_8, 8384));
1490   addsd(xmm4, xmm1);
1491   mulsd(xmm2, xmm0);
1492   movdqu(xmm7, Address(tmp, 12480));
1493   movdqu(xmm3, Address(tmp, 12496));
1494   shll(ecx, 12);
1495   xorl(ecx, rsi);
1496   andl(ecx, -1048576);
1497   movdl(xmm6, ecx);
1498   addsd(xmm2, xmm4);
1499   movsd(xmm1, Address(tmp, 12512));
1500   pshufd(xmm0, xmm2, 68);
1501   pshufd(xmm4, xmm2, 68);
1502   mulpd(xmm0, xmm0);
1503   movl(rsi, Address(rsp, 24));
1504   mulpd(xmm7, xmm4);
1505   pshufd(xmm6, xmm6, 17);
1506   mulsd(xmm1, xmm2);
1507   mulsd(xmm0, xmm0);
1508   paddd(xmm5, xmm6);
1509   addpd(xmm3, xmm7);
1510   mulsd(xmm1, xmm5);
1511   pshufd(xmm6, xmm5, 238);
1512   mulpd(xmm0, xmm3);
1513   addsd(xmm1, xmm6);
1514   pshufd(xmm3, xmm0, 238);
1515   mulsd(xmm0, xmm5);
1516   mulsd(xmm3, xmm5);
1517   addsd(xmm0, xmm1);
1518   addsd(xmm0, xmm3);
1519   addsd(xmm0, xmm5);
1520   movsd(Address(rsp, 0), xmm0);
1521   fld_d(Address(rsp, 0));
1522   jmp(L_2TAG_PACKET_6_0_2);
1523 
1524   bind(L_2TAG_PACKET_7_0_2);
1525   movsd(xmm0, Address(rsp, 128));
1526   movsd(xmm1, Address(rsp, 136));
1527   mulsd(xmm0, xmm1);
1528   movsd(Address(rsp, 0), xmm0);
1529   fld_d(Address(rsp, 0));
1530   jmp(L_2TAG_PACKET_6_0_2);
1531 
1532   bind(L_2TAG_PACKET_0_0_2);
1533   addl(eax, 16);
1534   movl(edx, 32752);
1535   andl(edx, eax);
1536   cmpl(edx, 32752);
1537   jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
1538   testl(eax, 32768);
1539   jcc(Assembler::notEqual, L_2TAG_PACKET_9_0_2);
1540 
1541   bind(L_2TAG_PACKET_10_0_2);
1542   movl(ecx, Address(rsp, 16));
1543   xorl(edx, edx);
1544   testl(ecx, ecx);
1545   movl(ecx, 1);
1546   cmovl(Assembler::notEqual, edx, ecx);
1547   orl(edx, Address(rsp, 20));
1548   cmpl(edx, 1072693248);
1549   jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
1550   movsd(xmm0, Address(rsp, 8));
1551   movsd(xmm3, Address(rsp, 8));
1552   movdl(edx, xmm3);
1553   psrlq(xmm3, 32);
1554   movdl(ecx, xmm3);
1555   orl(edx, ecx);
1556   cmpl(edx, 0);
1557   jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
1558   xorpd(xmm3, xmm3);
1559   movl(eax, 18416);
1560   pinsrw(xmm3, eax, 3);
1561   mulsd(xmm0, xmm3);
1562   xorpd(xmm2, xmm2);
1563   movl(eax, 16368);
1564   pinsrw(xmm2, eax, 3);
1565   movdqu(xmm3, xmm0);
1566   pextrw(eax, xmm0, 3);
1567   por(xmm0, xmm2);
1568   movl(ecx, 18416);
1569   psllq(xmm0, 5);
1570   movsd(xmm2, Address(tmp, 8256));
1571   psrlq(xmm0, 34);
1572   rcpss(xmm0, xmm0);
1573   psllq(xmm3, 12);
1574   movdqu(xmm6, Address(tmp, 8240));
1575   psrlq(xmm3, 12);
1576   mulss(xmm0, xmm7);
1577   movl(edx, -1024);
1578   movdl(xmm5, edx);
1579   por(xmm3, xmm1);
1580   paddd(xmm0, xmm4);
1581   psllq(xmm5, 32);
1582   movdl(edx, xmm0);
1583   psllq(xmm0, 29);
1584   pand(xmm5, xmm3);
1585   movl(rsi, 0);
1586   pand(xmm0, xmm6);
1587   subsd(xmm3, xmm5);
1588   andl(eax, 32752);
1589   subl(eax, 18416);
1590   sarl(eax, 4);
1591   cvtsi2sdl(xmm7, eax);
1592   mulpd(xmm5, xmm0);
1593   jmp(L_2TAG_PACKET_4_0_2);
1594 
1595   bind(L_2TAG_PACKET_12_0_2);
1596   movl(ecx, Address(rsp, 16));
1597   xorl(edx, edx);
1598   testl(ecx, ecx);
1599   movl(ecx, 1);
1600   cmovl(Assembler::notEqual, edx, ecx);
1601   orl(edx, Address(rsp, 20));
1602   cmpl(edx, 1072693248);
1603   jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
1604   movsd(xmm0, Address(rsp, 8));
1605   movsd(xmm3, Address(rsp, 8));
1606   movdl(edx, xmm3);
1607   psrlq(xmm3, 32);
1608   movdl(ecx, xmm3);
1609   orl(edx, ecx);
1610   cmpl(edx, 0);
1611   jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
1612   xorpd(xmm3, xmm3);
1613   movl(eax, 18416);
1614   pinsrw(xmm3, eax, 3);
1615   mulsd(xmm0, xmm3);
1616   xorpd(xmm2, xmm2);
1617   movl(eax, 16368);
1618   pinsrw(xmm2, eax, 3);
1619   movdqu(xmm3, xmm0);
1620   pextrw(eax, xmm0, 3);
1621   por(xmm0, xmm2);
1622   movl(ecx, 18416);
1623   psllq(xmm0, 5);
1624   movsd(xmm2, Address(tmp, 8256));
1625   psrlq(xmm0, 34);
1626   rcpss(xmm0, xmm0);
1627   psllq(xmm3, 12);
1628   movdqu(xmm6, Address(tmp, 8240));
1629   psrlq(xmm3, 12);
1630   mulss(xmm0, xmm7);
1631   movl(edx, -1024);
1632   movdl(xmm5, edx);
1633   por(xmm3, xmm1);
1634   paddd(xmm0, xmm4);
1635   psllq(xmm5, 32);
1636   movdl(edx, xmm0);
1637   psllq(xmm0, 29);
1638   pand(xmm5, xmm3);
1639   movl(rsi, INT_MIN);
1640   pand(xmm0, xmm6);
1641   subsd(xmm3, xmm5);
1642   andl(eax, 32752);
1643   subl(eax, 18416);
1644   sarl(eax, 4);
1645   cvtsi2sdl(xmm7, eax);
1646   mulpd(xmm5, xmm0);
1647   jmp(L_2TAG_PACKET_4_0_2);
1648 
1649   bind(L_2TAG_PACKET_5_0_2);
1650   cmpl(eax, 0);
1651   jcc(Assembler::less, L_2TAG_PACKET_13_0_2);
1652   cmpl(eax, 752);
1653   jcc(Assembler::aboveEqual, L_2TAG_PACKET_14_0_2);
1654 
1655   bind(L_2TAG_PACKET_15_0_2);
1656   addsd(xmm0, xmm7);
1657   movsd(xmm2, Address(tmp, 12544));
1658   addpd(xmm3, xmm0);
1659   xorpd(xmm6, xmm6);
1660   movl(eax, 17080);
1661   pinsrw(xmm6, eax, 3);
1662   pshufd(xmm0, xmm3, 238);
1663   addsd(xmm0, xmm3);
1664   movdqu(xmm3, xmm5);
1665   addsd(xmm5, xmm0);
1666   movdqu(xmm4, xmm2);
1667   subsd(xmm3, xmm5);
1668   movdqu(xmm7, xmm5);
1669   pand(xmm5, xmm2);
1670   movdqu(xmm2, xmm1);
1671   pand(xmm4, xmm1);
1672   subsd(xmm7, xmm5);
1673   addsd(xmm0, xmm3);
1674   subsd(xmm1, xmm4);
1675   mulsd(xmm4, xmm5);
1676   addsd(xmm0, xmm7);
1677   mulsd(xmm2, xmm0);
1678   movdqu(xmm7, xmm6);
1679   mulsd(xmm1, xmm5);
1680   addsd(xmm6, xmm4);
1681   movdl(eax, xmm6);
1682   subsd(xmm6, xmm7);
1683   addsd(xmm2, xmm1);
1684   movdqu(xmm7, Address(tmp, 12480));
1685   movdqu(xmm3, Address(tmp, 12496));
1686   subsd(xmm4, xmm6);
1687   pextrw(edx, xmm6, 3);
1688   movl(ecx, eax);
1689   andl(eax, 255);
1690   addl(eax, eax);
1691   movdqu(xmm5, Address(tmp, eax, Address::times_8, 8384));
1692   addsd(xmm2, xmm4);
1693   sarl(ecx, 8);
1694   movl(eax, ecx);
1695   sarl(ecx, 1);
1696   subl(eax, ecx);
1697   shll(ecx, 20);
1698   xorl(ecx, rsi);
1699   movdl(xmm6, ecx);
1700   movsd(xmm1, Address(tmp, 12512));
1701   andl(edx, 32767);
1702   cmpl(edx, 16529);
1703   jcc(Assembler::above, L_2TAG_PACKET_14_0_2);
1704   pshufd(xmm0, xmm2, 68);
1705   pshufd(xmm4, xmm2, 68);
1706   mulpd(xmm0, xmm0);
1707   mulpd(xmm7, xmm4);
1708   pshufd(xmm6, xmm6, 17);
1709   mulsd(xmm1, xmm2);
1710   mulsd(xmm0, xmm0);
1711   paddd(xmm5, xmm6);
1712   addpd(xmm3, xmm7);
1713   mulsd(xmm1, xmm5);
1714   pshufd(xmm6, xmm5, 238);
1715   mulpd(xmm0, xmm3);
1716   addsd(xmm1, xmm6);
1717   pshufd(xmm3, xmm0, 238);
1718   mulsd(xmm0, xmm5);
1719   mulsd(xmm3, xmm5);
1720   shll(eax, 4);
1721   xorpd(xmm4, xmm4);
1722   addl(eax, 16368);
1723   pinsrw(xmm4, eax, 3);
1724   addsd(xmm0, xmm1);
1725   movl(rsi, Address(rsp, 24));
1726   addsd(xmm0, xmm3);
1727   movdqu(xmm1, xmm0);
1728   addsd(xmm0, xmm5);
1729   mulsd(xmm0, xmm4);
1730   pextrw(eax, xmm0, 3);
1731   andl(eax, 32752);
1732   jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
1733   cmpl(eax, 32752);
1734   jcc(Assembler::equal, L_2TAG_PACKET_17_0_2);
1735 
1736   bind(L_2TAG_PACKET_18_0_2);
1737   movsd(Address(rsp, 0), xmm0);
1738   fld_d(Address(rsp, 0));
1739   jmp(L_2TAG_PACKET_6_0_2);
1740 
1741   bind(L_2TAG_PACKET_8_0_2);
1742   movsd(xmm1, Address(rsp, 16));
1743   movsd(xmm0, Address(rsp, 8));
1744   movdqu(xmm2, xmm0);
1745   movdl(eax, xmm2);
1746   psrlq(xmm2, 20);
1747   movdl(edx, xmm2);
1748   orl(eax, edx);
1749   jcc(Assembler::equal, L_2TAG_PACKET_19_0_2);
1750   addsd(xmm0, xmm0);
1751   movdl(eax, xmm1);
1752   psrlq(xmm1, 32);
1753   movdl(edx, xmm1);
1754   movl(ecx, edx);
1755   addl(edx, edx);
1756   orl(eax, edx);
1757   jcc(Assembler::equal, L_2TAG_PACKET_20_0_2);
1758   jmp(L_2TAG_PACKET_18_0_2);
1759 
1760   bind(L_2TAG_PACKET_20_0_2);
1761   xorpd(xmm0, xmm0);
1762   movl(eax, 16368);
1763   pinsrw(xmm0, eax, 3);
1764   movl(edx, 29);
1765   jmp(L_2TAG_PACKET_21_0_2);
1766 
1767   bind(L_2TAG_PACKET_22_0_2);
1768   movsd(xmm0, Address(rsp, 16));
1769   addpd(xmm0, xmm0);
1770   jmp(L_2TAG_PACKET_18_0_2);
1771 
1772   bind(L_2TAG_PACKET_19_0_2);
1773   movdl(eax, xmm1);
1774   movdqu(xmm2, xmm1);
1775   psrlq(xmm1, 32);
1776   movdl(edx, xmm1);
1777   movl(ecx, edx);
1778   addl(edx, edx);
1779   orl(eax, edx);
1780   jcc(Assembler::equal, L_2TAG_PACKET_23_0_2);
1781   pextrw(eax, xmm2, 3);
1782   andl(eax, 32752);
1783   cmpl(eax, 32752);
1784   jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
1785   movdl(eax, xmm2);
1786   psrlq(xmm2, 20);
1787   movdl(edx, xmm2);
1788   orl(eax, edx);
1789   jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
1790 
1791   bind(L_2TAG_PACKET_24_0_2);
1792   pextrw(eax, xmm0, 3);
1793   testl(eax, 32768);
1794   jcc(Assembler::notEqual, L_2TAG_PACKET_25_0_2);
1795   testl(ecx, INT_MIN);
1796   jcc(Assembler::notEqual, L_2TAG_PACKET_26_0_2);
1797   jmp(L_2TAG_PACKET_18_0_2);
1798 
1799   bind(L_2TAG_PACKET_27_0_2);
1800   movsd(xmm1, Address(rsp, 16));
1801   movdl(eax, xmm1);
1802   testl(eax, 1);
1803   jcc(Assembler::notEqual, L_2TAG_PACKET_28_0_2);
1804   testl(eax, 2);
1805   jcc(Assembler::notEqual, L_2TAG_PACKET_29_0_2);
1806   jmp(L_2TAG_PACKET_28_0_2);
1807 
1808   bind(L_2TAG_PACKET_25_0_2);
1809   shrl(ecx, 20);
1810   andl(ecx, 2047);
1811   cmpl(ecx, 1075);
1812   jcc(Assembler::above, L_2TAG_PACKET_28_0_2);
1813   jcc(Assembler::equal, L_2TAG_PACKET_30_0_2);
1814   cmpl(ecx, 1074);
1815   jcc(Assembler::above, L_2TAG_PACKET_27_0_2);
1816   cmpl(ecx, 1023);
1817   jcc(Assembler::below, L_2TAG_PACKET_28_0_2);
1818   movsd(xmm1, Address(rsp, 16));
1819   movl(eax, 17208);
1820   xorpd(xmm3, xmm3);
1821   pinsrw(xmm3, eax, 3);
1822   movdqu(xmm4, xmm3);
1823   addsd(xmm3, xmm1);
1824   subsd(xmm4, xmm3);
1825   addsd(xmm1, xmm4);
1826   pextrw(eax, xmm1, 3);
1827   andl(eax, 32752);
1828   jcc(Assembler::notEqual, L_2TAG_PACKET_28_0_2);
1829   movdl(eax, xmm3);
1830   andl(eax, 1);
1831   jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
1832 
1833   bind(L_2TAG_PACKET_29_0_2);
1834   movsd(xmm1, Address(rsp, 16));
1835   pextrw(eax, xmm1, 3);
1836   andl(eax, 32768);
1837   jcc(Assembler::equal, L_2TAG_PACKET_18_0_2);
1838   xorpd(xmm0, xmm0);
1839   movl(eax, 32768);
1840   pinsrw(xmm0, eax, 3);
1841   jmp(L_2TAG_PACKET_18_0_2);
1842 
1843   bind(L_2TAG_PACKET_28_0_2);
1844   movsd(xmm1, Address(rsp, 16));
1845   pextrw(eax, xmm1, 3);
1846   andl(eax, 32768);
1847   jcc(Assembler::notEqual, L_2TAG_PACKET_26_0_2);
1848 
1849   bind(L_2TAG_PACKET_31_0_2);
1850   xorpd(xmm0, xmm0);
1851   movl(eax, 32752);
1852   pinsrw(xmm0, eax, 3);
1853   jmp(L_2TAG_PACKET_18_0_2);
1854 
1855   bind(L_2TAG_PACKET_30_0_2);
1856   movsd(xmm1, Address(rsp, 16));
1857   movdl(eax, xmm1);
1858   andl(eax, 1);
1859   jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
1860   jmp(L_2TAG_PACKET_29_0_2);
1861 
1862   bind(L_2TAG_PACKET_32_0_2);
1863   movdl(eax, xmm1);
1864   psrlq(xmm1, 20);
1865   movdl(edx, xmm1);
1866   orl(eax, edx);
1867   jcc(Assembler::equal, L_2TAG_PACKET_33_0_2);
1868   movsd(xmm0, Address(rsp, 16));
1869   addsd(xmm0, xmm0);
1870   jmp(L_2TAG_PACKET_18_0_2);
1871 
1872   bind(L_2TAG_PACKET_33_0_2);
1873   movsd(xmm0, Address(rsp, 8));
1874   pextrw(eax, xmm0, 3);
1875   cmpl(eax, 49136);
1876   jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
1877   movdl(ecx, xmm0);
1878   psrlq(xmm0, 20);
1879   movdl(edx, xmm0);
1880   orl(ecx, edx);
1881   jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
1882   xorpd(xmm0, xmm0);
1883   movl(eax, 32760);
1884   pinsrw(xmm0, eax, 3);
1885   jmp(L_2TAG_PACKET_18_0_2);
1886 
1887   bind(L_2TAG_PACKET_34_0_2);
1888   movsd(xmm1, Address(rsp, 16));
1889   andl(eax, 32752);
1890   subl(eax, 16368);
1891   pextrw(edx, xmm1, 3);
1892   xorpd(xmm0, xmm0);
1893   xorl(eax, edx);
1894   andl(eax, 32768);
1895   jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
1896   movl(ecx, 32752);
1897   pinsrw(xmm0, ecx, 3);
1898   jmp(L_2TAG_PACKET_18_0_2);
1899 
1900   bind(L_2TAG_PACKET_35_0_2);
1901   movdl(eax, xmm1);
1902   cmpl(edx, 17184);
1903   jcc(Assembler::above, L_2TAG_PACKET_36_0_2);
1904   testl(eax, 1);
1905   jcc(Assembler::notEqual, L_2TAG_PACKET_37_0_2);
1906   testl(eax, 2);
1907   jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
1908   jmp(L_2TAG_PACKET_39_0_2);
1909 
1910   bind(L_2TAG_PACKET_36_0_2);
1911   testl(eax, 1);
1912   jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
1913   jmp(L_2TAG_PACKET_39_0_2);
1914 
1915   bind(L_2TAG_PACKET_9_0_2);
1916   movsd(xmm2, Address(rsp, 8));
1917   movdl(eax, xmm2);
1918   psrlq(xmm2, 31);
1919   movdl(ecx, xmm2);
1920   orl(eax, ecx);
1921   jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
1922   movsd(xmm1, Address(rsp, 16));
1923   pextrw(edx, xmm1, 3);
1924   movdl(eax, xmm1);
1925   movdqu(xmm2, xmm1);
1926   psrlq(xmm2, 32);
1927   movdl(ecx, xmm2);
1928   addl(ecx, ecx);
1929   orl(ecx, eax);
1930   jcc(Assembler::equal, L_2TAG_PACKET_40_0_2);
1931   andl(edx, 32752);
1932   cmpl(edx, 32752);
1933   jcc(Assembler::equal, L_2TAG_PACKET_32_0_2);
1934   cmpl(edx, 17200);
1935   jcc(Assembler::above, L_2TAG_PACKET_38_0_2);
1936   cmpl(edx, 17184);
1937   jcc(Assembler::aboveEqual, L_2TAG_PACKET_35_0_2);
1938   cmpl(edx, 16368);
1939   jcc(Assembler::below, L_2TAG_PACKET_37_0_2);
1940   movl(eax, 17208);
1941   xorpd(xmm2, xmm2);
1942   pinsrw(xmm2, eax, 3);
1943   movdqu(xmm4, xmm2);
1944   addsd(xmm2, xmm1);
1945   subsd(xmm4, xmm2);
1946   addsd(xmm1, xmm4);
1947   pextrw(eax, xmm1, 3);
1948   andl(eax, 32767);
1949   jcc(Assembler::notEqual, L_2TAG_PACKET_37_0_2);
1950   movdl(eax, xmm2);
1951   andl(eax, 1);
1952   jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
1953 
1954   bind(L_2TAG_PACKET_39_0_2);
1955   xorpd(xmm1, xmm1);
1956   movl(edx, 30704);
1957   pinsrw(xmm1, edx, 3);
1958   movsd(xmm2, Address(tmp, 8256));
1959   movsd(xmm4, Address(rsp, 8));
1960   pextrw(eax, xmm4, 3);
1961   movl(edx, 8192);
1962   movdl(xmm4, edx);
1963   andl(eax, 32767);
1964   subl(eax, 16);
1965   jcc(Assembler::less, L_2TAG_PACKET_12_0_2);
1966   movl(edx, eax);
1967   andl(edx, 32752);
1968   subl(edx, 16368);
1969   movl(ecx, edx);
1970   sarl(edx, 31);
1971   addl(ecx, edx);
1972   xorl(ecx, edx);
1973   addl(ecx, 16);
1974   bsrl(ecx, ecx);
1975   movl(rsi, INT_MIN);
1976   jmp(L_2TAG_PACKET_1_0_2);
1977 
1978   bind(L_2TAG_PACKET_37_0_2);
1979   xorpd(xmm1, xmm1);
1980   movl(eax, 32752);
1981   pinsrw(xmm1, eax, 3);
1982   xorpd(xmm0, xmm0);
1983   mulsd(xmm0, xmm1);
1984   movl(edx, 28);
1985   jmp(L_2TAG_PACKET_21_0_2);
1986 
1987   bind(L_2TAG_PACKET_38_0_2);
1988   xorpd(xmm1, xmm1);
1989   movl(edx, 30704);
1990   pinsrw(xmm1, edx, 3);
1991   movsd(xmm2, Address(tmp, 8256));
1992   movsd(xmm4, Address(rsp, 8));
1993   pextrw(eax, xmm4, 3);
1994   movl(edx, 8192);
1995   movdl(xmm4, edx);
1996   andl(eax, 32767);
1997   subl(eax, 16);
1998   jcc(Assembler::less, L_2TAG_PACKET_10_0_2);
1999   movl(edx, eax);
2000   andl(edx, 32752);
2001   subl(edx, 16368);
2002   movl(ecx, edx);
2003   sarl(edx, 31);
2004   addl(ecx, edx);
2005   xorl(ecx, edx);
2006   addl(ecx, 16);
2007   bsrl(ecx, ecx);
2008   movl(rsi, 0);
2009   jmp(L_2TAG_PACKET_1_0_2);
2010 
2011   bind(L_2TAG_PACKET_23_0_2);
2012   xorpd(xmm0, xmm0);
2013   movl(eax, 16368);
2014   pinsrw(xmm0, eax, 3);
2015   jmp(L_2TAG_PACKET_18_0_2);
2016 
2017   bind(L_2TAG_PACKET_26_0_2);
2018   xorpd(xmm0, xmm0);
2019   jmp(L_2TAG_PACKET_18_0_2);
2020 
2021   bind(L_2TAG_PACKET_13_0_2);
2022   addl(eax, 384);
2023   cmpl(eax, 0);
2024   jcc(Assembler::less, L_2TAG_PACKET_41_0_2);
2025   mulsd(xmm5, xmm1);
2026   addsd(xmm0, xmm7);
2027   shrl(rsi, 31);
2028   addpd(xmm3, xmm0);
2029   pshufd(xmm0, xmm3, 238);
2030   addsd(xmm3, xmm0);
2031   movsd(xmm4, Address(tmp, rsi, Address::times_8, 12528));
2032   mulsd(xmm1, xmm3);
2033   xorpd(xmm0, xmm0);
2034   movl(eax, 16368);
2035   shll(rsi, 15);
2036   orl(eax, rsi);
2037   pinsrw(xmm0, eax, 3);
2038   addsd(xmm5, xmm1);
2039   movl(rsi, Address(rsp, 24));
2040   mulsd(xmm5, xmm4);
2041   addsd(xmm0, xmm5);
2042   jmp(L_2TAG_PACKET_18_0_2);
2043 
2044   bind(L_2TAG_PACKET_41_0_2);
2045   movl(rsi, Address(rsp, 24));
2046   xorpd(xmm0, xmm0);
2047   movl(eax, 16368);
2048   pinsrw(xmm0, eax, 3);
2049   jmp(L_2TAG_PACKET_18_0_2);
2050 
2051   bind(L_2TAG_PACKET_40_0_2);
2052   xorpd(xmm0, xmm0);
2053   movl(eax, 16368);
2054   pinsrw(xmm0, eax, 3);
2055   jmp(L_2TAG_PACKET_18_0_2);
2056 
2057   bind(L_2TAG_PACKET_42_0_2);
2058   xorpd(xmm0, xmm0);
2059   movl(eax, 16368);
2060   pinsrw(xmm0, eax, 3);
2061   movl(edx, 26);
2062   jmp(L_2TAG_PACKET_21_0_2);
2063 
2064   bind(L_2TAG_PACKET_11_0_2);
2065   movsd(xmm1, Address(rsp, 16));
2066   movdqu(xmm2, xmm1);
2067   pextrw(eax, xmm1, 3);
2068   andl(eax, 32752);
2069   cmpl(eax, 32752);
2070   jcc(Assembler::notEqual, L_2TAG_PACKET_43_0_2);
2071   movdl(eax, xmm2);
2072   psrlq(xmm2, 20);
2073   movdl(edx, xmm2);
2074   orl(eax, edx);
2075   jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
2076 
2077   bind(L_2TAG_PACKET_43_0_2);
2078   movdl(eax, xmm1);
2079   psrlq(xmm1, 32);
2080   movdl(edx, xmm1);
2081   movl(ecx, edx);
2082   addl(edx, edx);
2083   orl(eax, edx);
2084   jcc(Assembler::equal, L_2TAG_PACKET_42_0_2);
2085   shrl(edx, 21);
2086   cmpl(edx, 1075);
2087   jcc(Assembler::above, L_2TAG_PACKET_44_0_2);
2088   jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
2089   cmpl(edx, 1023);
2090   jcc(Assembler::below, L_2TAG_PACKET_44_0_2);
2091   movsd(xmm1, Address(rsp, 16));
2092   movl(eax, 17208);
2093   xorpd(xmm3, xmm3);
2094   pinsrw(xmm3, eax, 3);
2095   movdqu(xmm4, xmm3);
2096   addsd(xmm3, xmm1);
2097   subsd(xmm4, xmm3);
2098   addsd(xmm1, xmm4);
2099   pextrw(eax, xmm1, 3);
2100   andl(eax, 32752);
2101   jcc(Assembler::notEqual, L_2TAG_PACKET_44_0_2);
2102   movdl(eax, xmm3);
2103   andl(eax, 1);
2104   jcc(Assembler::equal, L_2TAG_PACKET_44_0_2);
2105 
2106   bind(L_2TAG_PACKET_46_0_2);
2107   movsd(xmm0, Address(rsp, 8));
2108   testl(ecx, INT_MIN);
2109   jcc(Assembler::notEqual, L_2TAG_PACKET_47_0_2);
2110   jmp(L_2TAG_PACKET_18_0_2);
2111 
2112   bind(L_2TAG_PACKET_45_0_2);
2113   movsd(xmm1, Address(rsp, 16));
2114   movdl(eax, xmm1);
2115   testl(eax, 1);
2116   jcc(Assembler::notEqual, L_2TAG_PACKET_46_0_2);
2117 
2118   bind(L_2TAG_PACKET_44_0_2);
2119   testl(ecx, INT_MIN);
2120   jcc(Assembler::equal, L_2TAG_PACKET_26_0_2);
2121   xorpd(xmm0, xmm0);
2122 
2123   bind(L_2TAG_PACKET_47_0_2);
2124   movl(eax, 16368);
2125   xorpd(xmm1, xmm1);
2126   pinsrw(xmm1, eax, 3);
2127   divsd(xmm1, xmm0);
2128   movdqu(xmm0, xmm1);
2129   movl(edx, 27);
2130   jmp(L_2TAG_PACKET_21_0_2);
2131 
2132   bind(L_2TAG_PACKET_14_0_2);
2133   movsd(xmm2, Address(rsp, 8));
2134   movsd(xmm6, Address(rsp, 16));
2135   pextrw(eax, xmm2, 3);
2136   pextrw(edx, xmm6, 3);
2137   movl(ecx, 32752);
2138   andl(ecx, edx);
2139   cmpl(ecx, 32752);
2140   jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
2141   andl(eax, 32752);
2142   subl(eax, 16368);
2143   xorl(edx, eax);
2144   testl(edx, 32768);
2145   jcc(Assembler::notEqual, L_2TAG_PACKET_49_0_2);
2146 
2147   bind(L_2TAG_PACKET_50_0_2);
2148   movl(eax, 32736);
2149   pinsrw(xmm0, eax, 3);
2150   shrl(rsi, 16);
2151   orl(eax, rsi);
2152   pinsrw(xmm1, eax, 3);
2153   movl(rsi, Address(rsp, 24));
2154   mulsd(xmm0, xmm1);
2155 
2156   bind(L_2TAG_PACKET_17_0_2);
2157   movl(edx, 24);
2158 
2159   bind(L_2TAG_PACKET_21_0_2);
2160   movsd(Address(rsp, 0), xmm0);
2161   fld_d(Address(rsp, 0));
2162   jmp(L_2TAG_PACKET_6_0_2);
2163 
2164   bind(L_2TAG_PACKET_49_0_2);
2165   movl(eax, 16);
2166   pinsrw(xmm0, eax, 3);
2167   mulsd(xmm0, xmm0);
2168   testl(rsi, INT_MIN);
2169   jcc(Assembler::equal, L_2TAG_PACKET_51_0_2);
2170   movsd(xmm2, Address(tmp, 12560));
2171   xorpd(xmm0, xmm2);
2172 
2173   bind(L_2TAG_PACKET_51_0_2);
2174   movl(rsi, Address(rsp, 24));
2175   movl(edx, 25);
2176   jmp(L_2TAG_PACKET_21_0_2);
2177 
2178   bind(L_2TAG_PACKET_16_0_2);
2179   pextrw(ecx, xmm5, 3);
2180   pextrw(edx, xmm4, 3);
2181   movl(eax, -1);
2182   andl(ecx, 32752);
2183   subl(ecx, 16368);
2184   andl(edx, 32752);
2185   addl(edx, ecx);
2186   movl(ecx, -31);
2187   sarl(edx, 4);
2188   subl(ecx, edx);
2189   jcc(Assembler::lessEqual, L_2TAG_PACKET_52_0_2);
2190   cmpl(ecx, 20);
2191   jcc(Assembler::above, L_2TAG_PACKET_53_0_2);
2192   shll(eax);
2193 
2194   bind(L_2TAG_PACKET_52_0_2);
2195   movdl(xmm0, eax);
2196   psllq(xmm0, 32);
2197   pand(xmm0, xmm5);
2198   subsd(xmm5, xmm0);
2199   addsd(xmm5, xmm1);
2200   mulsd(xmm0, xmm4);
2201   mulsd(xmm5, xmm4);
2202   addsd(xmm0, xmm5);
2203 
2204   bind(L_2TAG_PACKET_53_0_2);
2205   movl(edx, 25);
2206   jmp(L_2TAG_PACKET_21_0_2);
2207 
2208   bind(L_2TAG_PACKET_2_0_2);
2209   movzwl(ecx, Address(rsp, 22));
2210   movl(edx, INT_MIN);
2211   movdl(xmm1, edx);
2212   xorpd(xmm7, xmm7);
2213   paddd(xmm0, xmm4);
2214   psllq(xmm5, 32);
2215   movdl(edx, xmm0);
2216   psllq(xmm0, 29);
2217   paddq(xmm1, xmm3);
2218   pand(xmm5, xmm1);
2219   andl(ecx, 32752);
2220   cmpl(ecx, 16560);
2221   jcc(Assembler::below, L_2TAG_PACKET_3_0_2);
2222   pand(xmm0, xmm6);
2223   subsd(xmm3, xmm5);
2224   addl(eax, 16351);
2225   shrl(eax, 4);
2226   subl(eax, 1022);
2227   cvtsi2sdl(xmm7, eax);
2228   mulpd(xmm5, xmm0);
2229   movsd(xmm4, Address(tmp, 0));
2230   mulsd(xmm3, xmm0);
2231   movsd(xmm6, Address(tmp, 0));
2232   subsd(xmm5, xmm2);
2233   movsd(xmm1, Address(tmp, 8));
2234   pshufd(xmm2, xmm3, 68);
2235   unpcklpd(xmm5, xmm3);
2236   addsd(xmm3, xmm5);
2237   movsd(xmm0, Address(tmp, 8));
2238   andl(edx, 16760832);
2239   shrl(edx, 10);
2240   addpd(xmm7, Address(tmp, edx, Address::times_1, -3616));
2241   mulsd(xmm4, xmm5);
2242   mulsd(xmm0, xmm5);
2243   mulsd(xmm6, xmm2);
2244   mulsd(xmm1, xmm2);
2245   movdqu(xmm2, xmm5);
2246   mulsd(xmm4, xmm5);
2247   addsd(xmm5, xmm0);
2248   movdqu(xmm0, xmm7);
2249   addsd(xmm2, xmm3);
2250   addsd(xmm7, xmm5);
2251   mulsd(xmm6, xmm2);
2252   subsd(xmm0, xmm7);
2253   movdqu(xmm2, xmm7);
2254   addsd(xmm7, xmm4);
2255   addsd(xmm0, xmm5);
2256   subsd(xmm2, xmm7);
2257   addsd(xmm4, xmm2);
2258   pshufd(xmm2, xmm5, 238);
2259   movdqu(xmm5, xmm7);
2260   addsd(xmm7, xmm2);
2261   addsd(xmm4, xmm0);
2262   movdqu(xmm0, Address(tmp, 8272));
2263   subsd(xmm5, xmm7);
2264   addsd(xmm6, xmm4);
2265   movdqu(xmm4, xmm7);
2266   addsd(xmm5, xmm2);
2267   addsd(xmm7, xmm1);
2268   movdqu(xmm2, Address(tmp, 8336));
2269   subsd(xmm4, xmm7);
2270   addsd(xmm6, xmm5);
2271   addsd(xmm4, xmm1);
2272   pshufd(xmm5, xmm7, 238);
2273   movdqu(xmm1, xmm7);
2274   addsd(xmm7, xmm5);
2275   subsd(xmm1, xmm7);
2276   addsd(xmm1, xmm5);
2277   movdqu(xmm5, Address(tmp, 8352));
2278   pshufd(xmm3, xmm3, 68);
2279   addsd(xmm6, xmm4);
2280   addsd(xmm6, xmm1);
2281   movdqu(xmm1, Address(tmp, 8304));
2282   mulpd(xmm0, xmm3);
2283   mulpd(xmm2, xmm3);
2284   pshufd(xmm4, xmm3, 68);
2285   mulpd(xmm3, xmm3);
2286   addpd(xmm0, xmm1);
2287   addpd(xmm5, xmm2);
2288   mulsd(xmm4, xmm3);
2289   movsd(xmm2, Address(tmp, 16));
2290   mulpd(xmm3, xmm3);
2291   movsd(xmm1, Address(rsp, 16));
2292   movzwl(ecx, Address(rsp, 22));
2293   mulpd(xmm0, xmm4);
2294   pextrw(eax, xmm7, 3);
2295   mulpd(xmm5, xmm4);
2296   mulpd(xmm0, xmm3);
2297   movsd(xmm4, Address(tmp, 8376));
2298   pand(xmm2, xmm7);
2299   addsd(xmm5, xmm6);
2300   subsd(xmm7, xmm2);
2301   addpd(xmm5, xmm0);
2302   andl(eax, 32752);
2303   subl(eax, 16368);
2304   andl(ecx, 32752);
2305   cmpl(ecx, 32752);
2306   jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
2307   addl(ecx, eax);
2308   cmpl(ecx, 16576);
2309   jcc(Assembler::aboveEqual, L_2TAG_PACKET_54_0_2);
2310   pshufd(xmm0, xmm5, 238);
2311   pand(xmm4, xmm1);
2312   movdqu(xmm3, xmm1);
2313   addsd(xmm5, xmm0);
2314   subsd(xmm1, xmm4);
2315   xorpd(xmm6, xmm6);
2316   movl(edx, 17080);
2317   pinsrw(xmm6, edx, 3);
2318   addsd(xmm7, xmm5);
2319   mulsd(xmm4, xmm2);
2320   mulsd(xmm1, xmm2);
2321   movdqu(xmm5, xmm6);
2322   mulsd(xmm3, xmm7);
2323   addsd(xmm6, xmm4);
2324   addsd(xmm1, xmm3);
2325   movdqu(xmm7, Address(tmp, 12480));
2326   movdl(edx, xmm6);
2327   subsd(xmm6, xmm5);
2328   movdqu(xmm3, Address(tmp, 12496));
2329   movsd(xmm2, Address(tmp, 12512));
2330   subsd(xmm4, xmm6);
2331   movl(ecx, edx);
2332   andl(edx, 255);
2333   addl(edx, edx);
2334   movdqu(xmm5, Address(tmp, edx, Address::times_8, 8384));
2335   addsd(xmm4, xmm1);
2336   pextrw(edx, xmm6, 3);
2337   shrl(ecx, 8);
2338   movl(eax, ecx);
2339   shrl(ecx, 1);
2340   subl(eax, ecx);
2341   shll(ecx, 20);
2342   movdl(xmm6, ecx);
2343   pshufd(xmm0, xmm4, 68);
2344   pshufd(xmm1, xmm4, 68);
2345   mulpd(xmm0, xmm0);
2346   mulpd(xmm7, xmm1);
2347   pshufd(xmm6, xmm6, 17);
2348   mulsd(xmm2, xmm4);
2349   andl(edx, 32767);
2350   cmpl(edx, 16529);
2351   jcc(Assembler::above, L_2TAG_PACKET_14_0_2);
2352   mulsd(xmm0, xmm0);
2353   paddd(xmm5, xmm6);
2354   addpd(xmm3, xmm7);
2355   mulsd(xmm2, xmm5);
2356   pshufd(xmm6, xmm5, 238);
2357   mulpd(xmm0, xmm3);
2358   addsd(xmm2, xmm6);
2359   pshufd(xmm3, xmm0, 238);
2360   addl(eax, 1023);
2361   shll(eax, 20);
2362   orl(eax, rsi);
2363   movdl(xmm4, eax);
2364   mulsd(xmm0, xmm5);
2365   mulsd(xmm3, xmm5);
2366   addsd(xmm0, xmm2);
2367   psllq(xmm4, 32);
2368   addsd(xmm0, xmm3);
2369   movdqu(xmm1, xmm0);
2370   addsd(xmm0, xmm5);
2371   movl(rsi, Address(rsp, 24));
2372   mulsd(xmm0, xmm4);
2373   pextrw(eax, xmm0, 3);
2374   andl(eax, 32752);
2375   jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
2376   cmpl(eax, 32752);
2377   jcc(Assembler::equal, L_2TAG_PACKET_17_0_2);
2378 
2379   bind(L_2TAG_PACKET_55_0_2);
2380   movsd(Address(rsp, 0), xmm0);
2381   fld_d(Address(rsp, 0));
2382   jmp(L_2TAG_PACKET_6_0_2);
2383 
2384   bind(L_2TAG_PACKET_48_0_2);
2385   movl(rsi, Address(rsp, 24));
2386 
2387   bind(L_2TAG_PACKET_56_0_2);
2388   movsd(xmm0, Address(rsp, 8));
2389   movsd(xmm1, Address(rsp, 16));
2390   addsd(xmm1, xmm1);
2391   xorpd(xmm2, xmm2);
2392   movl(eax, 49136);
2393   pinsrw(xmm2, eax, 3);
2394   addsd(xmm2, xmm0);
2395   pextrw(eax, xmm2, 3);
2396   cmpl(eax, 0);
2397   jcc(Assembler::notEqual, L_2TAG_PACKET_57_0_2);
2398   xorpd(xmm0, xmm0);
2399   movl(eax, 32760);
2400   pinsrw(xmm0, eax, 3);
2401   jmp(L_2TAG_PACKET_18_0_2);
2402 
2403   bind(L_2TAG_PACKET_57_0_2);
2404   movdl(edx, xmm1);
2405   movdqu(xmm3, xmm1);
2406   psrlq(xmm3, 20);
2407   movdl(ecx, xmm3);
2408   orl(ecx, edx);
2409   jcc(Assembler::equal, L_2TAG_PACKET_58_0_2);
2410   addsd(xmm1, xmm1);
2411   movdqu(xmm0, xmm1);
2412   jmp(L_2TAG_PACKET_18_0_2);
2413 
2414   bind(L_2TAG_PACKET_58_0_2);
2415   pextrw(eax, xmm0, 3);
2416   andl(eax, 32752);
2417   pextrw(edx, xmm1, 3);
2418   xorpd(xmm0, xmm0);
2419   subl(eax, 16368);
2420   xorl(eax, edx);
2421   testl(eax, 32768);
2422   jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
2423   movl(edx, 32752);
2424   pinsrw(xmm0, edx, 3);
2425   jmp(L_2TAG_PACKET_18_0_2);
2426 
2427   bind(L_2TAG_PACKET_54_0_2);
2428   pextrw(eax, xmm1, 3);
2429   pextrw(ecx, xmm2, 3);
2430   xorl(eax, ecx);
2431   testl(eax, 32768);
2432   jcc(Assembler::equal, L_2TAG_PACKET_50_0_2);
2433   jmp(L_2TAG_PACKET_49_0_2);
2434 
2435   bind(L_2TAG_PACKET_6_0_2);
2436   movl(tmp, Address(rsp, 64));
2437 
2438 }
2439 
2440 /******************************************************************************/
2441 //                     ALGORITHM DESCRIPTION - SIN()
2442 //                     ---------------------
2443 //
2444 //     1. RANGE REDUCTION
2445 //
2446 //     We perform an initial range reduction from X to r with
2447 //
2448 //          X =~= N * pi/32 + r
2449 //
2450 //     so that |r| <= pi/64 + epsilon. We restrict inputs to those
2451 //     where |N| <= 932560. Beyond this, the range reduction is
2452 //     insufficiently accurate. For extremely small inputs,
2453 //     denormalization can occur internally, impacting performance.
2454 //     This means that the main path is actually only taken for
2455 //     2^-252 <= |X| < 90112.
2456 //
2457 //     To avoid branches, we perform the range reduction to full
2458 //     accuracy each time.
2459 //
2460 //          X - N * (P_1 + P_2 + P_3)
2461 //
2462 //     where P_1 and P_2 are 32-bit numbers (so multiplication by N
2463 //     is exact) and P_3 is a 53-bit number. Together, these
2464 //     approximate pi well enough for all cases in the restricted
2465 //     range.
2466 //
2467 //     The main reduction sequence is:
2468 //
2469 //             y = 32/pi * x
2470 //             N = integer(y)
2471 //     (computed by adding and subtracting off SHIFTER)
2472 //
2473 //             m_1 = N * P_1
2474 //             m_2 = N * P_2
2475 //             r_1 = x - m_1
2476 //             r = r_1 - m_2
2477 //     (this r can be used for most of the calculation)
2478 //
2479 //             c_1 = r_1 - r
2480 //             m_3 = N * P_3
2481 //             c_2 = c_1 - m_2
2482 //             c = c_2 - m_3
2483 //
2484 //     2. MAIN ALGORITHM
2485 //
2486 //     The algorithm uses a table lookup based on B = M * pi / 32
2487 //     where M = N mod 64. The stored values are:
2488 //       sigma             closest power of 2 to cos(B)
2489 //       C_hl              53-bit cos(B) - sigma
2490 //       S_hi + S_lo       2 * 53-bit sin(B)
2491 //
2492 //     The computation is organized as follows:
2493 //
2494 //          sin(B + r + c) = [sin(B) + sigma * r] +
2495 //                           r * (cos(B) - sigma) +
2496 //                           sin(B) * [cos(r + c) - 1] +
2497 //                           cos(B) * [sin(r + c) - r]
2498 //
2499 //     which is approximately:
2500 //
2501 //          [S_hi + sigma * r] +
2502 //          C_hl * r +
2503 //          S_lo + S_hi * [(cos(r) - 1) - r * c] +
2504 //          (C_hl + sigma) * [(sin(r) - r) + c]
2505 //
2506 //     and this is what is actually computed. We separate this sum
2507 //     into four parts:
2508 //
2509 //          hi + med + pols + corr
2510 //
2511 //     where
2512 //
2513 //          hi       = S_hi + sigma r
2514 //          med      = C_hl * r
2515 //          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
2516 //          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
2517 //
2518 //     3. POLYNOMIAL
2519 //
2520 //     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
2521 //     (sin(r) - r) can be rearranged freely, since it is quite
2522 //     small, so we exploit parallelism to the fullest.
2523 //
2524 //          psc4       =   SC_4 * r_1
2525 //          msc4       =   psc4 * r
2526 //          r2         =   r * r
2527 //          msc2       =   SC_2 * r2
2528 //          r4         =   r2 * r2
2529 //          psc3       =   SC_3 + msc4
2530 //          psc1       =   SC_1 + msc2
2531 //          msc3       =   r4 * psc3
2532 //          sincospols =   psc1 + msc3
2533 //          pols       =   sincospols *
2534 //                         <S_hi * r^2 | (C_hl + sigma) * r^3>
2535 //
2536 //     4. CORRECTION TERM
2537 //
2538 //     This is where the "c" component of the range reduction is
2539 //     taken into account; recall that just "r" is used for most of
2540 //     the calculation.
2541 //
2542 //          -c   = m_3 - c_2
2543 //          -d   = S_hi * r - (C_hl + sigma)
2544 //          corr = -c * -d + S_lo
2545 //
2546 //     5. COMPENSATED SUMMATIONS
2547 //
2548 //     The two successive compensated summations add up the high
2549 //     and medium parts, leaving just the low parts to add up at
2550 //     the end.
2551 //
2552 //          rs        =  sigma * r
2553 //          res_int   =  S_hi + rs
2554 //          k_0       =  S_hi - res_int
2555 //          k_2       =  k_0 + rs
2556 //          med       =  C_hl * r
2557 //          res_hi    =  res_int + med
2558 //          k_1       =  res_int - res_hi
2559 //          k_3       =  k_1 + med
2560 //
2561 //     6. FINAL SUMMATION
2562 //
2563 //     We now add up all the small parts:
2564 //
2565 //          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
2566 //
2567 //     Now the overall result is just:
2568 //
2569 //          res_hi + res_lo
2570 //
2571 //     7. SMALL ARGUMENTS
2572 //
2573 //     If |x| < SNN (SNN meaning the smallest normal number), we
2574 //     simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we
2575 //     do 2^-55 * (2^55 * x - x).
2576 //
2577 // Special cases:
2578 //  sin(NaN) = quiet NaN, and raise invalid exception
2579 //  sin(INF) = NaN and raise invalid exception
2580 //  sin(+/-0) = +/-0
2581 //
2582 /******************************************************************************/
2583 
2584 ALIGNED_(8) juint _zero_none[] =
2585 {
2586     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL
2587 };
2588 
2589 ALIGNED_(4) juint __4onpi_d[] =
2590 {
2591     0x6dc9c883UL, 0x3ff45f30UL
2592 };
2593 
2594 ALIGNED_(4) juint _TWO_32H[] =
2595 {
2596     0x00000000UL, 0x41f80000UL
2597 };
2598 
2599 ALIGNED_(4) juint _pi04_3d[] =
2600 {
2601     0x54442d00UL, 0x3fe921fbUL, 0x98cc5180UL, 0x3ce84698UL, 0xcbb5bf6cUL,
2602     0xb9dfc8f8UL
2603 };
2604 
2605 ALIGNED_(4) juint _pi04_5d[] =
2606 {
2607     0x54400000UL, 0x3fe921fbUL, 0x1a600000UL, 0x3dc0b461UL, 0x2e000000UL,
2608     0x3b93198aUL, 0x25200000UL, 0x396b839aUL, 0x533e63a0UL, 0x37027044UL
2609 };
2610 
2611 ALIGNED_(4) juint _SCALE[] =
2612 {
2613     0x00000000UL, 0x32600000UL
2614 };
2615 
2616 ALIGNED_(4) juint _zeros[] =
2617 {
2618     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL
2619 };
2620 
2621 ALIGNED_(4) juint _pi04_2d[] =
2622 {
2623     0x54400000UL, 0x3fe921fbUL, 0x1a626331UL, 0x3dc0b461UL
2624 };
2625 
2626 ALIGNED_(4) juint _TWO_12H[] =
2627 {
2628     0x00000000UL, 0x40b80000UL
2629 };
2630 
2631 ALIGNED_(2) jushort __4onpi_31l[] =
2632 {
2633     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x836e, 0xa2f9,
2634     0x40d8, 0x0000, 0x0000, 0x0000, 0x2a50, 0x9c88, 0x40b7, 0x0000, 0x0000, 0x0000,
2635     0xabe8, 0xfe13, 0x4099, 0x0000, 0x0000, 0x0000, 0x6ee0, 0xfa9a, 0x4079, 0x0000,
2636     0x0000, 0x0000, 0x9580, 0xdb62, 0x4058, 0x0000, 0x0000, 0x0000, 0x1c82, 0xc9e2,
2637     0x403d, 0x0000, 0x0000, 0x0000, 0xb1c0, 0xff28, 0x4019, 0x0000, 0x0000, 0x0000,
2638     0xef14, 0xaf7a, 0x3ffe, 0x0000, 0x0000, 0x0000, 0x48dc, 0xc36e, 0x3fdf, 0x0000,
2639     0x0000, 0x0000, 0x3740, 0xe909, 0x3fbe, 0x0000, 0x0000, 0x0000, 0x924a, 0xb801,
2640     0x3fa2, 0x0000, 0x0000, 0x0000, 0x3a32, 0xdd41, 0x3f83, 0x0000, 0x0000, 0x0000,
2641     0x8778, 0x873f, 0x3f62, 0x0000, 0x0000, 0x0000, 0x1298, 0xb1cb, 0x3f44, 0x0000,
2642     0x0000, 0x0000, 0xa208, 0x9cfb, 0x3f26, 0x0000, 0x0000, 0x0000, 0xbaec, 0xd7d4,
2643     0x3f06, 0x0000, 0x0000, 0x0000, 0xd338, 0x8909, 0x3ee7, 0x0000, 0x0000, 0x0000,
2644     0x68b8, 0xe04d, 0x3ec7, 0x0000, 0x0000, 0x0000, 0x4e64, 0xdf90, 0x3eaa, 0x0000,
2645     0x0000, 0x0000, 0xc1a8, 0xeb1c, 0x3e89, 0x0000, 0x0000, 0x0000, 0x2720, 0xce7d,
2646     0x3e6a, 0x0000, 0x0000, 0x0000, 0x77b8, 0x8bf1, 0x3e4b, 0x0000, 0x0000, 0x0000,
2647     0xec7e, 0xe4a0, 0x3e2e, 0x0000, 0x0000, 0x0000, 0xffbc, 0xf12f, 0x3e0f, 0x0000,
2648     0x0000, 0x0000, 0xfdc0, 0xb301, 0x3deb, 0x0000, 0x0000, 0x0000, 0xc5ac, 0x9788,
2649     0x3dd1, 0x0000, 0x0000, 0x0000, 0x47da, 0x829b, 0x3db2, 0x0000, 0x0000, 0x0000,
2650     0xd9e4, 0xa6cf, 0x3d93, 0x0000, 0x0000, 0x0000, 0x36e8, 0xf961, 0x3d73, 0x0000,
2651     0x0000, 0x0000, 0xf668, 0xf463, 0x3d54, 0x0000, 0x0000, 0x0000, 0x5168, 0xf2ff,
2652     0x3d35, 0x0000, 0x0000, 0x0000, 0x758e, 0xea4f, 0x3d17, 0x0000, 0x0000, 0x0000,
2653     0xf17a, 0xebe5, 0x3cf8, 0x0000, 0x0000, 0x0000, 0x9cfa, 0x9e83, 0x3cd9, 0x0000,
2654     0x0000, 0x0000, 0xa4ba, 0xe294, 0x3cba, 0x0000, 0x0000, 0x0000, 0xd7ec, 0x9afe,
2655     0x3c9a, 0x0000, 0x0000, 0x0000, 0xae80, 0x8fc6, 0x3c79, 0x0000, 0x0000, 0x0000,
2656     0x3304, 0x8560, 0x3c5c, 0x0000, 0x0000, 0x0000, 0x6d70, 0xdf8f, 0x3c3b, 0x0000,
2657     0x0000, 0x0000, 0x3ef0, 0xafc3, 0x3c1e, 0x0000, 0x0000, 0x0000, 0xd0d8, 0x826b,
2658     0x3bfe, 0x0000, 0x0000, 0x0000, 0x1c80, 0xed4f, 0x3bdd, 0x0000, 0x0000, 0x0000,
2659     0x730c, 0xb0af, 0x3bc1, 0x0000, 0x0000, 0x0000, 0x6660, 0xc219, 0x3ba2, 0x0000,
2660     0x0000, 0x0000, 0x940c, 0xabe2, 0x3b83, 0x0000, 0x0000, 0x0000, 0xdffc, 0x8408,
2661     0x3b64, 0x0000, 0x0000, 0x0000, 0x6b98, 0xc402, 0x3b45, 0x0000, 0x0000, 0x0000,
2662     0x1818, 0x9cc4, 0x3b26, 0x0000, 0x0000, 0x0000, 0x5390, 0xaab6, 0x3b05, 0x0000,
2663     0x0000, 0x0000, 0xb070, 0xd464, 0x3ae9, 0x0000, 0x0000, 0x0000, 0x231a, 0x9ef0,
2664     0x3aca, 0x0000, 0x0000, 0x0000, 0x0670, 0xd1f1, 0x3aaa, 0x0000, 0x0000, 0x0000,
2665     0x7738, 0xd9f3, 0x3a8a, 0x0000, 0x0000, 0x0000, 0xa834, 0x8092, 0x3a6c, 0x0000,
2666     0x0000, 0x0000, 0xb45c, 0xce23, 0x3a4d, 0x0000, 0x0000, 0x0000, 0x36e8, 0xb0e5,
2667     0x3a2d, 0x0000, 0x0000, 0x0000, 0xd156, 0xaf44, 0x3a10, 0x0000, 0x0000, 0x0000,
2668     0x9f52, 0x8c82, 0x39f1, 0x0000, 0x0000, 0x0000, 0x829c, 0xff83, 0x39d1, 0x0000,
2669     0x0000, 0x0000, 0x7d06, 0xefc6, 0x39b3, 0x0000, 0x0000, 0x0000, 0x93e0, 0xb0b7,
2670     0x3992, 0x0000, 0x0000, 0x0000, 0xedde, 0xc193, 0x3975, 0x0000, 0x0000, 0x0000,
2671     0xbbc0, 0xcf49, 0x3952, 0x0000, 0x0000, 0x0000, 0xbdf0, 0xd63c, 0x3937, 0x0000,
2672     0x0000, 0x0000, 0x1f34, 0x9f3a, 0x3918, 0x0000, 0x0000, 0x0000, 0x3f8e, 0xe579,
2673     0x38f9, 0x0000, 0x0000, 0x0000, 0x90c8, 0xc3f8, 0x38d9, 0x0000, 0x0000, 0x0000,
2674     0x48c0, 0xf8f8, 0x38b7, 0x0000, 0x0000, 0x0000, 0xed56, 0xafa6, 0x389c, 0x0000,
2675     0x0000, 0x0000, 0x8218, 0xb969, 0x387d, 0x0000, 0x0000, 0x0000, 0x1852, 0xec57,
2676     0x385e, 0x0000, 0x0000, 0x0000, 0x670c, 0xd674, 0x383e, 0x0000, 0x0000, 0x0000,
2677     0xad40, 0xc2c4, 0x3820, 0x0000, 0x0000, 0x0000, 0x2e80, 0xa696, 0x3801, 0x0000,
2678     0x0000, 0x0000, 0xd800, 0xc467, 0x37dc, 0x0000, 0x0000, 0x0000, 0x3c72, 0xc5ae,
2679     0x37c3, 0x0000, 0x0000, 0x0000, 0xb006, 0xac69, 0x37a4, 0x0000, 0x0000, 0x0000,
2680     0x34a0, 0x8cdf, 0x3782, 0x0000, 0x0000, 0x0000, 0x9ed2, 0xd25e, 0x3766, 0x0000,
2681     0x0000, 0x0000, 0x6fec, 0xaaaa, 0x3747, 0x0000, 0x0000, 0x0000, 0x6040, 0xfb5c,
2682     0x3726, 0x0000, 0x0000, 0x0000, 0x764c, 0xa3fc, 0x3708, 0x0000, 0x0000, 0x0000,
2683     0xb254, 0x954e, 0x36e9, 0x0000, 0x0000, 0x0000, 0x3e1c, 0xf5dc, 0x36ca, 0x0000,
2684     0x0000, 0x0000, 0x7b06, 0xc635, 0x36ac, 0x0000, 0x0000, 0x0000, 0xa8ba, 0xd738,
2685     0x368d, 0x0000, 0x0000, 0x0000, 0x06cc, 0xb24e, 0x366d, 0x0000, 0x0000, 0x0000,
2686     0x7108, 0xac76, 0x364f, 0x0000, 0x0000, 0x0000, 0x2324, 0xa7cb, 0x3630, 0x0000,
2687     0x0000, 0x0000, 0xac40, 0xef15, 0x360f, 0x0000, 0x0000, 0x0000, 0xae46, 0xd516,
2688     0x35f2, 0x0000, 0x0000, 0x0000, 0x615e, 0xe003, 0x35d3, 0x0000, 0x0000, 0x0000,
2689     0x0cf0, 0xefe7, 0x35b1, 0x0000, 0x0000, 0x0000, 0xfb50, 0xf98c, 0x3595, 0x0000,
2690     0x0000, 0x0000, 0x0abc, 0xf333, 0x3575, 0x0000, 0x0000, 0x0000, 0xdd60, 0xca3f,
2691     0x3555, 0x0000, 0x0000, 0x0000, 0x7eb6, 0xd87f, 0x3538, 0x0000, 0x0000, 0x0000,
2692     0x44f4, 0xb291, 0x3519, 0x0000, 0x0000, 0x0000, 0xff80, 0xc982, 0x34f6, 0x0000,
2693     0x0000, 0x0000, 0x9de0, 0xd9b8, 0x34db, 0x0000, 0x0000, 0x0000, 0xcd42, 0x9366,
2694     0x34bc, 0x0000, 0x0000, 0x0000, 0xbef0, 0xfaee, 0x349d, 0x0000, 0x0000, 0x0000,
2695     0xdac4, 0xb6f1, 0x347d, 0x0000, 0x0000, 0x0000, 0xf140, 0x94de, 0x345d, 0x0000,
2696     0x0000, 0x0000, 0xa218, 0x8b4b, 0x343e, 0x0000, 0x0000, 0x0000, 0x6380, 0xa135,
2697     0x341e, 0x0000, 0x0000, 0x0000, 0xb184, 0x8cb2, 0x3402, 0x0000, 0x0000, 0x0000,
2698     0x196e, 0xdc61, 0x33e3, 0x0000, 0x0000, 0x0000, 0x0c00, 0xde05, 0x33c4, 0x0000,
2699     0x0000, 0x0000, 0xef9a, 0xbd38, 0x33a5, 0x0000, 0x0000, 0x0000, 0xc1a0, 0xdf00,
2700     0x3385, 0x0000, 0x0000, 0x0000, 0x1090, 0x9973, 0x3365, 0x0000, 0x0000, 0x0000,
2701     0x4882, 0x8301, 0x3348, 0x0000, 0x0000, 0x0000, 0x7abe, 0xadc7, 0x3329, 0x0000,
2702     0x0000, 0x0000, 0x7cba, 0xec2b, 0x330a, 0x0000, 0x0000, 0x0000, 0xa520, 0x8f21,
2703     0x32e9, 0x0000, 0x0000, 0x0000, 0x710c, 0x8d36, 0x32cc, 0x0000, 0x0000, 0x0000,
2704     0x5212, 0xc6ed, 0x32ad, 0x0000, 0x0000, 0x0000, 0x7308, 0xfd76, 0x328d, 0x0000,
2705     0x0000, 0x0000, 0x5014, 0xd548, 0x326f, 0x0000, 0x0000, 0x0000, 0xd3f2, 0xb499,
2706     0x3250, 0x0000, 0x0000, 0x0000, 0x7f74, 0xa606, 0x3230, 0x0000, 0x0000, 0x0000,
2707     0xf0a8, 0xd720, 0x3212, 0x0000, 0x0000, 0x0000, 0x185c, 0xe20f, 0x31f2, 0x0000,
2708     0x0000, 0x0000, 0xa5a8, 0x8738, 0x31d4, 0x0000, 0x0000, 0x0000, 0xdd74, 0xcafb,
2709     0x31b4, 0x0000, 0x0000, 0x0000, 0x98b6, 0xbd8e, 0x3196, 0x0000, 0x0000, 0x0000,
2710     0xe9de, 0x977f, 0x3177, 0x0000, 0x0000, 0x0000, 0x67c0, 0x818d, 0x3158, 0x0000,
2711     0x0000, 0x0000, 0xe52a, 0x9322, 0x3139, 0x0000, 0x0000, 0x0000, 0xe568, 0x9b6c,
2712     0x3119, 0x0000, 0x0000, 0x0000, 0x2358, 0xaa0a, 0x30fa, 0x0000, 0x0000, 0x0000,
2713     0xe480, 0xe13b, 0x30d9, 0x0000, 0x0000, 0x0000, 0x3024, 0x90a1, 0x30bd, 0x0000,
2714     0x0000, 0x0000, 0x9620, 0xda30, 0x309d, 0x0000, 0x0000, 0x0000, 0x898a, 0xb388,
2715     0x307f, 0x0000, 0x0000, 0x0000, 0xb24c, 0xc891, 0x3060, 0x0000, 0x0000, 0x0000,
2716     0x8056, 0xf98b, 0x3041, 0x0000, 0x0000, 0x0000, 0x72a4, 0xa1ea, 0x3021, 0x0000,
2717     0x0000, 0x0000, 0x6af8, 0x9488, 0x3001, 0x0000, 0x0000, 0x0000, 0xe00c, 0xdfcb,
2718     0x2fe4, 0x0000, 0x0000, 0x0000, 0xeeec, 0xc941, 0x2fc4, 0x0000, 0x0000, 0x0000,
2719     0x53e0, 0xe70f, 0x2fa4, 0x0000, 0x0000, 0x0000, 0x8f60, 0x9c07, 0x2f85, 0x0000,
2720     0x0000, 0x0000, 0xb328, 0xc3e7, 0x2f68, 0x0000, 0x0000, 0x0000, 0x9404, 0xf8c7,
2721     0x2f48, 0x0000, 0x0000, 0x0000, 0x38e0, 0xc99f, 0x2f29, 0x0000, 0x0000, 0x0000,
2722     0x9778, 0xd984, 0x2f09, 0x0000, 0x0000, 0x0000, 0xe700, 0xd142, 0x2eea, 0x0000,
2723     0x0000, 0x0000, 0xd904, 0x9443, 0x2ecd, 0x0000, 0x0000, 0x0000, 0xd4ba, 0xae7e,
2724     0x2eae, 0x0000, 0x0000, 0x0000, 0x8e5e, 0x8524, 0x2e8f, 0x0000, 0x0000, 0x0000,
2725     0xb550, 0xc9ed, 0x2e6e, 0x0000, 0x0000, 0x0000, 0x53b8, 0x8648, 0x2e51, 0x0000,
2726     0x0000, 0x0000, 0xdae4, 0x87f9, 0x2e32, 0x0000, 0x0000, 0x0000, 0x2942, 0xd966,
2727     0x2e13, 0x0000, 0x0000, 0x0000, 0x4f28, 0xcf3c, 0x2df3, 0x0000, 0x0000, 0x0000,
2728     0xfa40, 0xc4ef, 0x2dd1, 0x0000, 0x0000, 0x0000, 0x4424, 0xbca7, 0x2db5, 0x0000,
2729     0x0000, 0x0000, 0x2e62, 0xcdc5, 0x2d97, 0x0000, 0x0000, 0x0000, 0xed88, 0x996b,
2730     0x2d78, 0x0000, 0x0000, 0x0000, 0x7c30, 0xd97d, 0x2d56, 0x0000, 0x0000, 0x0000,
2731     0xed26, 0xbf6e, 0x2d3a, 0x0000, 0x0000, 0x0000, 0x2918, 0x921b, 0x2d1a, 0x0000,
2732     0x0000, 0x0000, 0x4e24, 0xe84e, 0x2cfb, 0x0000, 0x0000, 0x0000, 0x6dc0, 0x92ec,
2733     0x2cdd, 0x0000, 0x0000, 0x0000, 0x4f2c, 0xacf8, 0x2cbd, 0x0000, 0x0000, 0x0000,
2734     0xc634, 0xf094, 0x2c9e, 0x0000, 0x0000, 0x0000, 0xdc70, 0xe5d3, 0x2c7e, 0x0000,
2735     0x0000, 0x0000, 0x2180, 0xa600, 0x2c5b, 0x0000, 0x0000, 0x0000, 0x8480, 0xd680,
2736     0x2c3c, 0x0000, 0x0000, 0x0000, 0x8b24, 0xd63b, 0x2c22, 0x0000, 0x0000, 0x0000,
2737     0x02e0, 0xaa47, 0x2c00, 0x0000, 0x0000, 0x0000, 0x9ad0, 0xee84, 0x2be3, 0x0000,
2738     0x0000, 0x0000, 0xf7dc, 0xf699, 0x2bc6, 0x0000, 0x0000, 0x0000, 0xddde, 0xe490,
2739     0x2ba7, 0x0000, 0x0000, 0x0000, 0x34a0, 0xb4fd, 0x2b85, 0x0000, 0x0000, 0x0000,
2740     0x91b4, 0x8ef6, 0x2b68, 0x0000, 0x0000, 0x0000, 0xa3e0, 0xa2a7, 0x2b47, 0x0000,
2741     0x0000, 0x0000, 0xcce4, 0x82b3, 0x2b2a, 0x0000, 0x0000, 0x0000, 0xe4be, 0x8207,
2742     0x2b0c, 0x0000, 0x0000, 0x0000, 0x1d92, 0xab43, 0x2aed, 0x0000, 0x0000, 0x0000,
2743     0xe818, 0xf9f6, 0x2acd, 0x0000, 0x0000, 0x0000, 0xff12, 0xba80, 0x2aaf, 0x0000,
2744     0x0000, 0x0000, 0x5254, 0x8529, 0x2a90, 0x0000, 0x0000, 0x0000, 0x1b88, 0xe032,
2745     0x2a71, 0x0000, 0x0000, 0x0000, 0x3248, 0xd86d, 0x2a50, 0x0000, 0x0000, 0x0000,
2746     0x3140, 0xc9d5, 0x2a2e, 0x0000, 0x0000, 0x0000, 0x14e6, 0xbd47, 0x2a14, 0x0000,
2747     0x0000, 0x0000, 0x5c10, 0xe544, 0x29f4, 0x0000, 0x0000, 0x0000, 0x9f50, 0x90b6,
2748     0x29d4, 0x0000, 0x0000, 0x0000, 0x9850, 0xab55, 0x29b6, 0x0000, 0x0000, 0x0000,
2749     0x2750, 0x9d07, 0x2998, 0x0000, 0x0000, 0x0000, 0x6700, 0x8bbb, 0x2973, 0x0000,
2750     0x0000, 0x0000, 0x5dba, 0xed31, 0x295a, 0x0000, 0x0000, 0x0000, 0x61dc, 0x85fe,
2751     0x293a, 0x0000, 0x0000, 0x0000, 0x9ba2, 0xd6b4, 0x291c, 0x0000, 0x0000, 0x0000,
2752     0x2d30, 0xe3a5, 0x28fb, 0x0000, 0x0000, 0x0000, 0x6630, 0xb566, 0x28dd, 0x0000,
2753     0x0000, 0x0000, 0x5ad4, 0xa829, 0x28bf, 0x0000, 0x0000, 0x0000, 0x89d8, 0xe290,
2754     0x28a0, 0x0000, 0x0000, 0x0000, 0x3916, 0xc428, 0x2881, 0x0000, 0x0000, 0x0000,
2755     0x0490, 0xbea4, 0x2860, 0x0000, 0x0000, 0x0000, 0xee06, 0x80ee, 0x2843, 0x0000,
2756     0x0000, 0x0000, 0xfc00, 0xf327, 0x2820, 0x0000, 0x0000, 0x0000, 0xea40, 0xa871,
2757     0x2800, 0x0000, 0x0000, 0x0000, 0x63d8, 0x9c26, 0x27e4, 0x0000, 0x0000, 0x0000,
2758     0x07ba, 0xc0c9, 0x27c7, 0x0000, 0x0000, 0x0000, 0x3fa2, 0x9797, 0x27a8, 0x0000,
2759     0x0000, 0x0000, 0x21c6, 0xfeca, 0x2789, 0x0000, 0x0000, 0x0000, 0xde40, 0x860d,
2760     0x2768, 0x0000, 0x0000, 0x0000, 0x9cc8, 0x98ce, 0x2749, 0x0000, 0x0000, 0x0000,
2761     0x3778, 0xa31c, 0x272a, 0x0000, 0x0000, 0x0000, 0xe778, 0xf6e2, 0x270b, 0x0000,
2762     0x0000, 0x0000, 0x59b8, 0xf841, 0x26ed, 0x0000, 0x0000, 0x0000, 0x02e0, 0xad04,
2763     0x26cd, 0x0000, 0x0000, 0x0000, 0x5a92, 0x9380, 0x26b0, 0x0000, 0x0000, 0x0000,
2764     0xc740, 0x8886, 0x268d, 0x0000, 0x0000, 0x0000, 0x0680, 0xfaf8, 0x266c, 0x0000,
2765     0x0000, 0x0000, 0xfb60, 0x897f, 0x2653, 0x0000, 0x0000, 0x0000, 0x8760, 0xf903,
2766     0x2634, 0x0000, 0x0000, 0x0000, 0xad2a, 0xc2c8, 0x2615, 0x0000, 0x0000, 0x0000,
2767     0x2d86, 0x8aef, 0x25f6, 0x0000, 0x0000, 0x0000, 0x1ef4, 0xe627, 0x25d6, 0x0000,
2768     0x0000, 0x0000, 0x09e4, 0x8020, 0x25b7, 0x0000, 0x0000, 0x0000, 0x7548, 0xd227,
2769     0x2598, 0x0000, 0x0000, 0x0000, 0x75dc, 0xfb5b, 0x2579, 0x0000, 0x0000, 0x0000,
2770     0xea84, 0xc8b6, 0x255a, 0x0000, 0x0000, 0x0000, 0xe4d0, 0x8145, 0x253b, 0x0000,
2771     0x0000, 0x0000, 0x3640, 0x9768, 0x251c, 0x0000, 0x0000, 0x0000, 0x246a, 0xccec,
2772     0x24fe, 0x0000, 0x0000, 0x0000, 0x51d0, 0xa075, 0x24dd, 0x0000, 0x0000, 0x0000,
2773     0x4638, 0xa385, 0x24bf, 0x0000, 0x0000, 0x0000, 0xd788, 0xd776, 0x24a1, 0x0000,
2774     0x0000, 0x0000, 0x1370, 0x8997, 0x2482, 0x0000, 0x0000, 0x0000, 0x1e88, 0x9b67,
2775     0x2462, 0x0000, 0x0000, 0x0000, 0x6c08, 0xd975, 0x2444, 0x0000, 0x0000, 0x0000,
2776     0xfdb0, 0xcfc0, 0x2422, 0x0000, 0x0000, 0x0000, 0x3100, 0xc026, 0x2406, 0x0000,
2777     0x0000, 0x0000, 0xc5b4, 0xae64, 0x23e6, 0x0000, 0x0000, 0x0000, 0x2280, 0xf687,
2778     0x23c3, 0x0000, 0x0000, 0x0000, 0x2de0, 0x9006, 0x23a9, 0x0000, 0x0000, 0x0000,
2779     0x24bc, 0xf631, 0x238a, 0x0000, 0x0000, 0x0000, 0xb8d4, 0xa975, 0x236b, 0x0000,
2780     0x0000, 0x0000, 0xd9a4, 0xb949, 0x234b, 0x0000, 0x0000, 0x0000, 0xb54e, 0xbd39,
2781     0x232d, 0x0000, 0x0000, 0x0000, 0x4aac, 0x9a52, 0x230e, 0x0000, 0x0000, 0x0000,
2782     0xbbbc, 0xd085, 0x22ef, 0x0000, 0x0000, 0x0000, 0xdf18, 0xc633, 0x22cf, 0x0000,
2783     0x0000, 0x0000, 0x16d0, 0xeca5, 0x22af, 0x0000, 0x0000, 0x0000, 0xf2a0, 0xdf6f,
2784     0x228e, 0x0000, 0x0000, 0x0000, 0x8c44, 0xe86b, 0x2272, 0x0000, 0x0000, 0x0000,
2785     0x35c0, 0xbbf4, 0x2253, 0x0000, 0x0000, 0x0000, 0x0c40, 0xdafb, 0x2230, 0x0000,
2786     0x0000, 0x0000, 0x92dc, 0x9935, 0x2216, 0x0000, 0x0000, 0x0000, 0x0ca0, 0xbda6,
2787     0x21f3, 0x0000, 0x0000, 0x0000, 0x5958, 0xa6fd, 0x21d6, 0x0000, 0x0000, 0x0000,
2788     0xa3dc, 0x9d7f, 0x21b9, 0x0000, 0x0000, 0x0000, 0x79dc, 0xfcb5, 0x2199, 0x0000,
2789     0x0000, 0x0000, 0xf264, 0xcebb, 0x217b, 0x0000, 0x0000, 0x0000, 0x0abe, 0x8308,
2790     0x215c, 0x0000, 0x0000, 0x0000, 0x30ae, 0xb463, 0x213d, 0x0000, 0x0000, 0x0000,
2791     0x6228, 0xb040, 0x211c, 0x0000, 0x0000, 0x0000, 0xc9b2, 0xf43b, 0x20ff, 0x0000,
2792     0x0000, 0x0000, 0x3d8e, 0xa4b3, 0x20e0, 0x0000, 0x0000, 0x0000, 0x84e6, 0x8dab,
2793     0x20c1, 0x0000, 0x0000, 0x0000, 0xa124, 0x9b74, 0x20a1, 0x0000, 0x0000, 0x0000,
2794     0xc276, 0xd497, 0x2083, 0x0000, 0x0000, 0x0000, 0x6354, 0xa466, 0x2063, 0x0000,
2795     0x0000, 0x0000, 0x8654, 0xaf0a, 0x2044, 0x0000, 0x0000, 0x0000, 0x1d20, 0xfa5c,
2796     0x2024, 0x0000, 0x0000, 0x0000, 0xbcd0, 0xf3f0, 0x2004, 0x0000, 0x0000, 0x0000,
2797     0xedf0, 0xf0b6, 0x1fe7, 0x0000, 0x0000, 0x0000, 0x45bc, 0x9182, 0x1fc9, 0x0000,
2798     0x0000, 0x0000, 0xe254, 0xdc85, 0x1faa, 0x0000, 0x0000, 0x0000, 0xb898, 0xe9b1,
2799     0x1f8a, 0x0000, 0x0000, 0x0000, 0x0ebe, 0xe6f0, 0x1f6c, 0x0000, 0x0000, 0x0000,
2800     0xa9b8, 0xf584, 0x1f4c, 0x0000, 0x0000, 0x0000, 0x12e8, 0xdf6b, 0x1f2e, 0x0000,
2801     0x0000, 0x0000, 0x9f9e, 0xcd55, 0x1f0f, 0x0000, 0x0000, 0x0000, 0x05a0, 0xec3a,
2802     0x1eef, 0x0000, 0x0000, 0x0000, 0xd8e0, 0x96f8, 0x1ed1, 0x0000, 0x0000, 0x0000,
2803     0x3bd4, 0xccc6, 0x1eb1, 0x0000, 0x0000, 0x0000, 0x4910, 0xb87b, 0x1e93, 0x0000,
2804     0x0000, 0x0000, 0xbefc, 0xd40b, 0x1e73, 0x0000, 0x0000, 0x0000, 0x317e, 0xa406,
2805     0x1e55, 0x0000, 0x0000, 0x0000, 0x6bb2, 0xc2b2, 0x1e36, 0x0000, 0x0000, 0x0000,
2806     0xb87e, 0xbb78, 0x1e17, 0x0000, 0x0000, 0x0000, 0xa03c, 0xdbbd, 0x1df7, 0x0000,
2807     0x0000, 0x0000, 0x5b6c, 0xe3c8, 0x1dd9, 0x0000, 0x0000, 0x0000, 0x8968, 0xca8e,
2808     0x1dba, 0x0000, 0x0000, 0x0000, 0xc024, 0xe6ab, 0x1d9a, 0x0000, 0x0000, 0x0000,
2809     0x4110, 0xd4eb, 0x1d7a, 0x0000, 0x0000, 0x0000, 0xa168, 0xbdb5, 0x1d5d, 0x0000,
2810     0x0000, 0x0000, 0x012e, 0xa5fa, 0x1d3e, 0x0000, 0x0000, 0x0000, 0x6838, 0x9c1f,
2811     0x1d1e, 0x0000, 0x0000, 0x0000, 0xa158, 0xaa76, 0x1d00, 0x0000, 0x0000, 0x0000,
2812     0x090a, 0xbd95, 0x1ce1, 0x0000, 0x0000, 0x0000, 0xf73e, 0x8b6d, 0x1cc2, 0x0000,
2813     0x0000, 0x0000, 0x5fda, 0xbcbf, 0x1ca3, 0x0000, 0x0000, 0x0000, 0xdbe8, 0xb89f,
2814     0x1c84, 0x0000, 0x0000, 0x0000, 0x6e4c, 0x96c7, 0x1c64, 0x0000, 0x0000, 0x0000,
2815     0x19c2, 0xf2a4, 0x1c46, 0x0000, 0x0000, 0x0000, 0xb800, 0xf855, 0x1c1e, 0x0000,
2816     0x0000, 0x0000, 0x87fc, 0x85ff, 0x1c08, 0x0000, 0x0000, 0x0000, 0x1418, 0x839f,
2817     0x1be9, 0x0000, 0x0000, 0x0000, 0x6186, 0xd9d8, 0x1bca, 0x0000, 0x0000, 0x0000,
2818     0xf500, 0xabaa, 0x1ba6, 0x0000, 0x0000, 0x0000, 0x7b36, 0xdafe, 0x1b8c, 0x0000,
2819     0x0000, 0x0000, 0xf394, 0xe6d8, 0x1b6c, 0x0000, 0x0000, 0x0000, 0x6efc, 0x9e55,
2820     0x1b4e, 0x0000, 0x0000, 0x0000, 0x5e10, 0xc523, 0x1b2e, 0x0000, 0x0000, 0x0000,
2821     0x8210, 0xb6f9, 0x1b0d, 0x0000, 0x0000, 0x0000, 0x9ab0, 0x96e3, 0x1af1, 0x0000,
2822     0x0000, 0x0000, 0x3864, 0x92e7, 0x1ad1, 0x0000, 0x0000, 0x0000, 0x9878, 0xdc65,
2823     0x1ab1, 0x0000, 0x0000, 0x0000, 0xfa20, 0xd6cb, 0x1a94, 0x0000, 0x0000, 0x0000,
2824     0x6c00, 0xa4e4, 0x1a70, 0x0000, 0x0000, 0x0000, 0xab40, 0xb41b, 0x1a53, 0x0000,
2825     0x0000, 0x0000, 0x43a4, 0x8ede, 0x1a37, 0x0000, 0x0000, 0x0000, 0x22e0, 0x9314,
2826     0x1a15, 0x0000, 0x0000, 0x0000, 0x6170, 0xb949, 0x19f8, 0x0000, 0x0000, 0x0000,
2827     0x6b00, 0xe056, 0x19d8, 0x0000, 0x0000, 0x0000, 0x9ba8, 0xa94c, 0x19b9, 0x0000,
2828     0x0000, 0x0000, 0xfaa0, 0xaa16, 0x199b, 0x0000, 0x0000, 0x0000, 0x899a, 0xf627,
2829     0x197d, 0x0000, 0x0000, 0x0000, 0x9f20, 0xfb70, 0x195d, 0x0000, 0x0000, 0x0000,
2830     0xa4b8, 0xc176, 0x193e, 0x0000, 0x0000, 0x0000, 0xb21c, 0x85c3, 0x1920, 0x0000,
2831     0x0000, 0x0000, 0x50d2, 0x9b19, 0x1901, 0x0000, 0x0000, 0x0000, 0xd4b0, 0xb708,
2832     0x18e0, 0x0000, 0x0000, 0x0000, 0xfb88, 0xf510, 0x18c1, 0x0000, 0x0000, 0x0000,
2833     0x31ec, 0xdc8d, 0x18a3, 0x0000, 0x0000, 0x0000, 0x3c00, 0xbff9, 0x1885, 0x0000,
2834     0x0000, 0x0000, 0x5020, 0xc30b, 0x1862, 0x0000, 0x0000, 0x0000, 0xd4f0, 0xda0c,
2835     0x1844, 0x0000, 0x0000, 0x0000, 0x20d2, 0x99a5, 0x1828, 0x0000, 0x0000, 0x0000,
2836     0x852e, 0xd159, 0x1809, 0x0000, 0x0000, 0x0000, 0x7cd8, 0x97a1, 0x17e9, 0x0000,
2837     0x0000, 0x0000, 0x423a, 0x997b, 0x17cb, 0x0000, 0x0000, 0x0000, 0xc1c0, 0xbe7d,
2838     0x17a8, 0x0000, 0x0000, 0x0000, 0xe8bc, 0xdcdd, 0x178d, 0x0000, 0x0000, 0x0000,
2839     0x8b28, 0xae06, 0x176e, 0x0000, 0x0000, 0x0000, 0x102e, 0xb8d4, 0x174f, 0x0000,
2840     0x0000, 0x0000, 0xaa00, 0xaa5c, 0x172f, 0x0000, 0x0000, 0x0000, 0x51f0, 0x9fc0,
2841     0x170e, 0x0000, 0x0000, 0x0000, 0xf858, 0xe181, 0x16f2, 0x0000, 0x0000, 0x0000,
2842     0x91a8, 0x8162, 0x16d3, 0x0000, 0x0000, 0x0000, 0x5f40, 0xcb6f, 0x16b1, 0x0000,
2843     0x0000, 0x0000, 0xbb50, 0xe55f, 0x1693, 0x0000, 0x0000, 0x0000, 0xacd2, 0xd895,
2844     0x1676, 0x0000, 0x0000, 0x0000, 0xef30, 0x97bf, 0x1654, 0x0000, 0x0000, 0x0000,
2845     0xf700, 0xb3d7, 0x1633, 0x0000, 0x0000, 0x0000, 0x3454, 0xa7b5, 0x1619, 0x0000,
2846     0x0000, 0x0000, 0x6b00, 0xa929, 0x15f6, 0x0000, 0x0000, 0x0000, 0x9f04, 0x89f7,
2847     0x15db, 0x0000, 0x0000, 0x0000, 0xad78, 0xd985, 0x15bc, 0x0000, 0x0000, 0x0000,
2848     0xa46a, 0xae3f, 0x159d, 0x0000, 0x0000, 0x0000, 0x63a0, 0xd0da, 0x157c, 0x0000,
2849     0x0000, 0x0000, 0x5e90, 0x817d, 0x155e, 0x0000, 0x0000, 0x0000, 0x1494, 0xb13f,
2850     0x1540, 0x0000, 0x0000, 0x0000, 0x0090, 0x9c40, 0x1521, 0x0000, 0x0000, 0x0000,
2851     0xdd70, 0xcc86, 0x1500, 0x0000, 0x0000, 0x0000, 0x64f8, 0xdb6f, 0x14e1, 0x0000,
2852     0x0000, 0x0000, 0xe22c, 0xac17, 0x14c3, 0x0000, 0x0000, 0x0000, 0x60e0, 0xa9ad,
2853     0x14a3, 0x0000, 0x0000, 0x0000, 0x4640, 0xd658, 0x1481, 0x0000, 0x0000, 0x0000,
2854     0x6490, 0xa181, 0x1467, 0x0000, 0x0000, 0x0000, 0x1df4, 0xaaa2, 0x1447, 0x0000,
2855     0x0000, 0x0000, 0xb94a, 0x8f61, 0x1429, 0x0000, 0x0000, 0x0000, 0x5198, 0x9d83,
2856     0x1409, 0x0000, 0x0000, 0x0000, 0x0f7a, 0xa818, 0x13eb, 0x0000, 0x0000, 0x0000,
2857     0xc45e, 0xc06c, 0x13cc, 0x0000, 0x0000, 0x0000, 0x4ec0, 0xfa29, 0x13a8, 0x0000,
2858     0x0000, 0x0000, 0x6418, 0x8cad, 0x138c, 0x0000, 0x0000, 0x0000, 0xbcc8, 0xe7d1,
2859     0x136f, 0x0000, 0x0000, 0x0000, 0xc934, 0xf9b0, 0x134f, 0x0000, 0x0000, 0x0000,
2860     0x6ce0, 0x98df, 0x1331, 0x0000, 0x0000, 0x0000, 0x3516, 0xe5e9, 0x1312, 0x0000,
2861     0x0000, 0x0000, 0xc6c0, 0xef8b, 0x12ef, 0x0000, 0x0000, 0x0000, 0xaf02, 0x913d,
2862     0x12d4, 0x0000, 0x0000, 0x0000, 0xd230, 0xe1d5, 0x12b5, 0x0000, 0x0000, 0x0000,
2863     0xfba8, 0xc232, 0x1295, 0x0000, 0x0000, 0x0000, 0x7ba4, 0xabeb, 0x1277, 0x0000,
2864     0x0000, 0x0000, 0x6e5c, 0xc692, 0x1258, 0x0000, 0x0000, 0x0000, 0x76a2, 0x9756,
2865     0x1239, 0x0000, 0x0000, 0x0000, 0xe180, 0xe423, 0x1214, 0x0000, 0x0000, 0x0000,
2866     0x8c3c, 0x90f8, 0x11fb, 0x0000, 0x0000, 0x0000, 0x9f3c, 0x9fd2, 0x11dc, 0x0000,
2867     0x0000, 0x0000, 0x53e0, 0xb73e, 0x11bd, 0x0000, 0x0000, 0x0000, 0x45be, 0x88d6,
2868     0x119e, 0x0000, 0x0000, 0x0000, 0x111a, 0x8bc0, 0x117f, 0x0000, 0x0000, 0x0000,
2869     0xe26a, 0xd7ff, 0x1160, 0x0000, 0x0000, 0x0000, 0xfb60, 0xdd8d, 0x113f, 0x0000,
2870     0x0000, 0x0000, 0x9370, 0xc108, 0x1120, 0x0000, 0x0000, 0x0000, 0x9654, 0x8baf,
2871     0x1103, 0x0000, 0x0000, 0x0000, 0xd6ec, 0xd6b9, 0x10e4, 0x0000, 0x0000, 0x0000,
2872     0x23e4, 0xd7b7, 0x10c4, 0x0000, 0x0000, 0x0000, 0x1aa6, 0xa847, 0x10a6, 0x0000,
2873     0x0000, 0x0000, 0xbee6, 0x9fef, 0x1087, 0x0000, 0x0000, 0x0000, 0x26d0, 0xa6eb,
2874     0x1066, 0x0000, 0x0000, 0x0000, 0x5b86, 0xa880, 0x1049, 0x0000, 0x0000, 0x0000,
2875     0x125c, 0xd971, 0x1029, 0x0000, 0x0000, 0x0000, 0x1f78, 0x9d18, 0x100a, 0x0000,
2876     0x0000, 0x0000, 0x0e84, 0xb15b, 0x0feb, 0x0000, 0x0000, 0x0000, 0xd0c0, 0xc150,
2877     0x0fcc, 0x0000, 0x0000, 0x0000, 0xa330, 0xc40c, 0x0fad, 0x0000, 0x0000, 0x0000,
2878     0x5202, 0xfc2c, 0x0f8f, 0x0000, 0x0000, 0x0000, 0x3f7c, 0xecf5, 0x0f6f, 0x0000,
2879     0x0000, 0x0000, 0xef44, 0xfdfd, 0x0f50, 0x0000, 0x0000, 0x0000, 0x3f6c, 0xab1b,
2880     0x0f31, 0x0000, 0x0000, 0x0000, 0xf658, 0x89ec, 0x0f11, 0x0000, 0x0000, 0x0000,
2881     0xbfc8, 0x9ba8, 0x0ef4, 0x0000, 0x0000, 0x0000, 0x3d40, 0xbe21, 0x0ed5, 0x0000,
2882     0x0000, 0x0000, 0xbbc4, 0xc70d, 0x0eb6, 0x0000, 0x0000, 0x0000, 0x5158, 0xdb16,
2883     0x0e96, 0x0000, 0x0000, 0x0000, 0xb5a8, 0xa8d8, 0x0e78, 0x0000, 0x0000, 0x0000,
2884     0xcccc, 0xb40e, 0x0e58, 0x0000, 0x0000, 0x0000, 0x448c, 0xcb62, 0x0e3a, 0x0000,
2885     0x0000, 0x0000, 0xf12a, 0x8aed, 0x0e1b, 0x0000, 0x0000, 0x0000, 0x79d0, 0xc59c,
2886     0x0dfb, 0x0000, 0x0000, 0x0000, 0x06b4, 0xcdc9, 0x0ddd, 0x0000, 0x0000, 0x0000,
2887     0xae70, 0xa979, 0x0dbe, 0x0000, 0x0000, 0x0000, 0x317c, 0xa8fb, 0x0d9e, 0x0000,
2888     0x0000, 0x0000, 0x5fe0, 0x8a50, 0x0d7d, 0x0000, 0x0000, 0x0000, 0x70b6, 0xfdfa,
2889     0x0d61, 0x0000, 0x0000, 0x0000, 0x1640, 0x9dc7, 0x0d41, 0x0000, 0x0000, 0x0000,
2890     0x9a9c, 0xdc50, 0x0d23, 0x0000, 0x0000, 0x0000, 0x4fcc, 0x9a9b, 0x0d04, 0x0000,
2891     0x0000, 0x0000, 0x7e48, 0x8f77, 0x0ce5, 0x0000, 0x0000, 0x0000, 0x84e4, 0xd4b9,
2892     0x0cc6, 0x0000, 0x0000, 0x0000, 0x84e0, 0xbd10, 0x0ca6, 0x0000, 0x0000, 0x0000,
2893     0x1b0a, 0xc8d9, 0x0c88, 0x0000, 0x0000, 0x0000, 0x6a48, 0xfc81, 0x0c68, 0x0000,
2894     0x0000, 0x0000, 0x070a, 0xbef6, 0x0c4a, 0x0000, 0x0000, 0x0000, 0x8a70, 0xf096,
2895     0x0c2b, 0x0000, 0x0000, 0x0000, 0xecc2, 0xc994, 0x0c0c, 0x0000, 0x0000, 0x0000,
2896     0x1540, 0x9537, 0x0bea, 0x0000, 0x0000, 0x0000, 0x1b02, 0xab5b, 0x0bce, 0x0000,
2897     0x0000, 0x0000, 0x5dc0, 0xb0c8, 0x0bad, 0x0000, 0x0000, 0x0000, 0xc928, 0xe034,
2898     0x0b8f, 0x0000, 0x0000, 0x0000, 0x2d12, 0xb4b0, 0x0b71, 0x0000, 0x0000, 0x0000,
2899     0x8fc2, 0xbb94, 0x0b52, 0x0000, 0x0000, 0x0000, 0xe236, 0xe22f, 0x0b33, 0x0000,
2900     0x0000, 0x0000, 0xb97c, 0xbe9e, 0x0b13, 0x0000, 0x0000, 0x0000, 0xe1a6, 0xe16d,
2901     0x0af5, 0x0000, 0x0000, 0x0000, 0xd330, 0xbaf0, 0x0ad6, 0x0000, 0x0000, 0x0000,
2902     0xc0bc, 0xbbd0, 0x0ab7, 0x0000, 0x0000, 0x0000, 0x8e66, 0xdd9b, 0x0a98, 0x0000,
2903     0x0000, 0x0000, 0xc95c, 0xf799, 0x0a79, 0x0000, 0x0000, 0x0000, 0xdac0, 0xbe4c,
2904     0x0a55, 0x0000, 0x0000, 0x0000, 0xafc0, 0xc378, 0x0a37, 0x0000, 0x0000, 0x0000,
2905     0xa880, 0xe341, 0x0a19, 0x0000, 0x0000, 0x0000, 0xc242, 0x81f6, 0x09fd, 0x0000,
2906     0x0000, 0x0000, 0x7470, 0xc777, 0x09de, 0x0000, 0x0000, 0x0000, 0x62bc, 0xb684,
2907     0x09be, 0x0000, 0x0000, 0x0000, 0x43ac, 0x8c58, 0x099f, 0x0000, 0x0000, 0x0000,
2908     0xcc3c, 0xf9ac, 0x0981, 0x0000, 0x0000, 0x0000, 0x1526, 0xb670, 0x0962, 0x0000,
2909     0x0000, 0x0000, 0xc9fe, 0xdf50, 0x0943, 0x0000, 0x0000, 0x0000, 0x6ae6, 0xc065,
2910     0x0924, 0x0000, 0x0000, 0x0000, 0xb114, 0xcf29, 0x0905, 0x0000, 0x0000, 0x0000,
2911     0xd388, 0x922a, 0x08e4, 0x0000, 0x0000, 0x0000, 0xcf54, 0xb926, 0x08c7, 0x0000,
2912     0x0000, 0x0000, 0x3826, 0xe855, 0x08a8, 0x0000, 0x0000, 0x0000, 0xe7c8, 0x829b,
2913     0x0888, 0x0000, 0x0000, 0x0000, 0x546c, 0xa903, 0x086a, 0x0000, 0x0000, 0x0000,
2914     0x8768, 0x99cc, 0x0849, 0x0000, 0x0000, 0x0000, 0x00ac, 0xf529, 0x082b, 0x0000,
2915     0x0000, 0x0000, 0x2658, 0x9f0b, 0x080c, 0x0000, 0x0000, 0x0000, 0xfe5c, 0x9e21,
2916     0x07ee, 0x0000, 0x0000, 0x0000, 0x6da2, 0x9910, 0x07cf, 0x0000, 0x0000, 0x0000,
2917     0x9220, 0xf9b3, 0x07b0, 0x0000, 0x0000, 0x0000, 0x3d90, 0xa541, 0x0791, 0x0000,
2918     0x0000, 0x0000, 0x6e4c, 0xe7cc, 0x0771, 0x0000, 0x0000, 0x0000, 0xa8fa, 0xe80a,
2919     0x0753, 0x0000, 0x0000, 0x0000, 0x4e14, 0xc3a7, 0x0734, 0x0000, 0x0000, 0x0000,
2920     0xf7e0, 0xbad9, 0x0712, 0x0000, 0x0000, 0x0000, 0xfea0, 0xeff2, 0x06f5, 0x0000,
2921     0x0000, 0x0000, 0xcef6, 0xbd48, 0x06d7, 0x0000, 0x0000, 0x0000, 0x7544, 0xf559,
2922     0x06b7, 0x0000, 0x0000, 0x0000, 0x2388, 0xf655, 0x0698, 0x0000, 0x0000, 0x0000,
2923     0xe900, 0xad56, 0x0676, 0x0000, 0x0000, 0x0000, 0x2cc0, 0x8437, 0x0659, 0x0000,
2924     0x0000, 0x0000, 0x3068, 0xc544, 0x063b, 0x0000, 0x0000, 0x0000, 0xdc70, 0xe73c,
2925     0x061b, 0x0000, 0x0000, 0x0000, 0xee50, 0x9d49, 0x05fc, 0x0000, 0x0000, 0x0000,
2926     0x93d2, 0x81f6, 0x05df, 0x0000, 0x0000, 0x0000, 0x941c, 0xadff, 0x05bf, 0x0000,
2927     0x0000, 0x0000, 0x2ce2, 0x8e45, 0x05a1, 0x0000, 0x0000, 0x0000, 0x4a60, 0x95fd,
2928     0x0581, 0x0000, 0x0000, 0x0000, 0x79f8, 0xb83a, 0x0563, 0x0000, 0x0000, 0x0000,
2929     0xcb58, 0xa1f5, 0x0543, 0x0000, 0x0000, 0x0000, 0x2a3a, 0xdc36, 0x0525, 0x0000,
2930     0x0000, 0x0000, 0x14ee, 0x890e, 0x0506, 0x0000, 0x0000, 0x0000, 0x8f20, 0xc432,
2931     0x04e3, 0x0000, 0x0000, 0x0000, 0x8440, 0xb21d, 0x04c6, 0x0000, 0x0000, 0x0000,
2932     0x5430, 0xf698, 0x04a7, 0x0000, 0x0000, 0x0000, 0x04ae, 0x8b20, 0x048a, 0x0000,
2933     0x0000, 0x0000, 0x04d0, 0xe872, 0x046b, 0x0000, 0x0000, 0x0000, 0xc78e, 0x8893,
2934     0x044c, 0x0000, 0x0000, 0x0000, 0x0f78, 0x9895, 0x042b, 0x0000, 0x0000, 0x0000,
2935     0x11d4, 0xdf2e, 0x040d, 0x0000, 0x0000, 0x0000, 0xe84c, 0x89d5, 0x03ef, 0x0000,
2936     0x0000, 0x0000, 0xf7be, 0x8a67, 0x03d0, 0x0000, 0x0000, 0x0000, 0x95d0, 0xc906,
2937     0x03b1, 0x0000, 0x0000, 0x0000, 0x64ce, 0xd96c, 0x0392, 0x0000, 0x0000, 0x0000,
2938     0x97ba, 0xa16f, 0x0373, 0x0000, 0x0000, 0x0000, 0x463c, 0xc51a, 0x0354, 0x0000,
2939     0x0000, 0x0000, 0xef0a, 0xe93e, 0x0335, 0x0000, 0x0000, 0x0000, 0x526a, 0xa466,
2940     0x0316, 0x0000, 0x0000, 0x0000, 0x4140, 0xa94d, 0x02f5, 0x0000, 0x0000, 0x0000,
2941     0xb4ec, 0xce68, 0x02d8, 0x0000, 0x0000, 0x0000, 0x4fa2, 0x8490, 0x02b9, 0x0000,
2942     0x0000, 0x0000, 0x4e60, 0xca98, 0x0298, 0x0000, 0x0000, 0x0000, 0x08dc, 0xe09c,
2943     0x027a, 0x0000, 0x0000, 0x0000, 0x2b90, 0xc7e3, 0x025c, 0x0000, 0x0000, 0x0000,
2944     0x5a7c, 0xf8ef, 0x023c, 0x0000, 0x0000, 0x0000, 0x5022, 0x9d58, 0x021e, 0x0000,
2945     0x0000, 0x0000, 0x553a, 0xe242, 0x01ff, 0x0000, 0x0000, 0x0000, 0x7e6e, 0xb54d,
2946     0x01e0, 0x0000, 0x0000, 0x0000, 0xd2d4, 0xa88c, 0x01c1, 0x0000, 0x0000, 0x0000,
2947     0x75b6, 0xfe6d, 0x01a2, 0x0000, 0x0000, 0x0000, 0x3bb2, 0xf04c, 0x0183, 0x0000,
2948     0x0000, 0x0000, 0xc2d0, 0xc046, 0x0163, 0x0000, 0x0000, 0x0000, 0x250c, 0xf9d6,
2949     0x0145, 0x0000, 0x0000, 0x0000, 0xb7b4, 0x8a0d, 0x0126, 0x0000, 0x0000, 0x0000,
2950     0x1a72, 0xe4f5, 0x0107, 0x0000, 0x0000, 0x0000, 0x825c, 0xa9b8, 0x00e8, 0x0000,
2951     0x0000, 0x0000, 0x6c90, 0xc9ad, 0x00c6, 0x0000, 0x0000, 0x0000, 0x4d00, 0xd1bb,
2952     0x00aa, 0x0000, 0x0000, 0x0000, 0xa4a0, 0xee01, 0x0087, 0x0000, 0x0000, 0x0000,
2953     0x89a8, 0xbe9f, 0x006b, 0x0000, 0x0000, 0x0000, 0x038e, 0xc80c, 0x004d, 0x0000,
2954     0x0000, 0x0000, 0xfe26, 0x8384, 0x002e, 0x0000, 0x0000, 0x0000, 0xcd90, 0xca57,
2955     0x000e, 0x0000
2956 };
2957 
2958 void MacroAssembler::libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
2959   Label B1_1, B1_2, B1_3, B1_4, B1_5, B1_6, B1_7, B1_8, B1_9, B1_10, B1_11, B1_12;
2960   Label B1_13, B1_14, B1_15;
2961 
2962   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
2963 
2964   address zero_none = (address)_zero_none;
2965   address _4onpi_d = (address)__4onpi_d;
2966   address TWO_32H = (address)_TWO_32H;
2967   address pi04_3d = (address)_pi04_3d;
2968   address pi04_5d = (address)_pi04_5d;
2969   address SCALE = (address)_SCALE;
2970   address zeros = (address)_zeros;
2971   address pi04_2d = (address)_pi04_2d;
2972   address TWO_12H = (address)_TWO_12H;
2973   address _4onpi_31l = (address)__4onpi_31l;
2974 
2975   bind(B1_1);
2976   push(ebp);
2977   movl(ebp, esp);
2978   andl(esp, -16);
2979   push(esi);
2980   push(edi);
2981   push(ebx);
2982   subl(esp, 20);
2983   movzwl(ebx, Address(ebp, 16));
2984   andl(ebx, 32767);
2985   movl(eax, Address(ebp, 20));
2986   cmpl(ebx, 16413);
2987   movl(esi, Address(ebp, 24));
2988   movl(Address(esp, 4), eax);
2989   jcc(Assembler::greaterEqual, B1_8);
2990 
2991   bind(B1_2);
2992   fld_x(Address(ebp, 8));
2993   fld_d(ExternalAddress(_4onpi_d));    //0x6dc9c883UL, 0x3ff45f30UL
2994   fmul(1);
2995   fstp_x(Address(esp, 8));
2996   movzwl(ecx, Address(esp, 16));
2997   negl(ecx);
2998   addl(ecx, 30);
2999   movl(eax, Address(esp, 12));
3000   shrl(eax);
3001   cmpl(Address(esp, 4), 0);
3002   jcc(Assembler::notEqual, B1_4);
3003 
3004   bind(B1_3);
3005   lea(ecx, Address(eax, 1));
3006   andl(ecx, -2);
3007   jmp(B1_5);
3008 
3009   bind(B1_4);
3010   movl(ecx, eax);
3011   addl(eax, Address(esp, 4));
3012   movl(edx, eax);
3013   andl(edx, 1);
3014   addl(ecx, edx);
3015 
3016   bind(B1_5);
3017   fld_d(ExternalAddress(TWO_32H));    //0x00000000UL, 0x41f80000UL
3018   cmpl(ebx, 16400);
3019   movl(Address(esp, 0), ecx);
3020   fild_s(Address(esp, 0));
3021   jcc(Assembler::greaterEqual, B1_7);
3022 
3023   bind(B1_6);
3024   fld_d(ExternalAddress(pi04_3d));    //0x54442d00UL, 0x3fe921fbUL
3025   fmul(1);
3026   fsubp(3);
3027   fxch(1);
3028   fmul(2);
3029   fld_s(2);
3030   fadd(1);
3031   fsubrp(1);
3032   fld_s(0);
3033   fxch(1);
3034   fsuba(3);
3035   fld_d(ExternalAddress(8 + pi04_3d));    //0x98cc5180UL, 0x3ce84698UL
3036   fmul(3);
3037   fsuba(2);
3038   fxch(1);
3039   fsub(2);
3040   fsubrp(1);
3041   faddp(3);
3042   fld_d(ExternalAddress(16 + pi04_3d));    //0xcbb5bf6cUL, 0xb9dfc8f8UL
3043   fmulp(2);
3044   fld_s(1);
3045   fsubr(1);
3046   fsuba(1);
3047   fxch(2);
3048   fsubp(1);
3049   faddp(2);
3050   fxch(1);
3051   jmp(B1_15);
3052 
3053   bind(B1_7);
3054   fld_d(ExternalAddress(pi04_5d));    //0x54400000UL, 0x3fe921fbUL
3055   fmul(1);
3056   fsubp(3);
3057   fxch(1);
3058   fmul(2);
3059   fld_s(2);
3060   fadd(1);
3061   fsubrp(1);
3062   fld_s(0);
3063   fxch(1);
3064   fsuba(3);
3065   fld_d(ExternalAddress(8 + pi04_5d));    //0x1a600000UL, 0x3dc0b461UL
3066   fmul(3);
3067   fsuba(2);
3068   fxch(1);
3069   fsub(2);
3070   fsubrp(1);
3071   faddp(3);
3072   fld_d(ExternalAddress(16 + pi04_5d));    //0x2e000000UL, 0x3b93198aUL
3073   fmul(2);
3074   fld_s(0);
3075   fsubr(2);
3076   fsuba(2);
3077   fxch(1);
3078   fsubp(2);
3079   fxch(1);
3080   faddp(3);
3081   fld_d(ExternalAddress(24 + pi04_5d));    //0x25200000UL, 0x396b839aUL
3082   fmul(2);
3083   fld_s(0);
3084   fsubr(2);
3085   fsuba(2);
3086   fxch(1);
3087   fsubp(2);
3088   fxch(1);
3089   faddp(3);
3090   fld_d(ExternalAddress(32 + pi04_5d));    //0x533e63a0UL, 0x37027044UL
3091   fmulp(2);
3092   fld_s(1);
3093   fsubr(1);
3094   fsuba(1);
3095   fxch(2);
3096   fsubp(1);
3097   faddp(2);
3098   fxch(1);
3099   jmp(B1_15);
3100 
3101   bind(B1_8);
3102   fld_x(Address(ebp, 8));
3103   addl(ebx, -16417);
3104   fmul_d(as_Address(ExternalAddress(SCALE)));    //0x00000000UL, 0x32600000UL
3105   movl(eax, -2078209981);
3106   imull(ebx);
3107   addl(edx, ebx);
3108   movl(ecx, ebx);
3109   sarl(edx, 4);
3110   sarl(ecx, 31);
3111   subl(edx, ecx);
3112   movl(eax, edx);
3113   shll(eax, 5);
3114   fstp_x(Address(ebp, 8));
3115   fld_x(Address(ebp, 8));
3116   subl(eax, edx);
3117   movl(Address(ebp, 8), 0);
3118   subl(ebx, eax);
3119   fld_x(Address(ebp, 8));
3120   cmpl(ebx, 17);
3121   fsuba(1);
3122   jcc(Assembler::less, B1_10);
3123 
3124   bind(B1_9);
3125   lea(eax, Address(noreg, edx, Address::times_8));
3126   lea(ecx, Address(eax, edx, Address::times_4));
3127   incl(edx);
3128   fld_x(Address(_4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3129   fmul(2);
3130   fld_x(Address(12 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3131   fmul(2);
3132   fld_s(0);
3133   fadd(2);
3134   fsuba(2);
3135   fxch(1);
3136   faddp(2);
3137   fld_s(1);
3138   fadd(1);
3139   fstp_x(Address(esp, 8));
3140   andl(Address(esp, 8), -16777216);
3141   fld_x(Address(esp, 8));
3142   fsubp(1);
3143   jmp(B1_11);
3144 
3145   bind(B1_10);
3146   fld_d(ExternalAddress(zeros));    //0x00000000UL, 0x00000000UL
3147   fld_s(0);
3148 
3149   bind(B1_11);
3150   fld_s(0);
3151   lea(eax, Address(noreg, edx, Address::times_8));
3152   fld_s(3);
3153   lea(edx, Address(eax, edx, Address::times_4));
3154   fld_x(Address(_4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
3155   fmul(6);
3156   movl(Address(esp, 0), edx);
3157   fadda(2);
3158   fxch(2);
3159   fsuba(3);
3160   fxch(2);
3161   faddp(3);
3162   fxch(2);
3163   faddp(3);
3164   fld_x(Address(12 + _4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
3165   fmula(2);
3166   fld_s(2);
3167   fadd(2);
3168   fld_s(0);
3169   fxch(1);
3170   fsubra(3);
3171   fxch(3);
3172   fchs();
3173   faddp(4);
3174   fxch(3);
3175   faddp(4);
3176   fxch(2);
3177   fadd(3);
3178   fxch(2);
3179   fmul(5);
3180   fadda(2);
3181   fld_s(4);
3182   fld_x(Address(24 + _4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
3183   fmula(1);
3184   fxch(1);
3185   fadda(4);
3186   fxch(4);
3187   fstp_x(Address(esp, 8));
3188   movzwl(ebx, Address(esp, 16));
3189   andl(ebx, 32767);
3190   cmpl(ebx, 16415);
3191   jcc(Assembler::greaterEqual, B1_13);
3192 
3193   bind(B1_12);
3194   negl(ebx);
3195   addl(ebx, 30);
3196   movl(ecx, ebx);
3197   movl(eax, Address(esp, 12));
3198   shrl(eax);
3199   shll(eax);
3200   movl(Address(esp, 12), eax);
3201   movl(Address(esp, 8), 0);
3202   shrl(eax);
3203   jmp(B1_14);
3204 
3205   bind(B1_13);
3206   negl(ebx);
3207   addl(ebx, 30);
3208   movl(ecx, ebx);
3209   movl(edx, Address(esp, 8));
3210   shrl(edx);
3211   shll(edx);
3212   negl(ecx);
3213   movl(eax, Address(esp, 12));
3214   shll(eax);
3215   movl(ecx, ebx);
3216   movl(Address(esp, 8), edx);
3217   shrl(edx);
3218   orl(eax, edx);
3219 
3220   bind(B1_14);
3221   fld_x(Address(esp, 8));
3222   addl(eax, Address(esp, 4));
3223   fsubp(3);
3224   fmul(6);
3225   fld_s(4);
3226   movl(edx, eax);
3227   andl(edx, 1);
3228   fadd(3);
3229   movl(ecx, Address(esp, 0));
3230   fsuba(3);
3231   fxch(3);
3232   faddp(5);
3233   fld_s(1);
3234   fxch(3);
3235   fadd_d(Address(zero_none, RelocationHolder::none).plus_disp(edx, Address::times_8));
3236   fadda(3);
3237   fsub(3);
3238   faddp(2);
3239   fxch(1);
3240   faddp(4);
3241   fld_s(2);
3242   fadd(2);
3243   fsuba(2);
3244   fxch(3);
3245   faddp(2);
3246   fxch(1);
3247   faddp(3);
3248   fld_s(0);
3249   fadd(2);
3250   fsuba(2);
3251   fxch(1);
3252   faddp(2);
3253   fxch(1);
3254   faddp(2);
3255   fld_s(2);
3256   fld_x(Address(36 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3257   fmula(1);
3258   fld_s(1);
3259   fadd(3);
3260   fsuba(3);
3261   fxch(2);
3262   faddp(3);
3263   fxch(2);
3264   faddp(3);
3265   fxch(1);
3266   fmul(4);
3267   fld_s(0);
3268   fadd(2);
3269   fsuba(2);
3270   fxch(1);
3271   faddp(2);
3272   fxch(1);
3273   faddp(2);
3274   fld_s(2);
3275   fld_x(Address(48 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3276   fmula(1);
3277   fld_s(1);
3278   fadd(3);
3279   fsuba(3);
3280   fxch(2);
3281   faddp(3);
3282   fxch(2);
3283   faddp(3);
3284   fld_s(3);
3285   fxch(2);
3286   fmul(5);
3287   fld_x(Address(60 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3288   fmula(3);
3289   fxch(3);
3290   faddp(1);
3291   fld_s(0);
3292   fadd(2);
3293   fsuba(2);
3294   fxch(1);
3295   faddp(2);
3296   fxch(1);
3297   faddp(3);
3298   fld_s(3);
3299   fxch(2);
3300   fmul(5);
3301   fld_x(Address(72 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3302   fmula(3);
3303   fxch(3);
3304   faddp(1);
3305   fld_s(0);
3306   fadd(2);
3307   fsuba(2);
3308   fxch(1);
3309   faddp(2);
3310   fxch(1);
3311   faddp(3);
3312   fxch(1);
3313   fmulp(4);
3314   fld_x(Address(84 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3315   fmulp(3);
3316   fxch(2);
3317   faddp(3);
3318   fld_s(2);
3319   fadd(2);
3320   fld_d(ExternalAddress(TWO_32H));    //0x00000000UL, 0x41f80000UL
3321   fmul(1);
3322   fadda(1);
3323   fsubp(1);
3324   fsuba(2);
3325   fxch(3);
3326   faddp(2);
3327   faddp(1);
3328   fld_d(ExternalAddress(pi04_2d));    //0x54400000UL, 0x3fe921fbUL
3329   fld_s(0);
3330   fmul(2);
3331   fxch(2);
3332   fadd(3);
3333   fxch(1);
3334   fmulp(3);
3335   fmul_d(as_Address(ExternalAddress(8 + pi04_2d)));    //0x1a626331UL, 0x3dc0b461UL
3336   faddp(1);
3337 
3338   bind(B1_15);
3339   fld_d(ExternalAddress(TWO_12H));    //0x00000000UL, 0x40b80000UL
3340   fld_s(2);
3341   fadd(2);
3342   fmula(1);
3343   fstp_x(Address(esp, 8));
3344   fld_x(Address(esp, 8));
3345   fadd(1);
3346   fsubrp(1);
3347   fst_d(Address(esi, 0));
3348   fsubp(2);
3349   faddp(1);
3350   fstp_d(Address(esi, 8));
3351   addl(esp, 20);
3352   pop(ebx);
3353   pop(edi);
3354   pop(esi);
3355   movl(esp, ebp);
3356   pop(ebp);
3357   ret(0);
3358 }
3359 
3360 ALIGNED_(16) juint _L_2il0floatpacket_0[] =
3361 {
3362     0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
3363 };
3364 
3365 ALIGNED_(16) juint _Pi4Inv[] =
3366 {
3367     0x6dc9c883UL, 0x3ff45f30UL
3368 };
3369 
3370 ALIGNED_(16) juint _Pi4x3[] =
3371 {
3372     0x54443000UL, 0xbfe921fbUL, 0x3b39a000UL, 0x3d373dcbUL, 0xe0e68948UL,
3373     0xba845c06UL
3374 };
3375 
3376 ALIGNED_(16) juint _Pi4x4[] =
3377 {
3378     0x54400000UL, 0xbfe921fbUL, 0x1a600000UL, 0xbdc0b461UL, 0x2e000000UL,
3379     0xbb93198aUL, 0x252049c1UL, 0xb96b839aUL
3380 };
3381 
3382 ALIGNED_(16) jushort _SP[] =
3383 {
3384     0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffc, 0x0000, 0x8887, 0x8888, 0x8888, 0x8888,
3385     0x3ff8, 0x0000, 0xc527, 0x0d00, 0x00d0, 0xd00d, 0xbff2, 0x0000, 0x45f6, 0xb616,
3386     0x1d2a, 0xb8ef, 0x3fec, 0x0000, 0x825b, 0x3997, 0x2b3f, 0xd732, 0xbfe5, 0x0000,
3387     0xbf33, 0x8bb4, 0x2fda, 0xb092, 0x3fde, 0x0000, 0x44a6, 0xed1a, 0x29ef, 0xd73e,
3388     0xbfd6, 0x0000, 0x8610, 0x307f, 0x62a1, 0xc921, 0x3fce, 0x0000
3389 };
3390 
3391 ALIGNED_(16) jushort _CP[] =
3392 {
3393     0x0000, 0x0000, 0x0000, 0x8000, 0xbffe, 0x0000, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa,
3394     0x3ffa, 0x0000, 0x9c2f, 0x0b60, 0x60b6, 0xb60b, 0xbff5, 0x0000, 0xf024, 0x0cac,
3395     0x00d0, 0xd00d, 0x3fef, 0x0000, 0x03fe, 0x3f65, 0x7dbb, 0x93f2, 0xbfe9, 0x0000,
3396     0xd84d, 0xadee, 0xc698, 0x8f76, 0x3fe2, 0x0000, 0xdaba, 0xfe79, 0xea36, 0xc9c9,
3397     0xbfda, 0x0000, 0x3ac6, 0x0ba0, 0x07ce, 0xd585, 0x3fd2, 0x0000
3398 };
3399 
3400 ALIGNED_(16) juint _ones[] =
3401 {
3402     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xbff00000UL
3403 };
3404 
3405 void MacroAssembler::libm_sincos_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
3406   Label B1_1, B1_2, B1_3, B1_4, B1_5, B1_6, B1_7, B1_8, B1_9, B1_10, B1_11, B1_12;
3407   Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
3408   Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
3409   Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_41, B1_42, B1_43, B1_44, B1_45, B1_46;
3410 
3411   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
3412 
3413   address L_2il0floatpacket_0 = (address)_L_2il0floatpacket_0;
3414   address Pi4Inv = (address)_Pi4Inv;
3415   address Pi4x3 = (address)_Pi4x3;
3416   address Pi4x4 = (address)_Pi4x4;
3417   address ones = (address)_ones;
3418   address CP = (address)_CP;
3419   address SP = (address)_SP;
3420 
3421   bind(B1_1);
3422   push(ebp);
3423   movl(ebp, esp);
3424   andl(esp, -64);
3425   push(esi);
3426   push(edi);
3427   push(ebx);
3428   subl(esp, 52);
3429   movl(eax, Address(ebp, 16));
3430   movl(edx, Address(ebp, 20));
3431   movl(Address(esp, 32), eax);
3432   movl(Address(esp, 36), edx);
3433 
3434   bind(B1_2);
3435   fnstcw(Address(esp, 30));
3436 
3437   bind(B1_3);
3438   movsd(xmm1, Address(ebp, 8));
3439   movl(esi, Address(ebp, 12));
3440   movl(eax, esi);
3441   andl(eax, 2147483647);
3442   andps(xmm1, ExternalAddress(L_2il0floatpacket_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
3443   shrl(esi, 31);
3444   movl(Address(esp, 40), eax);
3445   cmpl(eax, 1104150528);
3446   movsd(Address(ebp, 8), xmm1);
3447   jcc(Assembler::aboveEqual, B1_11);
3448 
3449   bind(B1_4);
3450   movsd(xmm0, ExternalAddress(Pi4Inv));    //0x6dc9c883UL, 0x3ff45f30UL
3451   mulsd(xmm0, xmm1);
3452   movzwl(edx, Address(esp, 30));
3453   movl(eax, edx);
3454   andl(eax, 768);
3455   movsd(Address(esp, 0), xmm0);
3456   cmpl(eax, 768);
3457   jcc(Assembler::equal, B1_42);
3458 
3459   bind(B1_5);
3460   orl(edx, -64768);
3461   movw(Address(esp, 28), edx);
3462 
3463   bind(B1_6);
3464   fldcw(Address(esp, 28));
3465 
3466   bind(B1_7);
3467   movsd(xmm1, Address(ebp, 8));
3468   movl(ebx, 1);
3469 
3470   bind(B1_8);
3471   movl(Address(esp, 12), ebx);
3472   movl(ebx, Address(esp, 4));
3473   movl(eax, ebx);
3474   movl(Address(esp, 8), esi);
3475   movl(esi, ebx);
3476   shrl(esi, 20);
3477   andl(eax, 1048575);
3478   movl(ecx, esi);
3479   orl(eax, 1048576);
3480   negl(ecx);
3481   movl(edx, eax);
3482   addl(ecx, 19);
3483   addl(esi, 13);
3484   movl(Address(esp, 24), ecx);
3485   shrl(edx);
3486   movl(ecx, esi);
3487   shll(eax);
3488   movl(ecx, Address(esp, 24));
3489   movl(esi, Address(esp, 0));
3490   shrl(esi);
3491   orl(eax, esi);
3492   cmpl(ebx, 1094713344);
3493   movsd(Address(esp, 16), xmm1);
3494   fld_d(Address(esp, 16));
3495   cmov32(Assembler::below, eax, edx);
3496   movl(esi, Address(esp, 8));
3497   lea(edx, Address(eax, 1));
3498   movl(ebx, edx);
3499   andl(ebx, -2);
3500   movl(Address(esp, 16), ebx);
3501   fild_s(Address(esp, 16));
3502   movl(ebx, Address(esp, 12));
3503   cmpl(Address(esp, 40), 1094713344);
3504   jcc(Assembler::aboveEqual, B1_10);
3505 
3506   bind(B1_9);
3507   fld_d(ExternalAddress(Pi4x3));    //0x54443000UL, 0xbfe921fbUL
3508   fmul(1);
3509   faddp(2);
3510   fld_d(ExternalAddress(8 + Pi4x3));    //0x3b39a000UL, 0x3d373dcbUL
3511   fmul(1);
3512   faddp(2);
3513   fld_d(ExternalAddress(16 + Pi4x3));    //0xe0e68948UL, 0xba845c06UL
3514   fmulp(1);
3515   faddp(1);
3516   jmp(B1_17);
3517 
3518   bind(B1_10);
3519   fld_d(ExternalAddress(Pi4x4));    //0x54400000UL, 0xbfe921fbUL
3520   fmul(1);
3521   faddp(2);
3522   fld_d(ExternalAddress(8 + Pi4x4));    //0x1a600000UL, 0xbdc0b461UL
3523   fmul(1);
3524   faddp(2);
3525   fld_d(ExternalAddress(16 + Pi4x4));    //0x2e000000UL, 0xbb93198aUL
3526   fmul(1);
3527   faddp(2);
3528   fld_d(ExternalAddress(24 + Pi4x4));    //0x252049c1UL, 0xb96b839aUL
3529   fmulp(1);
3530   faddp(1);
3531   jmp(B1_17);
3532 
3533   bind(B1_11);
3534   movzwl(edx, Address(esp, 30));
3535   movl(eax, edx);
3536   andl(eax, 768);
3537   cmpl(eax, 768);
3538   jcc(Assembler::equal, B1_43);
3539   bind(B1_12);
3540   orl(edx, -64768);
3541   movw(Address(esp, 28), edx);
3542 
3543   bind(B1_13);
3544   fldcw(Address(esp, 28));
3545 
3546   bind(B1_14);
3547   movsd(xmm1, Address(ebp, 8));
3548   movl(ebx, 1);
3549 
3550   bind(B1_15);
3551   movsd(Address(esp, 16), xmm1);
3552   fld_d(Address(esp, 16));
3553   addl(esp, -32);
3554   lea(eax, Address(esp, 32));
3555   fstp_x(Address(esp, 0));
3556   movl(Address(esp, 12), 0);
3557   movl(Address(esp, 16), eax);
3558   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l())));
3559 
3560   bind(B1_46);
3561   addl(esp, 32);
3562 
3563   bind(B1_16);
3564   fld_d(Address(esp, 0));
3565   lea(edx, Address(eax, 1));
3566   fld_d(Address(esp, 8));
3567   faddp(1);
3568 
3569   bind(B1_17);
3570   movl(ecx, edx);
3571   addl(eax, 3);
3572   shrl(ecx, 2);
3573   andl(ecx, 1);
3574   shrl(eax, 2);
3575   xorl(esi, ecx);
3576   movl(ecx, Address(esp, 36));
3577   andl(eax, 1);
3578   andl(ecx, 3);
3579   cmpl(ecx, 3);
3580   jcc(Assembler::notEqual, B1_25);
3581 
3582   bind(B1_18);
3583   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
3584   fld_s(1);
3585   fmul((2));
3586   testb(edx, 2);
3587   fmula((1));
3588   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
3589   faddp(2);
3590   fmula(1);
3591   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
3592   faddp(2);
3593   fmula(1);
3594   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
3595   faddp(2);
3596   fmula(1);
3597   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
3598   faddp(2);
3599   fmula(1);
3600   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
3601   faddp(2);
3602   fmula(1);
3603   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
3604   faddp(2);
3605   fmula(1);
3606   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
3607   faddp(2);
3608   fmula(1);
3609   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
3610   fmul(1);
3611   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
3612   faddp(1);
3613   fmul(1);
3614   fld_x(ExternalAddress(62 + CP));    //0xd84d, 0xadee, 0xc6
3615   faddp(1);
3616   fmul(1);
3617   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
3618   faddp(1);
3619   fmul(1);
3620   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
3621   faddp(1);
3622   fmul(1);
3623   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
3624   faddp(1);
3625   fmul(1);
3626   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
3627   faddp(1);
3628   fmul(1);
3629   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
3630   faddp(1);
3631   fmulp(1);
3632   fld_d(Address(ones, RelocationHolder::none).plus_disp(esi, Address::times_8));
3633   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
3634   jcc(Assembler::equal, B1_22);
3635 
3636   bind(B1_19);
3637   fmulp(4);
3638   testl(ebx, ebx);
3639   fxch(2);
3640   fmul(3);
3641   movl(eax, Address(esp, 2));
3642   faddp(3);
3643   fxch(2);
3644   fstp_d(Address(eax, 0));
3645   fmula(1);
3646   faddp(1);
3647   fstp_d(Address(eax, 8));
3648   jcc(Assembler::equal, B1_21);
3649 
3650   bind(B1_20);
3651   fldcw(Address(esp, 30));
3652 
3653   bind(B1_21);
3654   addl(esp, 52);
3655   pop(ebx);
3656   pop(edi);
3657   pop(esi);
3658   movl(esp, ebp);
3659   pop(ebp);
3660   ret(0);
3661 
3662   bind(B1_22);
3663   fxch(1);
3664   fmulp(4);
3665   testl(ebx, ebx);
3666   fxch(2);
3667   fmul(3);
3668   movl(eax, Address(esp, 32));
3669   faddp(3);
3670   fxch(2);
3671   fstp_d(Address(eax, 8));
3672   fmula(1);
3673   faddp(1);
3674   fstp_d(Address(eax, 0));
3675   jcc(Assembler::equal, B1_24);
3676 
3677   bind(B1_23);
3678   fldcw(Address(esp, 30));
3679 
3680   bind(B1_24);
3681   addl(esp, 52);
3682   pop(ebx);
3683   pop(edi);
3684   pop(esi);
3685   movl(esp, ebp);
3686   pop(ebp);
3687   ret(0);
3688 
3689   bind(B1_25);
3690   testb(Address(esp, 36), 2);
3691   jcc(Assembler::equal, B1_33);
3692 
3693   bind(B1_26);
3694   fld_s(0);
3695   testb(edx, 2);
3696   fmul(1);
3697   fld_s(0);
3698   fmul(1);
3699   jcc(Assembler::equal, B1_30);
3700 
3701   bind(B1_27);
3702   fstp_d(2);
3703   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
3704   testl(ebx, ebx);
3705   fmul(2);
3706   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
3707   fmul(3);
3708   fld_x(ExternalAddress(60 + CP));    //0xd84d, 0xadee, 0xc6
3709   movl(eax, Address(rsp, 32));
3710   faddp(2);
3711   fxch(1);
3712   fmul(3);
3713   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
3714   faddp(2);
3715   fxch(1);
3716   fmul(3);
3717   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
3718   faddp(2);
3719   fxch(1);
3720   fmul(3);
3721   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
3722   faddp(2);
3723   fxch(1);
3724   fmul(3);
3725   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
3726   faddp(2);
3727   fxch(1);
3728   fmulp(3);
3729   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
3730   faddp(1);
3731   fmulp(1);
3732   faddp(1);
3733   fld_d(Address(ones, RelocationHolder::none).plus_disp(rsi, Address::times_8));
3734   fmula(1);
3735   faddp(1);
3736   fstp_d(Address(eax, 8));
3737   jcc(Assembler::equal, B1_29);
3738 
3739   bind(B1_28);
3740   fldcw(Address(esp, 30));
3741 
3742   bind(B1_29);
3743   addl(esp, 52);
3744   pop(ebx);
3745   pop(edi);
3746   pop(esi);
3747   movl(esp, ebp);
3748   pop(ebp);
3749   ret(0);
3750 
3751   bind(B1_30);
3752   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
3753   testl(ebx, ebx);
3754   fmul(1);
3755   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
3756   fmul(2);
3757   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
3758   movl(eax, Address(rsp, 32));
3759   faddp(2);
3760   fxch(1);
3761   fmul(2);
3762   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
3763   faddp(2);
3764   fxch(1);
3765   fmul(2);
3766   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
3767   faddp(2);
3768   fxch(1);
3769   fmul(2);
3770   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
3771   faddp(2);
3772   fxch(1);
3773   fmul(2);
3774   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
3775   faddp(2);
3776   fxch(1);
3777   fmulp(2);
3778   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
3779   faddp(1);
3780   fmulp(2);
3781   faddp(1);
3782   fld_d(Address(ones, RelocationHolder::none).plus_disp(rsi, Address::times_8));
3783   fmulp(2);
3784   fmul(1);
3785   faddp(1);
3786   fstp_d(Address(eax, 8));
3787   jcc(Assembler::equal, B1_32);
3788 
3789   bind(B1_31);
3790   fldcw(Address(esp, 30));
3791 
3792   bind(B1_32);
3793   addl(esp, 52);
3794   pop(ebx);
3795   pop(edi);
3796   pop(esi);
3797   movl(esp, ebp);
3798   pop(ebp);
3799   ret(0);
3800 
3801   bind(B1_33);
3802   testb(Address(esp, 36), 1);
3803   jcc(Assembler::equal, B1_41);
3804 
3805   bind(B1_34);
3806   fld_s(0);
3807   testb(edx, 2);
3808   fmul(1);
3809   fld_s(0);
3810   fmul(1);
3811   jcc(Assembler::equal, B1_38);
3812 
3813   bind(B1_35);
3814   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
3815   testl(ebx, ebx);
3816   fmul(1);
3817   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
3818   fmul(2);
3819   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
3820   faddp(2);
3821   fxch(1);
3822   fmul(2);
3823   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
3824   faddp(2);
3825   fxch(1);
3826   fmul(2);
3827   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
3828   faddp(2);
3829   fxch(1);
3830   fmul(2);
3831   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
3832   faddp(2);
3833   fxch(1);
3834   fmul(2);
3835   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
3836   faddp(2);
3837   fxch(1);
3838   fmulp(2);
3839   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
3840   faddp(1);
3841   fmulp(2);
3842   faddp(1);
3843   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
3844   fmulp(2);
3845   fmul(1);
3846   movl(eax, Address(esp, 32));
3847   faddp(1);
3848   fstp_d(Address(eax, 0));
3849   jcc(Assembler::equal, B1_37);
3850 
3851   bind(B1_36);
3852   fldcw(Address(esp, 30));
3853 
3854   bind(B1_37);
3855   addl(esp, 52);
3856   pop(ebx);
3857   pop(edi);
3858   pop(esi);
3859   movl(esp, ebp);
3860   pop(ebp);
3861   ret(0);
3862 
3863   bind(B1_38);
3864   fstp_d(2);
3865   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
3866   testl(ebx, ebx);
3867   fmul(2);
3868   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
3869   fmul(3);
3870   fld_x(ExternalAddress(60 + CP));    //0xd84d, 0xadee, 0xc6
3871   faddp(2);
3872   fxch(1);
3873   fmul(3);
3874   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
3875   faddp(2);
3876   fxch(1);
3877   fmul(3);
3878   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
3879   faddp(2);
3880   fxch(1);
3881   fmul(3);
3882   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
3883   faddp(2);
3884   fxch(1);
3885   fmul(3);
3886   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
3887   faddp(2);
3888   fxch(1);
3889   fmulp(3);
3890   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
3891   faddp(1);
3892   fmulp(1);
3893   faddp(1);
3894   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
3895   fmula(1);
3896   movl(eax, Address(esp, 32));
3897   faddp(1);
3898   fstp_d(Address(eax, 0));
3899   jcc(Assembler::equal, B1_40);
3900 
3901   bind(B1_39);
3902   fldcw(Address(esp, 30));
3903   bind(B1_40);
3904   addl(esp, 52);
3905   pop(ebx);
3906   pop(edi);
3907   pop(esi);
3908   movl(esp, ebp);
3909   pop(ebp);
3910   ret(0);
3911   bind(B1_41);
3912   fstp_d(0);
3913   addl(esp, 52);
3914   pop(ebx);
3915   pop(edi);
3916   pop(esi);
3917   movl(esp, ebp);
3918   pop(ebp);
3919   ret(0);
3920   bind(B1_42);
3921   xorl(ebx, ebx);
3922   jmp(B1_8);
3923   bind(B1_43);
3924   xorl(ebx, ebx);
3925   jmp(B1_15);
3926 }
3927 
3928 ALIGNED_(16) juint _static_const_table_sin[] =
3929 {
3930     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
3931     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
3932     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
3933     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
3934     0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
3935     0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
3936     0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
3937     0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
3938     0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
3939     0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
3940     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
3941     0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
3942     0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
3943     0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
3944     0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
3945     0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
3946     0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
3947     0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
3948     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
3949     0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
3950     0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
3951     0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
3952     0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
3953     0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
3954     0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
3955     0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
3956     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
3957     0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
3958     0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
3959     0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
3960     0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
3961     0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
3962     0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
3963     0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
3964     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
3965     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
3966     0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
3967     0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
3968     0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
3969     0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
3970     0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
3971     0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
3972     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
3973     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
3974     0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
3975     0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
3976     0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
3977     0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
3978     0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
3979     0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
3980     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
3981     0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
3982     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
3983     0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
3984     0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
3985     0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
3986     0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
3987     0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
3988     0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
3989     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
3990     0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
3991     0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
3992     0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
3993     0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
3994     0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
3995     0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
3996     0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
3997     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
3998     0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
3999     0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
4000     0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
4001     0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
4002     0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
4003     0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
4004     0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
4005     0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
4006     0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
4007     0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
4008     0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
4009     0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
4010     0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
4011     0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
4012     0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
4013     0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
4014     0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
4015     0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
4016     0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
4017     0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
4018     0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
4019     0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
4020     0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
4021     0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
4022     0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
4023     0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
4024     0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
4025     0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
4026     0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
4027     0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
4028     0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
4029     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
4030     0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
4031     0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
4032     0x00000000UL, 0x3ff00000UL, 0x55555555UL, 0xbfc55555UL, 0x00000000UL,
4033     0xbfe00000UL, 0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL,
4034     0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL, 0xa556c734UL,
4035     0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL, 0x1a600000UL, 0x3d90b461UL,
4036     0x1a600000UL, 0x3d90b461UL, 0x54400000UL, 0x3fb921fbUL, 0x00000000UL,
4037     0x00000000UL, 0x2e037073UL, 0x3b63198aUL, 0x00000000UL, 0x00000000UL,
4038     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4039     0x43380000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
4040     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
4041     0x00000000UL, 0xffffffffUL, 0x3fefffffUL, 0x00000000UL, 0x00000000UL,
4042     0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4043     0x80000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL, 0x3fe00000UL,
4044     0x00000000UL, 0x3fe00000UL
4045 };
4046 
4047 void MacroAssembler::fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ebx, Register edx) {
4048 
4049   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
4050   Label L_2TAG_PACKET_4_0_2, start;
4051   assert_different_registers(eax, ebx, edx);
4052   address static_const_table_sin = (address)_static_const_table_sin;
4053 
4054   bind(start);
4055   subl(rsp, 120);
4056   movl(Address(rsp, 56), ebx);
4057   lea(ebx, ExternalAddress(static_const_table_sin));
4058   movsd(xmm0, Address(rsp, 128));
4059   pextrw(eax, xmm0, 3);
4060   andl(eax, 32767);
4061   subl(eax, 12336);
4062   cmpl(eax, 4293);
4063   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
4064   movsd(xmm1, Address(ebx, 2160));
4065   mulsd(xmm1, xmm0);
4066   movsd(xmm5, Address(ebx, 2272));
4067   movdqu(xmm4, Address(ebx, 2256));
4068   pand(xmm4, xmm0);
4069   por(xmm5, xmm4);
4070   movsd(xmm3, Address(ebx, 2128));
4071   movdqu(xmm2, Address(ebx, 2112));
4072   addpd(xmm1, xmm5);
4073   cvttsd2sil(edx, xmm1);
4074   cvtsi2sdl(xmm1, edx);
4075   mulsd(xmm3, xmm1);
4076   unpcklpd(xmm1, xmm1);
4077   addl(edx, 1865216);
4078   movdqu(xmm4, xmm0);
4079   andl(edx, 63);
4080   movdqu(xmm5, Address(ebx, 2096));
4081   lea(eax, Address(ebx, 0));
4082   shll(edx, 5);
4083   addl(eax, edx);
4084   mulpd(xmm2, xmm1);
4085   subsd(xmm0, xmm3);
4086   mulsd(xmm1, Address(ebx, 2144));
4087   subsd(xmm4, xmm3);
4088   movsd(xmm7, Address(eax, 8));
4089   unpcklpd(xmm0, xmm0);
4090   movapd(xmm3, xmm4);
4091   subsd(xmm4, xmm2);
4092   mulpd(xmm5, xmm0);
4093   subpd(xmm0, xmm2);
4094   movdqu(xmm6, Address(ebx, 2064));
4095   mulsd(xmm7, xmm4);
4096   subsd(xmm3, xmm4);
4097   mulpd(xmm5, xmm0);
4098   mulpd(xmm0, xmm0);
4099   subsd(xmm3, xmm2);
4100   movdqu(xmm2, Address(eax, 0));
4101   subsd(xmm1, xmm3);
4102   movsd(xmm3, Address(eax, 24));
4103   addsd(xmm2, xmm3);
4104   subsd(xmm7, xmm2);
4105   mulsd(xmm2, xmm4);
4106   mulpd(xmm6, xmm0);
4107   mulsd(xmm3, xmm4);
4108   mulpd(xmm2, xmm0);
4109   mulpd(xmm0, xmm0);
4110   addpd(xmm5, Address(ebx, 2080));
4111   mulsd(xmm4, Address(eax, 0));
4112   addpd(xmm6, Address(ebx, 2048));
4113   mulpd(xmm5, xmm0);
4114   movapd(xmm0, xmm3);
4115   addsd(xmm3, Address(eax, 8));
4116   mulpd(xmm1, xmm7);
4117   movapd(xmm7, xmm4);
4118   addsd(xmm4, xmm3);
4119   addpd(xmm6, xmm5);
4120   movsd(xmm5, Address(eax, 8));
4121   subsd(xmm5, xmm3);
4122   subsd(xmm3, xmm4);
4123   addsd(xmm1, Address(eax, 16));
4124   mulpd(xmm6, xmm2);
4125   addsd(xmm5, xmm0);
4126   addsd(xmm3, xmm7);
4127   addsd(xmm1, xmm5);
4128   addsd(xmm1, xmm3);
4129   addsd(xmm1, xmm6);
4130   unpckhpd(xmm6, xmm6);
4131   addsd(xmm1, xmm6);
4132   addsd(xmm4, xmm1);
4133   movsd(Address(rsp, 0), xmm4);
4134   fld_d(Address(rsp, 0));
4135   jmp(L_2TAG_PACKET_1_0_2);
4136 
4137   bind(L_2TAG_PACKET_0_0_2);
4138   jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
4139   shrl(eax, 4);
4140   cmpl(eax, 268434685);
4141   jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
4142   movsd(Address(rsp, 0), xmm0);
4143   fld_d(Address(rsp, 0));
4144   jmp(L_2TAG_PACKET_1_0_2);
4145 
4146   bind(L_2TAG_PACKET_3_0_2);
4147   movsd(xmm3, Address(ebx, 2192));
4148   mulsd(xmm3, xmm0);
4149   subsd(xmm3, xmm0);
4150   mulsd(xmm3, Address(ebx, 2208));
4151   movsd(Address(rsp, 0), xmm0);
4152   fld_d(Address(rsp, 0));
4153   jmp(L_2TAG_PACKET_1_0_2);
4154 
4155   bind(L_2TAG_PACKET_2_0_2);
4156   movl(eax, Address(rsp, 132));
4157   andl(eax, 2146435072);
4158   cmpl(eax, 2146435072);
4159   jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
4160   subl(rsp, 32);
4161   movsd(Address(rsp, 0), xmm0);
4162   lea(eax, Address(rsp, 40));
4163   movl(Address(rsp, 8), eax);
4164   movl(eax, 2);
4165   movl(Address(rsp, 12), eax);
4166   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_sin_cos_huge())));
4167   addl(rsp, 32);
4168   fld_d(Address(rsp, 16));
4169   jmp(L_2TAG_PACKET_1_0_2);
4170   bind(L_2TAG_PACKET_4_0_2);
4171   fld_d(Address(rsp, 128));
4172   fmul_d(Address(ebx, 2240));
4173   bind(L_2TAG_PACKET_1_0_2);
4174   movl(ebx, Address(rsp, 56));
4175 }
4176 
4177 /******************************************************************************/
4178 //                     ALGORITHM DESCRIPTION - COS()
4179 //                     ---------------------
4180 //
4181 //     1. RANGE REDUCTION
4182 //
4183 //     We perform an initial range reduction from X to r with
4184 //
4185 //          X =~= N * pi/32 + r
4186 //
4187 //     so that |r| <= pi/64 + epsilon. We restrict inputs to those
4188 //     where |N| <= 932560. Beyond this, the range reduction is
4189 //     insufficiently accurate. For extremely small inputs,
4190 //     denormalization can occur internally, impacting performance.
4191 //     This means that the main path is actually only taken for
4192 //     2^-252 <= |X| < 90112.
4193 //
4194 //     To avoid branches, we perform the range reduction to full
4195 //     accuracy each time.
4196 //
4197 //          X - N * (P_1 + P_2 + P_3)
4198 //
4199 //     where P_1 and P_2 are 32-bit numbers (so multiplication by N
4200 //     is exact) and P_3 is a 53-bit number. Together, these
4201 //     approximate pi well enough for all cases in the restricted
4202 //     range.
4203 //
4204 //     The main reduction sequence is:
4205 //
4206 //             y = 32/pi * x
4207 //             N = integer(y)
4208 //     (computed by adding and subtracting off SHIFTER)
4209 //
4210 //             m_1 = N * P_1
4211 //             m_2 = N * P_2
4212 //             r_1 = x - m_1
4213 //             r = r_1 - m_2
4214 //     (this r can be used for most of the calculation)
4215 //
4216 //             c_1 = r_1 - r
4217 //             m_3 = N * P_3
4218 //             c_2 = c_1 - m_2
4219 //             c = c_2 - m_3
4220 //
4221 //     2. MAIN ALGORITHM
4222 //
4223 //     The algorithm uses a table lookup based on B = M * pi / 32
4224 //     where M = N mod 64. The stored values are:
4225 //       sigma             closest power of 2 to cos(B)
4226 //       C_hl              53-bit cos(B) - sigma
4227 //       S_hi + S_lo       2 * 53-bit sin(B)
4228 //
4229 //     The computation is organized as follows:
4230 //
4231 //          sin(B + r + c) = [sin(B) + sigma * r] +
4232 //                           r * (cos(B) - sigma) +
4233 //                           sin(B) * [cos(r + c) - 1] +
4234 //                           cos(B) * [sin(r + c) - r]
4235 //
4236 //     which is approximately:
4237 //
4238 //          [S_hi + sigma * r] +
4239 //          C_hl * r +
4240 //          S_lo + S_hi * [(cos(r) - 1) - r * c] +
4241 //          (C_hl + sigma) * [(sin(r) - r) + c]
4242 //
4243 //     and this is what is actually computed. We separate this sum
4244 //     into four parts:
4245 //
4246 //          hi + med + pols + corr
4247 //
4248 //     where
4249 //
4250 //          hi       = S_hi + sigma r
4251 //          med      = C_hl * r
4252 //          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
4253 //          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
4254 //
4255 //     3. POLYNOMIAL
4256 //
4257 //     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
4258 //     (sin(r) - r) can be rearranged freely, since it is quite
4259 //     small, so we exploit parallelism to the fullest.
4260 //
4261 //          psc4       =   SC_4 * r_1
4262 //          msc4       =   psc4 * r
4263 //          r2         =   r * r
4264 //          msc2       =   SC_2 * r2
4265 //          r4         =   r2 * r2
4266 //          psc3       =   SC_3 + msc4
4267 //          psc1       =   SC_1 + msc2
4268 //          msc3       =   r4 * psc3
4269 //          sincospols =   psc1 + msc3
4270 //          pols       =   sincospols *
4271 //                         <S_hi * r^2 | (C_hl + sigma) * r^3>
4272 //
4273 //     4. CORRECTION TERM
4274 //
4275 //     This is where the "c" component of the range reduction is
4276 //     taken into account; recall that just "r" is used for most of
4277 //     the calculation.
4278 //
4279 //          -c   = m_3 - c_2
4280 //          -d   = S_hi * r - (C_hl + sigma)
4281 //          corr = -c * -d + S_lo
4282 //
4283 //     5. COMPENSATED SUMMATIONS
4284 //
4285 //     The two successive compensated summations add up the high
4286 //     and medium parts, leaving just the low parts to add up at
4287 //     the end.
4288 //
4289 //          rs        =  sigma * r
4290 //          res_int   =  S_hi + rs
4291 //          k_0       =  S_hi - res_int
4292 //          k_2       =  k_0 + rs
4293 //          med       =  C_hl * r
4294 //          res_hi    =  res_int + med
4295 //          k_1       =  res_int - res_hi
4296 //          k_3       =  k_1 + med
4297 //
4298 //     6. FINAL SUMMATION
4299 //
4300 //     We now add up all the small parts:
4301 //
4302 //          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
4303 //
4304 //     Now the overall result is just:
4305 //
4306 //          res_hi + res_lo
4307 //
4308 //     7. SMALL ARGUMENTS
4309 //
4310 //     Inputs with |X| < 2^-252 are treated specially as
4311 //     1 - |x|.
4312 //
4313 // Special cases:
4314 //  cos(NaN) = quiet NaN, and raise invalid exception
4315 //  cos(INF) = NaN and raise invalid exception
4316 //  cos(0) = 1
4317 //
4318 /******************************************************************************/
4319 
4320 ALIGNED_(16) juint _static_const_table_cos[] =
4321 {
4322     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4323     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
4324     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
4325     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
4326     0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
4327     0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
4328     0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
4329     0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
4330     0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
4331     0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
4332     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
4333     0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
4334     0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
4335     0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
4336     0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
4337     0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
4338     0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
4339     0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
4340     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
4341     0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
4342     0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
4343     0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
4344     0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
4345     0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
4346     0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
4347     0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
4348     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4349     0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
4350     0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
4351     0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
4352     0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
4353     0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
4354     0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
4355     0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
4356     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
4357     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
4358     0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
4359     0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
4360     0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
4361     0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
4362     0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
4363     0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
4364     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
4365     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
4366     0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
4367     0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
4368     0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
4369     0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
4370     0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
4371     0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
4372     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
4373     0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4374     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
4375     0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
4376     0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
4377     0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
4378     0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
4379     0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
4380     0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
4381     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
4382     0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
4383     0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
4384     0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
4385     0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
4386     0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
4387     0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
4388     0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
4389     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
4390     0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
4391     0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
4392     0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
4393     0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
4394     0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
4395     0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
4396     0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
4397     0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
4398     0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
4399     0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
4400     0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
4401     0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
4402     0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
4403     0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
4404     0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
4405     0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
4406     0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
4407     0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
4408     0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
4409     0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
4410     0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
4411     0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
4412     0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
4413     0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
4414     0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
4415     0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
4416     0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
4417     0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
4418     0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
4419     0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
4420     0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
4421     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
4422     0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
4423     0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
4424     0x00000000UL, 0x3ff00000UL, 0x55555555UL, 0xbfc55555UL, 0x00000000UL,
4425     0xbfe00000UL, 0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL,
4426     0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL, 0xa556c734UL,
4427     0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL, 0x1a600000UL, 0x3d90b461UL,
4428     0x1a600000UL, 0x3d90b461UL, 0x54400000UL, 0x3fb921fbUL, 0x00000000UL,
4429     0x00000000UL, 0x2e037073UL, 0x3b63198aUL, 0x00000000UL, 0x00000000UL,
4430     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4431     0x43380000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3ff00000UL,
4432     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL,
4433     0x00000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL,
4434     0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
4435 };
4436 
4437 //registers,
4438 // input: (rbp + 8)
4439 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
4440 //          rax, rdx, rcx, rbx (tmp)
4441 
4442 // Code generated by Intel C compiler for LIBM library
4443 
4444 void MacroAssembler::fast_cos(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
4445   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
4446   Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
4447   Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
4448   Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
4449 
4450   assert_different_registers(tmp, eax, ecx, edx);
4451 
4452   address static_const_table_cos = (address)_static_const_table_cos;
4453 
4454   bind(start);
4455   subl(rsp, 120);
4456   movl(Address(rsp, 56), tmp);
4457   lea(tmp, ExternalAddress(static_const_table_cos));
4458   movsd(xmm0, Address(rsp, 128));
4459   pextrw(eax, xmm0, 3);
4460   andl(eax, 32767);
4461   subl(eax, 12336);
4462   cmpl(eax, 4293);
4463   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
4464   movsd(xmm1, Address(tmp, 2160));
4465   mulsd(xmm1, xmm0);
4466   movdqu(xmm5, Address(tmp, 2240));
4467   movsd(xmm4, Address(tmp, 2224));
4468   pand(xmm4, xmm0);
4469   por(xmm5, xmm4);
4470   movsd(xmm3, Address(tmp, 2128));
4471   movdqu(xmm2, Address(tmp, 2112));
4472   addpd(xmm1, xmm5);
4473   cvttsd2sil(edx, xmm1);
4474   cvtsi2sdl(xmm1, edx);
4475   mulsd(xmm3, xmm1);
4476   unpcklpd(xmm1, xmm1);
4477   addl(edx, 1865232);
4478   movdqu(xmm4, xmm0);
4479   andl(edx, 63);
4480   movdqu(xmm5, Address(tmp, 2096));
4481   lea(eax, Address(tmp, 0));
4482   shll(edx, 5);
4483   addl(eax, edx);
4484   mulpd(xmm2, xmm1);
4485   subsd(xmm0, xmm3);
4486   mulsd(xmm1, Address(tmp, 2144));
4487   subsd(xmm4, xmm3);
4488   movsd(xmm7, Address(eax, 8));
4489   unpcklpd(xmm0, xmm0);
4490   movapd(xmm3, xmm4);
4491   subsd(xmm4, xmm2);
4492   mulpd(xmm5, xmm0);
4493   subpd(xmm0, xmm2);
4494   movdqu(xmm6, Address(tmp, 2064));
4495   mulsd(xmm7, xmm4);
4496   subsd(xmm3, xmm4);
4497   mulpd(xmm5, xmm0);
4498   mulpd(xmm0, xmm0);
4499   subsd(xmm3, xmm2);
4500   movdqu(xmm2, Address(eax, 0));
4501   subsd(xmm1, xmm3);
4502   movsd(xmm3, Address(eax, 24));
4503   addsd(xmm2, xmm3);
4504   subsd(xmm7, xmm2);
4505   mulsd(xmm2, xmm4);
4506   mulpd(xmm6, xmm0);
4507   mulsd(xmm3, xmm4);
4508   mulpd(xmm2, xmm0);
4509   mulpd(xmm0, xmm0);
4510   addpd(xmm5, Address(tmp, 2080));
4511   mulsd(xmm4, Address(eax, 0));
4512   addpd(xmm6, Address(tmp, 2048));
4513   mulpd(xmm5, xmm0);
4514   movapd(xmm0, xmm3);
4515   addsd(xmm3, Address(eax, 8));
4516   mulpd(xmm1, xmm7);
4517   movapd(xmm7, xmm4);
4518   addsd(xmm4, xmm3);
4519   addpd(xmm6, xmm5);
4520   movsd(xmm5, Address(eax, 8));
4521   subsd(xmm5, xmm3);
4522   subsd(xmm3, xmm4);
4523   addsd(xmm1, Address(eax, 16));
4524   mulpd(xmm6, xmm2);
4525   addsd(xmm5, xmm0);
4526   addsd(xmm3, xmm7);
4527   addsd(xmm1, xmm5);
4528   addsd(xmm1, xmm3);
4529   addsd(xmm1, xmm6);
4530   unpckhpd(xmm6, xmm6);
4531   addsd(xmm1, xmm6);
4532   addsd(xmm4, xmm1);
4533   movsd(Address(rsp, 0), xmm4);
4534   fld_d(Address(rsp, 0));
4535   jmp(L_2TAG_PACKET_1_0_2);
4536 
4537   bind(L_2TAG_PACKET_0_0_2);
4538   jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
4539   pextrw(eax, xmm0, 3);
4540   andl(eax, 32767);
4541   pinsrw(xmm0, eax, 3);
4542   movsd(xmm1, Address(tmp, 2192));
4543   subsd(xmm1, xmm0);
4544   movsd(Address(rsp, 0), xmm1);
4545   fld_d(Address(rsp, 0));
4546   jmp(L_2TAG_PACKET_1_0_2);
4547 
4548   bind(L_2TAG_PACKET_2_0_2);
4549   movl(eax, Address(rsp, 132));
4550   andl(eax, 2146435072);
4551   cmpl(eax, 2146435072);
4552   jcc(Assembler::equal, L_2TAG_PACKET_3_0_2);
4553   subl(rsp, 32);
4554   movsd(Address(rsp, 0), xmm0);
4555   lea(eax, Address(rsp, 40));
4556   movl(Address(rsp, 8), eax);
4557   movl(eax, 1);
4558   movl(Address(rsp, 12), eax);
4559   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_sin_cos_huge())));
4560   addl(rsp, 32);
4561   fld_d(Address(rsp, 8));
4562   jmp(L_2TAG_PACKET_1_0_2);
4563 
4564   bind(L_2TAG_PACKET_3_0_2);
4565   fld_d(Address(rsp, 128));
4566   fmul_d(Address(tmp, 2208));
4567 
4568   bind(L_2TAG_PACKET_1_0_2);
4569   movl(tmp, Address(rsp, 56));
4570 }
4571