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