1 /*
   2  * Copyright (c) 2015, Intel Corporation.
   3  * Intel Math Library (LIBM) Source Code
   4  *
   5  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   6  *
   7  * This code is free software; you can redistribute it and/or modify it
   8  * under the terms of the GNU General Public License version 2 only, as
   9  * published by the Free Software Foundation.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  *
  25  */
  26 
  27 #include "precompiled.hpp"
  28 #include "asm/assembler.hpp"
  29 #include "asm/assembler.inline.hpp"
  30 #include "runtime/stubRoutines.hpp"
  31 #include "macroAssembler_x86.hpp"
  32 
  33 #ifdef _MSC_VER
  34 #define ALIGNED_(x) __declspec(align(x))
  35 #else
  36 #define ALIGNED_(x) __attribute__ ((aligned(x)))
  37 #endif
  38 
  39 // The 32 bit code is at most SSE2 compliant
  40 
  41 /******************************************************************************/
  42 //                     ALGORITHM DESCRIPTION - EXP()
  43 //                     ---------------------
  44 //
  45 // Description:
  46 //  Let K = 64 (table size).
  47 //        x    x/log(2)     n
  48 //       e  = 2          = 2 * T[j] * (1 + P(y))
  49 //  where
  50 //       x = m*log(2)/K + y,    y in [-log(2)/K..log(2)/K]
  51 //       m = n*K + j,           m,n,j - signed integer, j in [-K/2..K/2]
  52 //                  j/K
  53 //       values of 2   are tabulated as T[j] = T_hi[j] ( 1 + T_lo[j]).
  54 //
  55 //       P(y) is a minimax polynomial approximation of exp(x)-1
  56 //       on small interval [-log(2)/K..log(2)/K] (were calculated by Maple V).
  57 //
  58 //  To avoid problems with arithmetic overflow and underflow,
  59 //            n                        n1  n2
  60 //  value of 2  is safely computed as 2 * 2 where n1 in [-BIAS/2..BIAS/2]
  61 //  where BIAS is a value of exponent bias.
  62 //
  63 // Special cases:
  64 //  exp(NaN) = NaN
  65 //  exp(+INF) = +INF
  66 //  exp(-INF) = 0
  67 //  exp(x) = 1 for subnormals
  68 //  for finite argument, only exp(0)=1 is exact
  69 //  For IEEE double
  70 //    if x >  709.782712893383973096 then exp(x) overflow
  71 //    if x < -745.133219101941108420 then exp(x) underflow
  72 //
  73 /******************************************************************************/
  74 
  75 ALIGNED_(16) juint _static_const_table[] =
  76 {
  77     0x00000000UL, 0xfff00000UL, 0x00000000UL, 0xfff00000UL, 0xffffffc0UL,
  78     0x00000000UL, 0xffffffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL,
  79     0x0000ffc0UL, 0x00000000UL, 0x00000000UL, 0x43380000UL, 0x00000000UL,
  80     0x43380000UL, 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL,
  81     0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL, 0xbc9e3b3aUL,
  82     0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xfffffffeUL, 0x3fdfffffUL,
  83     0xfffffffeUL, 0x3fdfffffUL, 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL,
  84     0x3fa55555UL, 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL,
  85     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0e03754dUL,
  86     0x3cad7bbfUL, 0x3e778060UL, 0x00002c9aUL, 0x3567f613UL, 0x3c8cd252UL,
  87     0xd3158574UL, 0x000059b0UL, 0x61e6c861UL, 0x3c60f74eUL, 0x18759bc8UL,
  88     0x00008745UL, 0x5d837b6cUL, 0x3c979aa6UL, 0x6cf9890fUL, 0x0000b558UL,
  89     0x702f9cd1UL, 0x3c3ebe3dUL, 0x32d3d1a2UL, 0x0000e3ecUL, 0x1e63bcd8UL,
  90     0x3ca3516eUL, 0xd0125b50UL, 0x00011301UL, 0x26f0387bUL, 0x3ca4c554UL,
  91     0xaea92ddfUL, 0x0001429aUL, 0x62523fb6UL, 0x3ca95153UL, 0x3c7d517aUL,
  92     0x000172b8UL, 0x3f1353bfUL, 0x3c8b898cUL, 0xeb6fcb75UL, 0x0001a35bUL,
  93     0x3e3a2f5fUL, 0x3c9aecf7UL, 0x3168b9aaUL, 0x0001d487UL, 0x44a6c38dUL,
  94     0x3c8a6f41UL, 0x88628cd6UL, 0x0002063bUL, 0xe3a8a894UL, 0x3c968efdUL,
  95     0x6e756238UL, 0x0002387aUL, 0x981fe7f2UL, 0x3c80472bUL, 0x65e27cddUL,
  96     0x00026b45UL, 0x6d09ab31UL, 0x3c82f7e1UL, 0xf51fdee1UL, 0x00029e9dUL,
  97     0x720c0ab3UL, 0x3c8b3782UL, 0xa6e4030bUL, 0x0002d285UL, 0x4db0abb6UL,
  98     0x3c834d75UL, 0x0a31b715UL, 0x000306feUL, 0x5dd3f84aUL, 0x3c8fdd39UL,
  99     0xb26416ffUL, 0x00033c08UL, 0xcc187d29UL, 0x3ca12f8cUL, 0x373aa9caUL,
 100     0x000371a7UL, 0x738b5e8bUL, 0x3ca7d229UL, 0x34e59ff6UL, 0x0003a7dbUL,
 101     0xa72a4c6dUL, 0x3c859f48UL, 0x4c123422UL, 0x0003dea6UL, 0x259d9205UL,
 102     0x3ca8b846UL, 0x21f72e29UL, 0x0004160aUL, 0x60c2ac12UL, 0x3c4363edUL,
 103     0x6061892dUL, 0x00044e08UL, 0xdaa10379UL, 0x3c6ecce1UL, 0xb5c13cd0UL,
 104     0x000486a2UL, 0xbb7aafb0UL, 0x3c7690ceUL, 0xd5362a27UL, 0x0004bfdaUL,
 105     0x9b282a09UL, 0x3ca083ccUL, 0x769d2ca6UL, 0x0004f9b2UL, 0xc1aae707UL,
 106     0x3ca509b0UL, 0x569d4f81UL, 0x0005342bUL, 0x18fdd78eUL, 0x3c933505UL,
 107     0x36b527daUL, 0x00056f47UL, 0xe21c5409UL, 0x3c9063e1UL, 0xdd485429UL,
 108     0x0005ab07UL, 0x2b64c035UL, 0x3c9432e6UL, 0x15ad2148UL, 0x0005e76fUL,
 109     0x99f08c0aUL, 0x3ca01284UL, 0xb03a5584UL, 0x0006247eUL, 0x0073dc06UL,
 110     0x3c99f087UL, 0x82552224UL, 0x00066238UL, 0x0da05571UL, 0x3c998d4dUL,
 111     0x667f3bccUL, 0x0006a09eUL, 0x86ce4786UL, 0x3ca52bb9UL, 0x3c651a2eUL,
 112     0x0006dfb2UL, 0x206f0dabUL, 0x3ca32092UL, 0xe8ec5f73UL, 0x00071f75UL,
 113     0x8e17a7a6UL, 0x3ca06122UL, 0x564267c8UL, 0x00075febUL, 0x461e9f86UL,
 114     0x3ca244acUL, 0x73eb0186UL, 0x0007a114UL, 0xabd66c55UL, 0x3c65ebe1UL,
 115     0x36cf4e62UL, 0x0007e2f3UL, 0xbbff67d0UL, 0x3c96fe9fUL, 0x994cce12UL,
 116     0x00082589UL, 0x14c801dfUL, 0x3c951f14UL, 0x9b4492ecUL, 0x000868d9UL,
 117     0xc1f0eab4UL, 0x3c8db72fUL, 0x422aa0dbUL, 0x0008ace5UL, 0x59f35f44UL,
 118     0x3c7bf683UL, 0x99157736UL, 0x0008f1aeUL, 0x9c06283cUL, 0x3ca360baUL,
 119     0xb0cdc5e4UL, 0x00093737UL, 0x20f962aaUL, 0x3c95e8d1UL, 0x9fde4e4fUL,
 120     0x00097d82UL, 0x2b91ce27UL, 0x3c71affcUL, 0x82a3f090UL, 0x0009c491UL,
 121     0x589a2ebdUL, 0x3c9b6d34UL, 0x7b5de564UL, 0x000a0c66UL, 0x9ab89880UL,
 122     0x3c95277cUL, 0xb23e255cUL, 0x000a5503UL, 0x6e735ab3UL, 0x3c846984UL,
 123     0x5579fdbfUL, 0x000a9e6bUL, 0x92cb3387UL, 0x3c8c1a77UL, 0x995ad3adUL,
 124     0x000ae89fUL, 0xdc2d1d96UL, 0x3ca22466UL, 0xb84f15faUL, 0x000b33a2UL,
 125     0xb19505aeUL, 0x3ca1112eUL, 0xf2fb5e46UL, 0x000b7f76UL, 0x0a5fddcdUL,
 126     0x3c74ffd7UL, 0x904bc1d2UL, 0x000bcc1eUL, 0x30af0cb3UL, 0x3c736eaeUL,
 127     0xdd85529cUL, 0x000c199bUL, 0xd10959acUL, 0x3c84e08fUL, 0x2e57d14bUL,
 128     0x000c67f1UL, 0x6c921968UL, 0x3c676b2cUL, 0xdcef9069UL, 0x000cb720UL,
 129     0x36df99b3UL, 0x3c937009UL, 0x4a07897bUL, 0x000d072dUL, 0xa63d07a7UL,
 130     0x3c74a385UL, 0xdcfba487UL, 0x000d5818UL, 0xd5c192acUL, 0x3c8e5a50UL,
 131     0x03db3285UL, 0x000da9e6UL, 0x1c4a9792UL, 0x3c98bb73UL, 0x337b9b5eUL,
 132     0x000dfc97UL, 0x603a88d3UL, 0x3c74b604UL, 0xe78b3ff6UL, 0x000e502eUL,
 133     0x92094926UL, 0x3c916f27UL, 0xa2a490d9UL, 0x000ea4afUL, 0x41aa2008UL,
 134     0x3c8ec3bcUL, 0xee615a27UL, 0x000efa1bUL, 0x31d185eeUL, 0x3c8a64a9UL,
 135     0x5b6e4540UL, 0x000f5076UL, 0x4d91cd9dUL, 0x3c77893bUL, 0x819e90d8UL,
 136     0x000fa7c1UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x7ff00000UL,
 137     0x00000000UL, 0x00000000UL, 0xffffffffUL, 0x7fefffffUL, 0x00000000UL,
 138     0x00100000UL
 139 };
 140 
 141 //registers,
 142 // input: (rbp + 8)
 143 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
 144 //          rax, rdx, rcx, rbx (tmp)
 145 
 146 // Code generated by Intel C compiler for LIBM library
 147 
 148 void MacroAssembler::fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
 149   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
 150   Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
 151   Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
 152   Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
 153 
 154   assert_different_registers(tmp, eax, ecx, edx);
 155   jmp(start);
 156   address static_const_table = (address)_static_const_table;
 157 
 158   bind(start);
 159   subl(rsp, 120);
 160   movl(Address(rsp, 64), tmp);
 161   lea(tmp, ExternalAddress(static_const_table));
 162   movdqu(xmm0, Address(rsp, 128));
 163   unpcklpd(xmm0, xmm0);
 164   movdqu(xmm1, Address(tmp, 64));          // 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL
 165   movdqu(xmm6, Address(tmp, 48));          // 0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL
 166   movdqu(xmm2, Address(tmp, 80));          // 0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL
 167   movdqu(xmm3, Address(tmp, 96));          // 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL
 168   pextrw(eax, xmm0, 3);
 169   andl(eax, 32767);
 170   movl(edx, 16527);
 171   subl(edx, eax);
 172   subl(eax, 15504);
 173   orl(edx, eax);
 174   cmpl(edx, INT_MIN);
 175   jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
 176   mulpd(xmm1, xmm0);
 177   addpd(xmm1, xmm6);
 178   movapd(xmm7, xmm1);
 179   subpd(xmm1, xmm6);
 180   mulpd(xmm2, xmm1);
 181   movdqu(xmm4, Address(tmp, 128));         // 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL
 182   mulpd(xmm3, xmm1);
 183   movdqu(xmm5, Address(tmp, 144));         // 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL
 184   subpd(xmm0, xmm2);
 185   movdl(eax, xmm7);
 186   movl(ecx, eax);
 187   andl(ecx, 63);
 188   shll(ecx, 4);
 189   sarl(eax, 6);
 190   movl(edx, eax);
 191   movdqu(xmm6, Address(tmp, 16));          // 0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL
 192   pand(xmm7, xmm6);
 193   movdqu(xmm6, Address(tmp, 32));          // 0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL
 194   paddq(xmm7, xmm6);
 195   psllq(xmm7, 46);
 196   subpd(xmm0, xmm3);
 197   movdqu(xmm2, Address(tmp, ecx, Address::times_1, 160));
 198   mulpd(xmm4, xmm0);
 199   movapd(xmm6, xmm0);
 200   movapd(xmm1, xmm0);
 201   mulpd(xmm6, xmm6);
 202   mulpd(xmm0, xmm6);
 203   addpd(xmm5, xmm4);
 204   mulsd(xmm0, xmm6);
 205   mulpd(xmm6, Address(tmp, 112));          // 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL, 0x3fdfffffUL
 206   addsd(xmm1, xmm2);
 207   unpckhpd(xmm2, xmm2);
 208   mulpd(xmm0, xmm5);
 209   addsd(xmm1, xmm0);
 210   por(xmm2, xmm7);
 211   unpckhpd(xmm0, xmm0);
 212   addsd(xmm0, xmm1);
 213   addsd(xmm0, xmm6);
 214   addl(edx, 894);
 215   cmpl(edx, 1916);
 216   jcc (Assembler::above, L_2TAG_PACKET_1_0_2);
 217   mulsd(xmm0, xmm2);
 218   addsd(xmm0, xmm2);
 219   jmp(L_2TAG_PACKET_2_0_2);
 220 
 221   bind(L_2TAG_PACKET_1_0_2);
 222   fnstcw(Address(rsp, 24));
 223   movzwl(edx, Address(rsp, 24));
 224   orl(edx, 768);
 225   movw(Address(rsp, 28), edx);
 226   fldcw(Address(rsp, 28));
 227   movl(edx, eax);
 228   sarl(eax, 1);
 229   subl(edx, eax);
 230   movdqu(xmm6, Address(tmp, 0));           // 0x00000000UL, 0xfff00000UL, 0x00000000UL, 0xfff00000UL
 231   pandn(xmm6, xmm2);
 232   addl(eax, 1023);
 233   movdl(xmm3, eax);
 234   psllq(xmm3, 52);
 235   por(xmm6, xmm3);
 236   addl(edx, 1023);
 237   movdl(xmm4, edx);
 238   psllq(xmm4, 52);
 239   movsd(Address(rsp, 8), xmm0);
 240   fld_d(Address(rsp, 8));
 241   movsd(Address(rsp, 16), xmm6);
 242   fld_d(Address(rsp, 16));
 243   fmula(1);
 244   faddp(1);
 245   movsd(Address(rsp, 8), xmm4);
 246   fld_d(Address(rsp, 8));
 247   fmulp(1);
 248   fstp_d(Address(rsp, 8));
 249   movsd(xmm0,Address(rsp, 8));
 250   fldcw(Address(rsp, 24));
 251   pextrw(ecx, xmm0, 3);
 252   andl(ecx, 32752);
 253   cmpl(ecx, 32752);
 254   jcc(Assembler::greaterEqual, L_2TAG_PACKET_3_0_2);
 255   cmpl(ecx, 0);
 256   jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
 257   jmp(L_2TAG_PACKET_2_0_2);
 258   cmpl(ecx, INT_MIN);
 259   jcc(Assembler::less, L_2TAG_PACKET_3_0_2);
 260   cmpl(ecx, -1064950997);
 261   jcc(Assembler::less, L_2TAG_PACKET_2_0_2);
 262   jcc(Assembler::greater, L_2TAG_PACKET_4_0_2);
 263   movl(edx, Address(rsp, 128));
 264   cmpl(edx ,-17155601);
 265   jcc(Assembler::less, L_2TAG_PACKET_2_0_2);
 266   jmp(L_2TAG_PACKET_4_0_2);
 267 
 268   bind(L_2TAG_PACKET_3_0_2);
 269   movl(edx, 14);
 270   jmp(L_2TAG_PACKET_5_0_2);
 271 
 272   bind(L_2TAG_PACKET_4_0_2);
 273   movl(edx, 15);
 274 
 275   bind(L_2TAG_PACKET_5_0_2);
 276   movsd(Address(rsp, 0), xmm0);
 277   movsd(xmm0, Address(rsp, 128));
 278   fld_d(Address(rsp, 0));
 279   jmp(L_2TAG_PACKET_6_0_2);
 280 
 281   bind(L_2TAG_PACKET_7_0_2);
 282   cmpl(eax, 2146435072);
 283   jcc(Assembler::greaterEqual, L_2TAG_PACKET_8_0_2);
 284   movl(eax, Address(rsp, 132));
 285   cmpl(eax, INT_MIN);
 286   jcc(Assembler::greaterEqual, L_2TAG_PACKET_9_0_2);
 287   movsd(xmm0, Address(tmp, 1208));         // 0xffffffffUL, 0x7fefffffUL
 288   mulsd(xmm0, xmm0);
 289   movl(edx, 14);
 290   jmp(L_2TAG_PACKET_5_0_2);
 291 
 292   bind(L_2TAG_PACKET_9_0_2);
 293   movsd(xmm0, Address(tmp, 1216));
 294   mulsd(xmm0, xmm0);
 295   movl(edx, 15);
 296   jmp(L_2TAG_PACKET_5_0_2);
 297 
 298   bind(L_2TAG_PACKET_8_0_2);
 299   movl(edx, Address(rsp, 128));
 300   cmpl(eax, 2146435072);
 301   jcc(Assembler::above, L_2TAG_PACKET_10_0_2);
 302   cmpl(edx, 0);
 303   jcc(Assembler::notEqual, L_2TAG_PACKET_10_0_2);
 304   movl(eax, Address(rsp, 132));
 305   cmpl(eax, 2146435072);
 306   jcc(Assembler::notEqual, L_2TAG_PACKET_11_0_2);
 307   movsd(xmm0, Address(tmp, 1192));         // 0x00000000UL, 0x7ff00000UL
 308   jmp(L_2TAG_PACKET_2_0_2);
 309 
 310   bind(L_2TAG_PACKET_11_0_2);
 311   movsd(xmm0, Address(tmp, 1200));         // 0x00000000UL, 0x00000000UL
 312   jmp(L_2TAG_PACKET_2_0_2);
 313 
 314   bind(L_2TAG_PACKET_10_0_2);
 315   movsd(xmm0, Address(rsp, 128));
 316   addsd(xmm0, xmm0);
 317   jmp(L_2TAG_PACKET_2_0_2);
 318 
 319   bind(L_2TAG_PACKET_0_0_2);
 320   movl(eax, Address(rsp, 132));
 321   andl(eax, 2147483647);
 322   cmpl(eax, 1083179008);
 323   jcc(Assembler::aboveEqual, L_2TAG_PACKET_7_0_2);
 324   movsd(xmm0, Address(rsp, 128));
 325   addsd(xmm0, Address(tmp, 1184));         // 0x00000000UL, 0x3ff00000UL
 326   jmp(L_2TAG_PACKET_2_0_2);
 327 
 328   bind(L_2TAG_PACKET_2_0_2);
 329   movsd(Address(rsp, 48), xmm0);
 330   fld_d(Address(rsp, 48));
 331 
 332   bind(L_2TAG_PACKET_6_0_2);
 333   movl(tmp, Address(rsp, 64));
 334 }
 335 
 336 /******************************************************************************/
 337 //                     ALGORITHM DESCRIPTION - LOG()
 338 //                     ---------------------
 339 //
 340 //    x=2^k * mx, mx in [1,2)
 341 //
 342 //    Get B~1/mx based on the output of rcpss instruction (B0)
 343 //    B = int((B0*2^7+0.5))/2^7
 344 //
 345 //    Reduced argument: r=B*mx-1.0 (computed accurately in high and low parts)
 346 //
 347 //    Result:  k*log(2) - log(B) + p(r) if |x-1| >= small value (2^-6)  and
 348 //             p(r) is a degree 7 polynomial
 349 //             -log(B) read from data table (high, low parts)
 350 //             Result is formed from high and low parts
 351 //
 352 // Special cases:
 353 //  log(NaN) = quiet NaN, and raise invalid exception
 354 //  log(+INF) = that INF
 355 //  log(0) = -INF with divide-by-zero exception raised
 356 //  log(1) = +0
 357 //  log(x) = NaN with invalid exception raised if x < -0, including -INF
 358 //
 359 /******************************************************************************/
 360 
 361 ALIGNED_(16) juint _static_const_table_log[] =
 362 {
 363   0xfefa3800UL, 0x3fe62e42UL, 0x93c76730UL, 0x3d2ef357UL, 0xaa241800UL,
 364   0x3fe5ee82UL, 0x0cda46beUL, 0x3d220238UL, 0x5c364800UL, 0x3fe5af40UL,
 365   0xac10c9fbUL, 0x3d2dfa63UL, 0x26bb8c00UL, 0x3fe5707aUL, 0xff3303ddUL,
 366   0x3d09980bUL, 0x26867800UL, 0x3fe5322eUL, 0x5d257531UL, 0x3d05ccc4UL,
 367   0x835a5000UL, 0x3fe4f45aUL, 0x6d93b8fbUL, 0xbd2e6c51UL, 0x6f970c00UL,
 368   0x3fe4b6fdUL, 0xed4c541cUL, 0x3cef7115UL, 0x27e8a400UL, 0x3fe47a15UL,
 369   0xf94d60aaUL, 0xbd22cb6aUL, 0xf2f92400UL, 0x3fe43d9fUL, 0x481051f7UL,
 370   0xbcfd984fUL, 0x2125cc00UL, 0x3fe4019cUL, 0x30f0c74cUL, 0xbd26ce79UL,
 371   0x0c36c000UL, 0x3fe3c608UL, 0x7cfe13c2UL, 0xbd02b736UL, 0x17197800UL,
 372   0x3fe38ae2UL, 0xbb5569a4UL, 0xbd218b7aUL, 0xad9d8c00UL, 0x3fe35028UL,
 373   0x9527e6acUL, 0x3d10b83fUL, 0x44340800UL, 0x3fe315daUL, 0xc5a0ed9cUL,
 374   0xbd274e93UL, 0x57b0e000UL, 0x3fe2dbf5UL, 0x07b9dc11UL, 0xbd17a6e5UL,
 375   0x6d0ec000UL, 0x3fe2a278UL, 0xe797882dUL, 0x3d206d2bUL, 0x1134dc00UL,
 376   0x3fe26962UL, 0x05226250UL, 0xbd0b61f1UL, 0xd8bebc00UL, 0x3fe230b0UL,
 377   0x6e48667bUL, 0x3d12fc06UL, 0x5fc61800UL, 0x3fe1f863UL, 0xc9fe81d3UL,
 378   0xbd2a7242UL, 0x49ae6000UL, 0x3fe1c078UL, 0xed70e667UL, 0x3cccacdeUL,
 379   0x40f23c00UL, 0x3fe188eeUL, 0xf8ab4650UL, 0x3d14cc4eUL, 0xf6f29800UL,
 380   0x3fe151c3UL, 0xa293ae49UL, 0xbd2edd97UL, 0x23c75c00UL, 0x3fe11af8UL,
 381   0xbb9ddcb2UL, 0xbd258647UL, 0x8611cc00UL, 0x3fe0e489UL, 0x07801742UL,
 382   0x3d1c2998UL, 0xe2d05400UL, 0x3fe0ae76UL, 0x887e7e27UL, 0x3d1f486bUL,
 383   0x0533c400UL, 0x3fe078bfUL, 0x41edf5fdUL, 0x3d268122UL, 0xbe760400UL,
 384   0x3fe04360UL, 0xe79539e0UL, 0xbd04c45fUL, 0xe5b20800UL, 0x3fe00e5aUL,
 385   0xb1727b1cUL, 0xbd053ba3UL, 0xaf7a4800UL, 0x3fdfb358UL, 0x3c164935UL,
 386   0x3d0085faUL, 0xee031800UL, 0x3fdf4aa7UL, 0x6f014a8bUL, 0x3d12cde5UL,
 387   0x56b41000UL, 0x3fdee2a1UL, 0x5a470251UL, 0x3d2f27f4UL, 0xc3ddb000UL,
 388   0x3fde7b42UL, 0x5372bd08UL, 0xbd246550UL, 0x1a272800UL, 0x3fde148aUL,
 389   0x07322938UL, 0xbd1326b2UL, 0x484c9800UL, 0x3fddae75UL, 0x60dc616aUL,
 390   0xbd1ea42dUL, 0x46def800UL, 0x3fdd4902UL, 0xe9a767a8UL, 0x3d235bafUL,
 391   0x18064800UL, 0x3fdce42fUL, 0x3ec7a6b0UL, 0xbd0797c3UL, 0xc7455800UL,
 392   0x3fdc7ff9UL, 0xc15249aeUL, 0xbd29b6ddUL, 0x693fa000UL, 0x3fdc1c60UL,
 393   0x7fe8e180UL, 0x3d2cec80UL, 0x1b80e000UL, 0x3fdbb961UL, 0xf40a666dUL,
 394   0x3d27d85bUL, 0x04462800UL, 0x3fdb56faUL, 0x2d841995UL, 0x3d109525UL,
 395   0x5248d000UL, 0x3fdaf529UL, 0x52774458UL, 0xbd217cc5UL, 0x3c8ad800UL,
 396   0x3fda93edUL, 0xbea77a5dUL, 0x3d1e36f2UL, 0x0224f800UL, 0x3fda3344UL,
 397   0x7f9d79f5UL, 0x3d23c645UL, 0xea15f000UL, 0x3fd9d32bUL, 0x10d0c0b0UL,
 398   0xbd26279eUL, 0x43135800UL, 0x3fd973a3UL, 0xa502d9f0UL, 0xbd152313UL,
 399   0x635bf800UL, 0x3fd914a8UL, 0x2ee6307dUL, 0xbd1766b5UL, 0xa88b3000UL,
 400   0x3fd8b639UL, 0xe5e70470UL, 0xbd205ae1UL, 0x776dc800UL, 0x3fd85855UL,
 401   0x3333778aUL, 0x3d2fd56fUL, 0x3bd81800UL, 0x3fd7fafaUL, 0xc812566aUL,
 402   0xbd272090UL, 0x687cf800UL, 0x3fd79e26UL, 0x2efd1778UL, 0x3d29ec7dUL,
 403   0x76c67800UL, 0x3fd741d8UL, 0x49dc60b3UL, 0x3d2d8b09UL, 0xe6af1800UL,
 404   0x3fd6e60eUL, 0x7c222d87UL, 0x3d172165UL, 0x3e9c6800UL, 0x3fd68ac8UL,
 405   0x2756eba0UL, 0x3d20a0d3UL, 0x0b3ab000UL, 0x3fd63003UL, 0xe731ae00UL,
 406   0xbd2db623UL, 0xdf596000UL, 0x3fd5d5bdUL, 0x08a465dcUL, 0xbd0a0b2aUL,
 407   0x53c8d000UL, 0x3fd57bf7UL, 0xee5d40efUL, 0x3d1fadedUL, 0x0738a000UL,
 408   0x3fd522aeUL, 0x8164c759UL, 0x3d2ebe70UL, 0x9e173000UL, 0x3fd4c9e0UL,
 409   0x1b0ad8a4UL, 0xbd2e2089UL, 0xc271c800UL, 0x3fd4718dUL, 0x0967d675UL,
 410   0xbd2f27ceUL, 0x23d5e800UL, 0x3fd419b4UL, 0xec90e09dUL, 0x3d08e436UL,
 411   0x77333000UL, 0x3fd3c252UL, 0xb606bd5cUL, 0x3d183b54UL, 0x76be1000UL,
 412   0x3fd36b67UL, 0xb0f177c8UL, 0x3d116ecdUL, 0xe1d36000UL, 0x3fd314f1UL,
 413   0xd3213cb8UL, 0xbd28e27aUL, 0x7cdc9000UL, 0x3fd2bef0UL, 0x4a5004f4UL,
 414   0x3d2a9cfaUL, 0x1134d800UL, 0x3fd26962UL, 0xdf5bb3b6UL, 0x3d2c93c1UL,
 415   0x6d0eb800UL, 0x3fd21445UL, 0xba46baeaUL, 0x3d0a87deUL, 0x635a6800UL,
 416   0x3fd1bf99UL, 0x5147bdb7UL, 0x3d2ca6edUL, 0xcbacf800UL, 0x3fd16b5cUL,
 417   0xf7a51681UL, 0x3d2b9acdUL, 0x8227e800UL, 0x3fd1178eUL, 0x63a5f01cUL,
 418   0xbd2c210eUL, 0x67616000UL, 0x3fd0c42dUL, 0x163ceae9UL, 0x3d27188bUL,
 419   0x604d5800UL, 0x3fd07138UL, 0x16ed4e91UL, 0x3cf89cdbUL, 0x5626c800UL,
 420   0x3fd01eaeUL, 0x1485e94aUL, 0xbd16f08cUL, 0x6cb3b000UL, 0x3fcf991cUL,
 421   0xca0cdf30UL, 0x3d1bcbecUL, 0xe4dd0000UL, 0x3fcef5adUL, 0x65bb8e11UL,
 422   0xbcca2115UL, 0xffe71000UL, 0x3fce530eUL, 0x6041f430UL, 0x3cc21227UL,
 423   0xb0d49000UL, 0x3fcdb13dUL, 0xf715b035UL, 0xbd2aff2aUL, 0xf2656000UL,
 424   0x3fcd1037UL, 0x75b6f6e4UL, 0xbd084a7eUL, 0xc6f01000UL, 0x3fcc6ffbUL,
 425   0xc5962bd2UL, 0xbcf1ec72UL, 0x383be000UL, 0x3fcbd087UL, 0x595412b6UL,
 426   0xbd2d4bc4UL, 0x575bd000UL, 0x3fcb31d8UL, 0x4eace1aaUL, 0xbd0c358dUL,
 427   0x3c8ae000UL, 0x3fca93edUL, 0x50562169UL, 0xbd287243UL, 0x07089000UL,
 428   0x3fc9f6c4UL, 0x6865817aUL, 0x3d29904dUL, 0xdcf70000UL, 0x3fc95a5aUL,
 429   0x58a0ff6fUL, 0x3d07f228UL, 0xeb390000UL, 0x3fc8beafUL, 0xaae92cd1UL,
 430   0xbd073d54UL, 0x6551a000UL, 0x3fc823c1UL, 0x9a631e83UL, 0x3d1e0ddbUL,
 431   0x85445000UL, 0x3fc7898dUL, 0x70914305UL, 0xbd1c6610UL, 0x8b757000UL,
 432   0x3fc6f012UL, 0xe59c21e1UL, 0xbd25118dUL, 0xbe8c1000UL, 0x3fc6574eUL,
 433   0x2c3c2e78UL, 0x3d19cf8bUL, 0x6b544000UL, 0x3fc5bf40UL, 0xeb68981cUL,
 434   0xbd127023UL, 0xe4a1b000UL, 0x3fc527e5UL, 0xe5697dc7UL, 0x3d2633e8UL,
 435   0x8333b000UL, 0x3fc4913dUL, 0x54fdb678UL, 0x3d258379UL, 0xa5993000UL,
 436   0x3fc3fb45UL, 0x7e6a354dUL, 0xbd2cd1d8UL, 0xb0159000UL, 0x3fc365fcUL,
 437   0x234b7289UL, 0x3cc62fa8UL, 0x0c868000UL, 0x3fc2d161UL, 0xcb81b4a1UL,
 438   0x3d039d6cUL, 0x2a49c000UL, 0x3fc23d71UL, 0x8fd3df5cUL, 0x3d100d23UL,
 439   0x7e23f000UL, 0x3fc1aa2bUL, 0x44389934UL, 0x3d2ca78eUL, 0x8227e000UL,
 440   0x3fc1178eUL, 0xce2d07f2UL, 0x3d21ef78UL, 0xb59e4000UL, 0x3fc08598UL,
 441   0x7009902cUL, 0xbd27e5ddUL, 0x39dbe000UL, 0x3fbfe891UL, 0x4fa10afdUL,
 442   0xbd2534d6UL, 0x830a2000UL, 0x3fbec739UL, 0xafe645e0UL, 0xbd2dc068UL,
 443   0x63844000UL, 0x3fbda727UL, 0x1fa71733UL, 0x3d1a8940UL, 0x01bc4000UL,
 444   0x3fbc8858UL, 0xc65aacd3UL, 0x3d2646d1UL, 0x8dad6000UL, 0x3fbb6ac8UL,
 445   0x2bf768e5UL, 0xbd139080UL, 0x40b1c000UL, 0x3fba4e76UL, 0xb94407c8UL,
 446   0xbd0e42b6UL, 0x5d594000UL, 0x3fb9335eUL, 0x3abd47daUL, 0x3d23115cUL,
 447   0x2f40e000UL, 0x3fb8197eUL, 0xf96ffdf7UL, 0x3d0f80dcUL, 0x0aeac000UL,
 448   0x3fb700d3UL, 0xa99ded32UL, 0x3cec1e8dUL, 0x4d97a000UL, 0x3fb5e95aUL,
 449   0x3c5d1d1eUL, 0xbd2c6906UL, 0x5d208000UL, 0x3fb4d311UL, 0x82f4e1efUL,
 450   0xbcf53a25UL, 0xa7d1e000UL, 0x3fb3bdf5UL, 0xa5db4ed7UL, 0x3d2cc85eUL,
 451   0xa4472000UL, 0x3fb2aa04UL, 0xae9c697dUL, 0xbd20b6e8UL, 0xd1466000UL,
 452   0x3fb1973bUL, 0x560d9e9bUL, 0xbd25325dUL, 0xb59e4000UL, 0x3fb08598UL,
 453   0x7009902cUL, 0xbd17e5ddUL, 0xc006c000UL, 0x3faeea31UL, 0x4fc93b7bUL,
 454   0xbd0e113eUL, 0xcdddc000UL, 0x3faccb73UL, 0x47d82807UL, 0xbd1a68f2UL,
 455   0xd0fb0000UL, 0x3faaaef2UL, 0x353bb42eUL, 0x3d20fc1aUL, 0x149fc000UL,
 456   0x3fa894aaUL, 0xd05a267dUL, 0xbd197995UL, 0xf2d4c000UL, 0x3fa67c94UL,
 457   0xec19afa2UL, 0xbd029efbUL, 0xd42e0000UL, 0x3fa466aeUL, 0x75bdfd28UL,
 458   0xbd2c1673UL, 0x2f8d0000UL, 0x3fa252f3UL, 0xe021b67bUL, 0x3d283e9aUL,
 459   0x89e74000UL, 0x3fa0415dUL, 0x5cf1d753UL, 0x3d0111c0UL, 0xec148000UL,
 460   0x3f9c63d2UL, 0x3f9eb2f3UL, 0x3d2578c6UL, 0x28c90000UL, 0x3f984925UL,
 461   0x325a0c34UL, 0xbd2aa0baUL, 0x25980000UL, 0x3f9432a9UL, 0x928637feUL,
 462   0x3d098139UL, 0x58938000UL, 0x3f902056UL, 0x06e2f7d2UL, 0xbd23dc5bUL,
 463   0xa3890000UL, 0x3f882448UL, 0xda74f640UL, 0xbd275577UL, 0x75890000UL,
 464   0x3f801015UL, 0x999d2be8UL, 0xbd10c76bUL, 0x59580000UL, 0x3f700805UL,
 465   0xcb31c67bUL, 0x3d2166afUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 466   0x80000000UL, 0xfefa3800UL, 0x3fa62e42UL, 0x93c76730UL, 0x3ceef357UL,
 467   0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL, 0x3d6fb175UL,
 468   0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL, 0x9999999aUL, 0x3fc99999UL,
 469   0x00000000UL, 0xbfe00000UL, 0x00000000UL, 0xffffe000UL, 0x00000000UL,
 470   0xffffe000UL
 471 };
 472 //registers,
 473 // input: xmm0
 474 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
 475 //          rax, rdx, rcx, rbx (tmp)
 476 
 477 void MacroAssembler::fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
 478   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
 479   Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
 480   Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2;
 481   Label L_2TAG_PACKET_10_0_2, start;
 482 
 483   assert_different_registers(tmp, eax, ecx, edx);
 484   jmp(start);
 485   address static_const_table = (address)_static_const_table_log;
 486 
 487   bind(start);
 488   subl(rsp, 104);
 489   movl(Address(rsp, 40), tmp);
 490   lea(tmp, ExternalAddress(static_const_table));
 491   xorpd(xmm2, xmm2);
 492   movl(eax, 16368);
 493   pinsrw(xmm2, eax, 3);
 494   xorpd(xmm3, xmm3);
 495   movl(edx, 30704);
 496   pinsrw(xmm3, edx, 3);
 497   movsd(xmm0, Address(rsp, 112));
 498   movapd(xmm1, xmm0);
 499   movl(ecx, 32768);
 500   movdl(xmm4, ecx);
 501   movsd(xmm5, Address(tmp, 2128));         // 0x00000000UL, 0xffffe000UL
 502   pextrw(eax, xmm0, 3);
 503   por(xmm0, xmm2);
 504   psllq(xmm0, 5);
 505   movl(ecx, 16352);
 506   psrlq(xmm0, 34);
 507   rcpss(xmm0, xmm0);
 508   psllq(xmm1, 12);
 509   pshufd(xmm6, xmm5, 228);
 510   psrlq(xmm1, 12);
 511   subl(eax, 16);
 512   cmpl(eax, 32736);
 513   jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
 514 
 515   bind(L_2TAG_PACKET_1_0_2);
 516   paddd(xmm0, xmm4);
 517   por(xmm1, xmm3);
 518   movdl(edx, xmm0);
 519   psllq(xmm0, 29);
 520   pand(xmm5, xmm1);
 521   pand(xmm0, xmm6);
 522   subsd(xmm1, xmm5);
 523   mulpd(xmm5, xmm0);
 524   andl(eax, 32752);
 525   subl(eax, ecx);
 526   cvtsi2sdl(xmm7, eax);
 527   mulsd(xmm1, xmm0);
 528   movsd(xmm6, Address(tmp, 2064));         // 0xfefa3800UL, 0x3fa62e42UL
 529   movdqu(xmm3, Address(tmp, 2080));        // 0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL
 530   subsd(xmm5, xmm2);
 531   andl(edx, 16711680);
 532   shrl(edx, 12);
 533   movdqu(xmm0, Address(tmp, edx));
 534   movdqu(xmm4, Address(tmp, 2096));        // 0x3d6fb175UL, 0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL
 535   addsd(xmm1, xmm5);
 536   movdqu(xmm2, Address(tmp, 2112));        // 0x9999999aUL, 0x3fc99999UL, 0x00000000UL, 0xbfe00000UL
 537   mulsd(xmm6, xmm7);
 538   pshufd(xmm5, xmm1, 68);
 539   mulsd(xmm7, Address(tmp, 2072));         // 0x93c76730UL, 0x3ceef357UL, 0x92492492UL, 0x3fc24924UL
 540   mulsd(xmm3, xmm1);
 541   addsd(xmm0, xmm6);
 542   mulpd(xmm4, xmm5);
 543   mulpd(xmm5, xmm5);
 544   pshufd(xmm6, xmm0, 228);
 545   addsd(xmm0, xmm1);
 546   addpd(xmm4, xmm2);
 547   mulpd(xmm3, xmm5);
 548   subsd(xmm6, xmm0);
 549   mulsd(xmm4, xmm1);
 550   pshufd(xmm2, xmm0, 238);
 551   addsd(xmm1, xmm6);
 552   mulsd(xmm5, xmm5);
 553   addsd(xmm7, xmm2);
 554   addpd(xmm4, xmm3);
 555   addsd(xmm1, xmm7);
 556   mulpd(xmm4, xmm5);
 557   addsd(xmm1, xmm4);
 558   pshufd(xmm5, xmm4, 238);
 559   addsd(xmm1, xmm5);
 560   addsd(xmm0, xmm1);
 561   jmp(L_2TAG_PACKET_2_0_2);
 562 
 563   bind(L_2TAG_PACKET_0_0_2);
 564   movsd(xmm0, Address(rsp, 112));
 565   movdqu(xmm1, xmm0);
 566   addl(eax, 16);
 567   cmpl(eax, 32768);
 568   jcc(Assembler::aboveEqual, L_2TAG_PACKET_3_0_2);
 569   cmpl(eax, 16);
 570   jcc(Assembler::below, L_2TAG_PACKET_4_0_2);
 571 
 572   bind(L_2TAG_PACKET_5_0_2);
 573   addsd(xmm0, xmm0);
 574   jmp(L_2TAG_PACKET_2_0_2);
 575 
 576   bind(L_2TAG_PACKET_6_0_2);
 577   jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
 578   cmpl(edx, 0);
 579   jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
 580   jmp(L_2TAG_PACKET_7_0_2);
 581 
 582   bind(L_2TAG_PACKET_3_0_2);
 583   movdl(edx, xmm1);
 584   psrlq(xmm1, 32);
 585   movdl(ecx, xmm1);
 586   addl(ecx, ecx);
 587   cmpl(ecx, -2097152);
 588   jcc(Assembler::aboveEqual, L_2TAG_PACKET_6_0_2);
 589   orl(edx, ecx);
 590   cmpl(edx, 0);
 591   jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
 592 
 593   bind(L_2TAG_PACKET_7_0_2);
 594   xorpd(xmm1, xmm1);
 595   xorpd(xmm0, xmm0);
 596   movl(eax, 32752);
 597   pinsrw(xmm1, eax, 3);
 598   movl(edx, 3);
 599   mulsd(xmm0, xmm1);
 600 
 601   bind(L_2TAG_PACKET_9_0_2);
 602   movsd(Address(rsp, 0), xmm0);
 603   movsd(xmm0, Address(rsp, 112));
 604   fld_d(Address(rsp, 0));
 605   jmp(L_2TAG_PACKET_10_0_2);
 606 
 607   bind(L_2TAG_PACKET_8_0_2);
 608   xorpd(xmm1, xmm1);
 609   xorpd(xmm0, xmm0);
 610   movl(eax, 49136);
 611   pinsrw(xmm0, eax, 3);
 612   divsd(xmm0, xmm1);
 613   movl(edx, 2);
 614   jmp(L_2TAG_PACKET_9_0_2);
 615 
 616   bind(L_2TAG_PACKET_4_0_2);
 617   movdl(edx, xmm1);
 618   psrlq(xmm1, 32);
 619   movdl(ecx, xmm1);
 620   orl(edx, ecx);
 621   cmpl(edx, 0);
 622   jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
 623   xorpd(xmm1, xmm1);
 624   movl(eax, 18416);
 625   pinsrw(xmm1, eax, 3);
 626   mulsd(xmm0, xmm1);
 627   movapd(xmm1, xmm0);
 628   pextrw(eax, xmm0, 3);
 629   por(xmm0, xmm2);
 630   psllq(xmm0, 5);
 631   movl(ecx, 18416);
 632   psrlq(xmm0, 34);
 633   rcpss(xmm0, xmm0);
 634   psllq(xmm1, 12);
 635   pshufd(xmm6, xmm5, 228);
 636   psrlq(xmm1, 12);
 637   jmp(L_2TAG_PACKET_1_0_2);
 638 
 639   bind(L_2TAG_PACKET_2_0_2);
 640   movsd(Address(rsp, 24), xmm0);
 641   fld_d(Address(rsp, 24));
 642 
 643   bind(L_2TAG_PACKET_10_0_2);
 644   movl(tmp, Address(rsp, 40));
 645 }
 646 
 647 /******************************************************************************/
 648 //                     ALGORITHM DESCRIPTION - LOG10()
 649 //                     ---------------------
 650 //
 651 //    Let x=2^k * mx, mx in [1,2)
 652 //
 653 //    Get B~1/mx based on the output of rcpss instruction (B0)
 654 //    B = int((B0*LH*2^7+0.5))/2^7
 655 //    LH is a short approximation for log10(e)
 656 //
 657 //    Reduced argument: r=B*mx-LH (computed accurately in high and low parts)
 658 //
 659 //    Result:  k*log10(2) - log(B) + p(r)
 660 //             p(r) is a degree 7 polynomial
 661 //             -log(B) read from data table (high, low parts)
 662 //             Result is formed from high and low parts
 663 //
 664 // Special cases:
 665 //  log10(0) = -INF with divide-by-zero exception raised
 666 //  log10(1) = +0
 667 //  log10(x) = NaN with invalid exception raised if x < -0, including -INF
 668 //  log10(+INF) = +INF
 669 //
 670 /******************************************************************************/
 671 
 672 ALIGNED_(16) juint _static_const_table_log10[] =
 673 {
 674     0x509f7800UL, 0x3fd34413UL, 0x1f12b358UL, 0x3d1fef31UL, 0x80333400UL,
 675     0x3fd32418UL, 0xc671d9d0UL, 0xbcf542bfUL, 0x51195000UL, 0x3fd30442UL,
 676     0x78a4b0c3UL, 0x3d18216aUL, 0x6fc79400UL, 0x3fd2e490UL, 0x80fa389dUL,
 677     0xbc902869UL, 0x89d04000UL, 0x3fd2c502UL, 0x75c2f564UL, 0x3d040754UL,
 678     0x4ddd1c00UL, 0x3fd2a598UL, 0xd219b2c3UL, 0xbcfa1d84UL, 0x6baa7c00UL,
 679     0x3fd28651UL, 0xfd9abec1UL, 0x3d1be6d3UL, 0x94028800UL, 0x3fd2672dUL,
 680     0xe289a455UL, 0xbd1ede5eUL, 0x78b86400UL, 0x3fd2482cUL, 0x6734d179UL,
 681     0x3d1fe79bUL, 0xcca3c800UL, 0x3fd2294dUL, 0x981a40b8UL, 0xbced34eaUL,
 682     0x439c5000UL, 0x3fd20a91UL, 0xcc392737UL, 0xbd1a9cc3UL, 0x92752c00UL,
 683     0x3fd1ebf6UL, 0x03c9afe7UL, 0x3d1e98f8UL, 0x6ef8dc00UL, 0x3fd1cd7dUL,
 684     0x71dae7f4UL, 0x3d08a86cUL, 0x8fe4dc00UL, 0x3fd1af25UL, 0xee9185a1UL,
 685     0xbcff3412UL, 0xace59400UL, 0x3fd190eeUL, 0xc2cab353UL, 0x3cf17ed9UL,
 686     0x7e925000UL, 0x3fd172d8UL, 0x6952c1b2UL, 0x3cf1521cUL, 0xbe694400UL,
 687     0x3fd154e2UL, 0xcacb79caUL, 0xbd0bdc78UL, 0x26cbac00UL, 0x3fd1370dUL,
 688     0xf71f4de1UL, 0xbd01f8beUL, 0x72fa0800UL, 0x3fd11957UL, 0x55bf910bUL,
 689     0x3c946e2bUL, 0x5f106000UL, 0x3fd0fbc1UL, 0x39e639c1UL, 0x3d14a84bUL,
 690     0xa802a800UL, 0x3fd0de4aUL, 0xd3f31d5dUL, 0xbd178385UL, 0x0b992000UL,
 691     0x3fd0c0f3UL, 0x3843106fUL, 0xbd1f602fUL, 0x486ce800UL, 0x3fd0a3baUL,
 692     0x8819497cUL, 0x3cef987aUL, 0x1de49400UL, 0x3fd086a0UL, 0x1caa0467UL,
 693     0x3d0faec7UL, 0x4c30cc00UL, 0x3fd069a4UL, 0xa4424372UL, 0xbd1618fcUL,
 694     0x94490000UL, 0x3fd04cc6UL, 0x946517d2UL, 0xbd18384bUL, 0xb7e84000UL,
 695     0x3fd03006UL, 0xe0109c37UL, 0xbd19a6acUL, 0x798a0c00UL, 0x3fd01364UL,
 696     0x5121e864UL, 0xbd164cf7UL, 0x38ce8000UL, 0x3fcfedbfUL, 0x46214d1aUL,
 697     0xbcbbc402UL, 0xc8e62000UL, 0x3fcfb4efUL, 0xdab93203UL, 0x3d1e0176UL,
 698     0x2cb02800UL, 0x3fcf7c5aUL, 0x2a2ea8e4UL, 0xbcfec86aUL, 0xeeeaa000UL,
 699     0x3fcf43fdUL, 0xc18e49a4UL, 0x3cf110a8UL, 0x9bb6e800UL, 0x3fcf0bdaUL,
 700     0x923cc9c0UL, 0xbd15ce99UL, 0xc093f000UL, 0x3fced3efUL, 0x4d4b51e9UL,
 701     0x3d1a04c7UL, 0xec58f800UL, 0x3fce9c3cUL, 0x163cad59UL, 0x3cac8260UL,
 702     0x9a907000UL, 0x3fce2d7dUL, 0x3fa93646UL, 0x3ce4a1c0UL, 0x37311000UL,
 703     0x3fcdbf99UL, 0x32abd1fdUL, 0x3d07ea9dUL, 0x6744b800UL, 0x3fcd528cUL,
 704     0x4dcbdfd4UL, 0xbd1b08e2UL, 0xe36de800UL, 0x3fcce653UL, 0x0b7b7f7fUL,
 705     0xbd1b8f03UL, 0x77506800UL, 0x3fcc7aecUL, 0xa821c9fbUL, 0x3d13c163UL,
 706     0x00ff8800UL, 0x3fcc1053UL, 0x536bca76UL, 0xbd074ee5UL, 0x70719800UL,
 707     0x3fcba684UL, 0xd7da9b6bUL, 0xbd1fbf16UL, 0xc6f8d800UL, 0x3fcb3d7dUL,
 708     0xe2220bb3UL, 0x3d1a295dUL, 0x16c15800UL, 0x3fcad53cUL, 0xe724911eUL,
 709     0xbcf55822UL, 0x82533800UL, 0x3fca6dbcUL, 0x6d982371UL, 0x3cac567cUL,
 710     0x3c19e800UL, 0x3fca06fcUL, 0x84d17d80UL, 0x3d1da204UL, 0x85ef8000UL,
 711     0x3fc9a0f8UL, 0x54466a6aUL, 0xbd002204UL, 0xb0ac2000UL, 0x3fc93baeUL,
 712     0xd601fd65UL, 0x3d18840cUL, 0x1bb9b000UL, 0x3fc8d71cUL, 0x7bf58766UL,
 713     0xbd14f897UL, 0x34aae800UL, 0x3fc8733eUL, 0x3af6ac24UL, 0xbd0f5c45UL,
 714     0x76d68000UL, 0x3fc81012UL, 0x4303e1a1UL, 0xbd1f9a80UL, 0x6af57800UL,
 715     0x3fc7ad96UL, 0x43fbcb46UL, 0x3cf4c33eUL, 0xa6c51000UL, 0x3fc74bc7UL,
 716     0x70f0eac5UL, 0xbd192e3bUL, 0xccab9800UL, 0x3fc6eaa3UL, 0xc0093dfeUL,
 717     0xbd0faf15UL, 0x8b60b800UL, 0x3fc68a28UL, 0xde78d5fdUL, 0xbc9ea4eeUL,
 718     0x9d987000UL, 0x3fc62a53UL, 0x962bea6eUL, 0xbd194084UL, 0xc9b0e800UL,
 719     0x3fc5cb22UL, 0x888dd999UL, 0x3d1fe201UL, 0xe1634800UL, 0x3fc56c93UL,
 720     0x16ada7adUL, 0x3d1b1188UL, 0xc176c000UL, 0x3fc50ea4UL, 0x4159b5b5UL,
 721     0xbcf09c08UL, 0x51766000UL, 0x3fc4b153UL, 0x84393d23UL, 0xbcf6a89cUL,
 722     0x83695000UL, 0x3fc4549dUL, 0x9f0b8bbbUL, 0x3d1c4b8cUL, 0x538d5800UL,
 723     0x3fc3f881UL, 0xf49df747UL, 0x3cf89b99UL, 0xc8138000UL, 0x3fc39cfcUL,
 724     0xd503b834UL, 0xbd13b99fUL, 0xf0df0800UL, 0x3fc3420dUL, 0xf011b386UL,
 725     0xbd05d8beUL, 0xe7466800UL, 0x3fc2e7b2UL, 0xf39c7bc2UL, 0xbd1bb94eUL,
 726     0xcdd62800UL, 0x3fc28de9UL, 0x05e6d69bUL, 0xbd10ed05UL, 0xd015d800UL,
 727     0x3fc234b0UL, 0xe29b6c9dUL, 0xbd1ff967UL, 0x224ea800UL, 0x3fc1dc06UL,
 728     0x727711fcUL, 0xbcffb30dUL, 0x01540000UL, 0x3fc183e8UL, 0x39786c5aUL,
 729     0x3cc23f57UL, 0xb24d9800UL, 0x3fc12c54UL, 0xc905a342UL, 0x3d003a1dUL,
 730     0x82835800UL, 0x3fc0d54aUL, 0x9b9920c0UL, 0x3d03b25aUL, 0xc72ac000UL,
 731     0x3fc07ec7UL, 0x46f26a24UL, 0x3cf0fa41UL, 0xdd35d800UL, 0x3fc028caUL,
 732     0x41d9d6dcUL, 0x3d034a65UL, 0x52474000UL, 0x3fbfa6a4UL, 0x44f66449UL,
 733     0x3d19cad3UL, 0x2da3d000UL, 0x3fbefcb8UL, 0x67832999UL, 0x3d18400fUL,
 734     0x32a10000UL, 0x3fbe53ceUL, 0x9c0e3b1aUL, 0xbcff62fdUL, 0x556b7000UL,
 735     0x3fbdabe3UL, 0x02976913UL, 0xbcf8243bUL, 0x97e88000UL, 0x3fbd04f4UL,
 736     0xec793797UL, 0x3d1c0578UL, 0x09647000UL, 0x3fbc5effUL, 0x05fc0565UL,
 737     0xbd1d799eUL, 0xc6426000UL, 0x3fbbb9ffUL, 0x4625f5edUL, 0x3d1f5723UL,
 738     0xf7afd000UL, 0x3fbb15f3UL, 0xdd5aae61UL, 0xbd1a7e1eUL, 0xd358b000UL,
 739     0x3fba72d8UL, 0x3314e4d3UL, 0x3d17bc91UL, 0x9b1f5000UL, 0x3fb9d0abUL,
 740     0x9a4d514bUL, 0x3cf18c9bUL, 0x9cd4e000UL, 0x3fb92f69UL, 0x7e4496abUL,
 741     0x3cf1f96dUL, 0x31f4f000UL, 0x3fb88f10UL, 0xf56479e7UL, 0x3d165818UL,
 742     0xbf628000UL, 0x3fb7ef9cUL, 0x26bf486dUL, 0xbd1113a6UL, 0xb526b000UL,
 743     0x3fb7510cUL, 0x1a1c3384UL, 0x3ca9898dUL, 0x8e31e000UL, 0x3fb6b35dUL,
 744     0xb3875361UL, 0xbd0661acUL, 0xd01de000UL, 0x3fb6168cUL, 0x2a7cacfaUL,
 745     0xbd1bdf10UL, 0x0af23000UL, 0x3fb57a98UL, 0xff868816UL, 0x3cf046d0UL,
 746     0xd8ea0000UL, 0x3fb4df7cUL, 0x1515fbe7UL, 0xbd1fd529UL, 0xde3b2000UL,
 747     0x3fb44538UL, 0x6e59a132UL, 0x3d1faeeeUL, 0xc8df9000UL, 0x3fb3abc9UL,
 748     0xf1322361UL, 0xbd198807UL, 0x505f1000UL, 0x3fb3132dUL, 0x0888e6abUL,
 749     0x3d1e5380UL, 0x359bd000UL, 0x3fb27b61UL, 0xdfbcbb22UL, 0xbcfe2724UL,
 750     0x429ee000UL, 0x3fb1e463UL, 0x6eb4c58cUL, 0xbcfe4dd6UL, 0x4a673000UL,
 751     0x3fb14e31UL, 0x4ce1ac9bUL, 0x3d1ba691UL, 0x28b96000UL, 0x3fb0b8c9UL,
 752     0x8c7813b8UL, 0xbd0b3872UL, 0xc1f08000UL, 0x3fb02428UL, 0xc2bc8c2cUL,
 753     0x3cb5ea6bUL, 0x05a1a000UL, 0x3faf209cUL, 0x72e8f18eUL, 0xbce8df84UL,
 754     0xc0b5e000UL, 0x3fadfa6dUL, 0x9fdef436UL, 0x3d087364UL, 0xaf416000UL,
 755     0x3facd5c2UL, 0x1068c3a9UL, 0x3d0827e7UL, 0xdb356000UL, 0x3fabb296UL,
 756     0x120a34d3UL, 0x3d101a9fUL, 0x5dfea000UL, 0x3faa90e6UL, 0xdaded264UL,
 757     0xbd14c392UL, 0x6034c000UL, 0x3fa970adUL, 0x1c9d06a9UL, 0xbd1b705eUL,
 758     0x194c6000UL, 0x3fa851e8UL, 0x83996ad9UL, 0xbd0117bcUL, 0xcf4ac000UL,
 759     0x3fa73492UL, 0xb1a94a62UL, 0xbca5ea42UL, 0xd67b4000UL, 0x3fa618a9UL,
 760     0x75aed8caUL, 0xbd07119bUL, 0x9126c000UL, 0x3fa4fe29UL, 0x5291d533UL,
 761     0x3d12658fUL, 0x6f4d4000UL, 0x3fa3e50eUL, 0xcd2c5cd9UL, 0x3d1d5c70UL,
 762     0xee608000UL, 0x3fa2cd54UL, 0xd1008489UL, 0x3d1a4802UL, 0x9900e000UL,
 763     0x3fa1b6f9UL, 0x54fb5598UL, 0xbd16593fUL, 0x06bb6000UL, 0x3fa0a1f9UL,
 764     0x64ef57b4UL, 0xbd17636bUL, 0xb7940000UL, 0x3f9f1c9fUL, 0xee6a4737UL,
 765     0x3cb5d479UL, 0x91aa0000UL, 0x3f9cf7f5UL, 0x3a16373cUL, 0x3d087114UL,
 766     0x156b8000UL, 0x3f9ad5edUL, 0x836c554aUL, 0x3c6900b0UL, 0xd4764000UL,
 767     0x3f98b67fUL, 0xed12f17bUL, 0xbcffc974UL, 0x77dec000UL, 0x3f9699a7UL,
 768     0x232ce7eaUL, 0x3d1e35bbUL, 0xbfbf4000UL, 0x3f947f5dUL, 0xd84ffa6eUL,
 769     0x3d0e0a49UL, 0x82c7c000UL, 0x3f92679cUL, 0x8d170e90UL, 0xbd14d9f2UL,
 770     0xadd20000UL, 0x3f90525dUL, 0x86d9f88eUL, 0x3cdeb986UL, 0x86f10000UL,
 771     0x3f8c7f36UL, 0xb9e0a517UL, 0x3ce29faaUL, 0xb75c8000UL, 0x3f885e9eUL,
 772     0x542568cbUL, 0xbd1f7bdbUL, 0x46b30000UL, 0x3f8442e8UL, 0xb954e7d9UL,
 773     0x3d1e5287UL, 0xb7e60000UL, 0x3f802c07UL, 0x22da0b17UL, 0xbd19fb27UL,
 774     0x6c8b0000UL, 0x3f7833e3UL, 0x821271efUL, 0xbd190f96UL, 0x29910000UL,
 775     0x3f701936UL, 0xbc3491a5UL, 0xbd1bcf45UL, 0x354a0000UL, 0x3f600fe3UL,
 776     0xc0ff520aUL, 0xbd19d71cUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 777     0x00000000UL, 0x509f7800UL, 0x3f934413UL, 0x1f12b358UL, 0x3cdfef31UL,
 778     0xc1a5f12eUL, 0x40358874UL, 0x64d4ef0dUL, 0xc0089309UL, 0x385593b1UL,
 779     0xc025c917UL, 0xdc963467UL, 0x3ffc6a02UL, 0x7f9d3aa1UL, 0x4016ab9fUL,
 780     0xdc77b115UL, 0xbff27af2UL, 0xf8000000UL, 0xffffffffUL, 0x00000000UL,
 781     0xffffe000UL, 0x00000000UL, 0x3fdbc000UL, 0xbf2e4108UL, 0x3f5a7a6cUL
 782 };
 783 //registers,
 784 // input: xmm0
 785 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
 786 //          rax, rdx, rcx, rbx (tmp)
 787 
 788 void MacroAssembler::fast_log10(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
 789 
 790   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;
 791   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;
 792   Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, start;
 793 
 794   assert_different_registers(tmp, eax, ecx, edx);
 795 
 796   address static_const_table_log10 = (address)_static_const_table_log10;
 797 
 798   bind(start);
 799   subl(rsp, 104);
 800   movl(Address(rsp, 40), tmp);
 801   lea(tmp, ExternalAddress(static_const_table_log10));
 802   xorpd(xmm2, xmm2);
 803   movl(eax, 16368);
 804   pinsrw(xmm2, eax, 3);
 805   movl(ecx, 1054736384);
 806   movdl(xmm7, ecx);
 807   xorpd(xmm3, xmm3);
 808   movl(edx, 30704);
 809   pinsrw(xmm3, edx, 3);
 810   movsd(xmm0, Address(rsp, 112));
 811   movdqu(xmm1, xmm0);
 812   movl(edx, 32768);
 813   movdl(xmm4, edx);
 814   movdqu(xmm5, Address(tmp, 2128));    //0x3ffc6a02UL, 0x7f9d3aa1UL, 0x4016ab9fUL, 0xdc77b115UL
 815   pextrw(eax, xmm0, 3);
 816   por(xmm0, xmm2);
 817   movl(ecx, 16352);
 818   psllq(xmm0, 5);
 819   movsd(xmm2, Address(tmp, 2144));    //0xbff27af2UL, 0xf8000000UL, 0xffffffffUL, 0x00000000UL
 820   psrlq(xmm0, 34);
 821   rcpss(xmm0, xmm0);
 822   psllq(xmm1, 12);
 823   pshufd(xmm6, xmm5, 78);
 824   psrlq(xmm1, 12);
 825   subl(eax, 16);
 826   cmpl(eax, 32736);
 827   jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
 828 
 829   bind(L_2TAG_PACKET_1_0_2);
 830   mulss(xmm0, xmm7);
 831   por(xmm1, xmm3);
 832   andpd(xmm5, xmm1);
 833   paddd(xmm0, xmm4);
 834   subsd(xmm1, xmm5);
 835   movdl(edx, xmm0);
 836   psllq(xmm0, 29);
 837   andpd(xmm0, xmm6);
 838   andl(eax, 32752);
 839   subl(eax, ecx);
 840   cvtsi2sdl(xmm7, eax);
 841   mulpd(xmm5, xmm0);
 842   mulsd(xmm1, xmm0);
 843   movsd(xmm6, Address(tmp, 2064));    //0xbd19d71cUL, 0x00000000UL, 0x00000000UL, 0x00000000UL
 844   movdqu(xmm3, Address(tmp, 2080));    //0x00000000UL, 0x509f7800UL, 0x3f934413UL, 0x1f12b358UL
 845   subsd(xmm5, xmm2);
 846   andl(edx, 16711680);
 847   shrl(edx, 12);
 848   movdqu(xmm0, Address(tmp, edx, Address::times_1, -1504));
 849   movdqu(xmm4, Address(tmp, 2096));    //0x3cdfef31UL, 0xc1a5f12eUL, 0x40358874UL, 0x64d4ef0dUL
 850   addsd(xmm1, xmm5);
 851   movdqu(xmm2, Address(tmp, 2112));    //0xc0089309UL, 0x385593b1UL, 0xc025c917UL, 0xdc963467UL
 852   mulsd(xmm6, xmm7);
 853   pshufd(xmm5, xmm1, 68);
 854   mulsd(xmm7, Address(tmp, 2072));    //0x00000000UL, 0x00000000UL, 0x00000000UL, 0x509f7800UL
 855   mulsd(xmm3, xmm1);
 856   addsd(xmm0, xmm6);
 857   mulpd(xmm4, xmm5);
 858   movsd(xmm6, Address(tmp, 2152));    //0xffffffffUL, 0x00000000UL, 0xffffe000UL, 0x00000000UL
 859   mulpd(xmm5, xmm5);
 860   addpd(xmm4, xmm2);
 861   mulpd(xmm3, xmm5);
 862   pshufd(xmm2, xmm0, 228);
 863   addsd(xmm0, xmm1);
 864   mulsd(xmm4, xmm1);
 865   subsd(xmm2, xmm0);
 866   mulsd(xmm6, xmm1);
 867   addsd(xmm1, xmm2);
 868   pshufd(xmm2, xmm0, 238);
 869   mulsd(xmm5, xmm5);
 870   addsd(xmm7, xmm2);
 871   addsd(xmm1, xmm6);
 872   addpd(xmm4, xmm3);
 873   addsd(xmm1, xmm7);
 874   mulpd(xmm4, xmm5);
 875   addsd(xmm1, xmm4);
 876   pshufd(xmm5, xmm4, 238);
 877   addsd(xmm1, xmm5);
 878   addsd(xmm0, xmm1);
 879   jmp(L_2TAG_PACKET_2_0_2);
 880 
 881   bind(L_2TAG_PACKET_0_0_2);
 882   movsd(xmm0, Address(rsp, 112));    //0xbcfa1d84UL, 0x6baa7c00UL, 0x3fd28651UL, 0xfd9abec1UL
 883   movdqu(xmm1, xmm0);
 884   addl(eax, 16);
 885   cmpl(eax, 32768);
 886   jcc(Assembler::aboveEqual, L_2TAG_PACKET_3_0_2);
 887   cmpl(eax, 16);
 888   jcc(Assembler::below, L_2TAG_PACKET_4_0_2);
 889 
 890   bind(L_2TAG_PACKET_5_0_2);
 891   addsd(xmm0, xmm0);
 892   jmp(L_2TAG_PACKET_2_0_2);
 893 
 894   bind(L_2TAG_PACKET_6_0_2);
 895   jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
 896   cmpl(edx, 0);
 897   jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
 898   jmp(L_2TAG_PACKET_7_0_2);
 899 
 900   bind(L_2TAG_PACKET_3_0_2);
 901   movdl(edx, xmm1);
 902   psrlq(xmm1, 32);
 903   movdl(ecx, xmm1);
 904   addl(ecx, ecx);
 905   cmpl(ecx, -2097152);
 906   jcc(Assembler::aboveEqual, L_2TAG_PACKET_6_0_2);
 907   orl(edx, ecx);
 908   cmpl(edx, 0);
 909   jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
 910 
 911   bind(L_2TAG_PACKET_7_0_2);
 912   xorpd(xmm1, xmm1);
 913   xorpd(xmm0, xmm0);
 914   movl(eax, 32752);
 915   pinsrw(xmm1, eax, 3);
 916   movl(edx, 9);
 917   mulsd(xmm0, xmm1);
 918 
 919   bind(L_2TAG_PACKET_9_0_2);
 920   movsd(Address(rsp, 0), xmm0);
 921   movsd(xmm0, Address(rsp, 112));    //0xbcfa1d84UL, 0x6baa7c00UL, 0x3fd28651UL, 0xfd9abec1UL
 922   fld_d(Address(rsp, 0));
 923   jmp(L_2TAG_PACKET_10_0_2);
 924 
 925   bind(L_2TAG_PACKET_8_0_2);
 926   xorpd(xmm1, xmm1);
 927   xorpd(xmm0, xmm0);
 928   movl(eax, 49136);
 929   pinsrw(xmm0, eax, 3);
 930   divsd(xmm0, xmm1);
 931   movl(edx, 8);
 932   jmp(L_2TAG_PACKET_9_0_2);
 933 
 934   bind(L_2TAG_PACKET_4_0_2);
 935   movdl(edx, xmm1);
 936   psrlq(xmm1, 32);
 937   movdl(ecx, xmm1);
 938   orl(edx, ecx);
 939   cmpl(edx, 0);
 940   jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
 941   xorpd(xmm1, xmm1);
 942   movl(eax, 18416);
 943   pinsrw(xmm1, eax, 3);
 944   mulsd(xmm0, xmm1);
 945   xorpd(xmm2, xmm2);
 946   movl(eax, 16368);
 947   pinsrw(xmm2, eax, 3);
 948   movdqu(xmm1, xmm0);
 949   pextrw(eax, xmm0, 3);
 950   por(xmm0, xmm2);
 951   movl(ecx, 18416);
 952   psllq(xmm0, 5);
 953   movsd(xmm2, Address(tmp, 2144));    //0xbff27af2UL, 0xf8000000UL, 0xffffffffUL, 0x00000000UL
 954   psrlq(xmm0, 34);
 955   rcpss(xmm0, xmm0);
 956   psllq(xmm1, 12);
 957   pshufd(xmm6, xmm5, 78);
 958   psrlq(xmm1, 12);
 959   jmp(L_2TAG_PACKET_1_0_2);
 960 
 961   bind(L_2TAG_PACKET_2_0_2);
 962   movsd(Address(rsp, 24), xmm0);
 963   fld_d(Address(rsp, 24));
 964 
 965   bind(L_2TAG_PACKET_10_0_2);
 966   movl(tmp, Address(rsp, 40));
 967 
 968 }
 969 
 970 /******************************************************************************/
 971 //                     ALGORITHM DESCRIPTION  - POW()
 972 //                     ---------------------
 973 //
 974 //    Let x=2^k * mx, mx in [1,2)
 975 //
 976 //    log2(x) calculation:
 977 //
 978 //    Get B~1/mx based on the output of rcpps instruction (B0)
 979 //    B = int((B0*LH*2^9+0.5))/2^9
 980 //    LH is a short approximation for log2(e)
 981 //
 982 //    Reduced argument, scaled by LH:
 983 //                r=B*mx-LH (computed accurately in high and low parts)
 984 //
 985 //    log2(x) result:  k - log2(B) + p(r)
 986 //             p(r) is a degree 8 polynomial
 987 //             -log2(B) read from data table (high, low parts)
 988 //             log2(x) is formed from high and low parts
 989 //    For |x| in [1-1/32, 1+1/16), a slower but more accurate computation
 990 //    based om the same table design is performed.
 991 //
 992 //   Main path is taken if | floor(log2(|log2(|x|)|) + floor(log2|y|) | < 8,
 993 //   to filter out all potential OF/UF cases.
 994 //   exp2(y*log2(x)) is computed using an 8-bit index table and a degree 5
 995 //   polynomial
 996 //
 997 // Special cases:
 998 //  pow(-0,y) = -INF and raises the divide-by-zero exception for y an odd
 999 //  integer < 0.
1000 //  pow(-0,y) = +INF and raises the divide-by-zero exception for y < 0 and
1001 //  not an odd integer.
1002 //  pow(-0,y) = -0 for y an odd integer > 0.
1003 //  pow(-0,y) = +0 for y > 0 and not an odd integer.
1004 //  pow(-1,-INF) = NaN.
1005 //  pow(+1,y) = NaN for any y, even a NaN.
1006 //  pow(x,-0) = 1 for any x, even a NaN.
1007 //  pow(x,y) = a NaN and raises the invalid exception for finite x < 0 and
1008 //  finite non-integer y.
1009 //  pow(x,-INF) = +INF for |x|<1.
1010 //  pow(x,-INF) = +0 for |x|>1.
1011 //  pow(x,+INF) = +0 for |x|<1.
1012 //  pow(x,+INF) = +INF for |x|>1.
1013 //  pow(-INF,y) = -0 for y an odd integer < 0.
1014 //  pow(-INF,y) = +0 for y < 0 and not an odd integer.
1015 //  pow(-INF,y) = -INF for y an odd integer > 0.
1016 //  pow(-INF,y) = +INF for y > 0 and not an odd integer.
1017 //  pow(+INF,y) = +0 for y <0.
1018 //  pow(+INF,y) = +INF for y >0.
1019 //
1020 /******************************************************************************/
1021 
1022 ALIGNED_(16) juint _static_const_table_pow[] =
1023 {
1024   0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL, 0xf8000000UL,
1025   0xffffffffUL, 0x00000000UL, 0xfffff800UL, 0x00000000UL, 0x3ff00000UL,
1026   0x00000000UL, 0x00000000UL, 0x20000000UL, 0x3feff00aUL, 0x96621f95UL,
1027   0x3e5b1856UL, 0xe0000000UL, 0x3fefe019UL, 0xe5916f9eUL, 0xbe325278UL,
1028   0x00000000UL, 0x3fefd02fUL, 0x859a1062UL, 0x3e595fb7UL, 0xc0000000UL,
1029   0x3fefc049UL, 0xb245f18fUL, 0xbe529c38UL, 0xe0000000UL, 0x3fefb069UL,
1030   0xad2880a7UL, 0xbe501230UL, 0x60000000UL, 0x3fefa08fUL, 0xc8e72420UL,
1031   0x3e597bd1UL, 0x80000000UL, 0x3fef90baUL, 0xc30c4500UL, 0xbe5d6c75UL,
1032   0xe0000000UL, 0x3fef80eaUL, 0x02c63f43UL, 0x3e2e1318UL, 0xc0000000UL,
1033   0x3fef7120UL, 0xb3d4ccccUL, 0xbe44c52aUL, 0x00000000UL, 0x3fef615cUL,
1034   0xdbd91397UL, 0xbe4e7d6cUL, 0xa0000000UL, 0x3fef519cUL, 0x65c5cd68UL,
1035   0xbe522dc8UL, 0xa0000000UL, 0x3fef41e2UL, 0x46d1306cUL, 0xbe5a840eUL,
1036   0xe0000000UL, 0x3fef322dUL, 0xd2980e94UL, 0x3e5071afUL, 0xa0000000UL,
1037   0x3fef227eUL, 0x773abadeUL, 0xbe5891e5UL, 0xa0000000UL, 0x3fef12d4UL,
1038   0xdc6bf46bUL, 0xbe5cccbeUL, 0xe0000000UL, 0x3fef032fUL, 0xbc7247faUL,
1039   0xbe2bab83UL, 0x80000000UL, 0x3feef390UL, 0xbcaa1e46UL, 0xbe53bb3bUL,
1040   0x60000000UL, 0x3feee3f6UL, 0x5f6c682dUL, 0xbe54c619UL, 0x80000000UL,
1041   0x3feed461UL, 0x5141e368UL, 0xbe4b6d86UL, 0xe0000000UL, 0x3feec4d1UL,
1042   0xec678f76UL, 0xbe369af6UL, 0x80000000UL, 0x3feeb547UL, 0x41301f55UL,
1043   0xbe2d4312UL, 0x60000000UL, 0x3feea5c2UL, 0x676da6bdUL, 0xbe4d8dd0UL,
1044   0x60000000UL, 0x3fee9642UL, 0x57a891c4UL, 0x3e51f991UL, 0xa0000000UL,
1045   0x3fee86c7UL, 0xe4eb491eUL, 0x3e579bf9UL, 0x20000000UL, 0x3fee7752UL,
1046   0xfddc4a2cUL, 0xbe3356e6UL, 0xc0000000UL, 0x3fee67e1UL, 0xd75b5bf1UL,
1047   0xbe449531UL, 0x80000000UL, 0x3fee5876UL, 0xbd423b8eUL, 0x3df54fe4UL,
1048   0x60000000UL, 0x3fee4910UL, 0x330e51b9UL, 0x3e54289cUL, 0x80000000UL,
1049   0x3fee39afUL, 0x8651a95fUL, 0xbe55aad6UL, 0xa0000000UL, 0x3fee2a53UL,
1050   0x5e98c708UL, 0xbe2fc4a9UL, 0xe0000000UL, 0x3fee1afcUL, 0x0989328dUL,
1051   0x3e23958cUL, 0x40000000UL, 0x3fee0babUL, 0xee642abdUL, 0xbe425dd8UL,
1052   0xa0000000UL, 0x3fedfc5eUL, 0xc394d236UL, 0x3e526362UL, 0x20000000UL,
1053   0x3feded17UL, 0xe104aa8eUL, 0x3e4ce247UL, 0xc0000000UL, 0x3fedddd4UL,
1054   0x265a9be4UL, 0xbe5bb77aUL, 0x40000000UL, 0x3fedce97UL, 0x0ecac52fUL,
1055   0x3e4a7cb1UL, 0xe0000000UL, 0x3fedbf5eUL, 0x124cb3b8UL, 0x3e257024UL,
1056   0x80000000UL, 0x3fedb02bUL, 0xe6d4febeUL, 0xbe2033eeUL, 0x20000000UL,
1057   0x3feda0fdUL, 0x39cca00eUL, 0xbe3ddabcUL, 0xc0000000UL, 0x3fed91d3UL,
1058   0xef8a552aUL, 0xbe543390UL, 0x40000000UL, 0x3fed82afUL, 0xb8e85204UL,
1059   0x3e513850UL, 0xe0000000UL, 0x3fed738fUL, 0x3d59fe08UL, 0xbe5db728UL,
1060   0x40000000UL, 0x3fed6475UL, 0x3aa7ead1UL, 0x3e58804bUL, 0xc0000000UL,
1061   0x3fed555fUL, 0xf8a35ba9UL, 0xbe5298b0UL, 0x00000000UL, 0x3fed464fUL,
1062   0x9a88dd15UL, 0x3e5a8cdbUL, 0x40000000UL, 0x3fed3743UL, 0xb0b0a190UL,
1063   0x3e598635UL, 0x80000000UL, 0x3fed283cUL, 0xe2113295UL, 0xbe5c1119UL,
1064   0x80000000UL, 0x3fed193aUL, 0xafbf1728UL, 0xbe492e9cUL, 0x60000000UL,
1065   0x3fed0a3dUL, 0xe4a4ccf3UL, 0x3e19b90eUL, 0x20000000UL, 0x3fecfb45UL,
1066   0xba3cbeb8UL, 0x3e406b50UL, 0xc0000000UL, 0x3fecec51UL, 0x110f7dddUL,
1067   0x3e0d6806UL, 0x40000000UL, 0x3fecdd63UL, 0x7dd7d508UL, 0xbe5a8943UL,
1068   0x80000000UL, 0x3fecce79UL, 0x9b60f271UL, 0xbe50676aUL, 0x80000000UL,
1069   0x3fecbf94UL, 0x0b9ad660UL, 0x3e59174fUL, 0x60000000UL, 0x3fecb0b4UL,
1070   0x00823d9cUL, 0x3e5bbf72UL, 0x20000000UL, 0x3feca1d9UL, 0x38a6ec89UL,
1071   0xbe4d38f9UL, 0x80000000UL, 0x3fec9302UL, 0x3a0b7d8eUL, 0x3e53dbfdUL,
1072   0xc0000000UL, 0x3fec8430UL, 0xc6826b34UL, 0xbe27c5c9UL, 0xc0000000UL,
1073   0x3fec7563UL, 0x0c706381UL, 0xbe593653UL, 0x60000000UL, 0x3fec669bUL,
1074   0x7df34ec7UL, 0x3e461ab5UL, 0xe0000000UL, 0x3fec57d7UL, 0x40e5e7e8UL,
1075   0xbe5c3daeUL, 0x00000000UL, 0x3fec4919UL, 0x5602770fUL, 0xbe55219dUL,
1076   0xc0000000UL, 0x3fec3a5eUL, 0xec7911ebUL, 0x3e5a5d25UL, 0x60000000UL,
1077   0x3fec2ba9UL, 0xb39ea225UL, 0xbe53c00bUL, 0x80000000UL, 0x3fec1cf8UL,
1078   0x967a212eUL, 0x3e5a8ddfUL, 0x60000000UL, 0x3fec0e4cUL, 0x580798bdUL,
1079   0x3e5f53abUL, 0x00000000UL, 0x3febffa5UL, 0xb8282df6UL, 0xbe46b874UL,
1080   0x20000000UL, 0x3febf102UL, 0xe33a6729UL, 0x3e54963fUL, 0x00000000UL,
1081   0x3febe264UL, 0x3b53e88aUL, 0xbe3adce1UL, 0x60000000UL, 0x3febd3caUL,
1082   0xc2585084UL, 0x3e5cde9fUL, 0x80000000UL, 0x3febc535UL, 0xa335c5eeUL,
1083   0xbe39fd9cUL, 0x20000000UL, 0x3febb6a5UL, 0x7325b04dUL, 0x3e42ba15UL,
1084   0x60000000UL, 0x3feba819UL, 0x1564540fUL, 0x3e3a9f35UL, 0x40000000UL,
1085   0x3feb9992UL, 0x83fff592UL, 0xbe5465ceUL, 0xa0000000UL, 0x3feb8b0fUL,
1086   0xb9da63d3UL, 0xbe4b1a0aUL, 0x80000000UL, 0x3feb7c91UL, 0x6d6f1ea4UL,
1087   0x3e557657UL, 0x00000000UL, 0x3feb6e18UL, 0x5e80a1bfUL, 0x3e4ddbb6UL,
1088   0x00000000UL, 0x3feb5fa3UL, 0x1c9eacb5UL, 0x3e592877UL, 0xa0000000UL,
1089   0x3feb5132UL, 0x6d40beb3UL, 0xbe51858cUL, 0xa0000000UL, 0x3feb42c6UL,
1090   0xd740c67bUL, 0x3e427ad2UL, 0x40000000UL, 0x3feb345fUL, 0xa3e0cceeUL,
1091   0xbe5c2fc4UL, 0x40000000UL, 0x3feb25fcUL, 0x8e752b50UL, 0xbe3da3c2UL,
1092   0xc0000000UL, 0x3feb179dUL, 0xa892e7deUL, 0x3e1fb481UL, 0xc0000000UL,
1093   0x3feb0943UL, 0x21ed71e9UL, 0xbe365206UL, 0x20000000UL, 0x3feafaeeUL,
1094   0x0e1380a3UL, 0x3e5c5b7bUL, 0x20000000UL, 0x3feaec9dUL, 0x3c3d640eUL,
1095   0xbe5dbbd0UL, 0x60000000UL, 0x3feade50UL, 0x8f97a715UL, 0x3e3a8ec5UL,
1096   0x20000000UL, 0x3fead008UL, 0x23ab2839UL, 0x3e2fe98aUL, 0x40000000UL,
1097   0x3feac1c4UL, 0xf4bbd50fUL, 0x3e54d8f6UL, 0xe0000000UL, 0x3feab384UL,
1098   0x14757c4dUL, 0xbe48774cUL, 0xc0000000UL, 0x3feaa549UL, 0x7c7b0eeaUL,
1099   0x3e5b51bbUL, 0x20000000UL, 0x3fea9713UL, 0xf56f7013UL, 0x3e386200UL,
1100   0xe0000000UL, 0x3fea88e0UL, 0xbe428ebeUL, 0xbe514af5UL, 0xe0000000UL,
1101   0x3fea7ab2UL, 0x8d0e4496UL, 0x3e4f9165UL, 0x60000000UL, 0x3fea6c89UL,
1102   0xdbacc5d5UL, 0xbe5c063bUL, 0x20000000UL, 0x3fea5e64UL, 0x3f19d970UL,
1103   0xbe5a0c8cUL, 0x20000000UL, 0x3fea5043UL, 0x09ea3e6bUL, 0x3e5065dcUL,
1104   0x80000000UL, 0x3fea4226UL, 0x78df246cUL, 0x3e5e05f6UL, 0x40000000UL,
1105   0x3fea340eUL, 0x4057d4a0UL, 0x3e431b2bUL, 0x40000000UL, 0x3fea25faUL,
1106   0x82867bb5UL, 0x3e4b76beUL, 0xa0000000UL, 0x3fea17eaUL, 0x9436f40aUL,
1107   0xbe5aad39UL, 0x20000000UL, 0x3fea09dfUL, 0x4b5253b3UL, 0x3e46380bUL,
1108   0x00000000UL, 0x3fe9fbd8UL, 0x8fc52466UL, 0xbe386f9bUL, 0x20000000UL,
1109   0x3fe9edd5UL, 0x22d3f344UL, 0xbe538347UL, 0x60000000UL, 0x3fe9dfd6UL,
1110   0x1ac33522UL, 0x3e5dbc53UL, 0x00000000UL, 0x3fe9d1dcUL, 0xeabdff1dUL,
1111   0x3e40fc0cUL, 0xe0000000UL, 0x3fe9c3e5UL, 0xafd30e73UL, 0xbe585e63UL,
1112   0xe0000000UL, 0x3fe9b5f3UL, 0xa52f226aUL, 0xbe43e8f9UL, 0x20000000UL,
1113   0x3fe9a806UL, 0xecb8698dUL, 0xbe515b36UL, 0x80000000UL, 0x3fe99a1cUL,
1114   0xf2b4e89dUL, 0x3e48b62bUL, 0x20000000UL, 0x3fe98c37UL, 0x7c9a88fbUL,
1115   0x3e44414cUL, 0x00000000UL, 0x3fe97e56UL, 0xda015741UL, 0xbe5d13baUL,
1116   0xe0000000UL, 0x3fe97078UL, 0x5fdace06UL, 0x3e51b947UL, 0x00000000UL,
1117   0x3fe962a0UL, 0x956ca094UL, 0x3e518785UL, 0x40000000UL, 0x3fe954cbUL,
1118   0x01164c1dUL, 0x3e5d5b57UL, 0xc0000000UL, 0x3fe946faUL, 0xe63b3767UL,
1119   0xbe4f84e7UL, 0x40000000UL, 0x3fe9392eUL, 0xe57cc2a9UL, 0x3e34eda3UL,
1120   0xe0000000UL, 0x3fe92b65UL, 0x8c75b544UL, 0x3e5766a0UL, 0xc0000000UL,
1121   0x3fe91da1UL, 0x37d1d087UL, 0xbe5e2ab1UL, 0x80000000UL, 0x3fe90fe1UL,
1122   0xa953dc20UL, 0x3e5fa1f3UL, 0x80000000UL, 0x3fe90225UL, 0xdbd3f369UL,
1123   0x3e47d6dbUL, 0xa0000000UL, 0x3fe8f46dUL, 0x1c9be989UL, 0xbe5e2b0aUL,
1124   0xa0000000UL, 0x3fe8e6b9UL, 0x3c93d76aUL, 0x3e5c8618UL, 0xe0000000UL,
1125   0x3fe8d909UL, 0x2182fc9aUL, 0xbe41aa9eUL, 0x20000000UL, 0x3fe8cb5eUL,
1126   0xe6b3539dUL, 0xbe530d19UL, 0x60000000UL, 0x3fe8bdb6UL, 0x49e58cc3UL,
1127   0xbe3bb374UL, 0xa0000000UL, 0x3fe8b012UL, 0xa7cfeb8fUL, 0x3e56c412UL,
1128   0x00000000UL, 0x3fe8a273UL, 0x8d52bc19UL, 0x3e1429b8UL, 0x60000000UL,
1129   0x3fe894d7UL, 0x4dc32c6cUL, 0xbe48604cUL, 0xc0000000UL, 0x3fe8873fUL,
1130   0x0c868e56UL, 0xbe564ee5UL, 0x00000000UL, 0x3fe879acUL, 0x56aee828UL,
1131   0x3e5e2fd8UL, 0x60000000UL, 0x3fe86c1cUL, 0x7ceab8ecUL, 0x3e493365UL,
1132   0xc0000000UL, 0x3fe85e90UL, 0x78d4dadcUL, 0xbe4f7f25UL, 0x00000000UL,
1133   0x3fe85109UL, 0x0ccd8280UL, 0x3e31e7a2UL, 0x40000000UL, 0x3fe84385UL,
1134   0x34ba4e15UL, 0x3e328077UL, 0x80000000UL, 0x3fe83605UL, 0xa670975aUL,
1135   0xbe53eee5UL, 0xa0000000UL, 0x3fe82889UL, 0xf61b77b2UL, 0xbe43a20aUL,
1136   0xa0000000UL, 0x3fe81b11UL, 0x13e6643bUL, 0x3e5e5fe5UL, 0xc0000000UL,
1137   0x3fe80d9dUL, 0x82cc94e8UL, 0xbe5ff1f9UL, 0xa0000000UL, 0x3fe8002dUL,
1138   0x8a0c9c5dUL, 0xbe42b0e7UL, 0x60000000UL, 0x3fe7f2c1UL, 0x22a16f01UL,
1139   0x3e5d9ea0UL, 0x20000000UL, 0x3fe7e559UL, 0xc38cd451UL, 0x3e506963UL,
1140   0xc0000000UL, 0x3fe7d7f4UL, 0x9902bc71UL, 0x3e4503d7UL, 0x40000000UL,
1141   0x3fe7ca94UL, 0xdef2a3c0UL, 0x3e3d98edUL, 0xa0000000UL, 0x3fe7bd37UL,
1142   0xed49abb0UL, 0x3e24c1ffUL, 0xe0000000UL, 0x3fe7afdeUL, 0xe3b0be70UL,
1143   0xbe40c467UL, 0x00000000UL, 0x3fe7a28aUL, 0xaf9f193cUL, 0xbe5dff6cUL,
1144   0xe0000000UL, 0x3fe79538UL, 0xb74cf6b6UL, 0xbe258ed0UL, 0xa0000000UL,
1145   0x3fe787ebUL, 0x1d9127c7UL, 0x3e345fb0UL, 0x40000000UL, 0x3fe77aa2UL,
1146   0x1028c21dUL, 0xbe4619bdUL, 0xa0000000UL, 0x3fe76d5cUL, 0x7cb0b5e4UL,
1147   0x3e40f1a2UL, 0xe0000000UL, 0x3fe7601aUL, 0x2b1bc4adUL, 0xbe32e8bbUL,
1148   0xe0000000UL, 0x3fe752dcUL, 0x6839f64eUL, 0x3e41f57bUL, 0xc0000000UL,
1149   0x3fe745a2UL, 0xc4121f7eUL, 0xbe52c40aUL, 0x60000000UL, 0x3fe7386cUL,
1150   0xd6852d72UL, 0xbe5c4e6bUL, 0xc0000000UL, 0x3fe72b39UL, 0x91d690f7UL,
1151   0xbe57f88fUL, 0xe0000000UL, 0x3fe71e0aUL, 0x627a2159UL, 0xbe4425d5UL,
1152   0xc0000000UL, 0x3fe710dfUL, 0x50a54033UL, 0x3e422b7eUL, 0x60000000UL,
1153   0x3fe703b8UL, 0x3b0b5f91UL, 0x3e5d3857UL, 0xe0000000UL, 0x3fe6f694UL,
1154   0x84d628a2UL, 0xbe51f090UL, 0x00000000UL, 0x3fe6e975UL, 0x306d8894UL,
1155   0xbe414d83UL, 0xe0000000UL, 0x3fe6dc58UL, 0x30bf24aaUL, 0xbe4650caUL,
1156   0x80000000UL, 0x3fe6cf40UL, 0xd4628d69UL, 0xbe5db007UL, 0xc0000000UL,
1157   0x3fe6c22bUL, 0xa2aae57bUL, 0xbe31d279UL, 0xc0000000UL, 0x3fe6b51aUL,
1158   0x860edf7eUL, 0xbe2d4c4aUL, 0x80000000UL, 0x3fe6a80dUL, 0xf3559341UL,
1159   0xbe5f7e98UL, 0xe0000000UL, 0x3fe69b03UL, 0xa885899eUL, 0xbe5c2011UL,
1160   0xe0000000UL, 0x3fe68dfdUL, 0x2bdc6d37UL, 0x3e224a82UL, 0xa0000000UL,
1161   0x3fe680fbUL, 0xc12ad1b9UL, 0xbe40cf56UL, 0x00000000UL, 0x3fe673fdUL,
1162   0x1bcdf659UL, 0xbdf52f2dUL, 0x00000000UL, 0x3fe66702UL, 0x5df10408UL,
1163   0x3e5663e0UL, 0xc0000000UL, 0x3fe65a0aUL, 0xa4070568UL, 0xbe40b12fUL,
1164   0x00000000UL, 0x3fe64d17UL, 0x71c54c47UL, 0x3e5f5e8bUL, 0x00000000UL,
1165   0x3fe64027UL, 0xbd4b7e83UL, 0x3e42ead6UL, 0xa0000000UL, 0x3fe6333aUL,
1166   0x61598bd2UL, 0xbe4c48d4UL, 0xc0000000UL, 0x3fe62651UL, 0x6f538d61UL,
1167   0x3e548401UL, 0xa0000000UL, 0x3fe6196cUL, 0x14344120UL, 0xbe529af6UL,
1168   0x00000000UL, 0x3fe60c8bUL, 0x5982c587UL, 0xbe3e1e4fUL, 0x00000000UL,
1169   0x3fe5ffadUL, 0xfe51d4eaUL, 0xbe4c897aUL, 0x80000000UL, 0x3fe5f2d2UL,
1170   0xfd46ebe1UL, 0x3e552e00UL, 0xa0000000UL, 0x3fe5e5fbUL, 0xa4695699UL,
1171   0x3e5ed471UL, 0x60000000UL, 0x3fe5d928UL, 0x80d118aeUL, 0x3e456b61UL,
1172   0xa0000000UL, 0x3fe5cc58UL, 0x304c330bUL, 0x3e54dc29UL, 0x80000000UL,
1173   0x3fe5bf8cUL, 0x0af2dedfUL, 0xbe3aa9bdUL, 0xe0000000UL, 0x3fe5b2c3UL,
1174   0x15fc9258UL, 0xbe479a37UL, 0xc0000000UL, 0x3fe5a5feUL, 0x9292c7eaUL,
1175   0x3e188650UL, 0x20000000UL, 0x3fe5993dUL, 0x33b4d380UL, 0x3e5d6d93UL,
1176   0x20000000UL, 0x3fe58c7fUL, 0x02fd16c7UL, 0x3e2fe961UL, 0xa0000000UL,
1177   0x3fe57fc4UL, 0x4a05edb6UL, 0xbe4d55b4UL, 0xa0000000UL, 0x3fe5730dUL,
1178   0x3d443abbUL, 0xbe5e6954UL, 0x00000000UL, 0x3fe5665aUL, 0x024acfeaUL,
1179   0x3e50e61bUL, 0x00000000UL, 0x3fe559aaUL, 0xcc9edd09UL, 0xbe325403UL,
1180   0x60000000UL, 0x3fe54cfdUL, 0x1fe26950UL, 0x3e5d500eUL, 0x60000000UL,
1181   0x3fe54054UL, 0x6c5ae164UL, 0xbe4a79b4UL, 0xc0000000UL, 0x3fe533aeUL,
1182   0x154b0287UL, 0xbe401571UL, 0xa0000000UL, 0x3fe5270cUL, 0x0673f401UL,
1183   0xbe56e56bUL, 0xe0000000UL, 0x3fe51a6dUL, 0x751b639cUL, 0x3e235269UL,
1184   0xa0000000UL, 0x3fe50dd2UL, 0x7c7b2bedUL, 0x3ddec887UL, 0xc0000000UL,
1185   0x3fe5013aUL, 0xafab4e17UL, 0x3e5e7575UL, 0x60000000UL, 0x3fe4f4a6UL,
1186   0x2e308668UL, 0x3e59aed6UL, 0x80000000UL, 0x3fe4e815UL, 0xf33e2a76UL,
1187   0xbe51f184UL, 0xe0000000UL, 0x3fe4db87UL, 0x839f3e3eUL, 0x3e57db01UL,
1188   0xc0000000UL, 0x3fe4cefdUL, 0xa9eda7bbUL, 0x3e535e0fUL, 0x00000000UL,
1189   0x3fe4c277UL, 0x2a8f66a5UL, 0x3e5ce451UL, 0xc0000000UL, 0x3fe4b5f3UL,
1190   0x05192456UL, 0xbe4e8518UL, 0xc0000000UL, 0x3fe4a973UL, 0x4aa7cd1dUL,
1191   0x3e46784aUL, 0x40000000UL, 0x3fe49cf7UL, 0x8e23025eUL, 0xbe5749f2UL,
1192   0x00000000UL, 0x3fe4907eUL, 0x18d30215UL, 0x3e360f39UL, 0x20000000UL,
1193   0x3fe48408UL, 0x63dcf2f3UL, 0x3e5e00feUL, 0xc0000000UL, 0x3fe47795UL,
1194   0x46182d09UL, 0xbe5173d9UL, 0xa0000000UL, 0x3fe46b26UL, 0x8f0e62aaUL,
1195   0xbe48f281UL, 0xe0000000UL, 0x3fe45ebaUL, 0x5775c40cUL, 0xbe56aad4UL,
1196   0x60000000UL, 0x3fe45252UL, 0x0fe25f69UL, 0x3e48bd71UL, 0x40000000UL,
1197   0x3fe445edUL, 0xe9989ec5UL, 0x3e590d97UL, 0x80000000UL, 0x3fe4398bUL,
1198   0xb3d9ffe3UL, 0x3e479dbcUL, 0x20000000UL, 0x3fe42d2dUL, 0x388e4d2eUL,
1199   0xbe5eed80UL, 0xe0000000UL, 0x3fe420d1UL, 0x6f797c18UL, 0x3e554b4cUL,
1200   0x20000000UL, 0x3fe4147aUL, 0x31048bb4UL, 0xbe5b1112UL, 0x80000000UL,
1201   0x3fe40825UL, 0x2efba4f9UL, 0x3e48ebc7UL, 0x40000000UL, 0x3fe3fbd4UL,
1202   0x50201119UL, 0x3e40b701UL, 0x40000000UL, 0x3fe3ef86UL, 0x0a4db32cUL,
1203   0x3e551de8UL, 0xa0000000UL, 0x3fe3e33bUL, 0x0c9c148bUL, 0xbe50c1f6UL,
1204   0x20000000UL, 0x3fe3d6f4UL, 0xc9129447UL, 0x3e533fa0UL, 0x00000000UL,
1205   0x3fe3cab0UL, 0xaae5b5a0UL, 0xbe22b68eUL, 0x20000000UL, 0x3fe3be6fUL,
1206   0x02305e8aUL, 0xbe54fc08UL, 0x60000000UL, 0x3fe3b231UL, 0x7f908258UL,
1207   0x3e57dc05UL, 0x00000000UL, 0x3fe3a5f7UL, 0x1a09af78UL, 0x3e08038bUL,
1208   0xe0000000UL, 0x3fe399bfUL, 0x490643c1UL, 0xbe5dbe42UL, 0xe0000000UL,
1209   0x3fe38d8bUL, 0x5e8ad724UL, 0xbe3c2b72UL, 0x20000000UL, 0x3fe3815bUL,
1210   0xc67196b6UL, 0x3e1713cfUL, 0xa0000000UL, 0x3fe3752dUL, 0x6182e429UL,
1211   0xbe3ec14cUL, 0x40000000UL, 0x3fe36903UL, 0xab6eb1aeUL, 0x3e5a2cc5UL,
1212   0x40000000UL, 0x3fe35cdcUL, 0xfe5dc064UL, 0xbe5c5878UL, 0x40000000UL,
1213   0x3fe350b8UL, 0x0ba6b9e4UL, 0x3e51619bUL, 0x80000000UL, 0x3fe34497UL,
1214   0x857761aaUL, 0x3e5fff53UL, 0x00000000UL, 0x3fe3387aUL, 0xf872d68cUL,
1215   0x3e484f4dUL, 0xa0000000UL, 0x3fe32c5fUL, 0x087e97c2UL, 0x3e52842eUL,
1216   0x80000000UL, 0x3fe32048UL, 0x73d6d0c0UL, 0xbe503edfUL, 0x80000000UL,
1217   0x3fe31434UL, 0x0c1456a1UL, 0xbe5f72adUL, 0xa0000000UL, 0x3fe30823UL,
1218   0x83a1a4d5UL, 0xbe5e65ccUL, 0xe0000000UL, 0x3fe2fc15UL, 0x855a7390UL,
1219   0xbe506438UL, 0x40000000UL, 0x3fe2f00bUL, 0xa2898287UL, 0x3e3d22a2UL,
1220   0xe0000000UL, 0x3fe2e403UL, 0x8b56f66fUL, 0xbe5aa5fdUL, 0x80000000UL,
1221   0x3fe2d7ffUL, 0x52db119aUL, 0x3e3a2e3dUL, 0x60000000UL, 0x3fe2cbfeUL,
1222   0xe2ddd4c0UL, 0xbe586469UL, 0x40000000UL, 0x3fe2c000UL, 0x6b01bf10UL,
1223   0x3e352b9dUL, 0x40000000UL, 0x3fe2b405UL, 0xb07a1cdfUL, 0x3e5c5cdaUL,
1224   0x80000000UL, 0x3fe2a80dUL, 0xc7b5f868UL, 0xbe5668b3UL, 0xc0000000UL,
1225   0x3fe29c18UL, 0x185edf62UL, 0xbe563d66UL, 0x00000000UL, 0x3fe29027UL,
1226   0xf729e1ccUL, 0x3e59a9a0UL, 0x80000000UL, 0x3fe28438UL, 0x6433c727UL,
1227   0xbe43cc89UL, 0x00000000UL, 0x3fe2784dUL, 0x41782631UL, 0xbe30750cUL,
1228   0xa0000000UL, 0x3fe26c64UL, 0x914911b7UL, 0xbe58290eUL, 0x40000000UL,
1229   0x3fe2607fUL, 0x3dcc73e1UL, 0xbe4269cdUL, 0x00000000UL, 0x3fe2549dUL,
1230   0x2751bf70UL, 0xbe5a6998UL, 0xc0000000UL, 0x3fe248bdUL, 0x4248b9fbUL,
1231   0xbe4ddb00UL, 0x80000000UL, 0x3fe23ce1UL, 0xf35cf82fUL, 0x3e561b71UL,
1232   0x60000000UL, 0x3fe23108UL, 0x8e481a2dUL, 0x3e518fb9UL, 0x60000000UL,
1233   0x3fe22532UL, 0x5ab96edcUL, 0xbe5fafc5UL, 0x40000000UL, 0x3fe2195fUL,
1234   0x80943911UL, 0xbe07f819UL, 0x40000000UL, 0x3fe20d8fUL, 0x386f2d6cUL,
1235   0xbe54ba8bUL, 0x40000000UL, 0x3fe201c2UL, 0xf29664acUL, 0xbe5eb815UL,
1236   0x20000000UL, 0x3fe1f5f8UL, 0x64f03390UL, 0x3e5e320cUL, 0x20000000UL,
1237   0x3fe1ea31UL, 0x747ff696UL, 0x3e5ef0a5UL, 0x40000000UL, 0x3fe1de6dUL,
1238   0x3e9ceb51UL, 0xbe5f8d27UL, 0x20000000UL, 0x3fe1d2acUL, 0x4ae0b55eUL,
1239   0x3e5faa21UL, 0x20000000UL, 0x3fe1c6eeUL, 0x28569a5eUL, 0x3e598a4fUL,
1240   0x20000000UL, 0x3fe1bb33UL, 0x54b33e07UL, 0x3e46130aUL, 0x20000000UL,
1241   0x3fe1af7bUL, 0x024f1078UL, 0xbe4dbf93UL, 0x00000000UL, 0x3fe1a3c6UL,
1242   0xb0783bfaUL, 0x3e419248UL, 0xe0000000UL, 0x3fe19813UL, 0x2f02b836UL,
1243   0x3e4e02b7UL, 0xc0000000UL, 0x3fe18c64UL, 0x28dec9d4UL, 0x3e09064fUL,
1244   0x80000000UL, 0x3fe180b8UL, 0x45cbf406UL, 0x3e5b1f46UL, 0x40000000UL,
1245   0x3fe1750fUL, 0x03d9964cUL, 0x3e5b0a79UL, 0x00000000UL, 0x3fe16969UL,
1246   0x8b5b882bUL, 0xbe238086UL, 0xa0000000UL, 0x3fe15dc5UL, 0x73bad6f8UL,
1247   0xbdf1fca4UL, 0x20000000UL, 0x3fe15225UL, 0x5385769cUL, 0x3e5e8d76UL,
1248   0xa0000000UL, 0x3fe14687UL, 0x1676dc6bUL, 0x3e571d08UL, 0x20000000UL,
1249   0x3fe13aedUL, 0xa8c41c7fUL, 0xbe598a25UL, 0x60000000UL, 0x3fe12f55UL,
1250   0xc4e1aaf0UL, 0x3e435277UL, 0xa0000000UL, 0x3fe123c0UL, 0x403638e1UL,
1251   0xbe21aa7cUL, 0xc0000000UL, 0x3fe1182eUL, 0x557a092bUL, 0xbdd0116bUL,
1252   0xc0000000UL, 0x3fe10c9fUL, 0x7d779f66UL, 0x3e4a61baUL, 0xc0000000UL,
1253   0x3fe10113UL, 0x2b09c645UL, 0xbe5d586eUL, 0x20000000UL, 0x3fe0ea04UL,
1254   0xea2cad46UL, 0x3e5aa97cUL, 0x20000000UL, 0x3fe0d300UL, 0x23190e54UL,
1255   0x3e50f1a7UL, 0xa0000000UL, 0x3fe0bc07UL, 0x1379a5a6UL, 0xbe51619dUL,
1256   0x60000000UL, 0x3fe0a51aUL, 0x926a3d4aUL, 0x3e5cf019UL, 0xa0000000UL,
1257   0x3fe08e38UL, 0xa8c24358UL, 0x3e35241eUL, 0x20000000UL, 0x3fe07762UL,
1258   0x24317e7aUL, 0x3e512cfaUL, 0x00000000UL, 0x3fe06097UL, 0xfd9cf274UL,
1259   0xbe55bef3UL, 0x00000000UL, 0x3fe049d7UL, 0x3689b49dUL, 0xbe36d26dUL,
1260   0x40000000UL, 0x3fe03322UL, 0xf72ef6c4UL, 0xbe54cd08UL, 0xa0000000UL,
1261   0x3fe01c78UL, 0x23702d2dUL, 0xbe5900bfUL, 0x00000000UL, 0x3fe005daUL,
1262   0x3f59c14cUL, 0x3e57d80bUL, 0x40000000UL, 0x3fdfde8dUL, 0xad67766dUL,
1263   0xbe57fad4UL, 0x40000000UL, 0x3fdfb17cUL, 0x644f4ae7UL, 0x3e1ee43bUL,
1264   0x40000000UL, 0x3fdf8481UL, 0x903234d2UL, 0x3e501a86UL, 0x40000000UL,
1265   0x3fdf579cUL, 0xafe9e509UL, 0xbe267c3eUL, 0x00000000UL, 0x3fdf2acdUL,
1266   0xb7dfda0bUL, 0xbe48149bUL, 0x40000000UL, 0x3fdefe13UL, 0x3b94305eUL,
1267   0x3e5f4ea7UL, 0x80000000UL, 0x3fded16fUL, 0x5d95da61UL, 0xbe55c198UL,
1268   0x00000000UL, 0x3fdea4e1UL, 0x406960c9UL, 0xbdd99a19UL, 0x00000000UL,
1269   0x3fde7868UL, 0xd22f3539UL, 0x3e470c78UL, 0x80000000UL, 0x3fde4c04UL,
1270   0x83eec535UL, 0xbe3e1232UL, 0x40000000UL, 0x3fde1fb6UL, 0x3dfbffcbUL,
1271   0xbe4b7d71UL, 0x40000000UL, 0x3fddf37dUL, 0x7e1be4e0UL, 0xbe5b8f8fUL,
1272   0x40000000UL, 0x3fddc759UL, 0x46dae887UL, 0xbe350458UL, 0x80000000UL,
1273   0x3fdd9b4aUL, 0xed6ecc49UL, 0xbe5f0045UL, 0x80000000UL, 0x3fdd6f50UL,
1274   0x2e9e883cUL, 0x3e2915daUL, 0x80000000UL, 0x3fdd436bUL, 0xf0bccb32UL,
1275   0x3e4a68c9UL, 0x80000000UL, 0x3fdd179bUL, 0x9bbfc779UL, 0xbe54a26aUL,
1276   0x00000000UL, 0x3fdcebe0UL, 0x7cea33abUL, 0x3e43c6b7UL, 0x40000000UL,
1277   0x3fdcc039UL, 0xe740fd06UL, 0x3e5526c2UL, 0x40000000UL, 0x3fdc94a7UL,
1278   0x9eadeb1aUL, 0xbe396d8dUL, 0xc0000000UL, 0x3fdc6929UL, 0xf0a8f95aUL,
1279   0xbe5c0ab2UL, 0x80000000UL, 0x3fdc3dc0UL, 0x6ee2693bUL, 0x3e0992e6UL,
1280   0xc0000000UL, 0x3fdc126bUL, 0x5ac6b581UL, 0xbe2834b6UL, 0x40000000UL,
1281   0x3fdbe72bUL, 0x8cc226ffUL, 0x3e3596a6UL, 0x00000000UL, 0x3fdbbbffUL,
1282   0xf92a74bbUL, 0x3e3c5813UL, 0x00000000UL, 0x3fdb90e7UL, 0x479664c0UL,
1283   0xbe50d644UL, 0x00000000UL, 0x3fdb65e3UL, 0x5004975bUL, 0xbe55258fUL,
1284   0x00000000UL, 0x3fdb3af3UL, 0xe4b23194UL, 0xbe588407UL, 0xc0000000UL,
1285   0x3fdb1016UL, 0xe65d4d0aUL, 0x3e527c26UL, 0x80000000UL, 0x3fdae54eUL,
1286   0x814fddd6UL, 0x3e5962a2UL, 0x40000000UL, 0x3fdaba9aUL, 0xe19d0913UL,
1287   0xbe562f4eUL, 0x80000000UL, 0x3fda8ff9UL, 0x43cfd006UL, 0xbe4cfdebUL,
1288   0x40000000UL, 0x3fda656cUL, 0x686f0a4eUL, 0x3e5e47a8UL, 0xc0000000UL,
1289   0x3fda3af2UL, 0x7200d410UL, 0x3e5e1199UL, 0xc0000000UL, 0x3fda108cUL,
1290   0xabd2266eUL, 0x3e5ee4d1UL, 0x40000000UL, 0x3fd9e63aUL, 0x396f8f2cUL,
1291   0x3e4dbffbUL, 0x00000000UL, 0x3fd9bbfbUL, 0xe32b25ddUL, 0x3e5c3a54UL,
1292   0x40000000UL, 0x3fd991cfUL, 0x431e4035UL, 0xbe457925UL, 0x80000000UL,
1293   0x3fd967b6UL, 0x7bed3dd3UL, 0x3e40c61dUL, 0x00000000UL, 0x3fd93db1UL,
1294   0xd7449365UL, 0x3e306419UL, 0x80000000UL, 0x3fd913beUL, 0x1746e791UL,
1295   0x3e56fcfcUL, 0x40000000UL, 0x3fd8e9dfUL, 0xf3a9028bUL, 0xbe5041b9UL,
1296   0xc0000000UL, 0x3fd8c012UL, 0x56840c50UL, 0xbe26e20aUL, 0x40000000UL,
1297   0x3fd89659UL, 0x19763102UL, 0xbe51f466UL, 0x80000000UL, 0x3fd86cb2UL,
1298   0x7032de7cUL, 0xbe4d298aUL, 0x80000000UL, 0x3fd8431eUL, 0xdeb39fabUL,
1299   0xbe4361ebUL, 0x40000000UL, 0x3fd8199dUL, 0x5d01cbe0UL, 0xbe5425b3UL,
1300   0x80000000UL, 0x3fd7f02eUL, 0x3ce99aa9UL, 0x3e146fa8UL, 0x80000000UL,
1301   0x3fd7c6d2UL, 0xd1a262b9UL, 0xbe5a1a69UL, 0xc0000000UL, 0x3fd79d88UL,
1302   0x8606c236UL, 0x3e423a08UL, 0x80000000UL, 0x3fd77451UL, 0x8fd1e1b7UL,
1303   0x3e5a6a63UL, 0xc0000000UL, 0x3fd74b2cUL, 0xe491456aUL, 0x3e42c1caUL,
1304   0x40000000UL, 0x3fd7221aUL, 0x4499a6d7UL, 0x3e36a69aUL, 0x00000000UL,
1305   0x3fd6f91aUL, 0x5237df94UL, 0xbe0f8f02UL, 0x00000000UL, 0x3fd6d02cUL,
1306   0xb6482c6eUL, 0xbe5abcf7UL, 0x00000000UL, 0x3fd6a750UL, 0x1919fd61UL,
1307   0xbe57ade2UL, 0x00000000UL, 0x3fd67e86UL, 0xaa7a994dUL, 0xbe3f3fbdUL,
1308   0x00000000UL, 0x3fd655ceUL, 0x67db014cUL, 0x3e33c550UL, 0x00000000UL,
1309   0x3fd62d28UL, 0xa82856b7UL, 0xbe1409d1UL, 0xc0000000UL, 0x3fd60493UL,
1310   0x1e6a300dUL, 0x3e55d899UL, 0x80000000UL, 0x3fd5dc11UL, 0x1222bd5cUL,
1311   0xbe35bfc0UL, 0xc0000000UL, 0x3fd5b3a0UL, 0x6e8dc2d3UL, 0x3e5d4d79UL,
1312   0x00000000UL, 0x3fd58b42UL, 0xe0e4ace6UL, 0xbe517303UL, 0x80000000UL,
1313   0x3fd562f4UL, 0xb306e0a8UL, 0x3e5edf0fUL, 0xc0000000UL, 0x3fd53ab8UL,
1314   0x6574bc54UL, 0x3e5ee859UL, 0x80000000UL, 0x3fd5128eUL, 0xea902207UL,
1315   0x3e5f6188UL, 0xc0000000UL, 0x3fd4ea75UL, 0x9f911d79UL, 0x3e511735UL,
1316   0x80000000UL, 0x3fd4c26eUL, 0xf9c77397UL, 0xbe5b1643UL, 0x40000000UL,
1317   0x3fd49a78UL, 0x15fc9258UL, 0x3e479a37UL, 0x80000000UL, 0x3fd47293UL,
1318   0xd5a04dd9UL, 0xbe426e56UL, 0xc0000000UL, 0x3fd44abfUL, 0xe04042f5UL,
1319   0x3e56f7c6UL, 0x40000000UL, 0x3fd422fdUL, 0x1d8bf2c8UL, 0x3e5d8810UL,
1320   0x00000000UL, 0x3fd3fb4cUL, 0x88a8ddeeUL, 0xbe311454UL, 0xc0000000UL,
1321   0x3fd3d3abUL, 0x3e3b5e47UL, 0xbe5d1b72UL, 0x40000000UL, 0x3fd3ac1cUL,
1322   0xc2ab5d59UL, 0x3e31b02bUL, 0xc0000000UL, 0x3fd3849dUL, 0xd4e34b9eUL,
1323   0x3e51cb2fUL, 0x40000000UL, 0x3fd35d30UL, 0x177204fbUL, 0xbe2b8cd7UL,
1324   0x80000000UL, 0x3fd335d3UL, 0xfcd38c82UL, 0xbe4356e1UL, 0x80000000UL,
1325   0x3fd30e87UL, 0x64f54accUL, 0xbe4e6224UL, 0x00000000UL, 0x3fd2e74cUL,
1326   0xaa7975d9UL, 0x3e5dc0feUL, 0x80000000UL, 0x3fd2c021UL, 0x516dab3fUL,
1327   0xbe50ffa3UL, 0x40000000UL, 0x3fd29907UL, 0x2bfb7313UL, 0x3e5674a2UL,
1328   0xc0000000UL, 0x3fd271fdUL, 0x0549fc99UL, 0x3e385d29UL, 0xc0000000UL,
1329   0x3fd24b04UL, 0x55b63073UL, 0xbe500c6dUL, 0x00000000UL, 0x3fd2241cUL,
1330   0x3f91953aUL, 0x3e389977UL, 0xc0000000UL, 0x3fd1fd43UL, 0xa1543f71UL,
1331   0xbe3487abUL, 0xc0000000UL, 0x3fd1d67bUL, 0x4ec8867cUL, 0x3df6a2dcUL,
1332   0x00000000UL, 0x3fd1afc4UL, 0x4328e3bbUL, 0x3e41d9c0UL, 0x80000000UL,
1333   0x3fd1891cUL, 0x2e1cda84UL, 0x3e3bdd87UL, 0x40000000UL, 0x3fd16285UL,
1334   0x4b5331aeUL, 0xbe53128eUL, 0x00000000UL, 0x3fd13bfeUL, 0xb9aec164UL,
1335   0xbe52ac98UL, 0xc0000000UL, 0x3fd11586UL, 0xd91e1316UL, 0xbe350630UL,
1336   0x80000000UL, 0x3fd0ef1fUL, 0x7cacc12cUL, 0x3e3f5219UL, 0x40000000UL,
1337   0x3fd0c8c8UL, 0xbce277b7UL, 0x3e3d30c0UL, 0x00000000UL, 0x3fd0a281UL,
1338   0x2a63447dUL, 0xbe541377UL, 0x80000000UL, 0x3fd07c49UL, 0xfac483b5UL,
1339   0xbe5772ecUL, 0xc0000000UL, 0x3fd05621UL, 0x36b8a570UL, 0xbe4fd4bdUL,
1340   0xc0000000UL, 0x3fd03009UL, 0xbae505f7UL, 0xbe450388UL, 0x80000000UL,
1341   0x3fd00a01UL, 0x3e35aeadUL, 0xbe5430fcUL, 0x80000000UL, 0x3fcfc811UL,
1342   0x707475acUL, 0x3e38806eUL, 0x80000000UL, 0x3fcf7c3fUL, 0xc91817fcUL,
1343   0xbe40cceaUL, 0x80000000UL, 0x3fcf308cUL, 0xae05d5e9UL, 0xbe4919b8UL,
1344   0x80000000UL, 0x3fcee4f8UL, 0xae6cc9e6UL, 0xbe530b94UL, 0x00000000UL,
1345   0x3fce9983UL, 0x1efe3e8eUL, 0x3e57747eUL, 0x00000000UL, 0x3fce4e2dUL,
1346   0xda78d9bfUL, 0xbe59a608UL, 0x00000000UL, 0x3fce02f5UL, 0x8abe2c2eUL,
1347   0x3e4a35adUL, 0x00000000UL, 0x3fcdb7dcUL, 0x1495450dUL, 0xbe0872ccUL,
1348   0x80000000UL, 0x3fcd6ce1UL, 0x86ee0ba0UL, 0xbe4f59a0UL, 0x00000000UL,
1349   0x3fcd2205UL, 0xe81ca888UL, 0x3e5402c3UL, 0x00000000UL, 0x3fccd747UL,
1350   0x3b4424b9UL, 0x3e5dfdc3UL, 0x80000000UL, 0x3fcc8ca7UL, 0xd305b56cUL,
1351   0x3e202da6UL, 0x00000000UL, 0x3fcc4226UL, 0x399a6910UL, 0xbe482a1cUL,
1352   0x80000000UL, 0x3fcbf7c2UL, 0x747f7938UL, 0xbe587372UL, 0x80000000UL,
1353   0x3fcbad7cUL, 0x6fc246a0UL, 0x3e50d83dUL, 0x00000000UL, 0x3fcb6355UL,
1354   0xee9e9be5UL, 0xbe5c35bdUL, 0x80000000UL, 0x3fcb194aUL, 0x8416c0bcUL,
1355   0x3e546d4fUL, 0x00000000UL, 0x3fcacf5eUL, 0x49f7f08fUL, 0x3e56da76UL,
1356   0x00000000UL, 0x3fca858fUL, 0x5dc30de2UL, 0x3e5f390cUL, 0x00000000UL,
1357   0x3fca3bdeUL, 0x950583b6UL, 0xbe5e4169UL, 0x80000000UL, 0x3fc9f249UL,
1358   0x33631553UL, 0x3e52aeb1UL, 0x00000000UL, 0x3fc9a8d3UL, 0xde8795a6UL,
1359   0xbe59a504UL, 0x00000000UL, 0x3fc95f79UL, 0x076bf41eUL, 0x3e5122feUL,
1360   0x80000000UL, 0x3fc9163cUL, 0x2914c8e7UL, 0x3e3dd064UL, 0x00000000UL,
1361   0x3fc8cd1dUL, 0x3a30eca3UL, 0xbe21b4aaUL, 0x80000000UL, 0x3fc8841aUL,
1362   0xb2a96650UL, 0xbe575444UL, 0x80000000UL, 0x3fc83b34UL, 0x2376c0cbUL,
1363   0xbe2a74c7UL, 0x80000000UL, 0x3fc7f26bUL, 0xd8a0b653UL, 0xbe5181b6UL,
1364   0x00000000UL, 0x3fc7a9bfUL, 0x32257882UL, 0xbe4a78b4UL, 0x00000000UL,
1365   0x3fc7612fUL, 0x1eee8bd9UL, 0xbe1bfe9dUL, 0x80000000UL, 0x3fc718bbUL,
1366   0x0c603cc4UL, 0x3e36fdc9UL, 0x80000000UL, 0x3fc6d064UL, 0x3728b8cfUL,
1367   0xbe1e542eUL, 0x80000000UL, 0x3fc68829UL, 0xc79a4067UL, 0x3e5c380fUL,
1368   0x00000000UL, 0x3fc6400bUL, 0xf69eac69UL, 0x3e550a84UL, 0x80000000UL,
1369   0x3fc5f808UL, 0xb7a780a4UL, 0x3e5d9224UL, 0x80000000UL, 0x3fc5b022UL,
1370   0xad9dfb1eUL, 0xbe55242fUL, 0x00000000UL, 0x3fc56858UL, 0x659b18beUL,
1371   0xbe4bfda3UL, 0x80000000UL, 0x3fc520a9UL, 0x66ee3631UL, 0xbe57d769UL,
1372   0x80000000UL, 0x3fc4d916UL, 0x1ec62819UL, 0x3e2427f7UL, 0x80000000UL,
1373   0x3fc4919fUL, 0xdec25369UL, 0xbe435431UL, 0x00000000UL, 0x3fc44a44UL,
1374   0xa8acfc4bUL, 0xbe3c62e8UL, 0x00000000UL, 0x3fc40304UL, 0xcf1d3eabUL,
1375   0xbdfba29fUL, 0x80000000UL, 0x3fc3bbdfUL, 0x79aba3eaUL, 0xbdf1b7c8UL,
1376   0x80000000UL, 0x3fc374d6UL, 0xb8d186daUL, 0xbe5130cfUL, 0x80000000UL,
1377   0x3fc32de8UL, 0x9d74f152UL, 0x3e2285b6UL, 0x00000000UL, 0x3fc2e716UL,
1378   0x50ae7ca9UL, 0xbe503920UL, 0x80000000UL, 0x3fc2a05eUL, 0x6caed92eUL,
1379   0xbe533924UL, 0x00000000UL, 0x3fc259c2UL, 0x9cb5034eUL, 0xbe510e31UL,
1380   0x80000000UL, 0x3fc21340UL, 0x12c4d378UL, 0xbe540b43UL, 0x80000000UL,
1381   0x3fc1ccd9UL, 0xcc418706UL, 0x3e59887aUL, 0x00000000UL, 0x3fc1868eUL,
1382   0x921f4106UL, 0xbe528e67UL, 0x80000000UL, 0x3fc1405cUL, 0x3969441eUL,
1383   0x3e5d8051UL, 0x00000000UL, 0x3fc0fa46UL, 0xd941ef5bUL, 0x3e5f9079UL,
1384   0x80000000UL, 0x3fc0b44aUL, 0x5a3e81b2UL, 0xbe567691UL, 0x00000000UL,
1385   0x3fc06e69UL, 0x9d66afe7UL, 0xbe4d43fbUL, 0x00000000UL, 0x3fc028a2UL,
1386   0x0a92a162UL, 0xbe52f394UL, 0x00000000UL, 0x3fbfc5eaUL, 0x209897e5UL,
1387   0x3e529e37UL, 0x00000000UL, 0x3fbf3ac5UL, 0x8458bd7bUL, 0x3e582831UL,
1388   0x00000000UL, 0x3fbeafd5UL, 0xb8d8b4b8UL, 0xbe486b4aUL, 0x00000000UL,
1389   0x3fbe2518UL, 0xe0a3b7b6UL, 0x3e5bafd2UL, 0x00000000UL, 0x3fbd9a90UL,
1390   0x2bf2710eUL, 0x3e383b2bUL, 0x00000000UL, 0x3fbd103cUL, 0x73eb6ab7UL,
1391   0xbe56d78dUL, 0x00000000UL, 0x3fbc861bUL, 0x32ceaff5UL, 0xbe32dc5aUL,
1392   0x00000000UL, 0x3fbbfc2eUL, 0xbee04cb7UL, 0xbe4a71a4UL, 0x00000000UL,
1393   0x3fbb7274UL, 0x35ae9577UL, 0x3e38142fUL, 0x00000000UL, 0x3fbae8eeUL,
1394   0xcbaddab4UL, 0xbe5490f0UL, 0x00000000UL, 0x3fba5f9aUL, 0x95ce1114UL,
1395   0x3e597c71UL, 0x00000000UL, 0x3fb9d67aUL, 0x6d7c0f78UL, 0x3e3abc2dUL,
1396   0x00000000UL, 0x3fb94d8dUL, 0x2841a782UL, 0xbe566cbcUL, 0x00000000UL,
1397   0x3fb8c4d2UL, 0x6ed429c6UL, 0xbe3cfff9UL, 0x00000000UL, 0x3fb83c4aUL,
1398   0xe4a49fbbUL, 0xbe552964UL, 0x00000000UL, 0x3fb7b3f4UL, 0x2193d81eUL,
1399   0xbe42fa72UL, 0x00000000UL, 0x3fb72bd0UL, 0xdd70c122UL, 0x3e527a8cUL,
1400   0x00000000UL, 0x3fb6a3dfUL, 0x03108a54UL, 0xbe450393UL, 0x00000000UL,
1401   0x3fb61c1fUL, 0x30ff7954UL, 0x3e565840UL, 0x00000000UL, 0x3fb59492UL,
1402   0xdedd460cUL, 0xbe5422b5UL, 0x00000000UL, 0x3fb50d36UL, 0x950f9f45UL,
1403   0xbe5313f6UL, 0x00000000UL, 0x3fb4860bUL, 0x582cdcb1UL, 0x3e506d39UL,
1404   0x00000000UL, 0x3fb3ff12UL, 0x7216d3a6UL, 0x3e4aa719UL, 0x00000000UL,
1405   0x3fb3784aUL, 0x57a423fdUL, 0x3e5a9b9fUL, 0x00000000UL, 0x3fb2f1b4UL,
1406   0x7a138b41UL, 0xbe50b418UL, 0x00000000UL, 0x3fb26b4eUL, 0x2fbfd7eaUL,
1407   0x3e23a53eUL, 0x00000000UL, 0x3fb1e519UL, 0x18913ccbUL, 0x3e465fc1UL,
1408   0x00000000UL, 0x3fb15f15UL, 0x7ea24e21UL, 0x3e042843UL, 0x00000000UL,
1409   0x3fb0d941UL, 0x7c6d9c77UL, 0x3e59f61eUL, 0x00000000UL, 0x3fb0539eUL,
1410   0x114efd44UL, 0x3e4ccab7UL, 0x00000000UL, 0x3faf9c56UL, 0x1777f657UL,
1411   0x3e552f65UL, 0x00000000UL, 0x3fae91d2UL, 0xc317b86aUL, 0xbe5a61e0UL,
1412   0x00000000UL, 0x3fad87acUL, 0xb7664efbUL, 0xbe41f64eUL, 0x00000000UL,
1413   0x3fac7de6UL, 0x5d3d03a9UL, 0x3e0807a0UL, 0x00000000UL, 0x3fab7480UL,
1414   0x743c38ebUL, 0xbe3726e1UL, 0x00000000UL, 0x3faa6b78UL, 0x06a253f1UL,
1415   0x3e5ad636UL, 0x00000000UL, 0x3fa962d0UL, 0xa35f541bUL, 0x3e5a187aUL,
1416   0x00000000UL, 0x3fa85a88UL, 0x4b86e446UL, 0xbe508150UL, 0x00000000UL,
1417   0x3fa7529cUL, 0x2589cacfUL, 0x3e52938aUL, 0x00000000UL, 0x3fa64b10UL,
1418   0xaf6b11f2UL, 0xbe3454cdUL, 0x00000000UL, 0x3fa543e2UL, 0x97506fefUL,
1419   0xbe5fdec5UL, 0x00000000UL, 0x3fa43d10UL, 0xe75f7dd9UL, 0xbe388dd3UL,
1420   0x00000000UL, 0x3fa3369cUL, 0xa4139632UL, 0xbdea5177UL, 0x00000000UL,
1421   0x3fa23086UL, 0x352d6f1eUL, 0xbe565ad6UL, 0x00000000UL, 0x3fa12accUL,
1422   0x77449eb7UL, 0xbe50d5c7UL, 0x00000000UL, 0x3fa0256eUL, 0x7478da78UL,
1423   0x3e404724UL, 0x00000000UL, 0x3f9e40dcUL, 0xf59cef7fUL, 0xbe539d0aUL,
1424   0x00000000UL, 0x3f9c3790UL, 0x1511d43cUL, 0x3e53c2c8UL, 0x00000000UL,
1425   0x3f9a2f00UL, 0x9b8bff3cUL, 0xbe43b3e1UL, 0x00000000UL, 0x3f982724UL,
1426   0xad1e22a5UL, 0x3e46f0bdUL, 0x00000000UL, 0x3f962000UL, 0x130d9356UL,
1427   0x3e475ba0UL, 0x00000000UL, 0x3f941994UL, 0x8f86f883UL, 0xbe513d0bUL,
1428   0x00000000UL, 0x3f9213dcUL, 0x914d0dc8UL, 0xbe534335UL, 0x00000000UL,
1429   0x3f900ed8UL, 0x2d73e5e7UL, 0xbe22ba75UL, 0x00000000UL, 0x3f8c1510UL,
1430   0xc5b7d70eUL, 0x3e599c5dUL, 0x00000000UL, 0x3f880de0UL, 0x8a27857eUL,
1431   0xbe3d28c8UL, 0x00000000UL, 0x3f840810UL, 0xda767328UL, 0x3e531b3dUL,
1432   0x00000000UL, 0x3f8003b0UL, 0x77bacaf3UL, 0xbe5f04e3UL, 0x00000000UL,
1433   0x3f780150UL, 0xdf4b0720UL, 0x3e5a8bffUL, 0x00000000UL, 0x3f6ffc40UL,
1434   0x34c48e71UL, 0xbe3fcd99UL, 0x00000000UL, 0x3f5ff6c0UL, 0x1ad218afUL,
1435   0xbe4c78a7UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL,
1436   0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL, 0x00000000UL,
1437   0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL, 0x6dc96112UL, 0xbf836578UL,
1438   0xee241472UL, 0xbf9b0301UL, 0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL,
1439   0xbfd619b6UL, 0x518775e3UL, 0x3f9004f2UL, 0xac8349bbUL, 0x3fa76c9bUL,
1440   0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL, 0x9f95985aUL,
1441   0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL, 0x486ececbUL, 0x3fc4635eUL,
1442   0x412055ccUL, 0xbdd61bb2UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL,
1443   0xffffffffUL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3b700000UL,
1444   0xfa5abcbfUL, 0x3ff00b1aUL, 0xa7609f71UL, 0xbc84f6b2UL, 0xa9fb3335UL,
1445   0x3ff0163dUL, 0x9ab8cdb7UL, 0x3c9b6129UL, 0x143b0281UL, 0x3ff02168UL,
1446   0x0fc54eb6UL, 0xbc82bf31UL, 0x3e778061UL, 0x3ff02c9aUL, 0x535b085dUL,
1447   0xbc719083UL, 0x2e11bbccUL, 0x3ff037d4UL, 0xeeade11aUL, 0x3c656811UL,
1448   0xe86e7f85UL, 0x3ff04315UL, 0x1977c96eUL, 0xbc90a31cUL, 0x72f654b1UL,
1449   0x3ff04e5fUL, 0x3aa0d08cUL, 0x3c84c379UL, 0xd3158574UL, 0x3ff059b0UL,
1450   0xa475b465UL, 0x3c8d73e2UL, 0x0e3c1f89UL, 0x3ff0650aUL, 0x5799c397UL,
1451   0xbc95cb7bUL, 0x29ddf6deUL, 0x3ff0706bUL, 0xe2b13c27UL, 0xbc8c91dfUL,
1452   0x2b72a836UL, 0x3ff07bd4UL, 0x54458700UL, 0x3c832334UL, 0x18759bc8UL,
1453   0x3ff08745UL, 0x4bb284ffUL, 0x3c6186beUL, 0xf66607e0UL, 0x3ff092bdUL,
1454   0x800a3fd1UL, 0xbc968063UL, 0xcac6f383UL, 0x3ff09e3eUL, 0x18316136UL,
1455   0x3c914878UL, 0x9b1f3919UL, 0x3ff0a9c7UL, 0x873d1d38UL, 0x3c85d16cUL,
1456   0x6cf9890fUL, 0x3ff0b558UL, 0x4adc610bUL, 0x3c98a62eUL, 0x45e46c85UL,
1457   0x3ff0c0f1UL, 0x06d21cefUL, 0x3c94f989UL, 0x2b7247f7UL, 0x3ff0cc92UL,
1458   0x16e24f71UL, 0x3c901edcUL, 0x23395decUL, 0x3ff0d83bUL, 0xe43f316aUL,
1459   0xbc9bc14dUL, 0x32d3d1a2UL, 0x3ff0e3ecUL, 0x27c57b52UL, 0x3c403a17UL,
1460   0x5fdfa9c5UL, 0x3ff0efa5UL, 0xbc54021bUL, 0xbc949db9UL, 0xaffed31bUL,
1461   0x3ff0fb66UL, 0xc44ebd7bUL, 0xbc6b9bedUL, 0x28d7233eUL, 0x3ff10730UL,
1462   0x1692fdd5UL, 0x3c8d46ebUL, 0xd0125b51UL, 0x3ff11301UL, 0x39449b3aUL,
1463   0xbc96c510UL, 0xab5e2ab6UL, 0x3ff11edbUL, 0xf703fb72UL, 0xbc9ca454UL,
1464   0xc06c31ccUL, 0x3ff12abdUL, 0xb36ca5c7UL, 0xbc51b514UL, 0x14f204abUL,
1465   0x3ff136a8UL, 0xba48dcf0UL, 0xbc67108fUL, 0xaea92de0UL, 0x3ff1429aUL,
1466   0x9af1369eUL, 0xbc932fbfUL, 0x934f312eUL, 0x3ff14e95UL, 0x39bf44abUL,
1467   0xbc8b91e8UL, 0xc8a58e51UL, 0x3ff15a98UL, 0xb9eeab0aUL, 0x3c82406aUL,
1468   0x5471c3c2UL, 0x3ff166a4UL, 0x82ea1a32UL, 0x3c58f23bUL, 0x3c7d517bUL,
1469   0x3ff172b8UL, 0xb9d78a76UL, 0xbc819041UL, 0x8695bbc0UL, 0x3ff17ed4UL,
1470   0xe2ac5a64UL, 0x3c709e3fUL, 0x388c8deaUL, 0x3ff18af9UL, 0xd1970f6cUL,
1471   0xbc911023UL, 0x58375d2fUL, 0x3ff19726UL, 0x85f17e08UL, 0x3c94aaddUL,
1472   0xeb6fcb75UL, 0x3ff1a35bUL, 0x7b4968e4UL, 0x3c8e5b4cUL, 0xf8138a1cUL,
1473   0x3ff1af99UL, 0xa4b69280UL, 0x3c97bf85UL, 0x84045cd4UL, 0x3ff1bbe0UL,
1474   0x352ef607UL, 0xbc995386UL, 0x95281c6bUL, 0x3ff1c82fUL, 0x8010f8c9UL,
1475   0x3c900977UL, 0x3168b9aaUL, 0x3ff1d487UL, 0x00a2643cUL, 0x3c9e016eUL,
1476   0x5eb44027UL, 0x3ff1e0e7UL, 0x088cb6deUL, 0xbc96fdd8UL, 0x22fcd91dUL,
1477   0x3ff1ed50UL, 0x027bb78cUL, 0xbc91df98UL, 0x8438ce4dUL, 0x3ff1f9c1UL,
1478   0xa097af5cUL, 0xbc9bf524UL, 0x88628cd6UL, 0x3ff2063bUL, 0x814a8495UL,
1479   0x3c8dc775UL, 0x3578a819UL, 0x3ff212beUL, 0x2cfcaac9UL, 0x3c93592dUL,
1480   0x917ddc96UL, 0x3ff21f49UL, 0x9494a5eeUL, 0x3c82a97eUL, 0xa27912d1UL,
1481   0x3ff22bddUL, 0x5577d69fUL, 0x3c8d34fbUL, 0x6e756238UL, 0x3ff2387aUL,
1482   0xb6c70573UL, 0x3c99b07eUL, 0xfb82140aUL, 0x3ff2451fUL, 0x911ca996UL,
1483   0x3c8acfccUL, 0x4fb2a63fUL, 0x3ff251ceUL, 0xbef4f4a4UL, 0x3c8ac155UL,
1484   0x711ece75UL, 0x3ff25e85UL, 0x4ac31b2cUL, 0x3c93e1a2UL, 0x65e27cddUL,
1485   0x3ff26b45UL, 0x9940e9d9UL, 0x3c82bd33UL, 0x341ddf29UL, 0x3ff2780eUL,
1486   0x05f9e76cUL, 0x3c9e067cUL, 0xe1f56381UL, 0x3ff284dfUL, 0x8c3f0d7eUL,
1487   0xbc9a4c3aUL, 0x7591bb70UL, 0x3ff291baUL, 0x28401cbdUL, 0xbc82cc72UL,
1488   0xf51fdee1UL, 0x3ff29e9dUL, 0xafad1255UL, 0x3c8612e8UL, 0x66d10f13UL,
1489   0x3ff2ab8aUL, 0x191690a7UL, 0xbc995743UL, 0xd0dad990UL, 0x3ff2b87fUL,
1490   0xd6381aa4UL, 0xbc410adcUL, 0x39771b2fUL, 0x3ff2c57eUL, 0xa6eb5124UL,
1491   0xbc950145UL, 0xa6e4030bUL, 0x3ff2d285UL, 0x54db41d5UL, 0x3c900247UL,
1492   0x1f641589UL, 0x3ff2df96UL, 0xfbbce198UL, 0x3c9d16cfUL, 0xa93e2f56UL,
1493   0x3ff2ecafUL, 0x45d52383UL, 0x3c71ca0fUL, 0x4abd886bUL, 0x3ff2f9d2UL,
1494   0x532bda93UL, 0xbc653c55UL, 0x0a31b715UL, 0x3ff306feUL, 0xd23182e4UL,
1495   0x3c86f46aUL, 0xedeeb2fdUL, 0x3ff31432UL, 0xf3f3fcd1UL, 0x3c8959a3UL,
1496   0xfc4cd831UL, 0x3ff32170UL, 0x8e18047cUL, 0x3c8a9ce7UL, 0x3ba8ea32UL,
1497   0x3ff32eb8UL, 0x3cb4f318UL, 0xbc9c45e8UL, 0xb26416ffUL, 0x3ff33c08UL,
1498   0x843659a6UL, 0x3c932721UL, 0x66e3fa2dUL, 0x3ff34962UL, 0x930881a4UL,
1499   0xbc835a75UL, 0x5f929ff1UL, 0x3ff356c5UL, 0x5c4e4628UL, 0xbc8b5ceeUL,
1500   0xa2de883bUL, 0x3ff36431UL, 0xa06cb85eUL, 0xbc8c3144UL, 0x373aa9cbUL,
1501   0x3ff371a7UL, 0xbf42eae2UL, 0xbc963aeaUL, 0x231e754aUL, 0x3ff37f26UL,
1502   0x9eceb23cUL, 0xbc99f5caUL, 0x6d05d866UL, 0x3ff38caeUL, 0x3c9904bdUL,
1503   0xbc9e958dUL, 0x1b7140efUL, 0x3ff39a40UL, 0xfc8e2934UL, 0xbc99a9a5UL,
1504   0x34e59ff7UL, 0x3ff3a7dbUL, 0xd661f5e3UL, 0xbc75e436UL, 0xbfec6cf4UL,
1505   0x3ff3b57fUL, 0xe26fff18UL, 0x3c954c66UL, 0xc313a8e5UL, 0x3ff3c32dUL,
1506   0x375d29c3UL, 0xbc9efff8UL, 0x44ede173UL, 0x3ff3d0e5UL, 0x8c284c71UL,
1507   0x3c7fe8d0UL, 0x4c123422UL, 0x3ff3dea6UL, 0x11f09ebcUL, 0x3c8ada09UL,
1508   0xdf1c5175UL, 0x3ff3ec70UL, 0x7b8c9bcaUL, 0xbc8af663UL, 0x04ac801cUL,
1509   0x3ff3fa45UL, 0xf956f9f3UL, 0xbc97d023UL, 0xc367a024UL, 0x3ff40822UL,
1510   0xb6f4d048UL, 0x3c8bddf8UL, 0x21f72e2aUL, 0x3ff4160aUL, 0x1c309278UL,
1511   0xbc5ef369UL, 0x2709468aUL, 0x3ff423fbUL, 0xc0b314ddUL, 0xbc98462dUL,
1512   0xd950a897UL, 0x3ff431f5UL, 0xe35f7999UL, 0xbc81c7ddUL, 0x3f84b9d4UL,
1513   0x3ff43ffaUL, 0x9704c003UL, 0x3c8880beUL, 0x6061892dUL, 0x3ff44e08UL,
1514   0x04ef80d0UL, 0x3c489b7aUL, 0x42a7d232UL, 0x3ff45c20UL, 0x82fb1f8eUL,
1515   0xbc686419UL, 0xed1d0057UL, 0x3ff46a41UL, 0xd1648a76UL, 0x3c9c944bUL,
1516   0x668b3237UL, 0x3ff4786dUL, 0xed445733UL, 0xbc9c20f0UL, 0xb5c13cd0UL,
1517   0x3ff486a2UL, 0xb69062f0UL, 0x3c73c1a3UL, 0xe192aed2UL, 0x3ff494e1UL,
1518   0x5e499ea0UL, 0xbc83b289UL, 0xf0d7d3deUL, 0x3ff4a32aUL, 0xf3d1be56UL,
1519   0x3c99cb62UL, 0xea6db7d7UL, 0x3ff4b17dUL, 0x7f2897f0UL, 0xbc8125b8UL,
1520   0xd5362a27UL, 0x3ff4bfdaUL, 0xafec42e2UL, 0x3c7d4397UL, 0xb817c114UL,
1521   0x3ff4ce41UL, 0x690abd5dUL, 0x3c905e29UL, 0x99fddd0dUL, 0x3ff4dcb2UL,
1522   0xbc6a7833UL, 0x3c98ecdbUL, 0x81d8abffUL, 0x3ff4eb2dUL, 0x2e5d7a52UL,
1523   0xbc95257dUL, 0x769d2ca7UL, 0x3ff4f9b2UL, 0xd25957e3UL, 0xbc94b309UL,
1524   0x7f4531eeUL, 0x3ff50841UL, 0x49b7465fUL, 0x3c7a249bUL, 0xa2cf6642UL,
1525   0x3ff516daUL, 0x69bd93efUL, 0xbc8f7685UL, 0xe83f4eefUL, 0x3ff5257dUL,
1526   0x43efef71UL, 0xbc7c998dUL, 0x569d4f82UL, 0x3ff5342bUL, 0x1db13cadUL,
1527   0xbc807abeUL, 0xf4f6ad27UL, 0x3ff542e2UL, 0x192d5f7eUL, 0x3c87926dUL,
1528   0xca5d920fUL, 0x3ff551a4UL, 0xefede59bUL, 0xbc8d689cUL, 0xdde910d2UL,
1529   0x3ff56070UL, 0x168eebf0UL, 0xbc90fb6eUL, 0x36b527daUL, 0x3ff56f47UL,
1530   0x011d93adUL, 0x3c99bb2cUL, 0xdbe2c4cfUL, 0x3ff57e27UL, 0x8a57b9c4UL,
1531   0xbc90b98cUL, 0xd497c7fdUL, 0x3ff58d12UL, 0x5b9a1de8UL, 0x3c8295e1UL,
1532   0x27ff07ccUL, 0x3ff59c08UL, 0xe467e60fUL, 0xbc97e2ceUL, 0xdd485429UL,
1533   0x3ff5ab07UL, 0x054647adUL, 0x3c96324cUL, 0xfba87a03UL, 0x3ff5ba11UL,
1534   0x4c233e1aUL, 0xbc9b77a1UL, 0x8a5946b7UL, 0x3ff5c926UL, 0x816986a2UL,
1535   0x3c3c4b1bUL, 0x90998b93UL, 0x3ff5d845UL, 0xa8b45643UL, 0xbc9cd6a7UL,
1536   0x15ad2148UL, 0x3ff5e76fUL, 0x3080e65eUL, 0x3c9ba6f9UL, 0x20dceb71UL,
1537   0x3ff5f6a3UL, 0xe3cdcf92UL, 0xbc89eaddUL, 0xb976dc09UL, 0x3ff605e1UL,
1538   0x9b56de47UL, 0xbc93e242UL, 0xe6cdf6f4UL, 0x3ff6152aUL, 0x4ab84c27UL,
1539   0x3c9e4b3eUL, 0xb03a5585UL, 0x3ff6247eUL, 0x7e40b497UL, 0xbc9383c1UL,
1540   0x1d1929fdUL, 0x3ff633ddUL, 0xbeb964e5UL, 0x3c984710UL, 0x34ccc320UL,
1541   0x3ff64346UL, 0x759d8933UL, 0xbc8c483cUL, 0xfebc8fb7UL, 0x3ff652b9UL,
1542   0xc9a73e09UL, 0xbc9ae3d5UL, 0x82552225UL, 0x3ff66238UL, 0x87591c34UL,
1543   0xbc9bb609UL, 0xc70833f6UL, 0x3ff671c1UL, 0x586c6134UL, 0xbc8e8732UL,
1544   0xd44ca973UL, 0x3ff68155UL, 0x44f73e65UL, 0x3c6038aeUL, 0xb19e9538UL,
1545   0x3ff690f4UL, 0x9aeb445dUL, 0x3c8804bdUL, 0x667f3bcdUL, 0x3ff6a09eUL,
1546   0x13b26456UL, 0xbc9bdd34UL, 0xfa75173eUL, 0x3ff6b052UL, 0x2c9a9d0eUL,
1547   0x3c7a38f5UL, 0x750bdabfUL, 0x3ff6c012UL, 0x67ff0b0dUL, 0xbc728956UL,
1548   0xddd47645UL, 0x3ff6cfdcUL, 0xb6f17309UL, 0x3c9c7aa9UL, 0x3c651a2fUL,
1549   0x3ff6dfb2UL, 0x683c88abUL, 0xbc6bbe3aUL, 0x98593ae5UL, 0x3ff6ef92UL,
1550   0x9e1ac8b2UL, 0xbc90b974UL, 0xf9519484UL, 0x3ff6ff7dUL, 0x25860ef6UL,
1551   0xbc883c0fUL, 0x66f42e87UL, 0x3ff70f74UL, 0xd45aa65fUL, 0x3c59d644UL,
1552   0xe8ec5f74UL, 0x3ff71f75UL, 0x86887a99UL, 0xbc816e47UL, 0x86ead08aUL,
1553   0x3ff72f82UL, 0x2cd62c72UL, 0xbc920aa0UL, 0x48a58174UL, 0x3ff73f9aUL,
1554   0x6c65d53cUL, 0xbc90a8d9UL, 0x35d7cbfdUL, 0x3ff74fbdUL, 0x618a6e1cUL,
1555   0x3c9047fdUL, 0x564267c9UL, 0x3ff75febUL, 0x57316dd3UL, 0xbc902459UL,
1556   0xb1ab6e09UL, 0x3ff77024UL, 0x169147f8UL, 0x3c9b7877UL, 0x4fde5d3fUL,
1557   0x3ff78069UL, 0x0a02162dUL, 0x3c9866b8UL, 0x38ac1cf6UL, 0x3ff790b9UL,
1558   0x62aadd3eUL, 0x3c9349a8UL, 0x73eb0187UL, 0x3ff7a114UL, 0xee04992fUL,
1559   0xbc841577UL, 0x0976cfdbUL, 0x3ff7b17bUL, 0x8468dc88UL, 0xbc9bebb5UL,
1560   0x0130c132UL, 0x3ff7c1edUL, 0xd1164dd6UL, 0x3c9f124cUL, 0x62ff86f0UL,
1561   0x3ff7d26aUL, 0xfb72b8b4UL, 0x3c91bddbUL, 0x36cf4e62UL, 0x3ff7e2f3UL,
1562   0xba15797eUL, 0x3c705d02UL, 0x8491c491UL, 0x3ff7f387UL, 0xcf9311aeUL,
1563   0xbc807f11UL, 0x543e1a12UL, 0x3ff80427UL, 0x626d972bUL, 0xbc927c86UL,
1564   0xadd106d9UL, 0x3ff814d2UL, 0x0d151d4dUL, 0x3c946437UL, 0x994cce13UL,
1565   0x3ff82589UL, 0xd41532d8UL, 0xbc9d4c1dUL, 0x1eb941f7UL, 0x3ff8364cUL,
1566   0x31df2bd5UL, 0x3c999b9aUL, 0x4623c7adUL, 0x3ff8471aUL, 0xa341cdfbUL,
1567   0xbc88d684UL, 0x179f5b21UL, 0x3ff857f4UL, 0xf8b216d0UL, 0xbc5ba748UL,
1568   0x9b4492edUL, 0x3ff868d9UL, 0x9bd4f6baUL, 0xbc9fc6f8UL, 0xd931a436UL,
1569   0x3ff879caUL, 0xd2db47bdUL, 0x3c85d2d7UL, 0xd98a6699UL, 0x3ff88ac7UL,
1570   0xf37cb53aUL, 0x3c9994c2UL, 0xa478580fUL, 0x3ff89bd0UL, 0x4475202aUL,
1571   0x3c9d5395UL, 0x422aa0dbUL, 0x3ff8ace5UL, 0x56864b27UL, 0x3c96e9f1UL,
1572   0xbad61778UL, 0x3ff8be05UL, 0xfc43446eUL, 0x3c9ecb5eUL, 0x16b5448cUL,
1573   0x3ff8cf32UL, 0x32e9e3aaUL, 0xbc70d55eUL, 0x5e0866d9UL, 0x3ff8e06aUL,
1574   0x6fc9b2e6UL, 0xbc97114aUL, 0x99157736UL, 0x3ff8f1aeUL, 0xa2e3976cUL,
1575   0x3c85cc13UL, 0xd0282c8aUL, 0x3ff902feUL, 0x85fe3fd2UL, 0x3c9592caUL,
1576   0x0b91ffc6UL, 0x3ff9145bUL, 0x2e582524UL, 0xbc9dd679UL, 0x53aa2fe2UL,
1577   0x3ff925c3UL, 0xa639db7fUL, 0xbc83455fUL, 0xb0cdc5e5UL, 0x3ff93737UL,
1578   0x81b57ebcUL, 0xbc675fc7UL, 0x2b5f98e5UL, 0x3ff948b8UL, 0x797d2d99UL,
1579   0xbc8dc3d6UL, 0xcbc8520fUL, 0x3ff95a44UL, 0x96a5f039UL, 0xbc764b7cUL,
1580   0x9a7670b3UL, 0x3ff96bddUL, 0x7f19c896UL, 0xbc5ba596UL, 0x9fde4e50UL,
1581   0x3ff97d82UL, 0x7c1b85d1UL, 0xbc9d185bUL, 0xe47a22a2UL, 0x3ff98f33UL,
1582   0xa24c78ecUL, 0x3c7cabdaUL, 0x70ca07baUL, 0x3ff9a0f1UL, 0x91cee632UL,
1583   0xbc9173bdUL, 0x4d53fe0dUL, 0x3ff9b2bbUL, 0x4df6d518UL, 0xbc9dd84eUL,
1584   0x82a3f090UL, 0x3ff9c491UL, 0xb071f2beUL, 0x3c7c7c46UL, 0x194bb8d5UL,
1585   0x3ff9d674UL, 0xa3dd8233UL, 0xbc9516beUL, 0x19e32323UL, 0x3ff9e863UL,
1586   0x78e64c6eUL, 0x3c7824caUL, 0x8d07f29eUL, 0x3ff9fa5eUL, 0xaaf1faceUL,
1587   0xbc84a9ceUL, 0x7b5de565UL, 0x3ffa0c66UL, 0x5d1cd533UL, 0xbc935949UL,
1588   0xed8eb8bbUL, 0x3ffa1e7aUL, 0xee8be70eUL, 0x3c9c6618UL, 0xec4a2d33UL,
1589   0x3ffa309bUL, 0x7ddc36abUL, 0x3c96305cUL, 0x80460ad8UL, 0x3ffa42c9UL,
1590   0x589fb120UL, 0xbc9aa780UL, 0xb23e255dUL, 0x3ffa5503UL, 0xdb8d41e1UL,
1591   0xbc9d2f6eUL, 0x8af46052UL, 0x3ffa674aUL, 0x30670366UL, 0x3c650f56UL,
1592   0x1330b358UL, 0x3ffa799eUL, 0xcac563c7UL, 0x3c9bcb7eUL, 0x53c12e59UL,
1593   0x3ffa8bfeUL, 0xb2ba15a9UL, 0xbc94f867UL, 0x5579fdbfUL, 0x3ffa9e6bUL,
1594   0x0ef7fd31UL, 0x3c90fac9UL, 0x21356ebaUL, 0x3ffab0e5UL, 0xdae94545UL,
1595   0x3c889c31UL, 0xbfd3f37aUL, 0x3ffac36bUL, 0xcae76cd0UL, 0xbc8f9234UL,
1596   0x3a3c2774UL, 0x3ffad5ffUL, 0xb6b1b8e5UL, 0x3c97ef3bUL, 0x995ad3adUL,
1597   0x3ffae89fUL, 0x345dcc81UL, 0x3c97a1cdUL, 0xe622f2ffUL, 0x3ffafb4cUL,
1598   0x0f315ecdUL, 0xbc94b2fcUL, 0x298db666UL, 0x3ffb0e07UL, 0x4c80e425UL,
1599   0xbc9bdef5UL, 0x6c9a8952UL, 0x3ffb20ceUL, 0x4a0756ccUL, 0x3c94dd02UL,
1600   0xb84f15fbUL, 0x3ffb33a2UL, 0x3084d708UL, 0xbc62805eUL, 0x15b749b1UL,
1601   0x3ffb4684UL, 0xe9df7c90UL, 0xbc7f763dUL, 0x8de5593aUL, 0x3ffb5972UL,
1602   0xbbba6de3UL, 0xbc9c71dfUL, 0x29f1c52aUL, 0x3ffb6c6eUL, 0x52883f6eUL,
1603   0x3c92a8f3UL, 0xf2fb5e47UL, 0x3ffb7f76UL, 0x7e54ac3bUL, 0xbc75584fUL,
1604   0xf22749e4UL, 0x3ffb928cUL, 0x54cb65c6UL, 0xbc9b7216UL, 0x30a1064aUL,
1605   0x3ffba5b0UL, 0x0e54292eUL, 0xbc9efcd3UL, 0xb79a6f1fUL, 0x3ffbb8e0UL,
1606   0xc9696205UL, 0xbc3f52d1UL, 0x904bc1d2UL, 0x3ffbcc1eUL, 0x7a2d9e84UL,
1607   0x3c823dd0UL, 0xc3f3a207UL, 0x3ffbdf69UL, 0x60ea5b53UL, 0xbc3c2623UL,
1608   0x5bd71e09UL, 0x3ffbf2c2UL, 0x3f6b9c73UL, 0xbc9efdcaUL, 0x6141b33dUL,
1609   0x3ffc0628UL, 0xa1fbca34UL, 0xbc8d8a5aUL, 0xdd85529cUL, 0x3ffc199bUL,
1610   0x895048ddUL, 0x3c811065UL, 0xd9fa652cUL, 0x3ffc2d1cUL, 0x17c8a5d7UL,
1611   0xbc96e516UL, 0x5fffd07aUL, 0x3ffc40abUL, 0xe083c60aUL, 0x3c9b4537UL,
1612   0x78fafb22UL, 0x3ffc5447UL, 0x2493b5afUL, 0x3c912f07UL, 0x2e57d14bUL,
1613   0x3ffc67f1UL, 0xff483cadUL, 0x3c92884dUL, 0x8988c933UL, 0x3ffc7ba8UL,
1614   0xbe255559UL, 0xbc8e76bbUL, 0x9406e7b5UL, 0x3ffc8f6dUL, 0x48805c44UL,
1615   0x3c71acbcUL, 0x5751c4dbUL, 0x3ffca340UL, 0xd10d08f5UL, 0xbc87f2beUL,
1616   0xdcef9069UL, 0x3ffcb720UL, 0xd1e949dbUL, 0x3c7503cbUL, 0x2e6d1675UL,
1617   0x3ffccb0fUL, 0x86009092UL, 0xbc7d220fUL, 0x555dc3faUL, 0x3ffcdf0bUL,
1618   0x53829d72UL, 0xbc8dd83bUL, 0x5b5bab74UL, 0x3ffcf315UL, 0xb86dff57UL,
1619   0xbc9a08e9UL, 0x4a07897cUL, 0x3ffd072dUL, 0x43797a9cUL, 0xbc9cbc37UL,
1620   0x2b08c968UL, 0x3ffd1b53UL, 0x219a36eeUL, 0x3c955636UL, 0x080d89f2UL,
1621   0x3ffd2f87UL, 0x719d8578UL, 0xbc9d487bUL, 0xeacaa1d6UL, 0x3ffd43c8UL,
1622   0xbf5a1614UL, 0x3c93db53UL, 0xdcfba487UL, 0x3ffd5818UL, 0xd75b3707UL,
1623   0x3c82ed02UL, 0xe862e6d3UL, 0x3ffd6c76UL, 0x4a8165a0UL, 0x3c5fe87aUL,
1624   0x16c98398UL, 0x3ffd80e3UL, 0x8beddfe8UL, 0xbc911ec1UL, 0x71ff6075UL,
1625   0x3ffd955dUL, 0xbb9af6beUL, 0x3c9a052dUL, 0x03db3285UL, 0x3ffda9e6UL,
1626   0x696db532UL, 0x3c9c2300UL, 0xd63a8315UL, 0x3ffdbe7cUL, 0x926b8be4UL,
1627   0xbc9b76f1UL, 0xf301b460UL, 0x3ffdd321UL, 0x78f018c3UL, 0x3c92da57UL,
1628   0x641c0658UL, 0x3ffde7d5UL, 0x8e79ba8fUL, 0xbc9ca552UL, 0x337b9b5fUL,
1629   0x3ffdfc97UL, 0x4f184b5cUL, 0xbc91a5cdUL, 0x6b197d17UL, 0x3ffe1167UL,
1630   0xbd5c7f44UL, 0xbc72b529UL, 0x14f5a129UL, 0x3ffe2646UL, 0x817a1496UL,
1631   0xbc97b627UL, 0x3b16ee12UL, 0x3ffe3b33UL, 0x31fdc68bUL, 0xbc99f4a4UL,
1632   0xe78b3ff6UL, 0x3ffe502eUL, 0x80a9cc8fUL, 0x3c839e89UL, 0x24676d76UL,
1633   0x3ffe6539UL, 0x7522b735UL, 0xbc863ff8UL, 0xfbc74c83UL, 0x3ffe7a51UL,
1634   0xca0c8de2UL, 0x3c92d522UL, 0x77cdb740UL, 0x3ffe8f79UL, 0x80b054b1UL,
1635   0xbc910894UL, 0xa2a490daUL, 0x3ffea4afUL, 0x179c2893UL, 0xbc9e9c23UL,
1636   0x867cca6eUL, 0x3ffeb9f4UL, 0x2293e4f2UL, 0x3c94832fUL, 0x2d8e67f1UL,
1637   0x3ffecf48UL, 0xb411ad8cUL, 0xbc9c93f3UL, 0xa2188510UL, 0x3ffee4aaUL,
1638   0xa487568dUL, 0x3c91c68dUL, 0xee615a27UL, 0x3ffefa1bUL, 0x86a4b6b0UL,
1639   0x3c9dc7f4UL, 0x1cb6412aUL, 0x3fff0f9cUL, 0x65181d45UL, 0xbc932200UL,
1640   0x376bba97UL, 0x3fff252bUL, 0xbf0d8e43UL, 0x3c93a1a5UL, 0x48dd7274UL,
1641   0x3fff3ac9UL, 0x3ed837deUL, 0xbc795a5aUL, 0x5b6e4540UL, 0x3fff5076UL,
1642   0x2dd8a18bUL, 0x3c99d3e1UL, 0x798844f8UL, 0x3fff6632UL, 0x3539343eUL,
1643   0x3c9fa37bUL, 0xad9cbe14UL, 0x3fff7bfdUL, 0xd006350aUL, 0xbc9dbb12UL,
1644   0x02243c89UL, 0x3fff91d8UL, 0xa779f689UL, 0xbc612ea8UL, 0x819e90d8UL,
1645   0x3fffa7c1UL, 0xf3a5931eUL, 0x3c874853UL, 0x3692d514UL, 0x3fffbdbaUL,
1646   0x15098eb6UL, 0xbc796773UL, 0x2b8f71f1UL, 0x3fffd3c2UL, 0x966579e7UL,
1647   0x3c62eb74UL, 0x6b2a23d9UL, 0x3fffe9d9UL, 0x7442fde3UL, 0x3c74a603UL,
1648   0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL, 0x6fba4e77UL,
1649   0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL, 0xfefa39efUL, 0x3fe62e42UL,
1650   0x00000000UL, 0x00000000UL, 0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL,
1651   0xbfe62e42UL, 0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL,
1652   0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL
1653 
1654 };
1655 
1656 //registers,
1657 // input: xmm0, xmm1
1658 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
1659 //          eax, edx, ecx, ebx
1660 
1661 // Code generated by Intel C compiler for LIBM library
1662 
1663 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) {
1664   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;
1665   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;
1666   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;
1667   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;
1668   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;
1669   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;
1670   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;
1671   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;
1672   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;
1673   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;
1674   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;
1675   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;
1676   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;
1677   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;
1678   Label L_2TAG_PACKET_56_0_2, L_2TAG_PACKET_57_0_2, L_2TAG_PACKET_58_0_2, start;
1679 
1680   assert_different_registers(tmp, eax, ecx, edx);
1681 
1682   address static_const_table_pow = (address)_static_const_table_pow;
1683 
1684   bind(start);
1685   subl(rsp, 120);
1686   movl(Address(rsp, 64), tmp);
1687   lea(tmp, ExternalAddress(static_const_table_pow));
1688   movsd(xmm0, Address(rsp, 128));
1689   movsd(xmm1, Address(rsp, 136));
1690   xorpd(xmm2, xmm2);
1691   movl(eax, 16368);
1692   pinsrw(xmm2, eax, 3);
1693   movl(ecx, 1069088768);
1694   movdl(xmm7, ecx);
1695   movsd(Address(rsp, 16), xmm1);
1696   xorpd(xmm1, xmm1);
1697   movl(edx, 30704);
1698   pinsrw(xmm1, edx, 3);
1699   movsd(Address(rsp, 8), xmm0);
1700   movdqu(xmm3, xmm0);
1701   movl(edx, 8192);
1702   movdl(xmm4, edx);
1703   movdqu(xmm6, Address(tmp, 8240));
1704   pextrw(eax, xmm0, 3);
1705   por(xmm0, xmm2);
1706   psllq(xmm0, 5);
1707   movsd(xmm2, Address(tmp, 8256));
1708   psrlq(xmm0, 34);
1709   movl(edx, eax);
1710   andl(edx, 32752);
1711   subl(edx, 16368);
1712   movl(ecx, edx);
1713   sarl(edx, 31);
1714   addl(ecx, edx);
1715   xorl(ecx, edx);
1716   rcpss(xmm0, xmm0);
1717   psllq(xmm3, 12);
1718   addl(ecx, 16);
1719   bsrl(ecx, ecx);
1720   psrlq(xmm3, 12);
1721   movl(Address(rsp, 24), rsi);
1722   subl(eax, 16);
1723   cmpl(eax, 32736);
1724   jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
1725   movl(rsi, 0);
1726 
1727   bind(L_2TAG_PACKET_1_0_2);
1728   mulss(xmm0, xmm7);
1729   movl(edx, -1);
1730   subl(ecx, 4);
1731   shll(edx);
1732   movdl(xmm5, edx);
1733   por(xmm3, xmm1);
1734   subl(eax, 16351);
1735   cmpl(eax, 1);
1736   jcc(Assembler::belowEqual, L_2TAG_PACKET_2_0_2);
1737   paddd(xmm0, xmm4);
1738   psllq(xmm5, 32);
1739   movdl(edx, xmm0);
1740   psllq(xmm0, 29);
1741   pand(xmm5, xmm3);
1742 
1743   bind(L_2TAG_PACKET_3_0_2);
1744   pand(xmm0, xmm6);
1745   subsd(xmm3, xmm5);
1746   subl(eax, 1);
1747   sarl(eax, 4);
1748   cvtsi2sdl(xmm7, eax);
1749   mulpd(xmm5, xmm0);
1750 
1751   bind(L_2TAG_PACKET_4_0_2);
1752   mulsd(xmm3, xmm0);
1753   movdqu(xmm1, Address(tmp, 8272));
1754   subsd(xmm5, xmm2);
1755   movdqu(xmm4, Address(tmp, 8288));
1756   movl(ecx, eax);
1757   sarl(eax, 31);
1758   addl(ecx, eax);
1759   xorl(eax, ecx);
1760   addl(eax, 1);
1761   bsrl(eax, eax);
1762   unpcklpd(xmm5, xmm3);
1763   movdqu(xmm6, Address(tmp, 8304));
1764   addsd(xmm3, xmm5);
1765   andl(edx, 16760832);
1766   shrl(edx, 10);
1767   addpd(xmm5, Address(tmp, edx, Address::times_1, -3616));
1768   movdqu(xmm0, Address(tmp, 8320));
1769   pshufd(xmm2, xmm3, 68);
1770   mulsd(xmm3, xmm3);
1771   mulpd(xmm1, xmm2);
1772   mulpd(xmm4, xmm2);
1773   addsd(xmm5, xmm7);
1774   mulsd(xmm2, xmm3);
1775   addpd(xmm6, xmm1);
1776   mulsd(xmm3, xmm3);
1777   addpd(xmm0, xmm4);
1778   movsd(xmm1, Address(rsp, 16));
1779   movzwl(ecx, Address(rsp, 22));
1780   pshufd(xmm7, xmm5, 238);
1781   movsd(xmm4, Address(tmp, 8368));
1782   mulpd(xmm6, xmm2);
1783   pshufd(xmm3, xmm3, 68);
1784   mulpd(xmm0, xmm2);
1785   shll(eax, 4);
1786   subl(eax, 15872);
1787   andl(ecx, 32752);
1788   addl(eax, ecx);
1789   mulpd(xmm3, xmm6);
1790   cmpl(eax, 624);
1791   jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
1792   xorpd(xmm6, xmm6);
1793   movl(edx, 17080);
1794   pinsrw(xmm6, edx, 3);
1795   movdqu(xmm2, xmm1);
1796   pand(xmm4, xmm1);
1797   subsd(xmm1, xmm4);
1798   mulsd(xmm4, xmm5);
1799   addsd(xmm0, xmm7);
1800   mulsd(xmm1, xmm5);
1801   movdqu(xmm7, xmm6);
1802   addsd(xmm6, xmm4);
1803   addpd(xmm3, xmm0);
1804   movdl(edx, xmm6);
1805   subsd(xmm6, xmm7);
1806   pshufd(xmm0, xmm3, 238);
1807   subsd(xmm4, xmm6);
1808   addsd(xmm0, xmm3);
1809   movl(ecx, edx);
1810   andl(edx, 255);
1811   addl(edx, edx);
1812   movdqu(xmm5, Address(tmp, edx, Address::times_8, 8384));
1813   addsd(xmm4, xmm1);
1814   mulsd(xmm2, xmm0);
1815   movdqu(xmm7, Address(tmp, 12480));
1816   movdqu(xmm3, Address(tmp, 12496));
1817   shll(ecx, 12);
1818   xorl(ecx, rsi);
1819   andl(ecx, -1048576);
1820   movdl(xmm6, ecx);
1821   addsd(xmm2, xmm4);
1822   movsd(xmm1, Address(tmp, 12512));
1823   pshufd(xmm0, xmm2, 68);
1824   pshufd(xmm4, xmm2, 68);
1825   mulpd(xmm0, xmm0);
1826   movl(rsi, Address(rsp, 24));
1827   mulpd(xmm7, xmm4);
1828   pshufd(xmm6, xmm6, 17);
1829   mulsd(xmm1, xmm2);
1830   mulsd(xmm0, xmm0);
1831   paddd(xmm5, xmm6);
1832   addpd(xmm3, xmm7);
1833   mulsd(xmm1, xmm5);
1834   pshufd(xmm6, xmm5, 238);
1835   mulpd(xmm0, xmm3);
1836   addsd(xmm1, xmm6);
1837   pshufd(xmm3, xmm0, 238);
1838   mulsd(xmm0, xmm5);
1839   mulsd(xmm3, xmm5);
1840   addsd(xmm0, xmm1);
1841   addsd(xmm0, xmm3);
1842   addsd(xmm0, xmm5);
1843   movsd(Address(rsp, 0), xmm0);
1844   fld_d(Address(rsp, 0));
1845   jmp(L_2TAG_PACKET_6_0_2);
1846 
1847   bind(L_2TAG_PACKET_7_0_2);
1848   movsd(xmm0, Address(rsp, 128));
1849   movsd(xmm1, Address(rsp, 136));
1850   mulsd(xmm0, xmm1);
1851   movsd(Address(rsp, 0), xmm0);
1852   fld_d(Address(rsp, 0));
1853   jmp(L_2TAG_PACKET_6_0_2);
1854 
1855   bind(L_2TAG_PACKET_0_0_2);
1856   addl(eax, 16);
1857   movl(edx, 32752);
1858   andl(edx, eax);
1859   cmpl(edx, 32752);
1860   jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
1861   testl(eax, 32768);
1862   jcc(Assembler::notEqual, L_2TAG_PACKET_9_0_2);
1863 
1864   bind(L_2TAG_PACKET_10_0_2);
1865   movl(ecx, Address(rsp, 16));
1866   xorl(edx, edx);
1867   testl(ecx, ecx);
1868   movl(ecx, 1);
1869   cmovl(Assembler::notEqual, edx, ecx);
1870   orl(edx, Address(rsp, 20));
1871   cmpl(edx, 1072693248);
1872   jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
1873   movsd(xmm0, Address(rsp, 8));
1874   movsd(xmm3, Address(rsp, 8));
1875   movdl(edx, xmm3);
1876   psrlq(xmm3, 32);
1877   movdl(ecx, xmm3);
1878   orl(edx, ecx);
1879   cmpl(edx, 0);
1880   jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
1881   xorpd(xmm3, xmm3);
1882   movl(eax, 18416);
1883   pinsrw(xmm3, eax, 3);
1884   mulsd(xmm0, xmm3);
1885   xorpd(xmm2, xmm2);
1886   movl(eax, 16368);
1887   pinsrw(xmm2, eax, 3);
1888   movdqu(xmm3, xmm0);
1889   pextrw(eax, xmm0, 3);
1890   por(xmm0, xmm2);
1891   movl(ecx, 18416);
1892   psllq(xmm0, 5);
1893   movsd(xmm2, Address(tmp, 8256));
1894   psrlq(xmm0, 34);
1895   rcpss(xmm0, xmm0);
1896   psllq(xmm3, 12);
1897   movdqu(xmm6, Address(tmp, 8240));
1898   psrlq(xmm3, 12);
1899   mulss(xmm0, xmm7);
1900   movl(edx, -1024);
1901   movdl(xmm5, edx);
1902   por(xmm3, xmm1);
1903   paddd(xmm0, xmm4);
1904   psllq(xmm5, 32);
1905   movdl(edx, xmm0);
1906   psllq(xmm0, 29);
1907   pand(xmm5, xmm3);
1908   movl(rsi, 0);
1909   pand(xmm0, xmm6);
1910   subsd(xmm3, xmm5);
1911   andl(eax, 32752);
1912   subl(eax, 18416);
1913   sarl(eax, 4);
1914   cvtsi2sdl(xmm7, eax);
1915   mulpd(xmm5, xmm0);
1916   jmp(L_2TAG_PACKET_4_0_2);
1917 
1918   bind(L_2TAG_PACKET_12_0_2);
1919   movl(ecx, Address(rsp, 16));
1920   xorl(edx, edx);
1921   testl(ecx, ecx);
1922   movl(ecx, 1);
1923   cmovl(Assembler::notEqual, edx, ecx);
1924   orl(edx, Address(rsp, 20));
1925   cmpl(edx, 1072693248);
1926   jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
1927   movsd(xmm0, Address(rsp, 8));
1928   movsd(xmm3, Address(rsp, 8));
1929   movdl(edx, xmm3);
1930   psrlq(xmm3, 32);
1931   movdl(ecx, xmm3);
1932   orl(edx, ecx);
1933   cmpl(edx, 0);
1934   jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
1935   xorpd(xmm3, xmm3);
1936   movl(eax, 18416);
1937   pinsrw(xmm3, eax, 3);
1938   mulsd(xmm0, xmm3);
1939   xorpd(xmm2, xmm2);
1940   movl(eax, 16368);
1941   pinsrw(xmm2, eax, 3);
1942   movdqu(xmm3, xmm0);
1943   pextrw(eax, xmm0, 3);
1944   por(xmm0, xmm2);
1945   movl(ecx, 18416);
1946   psllq(xmm0, 5);
1947   movsd(xmm2, Address(tmp, 8256));
1948   psrlq(xmm0, 34);
1949   rcpss(xmm0, xmm0);
1950   psllq(xmm3, 12);
1951   movdqu(xmm6, Address(tmp, 8240));
1952   psrlq(xmm3, 12);
1953   mulss(xmm0, xmm7);
1954   movl(edx, -1024);
1955   movdl(xmm5, edx);
1956   por(xmm3, xmm1);
1957   paddd(xmm0, xmm4);
1958   psllq(xmm5, 32);
1959   movdl(edx, xmm0);
1960   psllq(xmm0, 29);
1961   pand(xmm5, xmm3);
1962   movl(rsi, INT_MIN);
1963   pand(xmm0, xmm6);
1964   subsd(xmm3, xmm5);
1965   andl(eax, 32752);
1966   subl(eax, 18416);
1967   sarl(eax, 4);
1968   cvtsi2sdl(xmm7, eax);
1969   mulpd(xmm5, xmm0);
1970   jmp(L_2TAG_PACKET_4_0_2);
1971 
1972   bind(L_2TAG_PACKET_5_0_2);
1973   cmpl(eax, 0);
1974   jcc(Assembler::less, L_2TAG_PACKET_13_0_2);
1975   cmpl(eax, 752);
1976   jcc(Assembler::aboveEqual, L_2TAG_PACKET_14_0_2);
1977 
1978   bind(L_2TAG_PACKET_15_0_2);
1979   addsd(xmm0, xmm7);
1980   movsd(xmm2, Address(tmp, 12544));
1981   addpd(xmm3, xmm0);
1982   xorpd(xmm6, xmm6);
1983   movl(eax, 17080);
1984   pinsrw(xmm6, eax, 3);
1985   pshufd(xmm0, xmm3, 238);
1986   addsd(xmm0, xmm3);
1987   movdqu(xmm3, xmm5);
1988   addsd(xmm5, xmm0);
1989   movdqu(xmm4, xmm2);
1990   subsd(xmm3, xmm5);
1991   movdqu(xmm7, xmm5);
1992   pand(xmm5, xmm2);
1993   movdqu(xmm2, xmm1);
1994   pand(xmm4, xmm1);
1995   subsd(xmm7, xmm5);
1996   addsd(xmm0, xmm3);
1997   subsd(xmm1, xmm4);
1998   mulsd(xmm4, xmm5);
1999   addsd(xmm0, xmm7);
2000   mulsd(xmm2, xmm0);
2001   movdqu(xmm7, xmm6);
2002   mulsd(xmm1, xmm5);
2003   addsd(xmm6, xmm4);
2004   movdl(eax, xmm6);
2005   subsd(xmm6, xmm7);
2006   addsd(xmm2, xmm1);
2007   movdqu(xmm7, Address(tmp, 12480));
2008   movdqu(xmm3, Address(tmp, 12496));
2009   subsd(xmm4, xmm6);
2010   pextrw(edx, xmm6, 3);
2011   movl(ecx, eax);
2012   andl(eax, 255);
2013   addl(eax, eax);
2014   movdqu(xmm5, Address(tmp, eax, Address::times_8, 8384));
2015   addsd(xmm2, xmm4);
2016   sarl(ecx, 8);
2017   movl(eax, ecx);
2018   sarl(ecx, 1);
2019   subl(eax, ecx);
2020   shll(ecx, 20);
2021   xorl(ecx, rsi);
2022   movdl(xmm6, ecx);
2023   movsd(xmm1, Address(tmp, 12512));
2024   andl(edx, 32767);
2025   cmpl(edx, 16529);
2026   jcc(Assembler::above, L_2TAG_PACKET_14_0_2);
2027   pshufd(xmm0, xmm2, 68);
2028   pshufd(xmm4, xmm2, 68);
2029   mulpd(xmm0, xmm0);
2030   mulpd(xmm7, xmm4);
2031   pshufd(xmm6, xmm6, 17);
2032   mulsd(xmm1, xmm2);
2033   mulsd(xmm0, xmm0);
2034   paddd(xmm5, xmm6);
2035   addpd(xmm3, xmm7);
2036   mulsd(xmm1, xmm5);
2037   pshufd(xmm6, xmm5, 238);
2038   mulpd(xmm0, xmm3);
2039   addsd(xmm1, xmm6);
2040   pshufd(xmm3, xmm0, 238);
2041   mulsd(xmm0, xmm5);
2042   mulsd(xmm3, xmm5);
2043   shll(eax, 4);
2044   xorpd(xmm4, xmm4);
2045   addl(eax, 16368);
2046   pinsrw(xmm4, eax, 3);
2047   addsd(xmm0, xmm1);
2048   movl(rsi, Address(rsp, 24));
2049   addsd(xmm0, xmm3);
2050   movdqu(xmm1, xmm0);
2051   addsd(xmm0, xmm5);
2052   mulsd(xmm0, xmm4);
2053   pextrw(eax, xmm0, 3);
2054   andl(eax, 32752);
2055   jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
2056   cmpl(eax, 32752);
2057   jcc(Assembler::equal, L_2TAG_PACKET_17_0_2);
2058 
2059   bind(L_2TAG_PACKET_18_0_2);
2060   movsd(Address(rsp, 0), xmm0);
2061   fld_d(Address(rsp, 0));
2062   jmp(L_2TAG_PACKET_6_0_2);
2063 
2064   bind(L_2TAG_PACKET_8_0_2);
2065   movsd(xmm1, Address(rsp, 16));
2066   movsd(xmm0, Address(rsp, 8));
2067   movdqu(xmm2, xmm0);
2068   movdl(eax, xmm2);
2069   psrlq(xmm2, 20);
2070   movdl(edx, xmm2);
2071   orl(eax, edx);
2072   jcc(Assembler::equal, L_2TAG_PACKET_19_0_2);
2073   addsd(xmm0, xmm0);
2074   movdl(eax, xmm1);
2075   psrlq(xmm1, 32);
2076   movdl(edx, xmm1);
2077   movl(ecx, edx);
2078   addl(edx, edx);
2079   orl(eax, edx);
2080   jcc(Assembler::equal, L_2TAG_PACKET_20_0_2);
2081   jmp(L_2TAG_PACKET_18_0_2);
2082 
2083   bind(L_2TAG_PACKET_20_0_2);
2084   xorpd(xmm0, xmm0);
2085   movl(eax, 16368);
2086   pinsrw(xmm0, eax, 3);
2087   movl(edx, 29);
2088   jmp(L_2TAG_PACKET_21_0_2);
2089 
2090   bind(L_2TAG_PACKET_22_0_2);
2091   movsd(xmm0, Address(rsp, 16));
2092   addpd(xmm0, xmm0);
2093   jmp(L_2TAG_PACKET_18_0_2);
2094 
2095   bind(L_2TAG_PACKET_19_0_2);
2096   movdl(eax, xmm1);
2097   movdqu(xmm2, xmm1);
2098   psrlq(xmm1, 32);
2099   movdl(edx, xmm1);
2100   movl(ecx, edx);
2101   addl(edx, edx);
2102   orl(eax, edx);
2103   jcc(Assembler::equal, L_2TAG_PACKET_23_0_2);
2104   pextrw(eax, xmm2, 3);
2105   andl(eax, 32752);
2106   cmpl(eax, 32752);
2107   jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
2108   movdl(eax, xmm2);
2109   psrlq(xmm2, 20);
2110   movdl(edx, xmm2);
2111   orl(eax, edx);
2112   jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
2113 
2114   bind(L_2TAG_PACKET_24_0_2);
2115   pextrw(eax, xmm0, 3);
2116   testl(eax, 32768);
2117   jcc(Assembler::notEqual, L_2TAG_PACKET_25_0_2);
2118   testl(ecx, INT_MIN);
2119   jcc(Assembler::notEqual, L_2TAG_PACKET_26_0_2);
2120   jmp(L_2TAG_PACKET_18_0_2);
2121 
2122   bind(L_2TAG_PACKET_27_0_2);
2123   movsd(xmm1, Address(rsp, 16));
2124   movdl(eax, xmm1);
2125   testl(eax, 1);
2126   jcc(Assembler::notEqual, L_2TAG_PACKET_28_0_2);
2127   testl(eax, 2);
2128   jcc(Assembler::notEqual, L_2TAG_PACKET_29_0_2);
2129   jmp(L_2TAG_PACKET_28_0_2);
2130 
2131   bind(L_2TAG_PACKET_25_0_2);
2132   shrl(ecx, 20);
2133   andl(ecx, 2047);
2134   cmpl(ecx, 1075);
2135   jcc(Assembler::above, L_2TAG_PACKET_28_0_2);
2136   jcc(Assembler::equal, L_2TAG_PACKET_30_0_2);
2137   cmpl(ecx, 1074);
2138   jcc(Assembler::above, L_2TAG_PACKET_27_0_2);
2139   cmpl(ecx, 1023);
2140   jcc(Assembler::below, L_2TAG_PACKET_28_0_2);
2141   movsd(xmm1, Address(rsp, 16));
2142   movl(eax, 17208);
2143   xorpd(xmm3, xmm3);
2144   pinsrw(xmm3, eax, 3);
2145   movdqu(xmm4, xmm3);
2146   addsd(xmm3, xmm1);
2147   subsd(xmm4, xmm3);
2148   addsd(xmm1, xmm4);
2149   pextrw(eax, xmm1, 3);
2150   andl(eax, 32752);
2151   jcc(Assembler::notEqual, L_2TAG_PACKET_28_0_2);
2152   movdl(eax, xmm3);
2153   andl(eax, 1);
2154   jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
2155 
2156   bind(L_2TAG_PACKET_29_0_2);
2157   movsd(xmm1, Address(rsp, 16));
2158   pextrw(eax, xmm1, 3);
2159   andl(eax, 32768);
2160   jcc(Assembler::equal, L_2TAG_PACKET_18_0_2);
2161   xorpd(xmm0, xmm0);
2162   movl(eax, 32768);
2163   pinsrw(xmm0, eax, 3);
2164   jmp(L_2TAG_PACKET_18_0_2);
2165 
2166   bind(L_2TAG_PACKET_28_0_2);
2167   movsd(xmm1, Address(rsp, 16));
2168   pextrw(eax, xmm1, 3);
2169   andl(eax, 32768);
2170   jcc(Assembler::notEqual, L_2TAG_PACKET_26_0_2);
2171 
2172   bind(L_2TAG_PACKET_31_0_2);
2173   xorpd(xmm0, xmm0);
2174   movl(eax, 32752);
2175   pinsrw(xmm0, eax, 3);
2176   jmp(L_2TAG_PACKET_18_0_2);
2177 
2178   bind(L_2TAG_PACKET_30_0_2);
2179   movsd(xmm1, Address(rsp, 16));
2180   movdl(eax, xmm1);
2181   andl(eax, 1);
2182   jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
2183   jmp(L_2TAG_PACKET_29_0_2);
2184 
2185   bind(L_2TAG_PACKET_32_0_2);
2186   movdl(eax, xmm1);
2187   psrlq(xmm1, 20);
2188   movdl(edx, xmm1);
2189   orl(eax, edx);
2190   jcc(Assembler::equal, L_2TAG_PACKET_33_0_2);
2191   movsd(xmm0, Address(rsp, 16));
2192   addsd(xmm0, xmm0);
2193   jmp(L_2TAG_PACKET_18_0_2);
2194 
2195   bind(L_2TAG_PACKET_33_0_2);
2196   movsd(xmm0, Address(rsp, 8));
2197   pextrw(eax, xmm0, 3);
2198   cmpl(eax, 49136);
2199   jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
2200   movdl(ecx, xmm0);
2201   psrlq(xmm0, 20);
2202   movdl(edx, xmm0);
2203   orl(ecx, edx);
2204   jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
2205   xorpd(xmm0, xmm0);
2206   movl(eax, 32760);
2207   pinsrw(xmm0, eax, 3);
2208   jmp(L_2TAG_PACKET_18_0_2);
2209 
2210   bind(L_2TAG_PACKET_34_0_2);
2211   movsd(xmm1, Address(rsp, 16));
2212   andl(eax, 32752);
2213   subl(eax, 16368);
2214   pextrw(edx, xmm1, 3);
2215   xorpd(xmm0, xmm0);
2216   xorl(eax, edx);
2217   andl(eax, 32768);
2218   jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
2219   movl(ecx, 32752);
2220   pinsrw(xmm0, ecx, 3);
2221   jmp(L_2TAG_PACKET_18_0_2);
2222 
2223   bind(L_2TAG_PACKET_35_0_2);
2224   movdl(eax, xmm1);
2225   cmpl(edx, 17184);
2226   jcc(Assembler::above, L_2TAG_PACKET_36_0_2);
2227   testl(eax, 1);
2228   jcc(Assembler::notEqual, L_2TAG_PACKET_37_0_2);
2229   testl(eax, 2);
2230   jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
2231   jmp(L_2TAG_PACKET_39_0_2);
2232 
2233   bind(L_2TAG_PACKET_36_0_2);
2234   testl(eax, 1);
2235   jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
2236   jmp(L_2TAG_PACKET_39_0_2);
2237 
2238   bind(L_2TAG_PACKET_9_0_2);
2239   movsd(xmm2, Address(rsp, 8));
2240   movdl(eax, xmm2);
2241   psrlq(xmm2, 31);
2242   movdl(ecx, xmm2);
2243   orl(eax, ecx);
2244   jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
2245   movsd(xmm1, Address(rsp, 16));
2246   pextrw(edx, xmm1, 3);
2247   movdl(eax, xmm1);
2248   movdqu(xmm2, xmm1);
2249   psrlq(xmm2, 32);
2250   movdl(ecx, xmm2);
2251   addl(ecx, ecx);
2252   orl(ecx, eax);
2253   jcc(Assembler::equal, L_2TAG_PACKET_40_0_2);
2254   andl(edx, 32752);
2255   cmpl(edx, 32752);
2256   jcc(Assembler::equal, L_2TAG_PACKET_32_0_2);
2257   cmpl(edx, 17200);
2258   jcc(Assembler::above, L_2TAG_PACKET_38_0_2);
2259   cmpl(edx, 17184);
2260   jcc(Assembler::aboveEqual, L_2TAG_PACKET_35_0_2);
2261   cmpl(edx, 16368);
2262   jcc(Assembler::below, L_2TAG_PACKET_37_0_2);
2263   movl(eax, 17208);
2264   xorpd(xmm2, xmm2);
2265   pinsrw(xmm2, eax, 3);
2266   movdqu(xmm4, xmm2);
2267   addsd(xmm2, xmm1);
2268   subsd(xmm4, xmm2);
2269   addsd(xmm1, xmm4);
2270   pextrw(eax, xmm1, 3);
2271   andl(eax, 32767);
2272   jcc(Assembler::notEqual, L_2TAG_PACKET_37_0_2);
2273   movdl(eax, xmm2);
2274   andl(eax, 1);
2275   jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
2276 
2277   bind(L_2TAG_PACKET_39_0_2);
2278   xorpd(xmm1, xmm1);
2279   movl(edx, 30704);
2280   pinsrw(xmm1, edx, 3);
2281   movsd(xmm2, Address(tmp, 8256));
2282   movsd(xmm4, Address(rsp, 8));
2283   pextrw(eax, xmm4, 3);
2284   movl(edx, 8192);
2285   movdl(xmm4, edx);
2286   andl(eax, 32767);
2287   subl(eax, 16);
2288   jcc(Assembler::less, L_2TAG_PACKET_12_0_2);
2289   movl(edx, eax);
2290   andl(edx, 32752);
2291   subl(edx, 16368);
2292   movl(ecx, edx);
2293   sarl(edx, 31);
2294   addl(ecx, edx);
2295   xorl(ecx, edx);
2296   addl(ecx, 16);
2297   bsrl(ecx, ecx);
2298   movl(rsi, INT_MIN);
2299   jmp(L_2TAG_PACKET_1_0_2);
2300 
2301   bind(L_2TAG_PACKET_37_0_2);
2302   xorpd(xmm1, xmm1);
2303   movl(eax, 32752);
2304   pinsrw(xmm1, eax, 3);
2305   xorpd(xmm0, xmm0);
2306   mulsd(xmm0, xmm1);
2307   movl(edx, 28);
2308   jmp(L_2TAG_PACKET_21_0_2);
2309 
2310   bind(L_2TAG_PACKET_38_0_2);
2311   xorpd(xmm1, xmm1);
2312   movl(edx, 30704);
2313   pinsrw(xmm1, edx, 3);
2314   movsd(xmm2, Address(tmp, 8256));
2315   movsd(xmm4, Address(rsp, 8));
2316   pextrw(eax, xmm4, 3);
2317   movl(edx, 8192);
2318   movdl(xmm4, edx);
2319   andl(eax, 32767);
2320   subl(eax, 16);
2321   jcc(Assembler::less, L_2TAG_PACKET_10_0_2);
2322   movl(edx, eax);
2323   andl(edx, 32752);
2324   subl(edx, 16368);
2325   movl(ecx, edx);
2326   sarl(edx, 31);
2327   addl(ecx, edx);
2328   xorl(ecx, edx);
2329   addl(ecx, 16);
2330   bsrl(ecx, ecx);
2331   movl(rsi, 0);
2332   jmp(L_2TAG_PACKET_1_0_2);
2333 
2334   bind(L_2TAG_PACKET_23_0_2);
2335   xorpd(xmm0, xmm0);
2336   movl(eax, 16368);
2337   pinsrw(xmm0, eax, 3);
2338   jmp(L_2TAG_PACKET_18_0_2);
2339 
2340   bind(L_2TAG_PACKET_26_0_2);
2341   xorpd(xmm0, xmm0);
2342   jmp(L_2TAG_PACKET_18_0_2);
2343 
2344   bind(L_2TAG_PACKET_13_0_2);
2345   addl(eax, 384);
2346   cmpl(eax, 0);
2347   jcc(Assembler::less, L_2TAG_PACKET_41_0_2);
2348   mulsd(xmm5, xmm1);
2349   addsd(xmm0, xmm7);
2350   shrl(rsi, 31);
2351   addpd(xmm3, xmm0);
2352   pshufd(xmm0, xmm3, 238);
2353   addsd(xmm3, xmm0);
2354   movsd(xmm4, Address(tmp, rsi, Address::times_8, 12528));
2355   mulsd(xmm1, xmm3);
2356   xorpd(xmm0, xmm0);
2357   movl(eax, 16368);
2358   shll(rsi, 15);
2359   orl(eax, rsi);
2360   pinsrw(xmm0, eax, 3);
2361   addsd(xmm5, xmm1);
2362   movl(rsi, Address(rsp, 24));
2363   mulsd(xmm5, xmm4);
2364   addsd(xmm0, xmm5);
2365   jmp(L_2TAG_PACKET_18_0_2);
2366 
2367   bind(L_2TAG_PACKET_41_0_2);
2368   movl(rsi, Address(rsp, 24));
2369   xorpd(xmm0, xmm0);
2370   movl(eax, 16368);
2371   pinsrw(xmm0, eax, 3);
2372   jmp(L_2TAG_PACKET_18_0_2);
2373 
2374   bind(L_2TAG_PACKET_40_0_2);
2375   xorpd(xmm0, xmm0);
2376   movl(eax, 16368);
2377   pinsrw(xmm0, eax, 3);
2378   jmp(L_2TAG_PACKET_18_0_2);
2379 
2380   bind(L_2TAG_PACKET_42_0_2);
2381   xorpd(xmm0, xmm0);
2382   movl(eax, 16368);
2383   pinsrw(xmm0, eax, 3);
2384   movl(edx, 26);
2385   jmp(L_2TAG_PACKET_21_0_2);
2386 
2387   bind(L_2TAG_PACKET_11_0_2);
2388   movsd(xmm1, Address(rsp, 16));
2389   movdqu(xmm2, xmm1);
2390   pextrw(eax, xmm1, 3);
2391   andl(eax, 32752);
2392   cmpl(eax, 32752);
2393   jcc(Assembler::notEqual, L_2TAG_PACKET_43_0_2);
2394   movdl(eax, xmm2);
2395   psrlq(xmm2, 20);
2396   movdl(edx, xmm2);
2397   orl(eax, edx);
2398   jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
2399 
2400   bind(L_2TAG_PACKET_43_0_2);
2401   movdl(eax, xmm1);
2402   psrlq(xmm1, 32);
2403   movdl(edx, xmm1);
2404   movl(ecx, edx);
2405   addl(edx, edx);
2406   orl(eax, edx);
2407   jcc(Assembler::equal, L_2TAG_PACKET_42_0_2);
2408   shrl(edx, 21);
2409   cmpl(edx, 1075);
2410   jcc(Assembler::above, L_2TAG_PACKET_44_0_2);
2411   jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
2412   cmpl(edx, 1023);
2413   jcc(Assembler::below, L_2TAG_PACKET_44_0_2);
2414   movsd(xmm1, Address(rsp, 16));
2415   movl(eax, 17208);
2416   xorpd(xmm3, xmm3);
2417   pinsrw(xmm3, eax, 3);
2418   movdqu(xmm4, xmm3);
2419   addsd(xmm3, xmm1);
2420   subsd(xmm4, xmm3);
2421   addsd(xmm1, xmm4);
2422   pextrw(eax, xmm1, 3);
2423   andl(eax, 32752);
2424   jcc(Assembler::notEqual, L_2TAG_PACKET_44_0_2);
2425   movdl(eax, xmm3);
2426   andl(eax, 1);
2427   jcc(Assembler::equal, L_2TAG_PACKET_44_0_2);
2428 
2429   bind(L_2TAG_PACKET_46_0_2);
2430   movsd(xmm0, Address(rsp, 8));
2431   testl(ecx, INT_MIN);
2432   jcc(Assembler::notEqual, L_2TAG_PACKET_47_0_2);
2433   jmp(L_2TAG_PACKET_18_0_2);
2434 
2435   bind(L_2TAG_PACKET_45_0_2);
2436   movsd(xmm1, Address(rsp, 16));
2437   movdl(eax, xmm1);
2438   testl(eax, 1);
2439   jcc(Assembler::notEqual, L_2TAG_PACKET_46_0_2);
2440 
2441   bind(L_2TAG_PACKET_44_0_2);
2442   testl(ecx, INT_MIN);
2443   jcc(Assembler::equal, L_2TAG_PACKET_26_0_2);
2444   xorpd(xmm0, xmm0);
2445 
2446   bind(L_2TAG_PACKET_47_0_2);
2447   movl(eax, 16368);
2448   xorpd(xmm1, xmm1);
2449   pinsrw(xmm1, eax, 3);
2450   divsd(xmm1, xmm0);
2451   movdqu(xmm0, xmm1);
2452   movl(edx, 27);
2453   jmp(L_2TAG_PACKET_21_0_2);
2454 
2455   bind(L_2TAG_PACKET_14_0_2);
2456   movsd(xmm2, Address(rsp, 8));
2457   movsd(xmm6, Address(rsp, 16));
2458   pextrw(eax, xmm2, 3);
2459   pextrw(edx, xmm6, 3);
2460   movl(ecx, 32752);
2461   andl(ecx, edx);
2462   cmpl(ecx, 32752);
2463   jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
2464   andl(eax, 32752);
2465   subl(eax, 16368);
2466   xorl(edx, eax);
2467   testl(edx, 32768);
2468   jcc(Assembler::notEqual, L_2TAG_PACKET_49_0_2);
2469 
2470   bind(L_2TAG_PACKET_50_0_2);
2471   movl(eax, 32736);
2472   pinsrw(xmm0, eax, 3);
2473   shrl(rsi, 16);
2474   orl(eax, rsi);
2475   pinsrw(xmm1, eax, 3);
2476   movl(rsi, Address(rsp, 24));
2477   mulsd(xmm0, xmm1);
2478 
2479   bind(L_2TAG_PACKET_17_0_2);
2480   movl(edx, 24);
2481 
2482   bind(L_2TAG_PACKET_21_0_2);
2483   movsd(Address(rsp, 0), xmm0);
2484   fld_d(Address(rsp, 0));
2485   jmp(L_2TAG_PACKET_6_0_2);
2486 
2487   bind(L_2TAG_PACKET_49_0_2);
2488   movl(eax, 16);
2489   pinsrw(xmm0, eax, 3);
2490   mulsd(xmm0, xmm0);
2491   testl(rsi, INT_MIN);
2492   jcc(Assembler::equal, L_2TAG_PACKET_51_0_2);
2493   movsd(xmm2, Address(tmp, 12560));
2494   xorpd(xmm0, xmm2);
2495 
2496   bind(L_2TAG_PACKET_51_0_2);
2497   movl(rsi, Address(rsp, 24));
2498   movl(edx, 25);
2499   jmp(L_2TAG_PACKET_21_0_2);
2500 
2501   bind(L_2TAG_PACKET_16_0_2);
2502   pextrw(ecx, xmm5, 3);
2503   pextrw(edx, xmm4, 3);
2504   movl(eax, -1);
2505   andl(ecx, 32752);
2506   subl(ecx, 16368);
2507   andl(edx, 32752);
2508   addl(edx, ecx);
2509   movl(ecx, -31);
2510   sarl(edx, 4);
2511   subl(ecx, edx);
2512   jcc(Assembler::lessEqual, L_2TAG_PACKET_52_0_2);
2513   cmpl(ecx, 20);
2514   jcc(Assembler::above, L_2TAG_PACKET_53_0_2);
2515   shll(eax);
2516 
2517   bind(L_2TAG_PACKET_52_0_2);
2518   movdl(xmm0, eax);
2519   psllq(xmm0, 32);
2520   pand(xmm0, xmm5);
2521   subsd(xmm5, xmm0);
2522   addsd(xmm5, xmm1);
2523   mulsd(xmm0, xmm4);
2524   mulsd(xmm5, xmm4);
2525   addsd(xmm0, xmm5);
2526 
2527   bind(L_2TAG_PACKET_53_0_2);
2528   movl(edx, 25);
2529   jmp(L_2TAG_PACKET_21_0_2);
2530 
2531   bind(L_2TAG_PACKET_2_0_2);
2532   movzwl(ecx, Address(rsp, 22));
2533   movl(edx, INT_MIN);
2534   movdl(xmm1, edx);
2535   xorpd(xmm7, xmm7);
2536   paddd(xmm0, xmm4);
2537   psllq(xmm5, 32);
2538   movdl(edx, xmm0);
2539   psllq(xmm0, 29);
2540   paddq(xmm1, xmm3);
2541   pand(xmm5, xmm1);
2542   andl(ecx, 32752);
2543   cmpl(ecx, 16560);
2544   jcc(Assembler::below, L_2TAG_PACKET_3_0_2);
2545   pand(xmm0, xmm6);
2546   subsd(xmm3, xmm5);
2547   addl(eax, 16351);
2548   shrl(eax, 4);
2549   subl(eax, 1022);
2550   cvtsi2sdl(xmm7, eax);
2551   mulpd(xmm5, xmm0);
2552   movsd(xmm4, Address(tmp, 0));
2553   mulsd(xmm3, xmm0);
2554   movsd(xmm6, Address(tmp, 0));
2555   subsd(xmm5, xmm2);
2556   movsd(xmm1, Address(tmp, 8));
2557   pshufd(xmm2, xmm3, 68);
2558   unpcklpd(xmm5, xmm3);
2559   addsd(xmm3, xmm5);
2560   movsd(xmm0, Address(tmp, 8));
2561   andl(edx, 16760832);
2562   shrl(edx, 10);
2563   addpd(xmm7, Address(tmp, edx, Address::times_1, -3616));
2564   mulsd(xmm4, xmm5);
2565   mulsd(xmm0, xmm5);
2566   mulsd(xmm6, xmm2);
2567   mulsd(xmm1, xmm2);
2568   movdqu(xmm2, xmm5);
2569   mulsd(xmm4, xmm5);
2570   addsd(xmm5, xmm0);
2571   movdqu(xmm0, xmm7);
2572   addsd(xmm2, xmm3);
2573   addsd(xmm7, xmm5);
2574   mulsd(xmm6, xmm2);
2575   subsd(xmm0, xmm7);
2576   movdqu(xmm2, xmm7);
2577   addsd(xmm7, xmm4);
2578   addsd(xmm0, xmm5);
2579   subsd(xmm2, xmm7);
2580   addsd(xmm4, xmm2);
2581   pshufd(xmm2, xmm5, 238);
2582   movdqu(xmm5, xmm7);
2583   addsd(xmm7, xmm2);
2584   addsd(xmm4, xmm0);
2585   movdqu(xmm0, Address(tmp, 8272));
2586   subsd(xmm5, xmm7);
2587   addsd(xmm6, xmm4);
2588   movdqu(xmm4, xmm7);
2589   addsd(xmm5, xmm2);
2590   addsd(xmm7, xmm1);
2591   movdqu(xmm2, Address(tmp, 8336));
2592   subsd(xmm4, xmm7);
2593   addsd(xmm6, xmm5);
2594   addsd(xmm4, xmm1);
2595   pshufd(xmm5, xmm7, 238);
2596   movdqu(xmm1, xmm7);
2597   addsd(xmm7, xmm5);
2598   subsd(xmm1, xmm7);
2599   addsd(xmm1, xmm5);
2600   movdqu(xmm5, Address(tmp, 8352));
2601   pshufd(xmm3, xmm3, 68);
2602   addsd(xmm6, xmm4);
2603   addsd(xmm6, xmm1);
2604   movdqu(xmm1, Address(tmp, 8304));
2605   mulpd(xmm0, xmm3);
2606   mulpd(xmm2, xmm3);
2607   pshufd(xmm4, xmm3, 68);
2608   mulpd(xmm3, xmm3);
2609   addpd(xmm0, xmm1);
2610   addpd(xmm5, xmm2);
2611   mulsd(xmm4, xmm3);
2612   movsd(xmm2, Address(tmp, 16));
2613   mulpd(xmm3, xmm3);
2614   movsd(xmm1, Address(rsp, 16));
2615   movzwl(ecx, Address(rsp, 22));
2616   mulpd(xmm0, xmm4);
2617   pextrw(eax, xmm7, 3);
2618   mulpd(xmm5, xmm4);
2619   mulpd(xmm0, xmm3);
2620   movsd(xmm4, Address(tmp, 8376));
2621   pand(xmm2, xmm7);
2622   addsd(xmm5, xmm6);
2623   subsd(xmm7, xmm2);
2624   addpd(xmm5, xmm0);
2625   andl(eax, 32752);
2626   subl(eax, 16368);
2627   andl(ecx, 32752);
2628   cmpl(ecx, 32752);
2629   jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
2630   addl(ecx, eax);
2631   cmpl(ecx, 16576);
2632   jcc(Assembler::aboveEqual, L_2TAG_PACKET_54_0_2);
2633   pshufd(xmm0, xmm5, 238);
2634   pand(xmm4, xmm1);
2635   movdqu(xmm3, xmm1);
2636   addsd(xmm5, xmm0);
2637   subsd(xmm1, xmm4);
2638   xorpd(xmm6, xmm6);
2639   movl(edx, 17080);
2640   pinsrw(xmm6, edx, 3);
2641   addsd(xmm7, xmm5);
2642   mulsd(xmm4, xmm2);
2643   mulsd(xmm1, xmm2);
2644   movdqu(xmm5, xmm6);
2645   mulsd(xmm3, xmm7);
2646   addsd(xmm6, xmm4);
2647   addsd(xmm1, xmm3);
2648   movdqu(xmm7, Address(tmp, 12480));
2649   movdl(edx, xmm6);
2650   subsd(xmm6, xmm5);
2651   movdqu(xmm3, Address(tmp, 12496));
2652   movsd(xmm2, Address(tmp, 12512));
2653   subsd(xmm4, xmm6);
2654   movl(ecx, edx);
2655   andl(edx, 255);
2656   addl(edx, edx);
2657   movdqu(xmm5, Address(tmp, edx, Address::times_8, 8384));
2658   addsd(xmm4, xmm1);
2659   pextrw(edx, xmm6, 3);
2660   shrl(ecx, 8);
2661   movl(eax, ecx);
2662   shrl(ecx, 1);
2663   subl(eax, ecx);
2664   shll(ecx, 20);
2665   movdl(xmm6, ecx);
2666   pshufd(xmm0, xmm4, 68);
2667   pshufd(xmm1, xmm4, 68);
2668   mulpd(xmm0, xmm0);
2669   mulpd(xmm7, xmm1);
2670   pshufd(xmm6, xmm6, 17);
2671   mulsd(xmm2, xmm4);
2672   andl(edx, 32767);
2673   cmpl(edx, 16529);
2674   jcc(Assembler::above, L_2TAG_PACKET_14_0_2);
2675   mulsd(xmm0, xmm0);
2676   paddd(xmm5, xmm6);
2677   addpd(xmm3, xmm7);
2678   mulsd(xmm2, xmm5);
2679   pshufd(xmm6, xmm5, 238);
2680   mulpd(xmm0, xmm3);
2681   addsd(xmm2, xmm6);
2682   pshufd(xmm3, xmm0, 238);
2683   addl(eax, 1023);
2684   shll(eax, 20);
2685   orl(eax, rsi);
2686   movdl(xmm4, eax);
2687   mulsd(xmm0, xmm5);
2688   mulsd(xmm3, xmm5);
2689   addsd(xmm0, xmm2);
2690   psllq(xmm4, 32);
2691   addsd(xmm0, xmm3);
2692   movdqu(xmm1, xmm0);
2693   addsd(xmm0, xmm5);
2694   movl(rsi, Address(rsp, 24));
2695   mulsd(xmm0, xmm4);
2696   pextrw(eax, xmm0, 3);
2697   andl(eax, 32752);
2698   jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
2699   cmpl(eax, 32752);
2700   jcc(Assembler::equal, L_2TAG_PACKET_17_0_2);
2701 
2702   bind(L_2TAG_PACKET_55_0_2);
2703   movsd(Address(rsp, 0), xmm0);
2704   fld_d(Address(rsp, 0));
2705   jmp(L_2TAG_PACKET_6_0_2);
2706 
2707   bind(L_2TAG_PACKET_48_0_2);
2708   movl(rsi, Address(rsp, 24));
2709 
2710   bind(L_2TAG_PACKET_56_0_2);
2711   movsd(xmm0, Address(rsp, 8));
2712   movsd(xmm1, Address(rsp, 16));
2713   addsd(xmm1, xmm1);
2714   xorpd(xmm2, xmm2);
2715   movl(eax, 49136);
2716   pinsrw(xmm2, eax, 3);
2717   addsd(xmm2, xmm0);
2718   pextrw(eax, xmm2, 3);
2719   cmpl(eax, 0);
2720   jcc(Assembler::notEqual, L_2TAG_PACKET_57_0_2);
2721   xorpd(xmm0, xmm0);
2722   movl(eax, 32760);
2723   pinsrw(xmm0, eax, 3);
2724   jmp(L_2TAG_PACKET_18_0_2);
2725 
2726   bind(L_2TAG_PACKET_57_0_2);
2727   movdl(edx, xmm1);
2728   movdqu(xmm3, xmm1);
2729   psrlq(xmm3, 20);
2730   movdl(ecx, xmm3);
2731   orl(ecx, edx);
2732   jcc(Assembler::equal, L_2TAG_PACKET_58_0_2);
2733   addsd(xmm1, xmm1);
2734   movdqu(xmm0, xmm1);
2735   jmp(L_2TAG_PACKET_18_0_2);
2736 
2737   bind(L_2TAG_PACKET_58_0_2);
2738   pextrw(eax, xmm0, 3);
2739   andl(eax, 32752);
2740   pextrw(edx, xmm1, 3);
2741   xorpd(xmm0, xmm0);
2742   subl(eax, 16368);
2743   xorl(eax, edx);
2744   testl(eax, 32768);
2745   jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
2746   movl(edx, 32752);
2747   pinsrw(xmm0, edx, 3);
2748   jmp(L_2TAG_PACKET_18_0_2);
2749 
2750   bind(L_2TAG_PACKET_54_0_2);
2751   pextrw(eax, xmm1, 3);
2752   pextrw(ecx, xmm2, 3);
2753   xorl(eax, ecx);
2754   testl(eax, 32768);
2755   jcc(Assembler::equal, L_2TAG_PACKET_50_0_2);
2756   jmp(L_2TAG_PACKET_49_0_2);
2757 
2758   bind(L_2TAG_PACKET_6_0_2);
2759   movl(tmp, Address(rsp, 64));
2760 
2761 }
2762 
2763 /******************************************************************************/
2764 //                     ALGORITHM DESCRIPTION - SIN()
2765 //                     ---------------------
2766 //
2767 //     1. RANGE REDUCTION
2768 //
2769 //     We perform an initial range reduction from X to r with
2770 //
2771 //          X =~= N * pi/32 + r
2772 //
2773 //     so that |r| <= pi/64 + epsilon. We restrict inputs to those
2774 //     where |N| <= 932560. Beyond this, the range reduction is
2775 //     insufficiently accurate. For extremely small inputs,
2776 //     denormalization can occur internally, impacting performance.
2777 //     This means that the main path is actually only taken for
2778 //     2^-252 <= |X| < 90112.
2779 //
2780 //     To avoid branches, we perform the range reduction to full
2781 //     accuracy each time.
2782 //
2783 //          X - N * (P_1 + P_2 + P_3)
2784 //
2785 //     where P_1 and P_2 are 32-bit numbers (so multiplication by N
2786 //     is exact) and P_3 is a 53-bit number. Together, these
2787 //     approximate pi well enough for all cases in the restricted
2788 //     range.
2789 //
2790 //     The main reduction sequence is:
2791 //
2792 //             y = 32/pi * x
2793 //             N = integer(y)
2794 //     (computed by adding and subtracting off SHIFTER)
2795 //
2796 //             m_1 = N * P_1
2797 //             m_2 = N * P_2
2798 //             r_1 = x - m_1
2799 //             r = r_1 - m_2
2800 //     (this r can be used for most of the calculation)
2801 //
2802 //             c_1 = r_1 - r
2803 //             m_3 = N * P_3
2804 //             c_2 = c_1 - m_2
2805 //             c = c_2 - m_3
2806 //
2807 //     2. MAIN ALGORITHM
2808 //
2809 //     The algorithm uses a table lookup based on B = M * pi / 32
2810 //     where M = N mod 64. The stored values are:
2811 //       sigma             closest power of 2 to cos(B)
2812 //       C_hl              53-bit cos(B) - sigma
2813 //       S_hi + S_lo       2 * 53-bit sin(B)
2814 //
2815 //     The computation is organized as follows:
2816 //
2817 //          sin(B + r + c) = [sin(B) + sigma * r] +
2818 //                           r * (cos(B) - sigma) +
2819 //                           sin(B) * [cos(r + c) - 1] +
2820 //                           cos(B) * [sin(r + c) - r]
2821 //
2822 //     which is approximately:
2823 //
2824 //          [S_hi + sigma * r] +
2825 //          C_hl * r +
2826 //          S_lo + S_hi * [(cos(r) - 1) - r * c] +
2827 //          (C_hl + sigma) * [(sin(r) - r) + c]
2828 //
2829 //     and this is what is actually computed. We separate this sum
2830 //     into four parts:
2831 //
2832 //          hi + med + pols + corr
2833 //
2834 //     where
2835 //
2836 //          hi       = S_hi + sigma r
2837 //          med      = C_hl * r
2838 //          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
2839 //          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
2840 //
2841 //     3. POLYNOMIAL
2842 //
2843 //     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
2844 //     (sin(r) - r) can be rearranged freely, since it is quite
2845 //     small, so we exploit parallelism to the fullest.
2846 //
2847 //          psc4       =   SC_4 * r_1
2848 //          msc4       =   psc4 * r
2849 //          r2         =   r * r
2850 //          msc2       =   SC_2 * r2
2851 //          r4         =   r2 * r2
2852 //          psc3       =   SC_3 + msc4
2853 //          psc1       =   SC_1 + msc2
2854 //          msc3       =   r4 * psc3
2855 //          sincospols =   psc1 + msc3
2856 //          pols       =   sincospols *
2857 //                         <S_hi * r^2 | (C_hl + sigma) * r^3>
2858 //
2859 //     4. CORRECTION TERM
2860 //
2861 //     This is where the "c" component of the range reduction is
2862 //     taken into account; recall that just "r" is used for most of
2863 //     the calculation.
2864 //
2865 //          -c   = m_3 - c_2
2866 //          -d   = S_hi * r - (C_hl + sigma)
2867 //          corr = -c * -d + S_lo
2868 //
2869 //     5. COMPENSATED SUMMATIONS
2870 //
2871 //     The two successive compensated summations add up the high
2872 //     and medium parts, leaving just the low parts to add up at
2873 //     the end.
2874 //
2875 //          rs        =  sigma * r
2876 //          res_int   =  S_hi + rs
2877 //          k_0       =  S_hi - res_int
2878 //          k_2       =  k_0 + rs
2879 //          med       =  C_hl * r
2880 //          res_hi    =  res_int + med
2881 //          k_1       =  res_int - res_hi
2882 //          k_3       =  k_1 + med
2883 //
2884 //     6. FINAL SUMMATION
2885 //
2886 //     We now add up all the small parts:
2887 //
2888 //          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
2889 //
2890 //     Now the overall result is just:
2891 //
2892 //          res_hi + res_lo
2893 //
2894 //     7. SMALL ARGUMENTS
2895 //
2896 //     If |x| < SNN (SNN meaning the smallest normal number), we
2897 //     simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we
2898 //     do 2^-55 * (2^55 * x - x).
2899 //
2900 // Special cases:
2901 //  sin(NaN) = quiet NaN, and raise invalid exception
2902 //  sin(INF) = NaN and raise invalid exception
2903 //  sin(+/-0) = +/-0
2904 //
2905 /******************************************************************************/
2906 
2907 ALIGNED_(8) juint _zero_none[] =
2908 {
2909     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL
2910 };
2911 
2912 ALIGNED_(4) juint __4onpi_d[] =
2913 {
2914     0x6dc9c883UL, 0x3ff45f30UL
2915 };
2916 
2917 ALIGNED_(4) juint _TWO_32H[] =
2918 {
2919     0x00000000UL, 0x41f80000UL
2920 };
2921 
2922 ALIGNED_(4) juint _pi04_3d[] =
2923 {
2924     0x54442d00UL, 0x3fe921fbUL, 0x98cc5180UL, 0x3ce84698UL, 0xcbb5bf6cUL,
2925     0xb9dfc8f8UL
2926 };
2927 
2928 ALIGNED_(4) juint _pi04_5d[] =
2929 {
2930     0x54400000UL, 0x3fe921fbUL, 0x1a600000UL, 0x3dc0b461UL, 0x2e000000UL,
2931     0x3b93198aUL, 0x25200000UL, 0x396b839aUL, 0x533e63a0UL, 0x37027044UL
2932 };
2933 
2934 ALIGNED_(4) juint _SCALE[] =
2935 {
2936     0x00000000UL, 0x32600000UL
2937 };
2938 
2939 ALIGNED_(4) juint _zeros[] =
2940 {
2941     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL
2942 };
2943 
2944 ALIGNED_(4) juint _pi04_2d[] =
2945 {
2946     0x54400000UL, 0x3fe921fbUL, 0x1a626331UL, 0x3dc0b461UL
2947 };
2948 
2949 ALIGNED_(4) juint _TWO_12H[] =
2950 {
2951     0x00000000UL, 0x40b80000UL
2952 };
2953 
2954 ALIGNED_(2) jushort __4onpi_31l[] =
2955 {
2956     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x836e, 0xa2f9,
2957     0x40d8, 0x0000, 0x0000, 0x0000, 0x2a50, 0x9c88, 0x40b7, 0x0000, 0x0000, 0x0000,
2958     0xabe8, 0xfe13, 0x4099, 0x0000, 0x0000, 0x0000, 0x6ee0, 0xfa9a, 0x4079, 0x0000,
2959     0x0000, 0x0000, 0x9580, 0xdb62, 0x4058, 0x0000, 0x0000, 0x0000, 0x1c82, 0xc9e2,
2960     0x403d, 0x0000, 0x0000, 0x0000, 0xb1c0, 0xff28, 0x4019, 0x0000, 0x0000, 0x0000,
2961     0xef14, 0xaf7a, 0x3ffe, 0x0000, 0x0000, 0x0000, 0x48dc, 0xc36e, 0x3fdf, 0x0000,
2962     0x0000, 0x0000, 0x3740, 0xe909, 0x3fbe, 0x0000, 0x0000, 0x0000, 0x924a, 0xb801,
2963     0x3fa2, 0x0000, 0x0000, 0x0000, 0x3a32, 0xdd41, 0x3f83, 0x0000, 0x0000, 0x0000,
2964     0x8778, 0x873f, 0x3f62, 0x0000, 0x0000, 0x0000, 0x1298, 0xb1cb, 0x3f44, 0x0000,
2965     0x0000, 0x0000, 0xa208, 0x9cfb, 0x3f26, 0x0000, 0x0000, 0x0000, 0xbaec, 0xd7d4,
2966     0x3f06, 0x0000, 0x0000, 0x0000, 0xd338, 0x8909, 0x3ee7, 0x0000, 0x0000, 0x0000,
2967     0x68b8, 0xe04d, 0x3ec7, 0x0000, 0x0000, 0x0000, 0x4e64, 0xdf90, 0x3eaa, 0x0000,
2968     0x0000, 0x0000, 0xc1a8, 0xeb1c, 0x3e89, 0x0000, 0x0000, 0x0000, 0x2720, 0xce7d,
2969     0x3e6a, 0x0000, 0x0000, 0x0000, 0x77b8, 0x8bf1, 0x3e4b, 0x0000, 0x0000, 0x0000,
2970     0xec7e, 0xe4a0, 0x3e2e, 0x0000, 0x0000, 0x0000, 0xffbc, 0xf12f, 0x3e0f, 0x0000,
2971     0x0000, 0x0000, 0xfdc0, 0xb301, 0x3deb, 0x0000, 0x0000, 0x0000, 0xc5ac, 0x9788,
2972     0x3dd1, 0x0000, 0x0000, 0x0000, 0x47da, 0x829b, 0x3db2, 0x0000, 0x0000, 0x0000,
2973     0xd9e4, 0xa6cf, 0x3d93, 0x0000, 0x0000, 0x0000, 0x36e8, 0xf961, 0x3d73, 0x0000,
2974     0x0000, 0x0000, 0xf668, 0xf463, 0x3d54, 0x0000, 0x0000, 0x0000, 0x5168, 0xf2ff,
2975     0x3d35, 0x0000, 0x0000, 0x0000, 0x758e, 0xea4f, 0x3d17, 0x0000, 0x0000, 0x0000,
2976     0xf17a, 0xebe5, 0x3cf8, 0x0000, 0x0000, 0x0000, 0x9cfa, 0x9e83, 0x3cd9, 0x0000,
2977     0x0000, 0x0000, 0xa4ba, 0xe294, 0x3cba, 0x0000, 0x0000, 0x0000, 0xd7ec, 0x9afe,
2978     0x3c9a, 0x0000, 0x0000, 0x0000, 0xae80, 0x8fc6, 0x3c79, 0x0000, 0x0000, 0x0000,
2979     0x3304, 0x8560, 0x3c5c, 0x0000, 0x0000, 0x0000, 0x6d70, 0xdf8f, 0x3c3b, 0x0000,
2980     0x0000, 0x0000, 0x3ef0, 0xafc3, 0x3c1e, 0x0000, 0x0000, 0x0000, 0xd0d8, 0x826b,
2981     0x3bfe, 0x0000, 0x0000, 0x0000, 0x1c80, 0xed4f, 0x3bdd, 0x0000, 0x0000, 0x0000,
2982     0x730c, 0xb0af, 0x3bc1, 0x0000, 0x0000, 0x0000, 0x6660, 0xc219, 0x3ba2, 0x0000,
2983     0x0000, 0x0000, 0x940c, 0xabe2, 0x3b83, 0x0000, 0x0000, 0x0000, 0xdffc, 0x8408,
2984     0x3b64, 0x0000, 0x0000, 0x0000, 0x6b98, 0xc402, 0x3b45, 0x0000, 0x0000, 0x0000,
2985     0x1818, 0x9cc4, 0x3b26, 0x0000, 0x0000, 0x0000, 0x5390, 0xaab6, 0x3b05, 0x0000,
2986     0x0000, 0x0000, 0xb070, 0xd464, 0x3ae9, 0x0000, 0x0000, 0x0000, 0x231a, 0x9ef0,
2987     0x3aca, 0x0000, 0x0000, 0x0000, 0x0670, 0xd1f1, 0x3aaa, 0x0000, 0x0000, 0x0000,
2988     0x7738, 0xd9f3, 0x3a8a, 0x0000, 0x0000, 0x0000, 0xa834, 0x8092, 0x3a6c, 0x0000,
2989     0x0000, 0x0000, 0xb45c, 0xce23, 0x3a4d, 0x0000, 0x0000, 0x0000, 0x36e8, 0xb0e5,
2990     0x3a2d, 0x0000, 0x0000, 0x0000, 0xd156, 0xaf44, 0x3a10, 0x0000, 0x0000, 0x0000,
2991     0x9f52, 0x8c82, 0x39f1, 0x0000, 0x0000, 0x0000, 0x829c, 0xff83, 0x39d1, 0x0000,
2992     0x0000, 0x0000, 0x7d06, 0xefc6, 0x39b3, 0x0000, 0x0000, 0x0000, 0x93e0, 0xb0b7,
2993     0x3992, 0x0000, 0x0000, 0x0000, 0xedde, 0xc193, 0x3975, 0x0000, 0x0000, 0x0000,
2994     0xbbc0, 0xcf49, 0x3952, 0x0000, 0x0000, 0x0000, 0xbdf0, 0xd63c, 0x3937, 0x0000,
2995     0x0000, 0x0000, 0x1f34, 0x9f3a, 0x3918, 0x0000, 0x0000, 0x0000, 0x3f8e, 0xe579,
2996     0x38f9, 0x0000, 0x0000, 0x0000, 0x90c8, 0xc3f8, 0x38d9, 0x0000, 0x0000, 0x0000,
2997     0x48c0, 0xf8f8, 0x38b7, 0x0000, 0x0000, 0x0000, 0xed56, 0xafa6, 0x389c, 0x0000,
2998     0x0000, 0x0000, 0x8218, 0xb969, 0x387d, 0x0000, 0x0000, 0x0000, 0x1852, 0xec57,
2999     0x385e, 0x0000, 0x0000, 0x0000, 0x670c, 0xd674, 0x383e, 0x0000, 0x0000, 0x0000,
3000     0xad40, 0xc2c4, 0x3820, 0x0000, 0x0000, 0x0000, 0x2e80, 0xa696, 0x3801, 0x0000,
3001     0x0000, 0x0000, 0xd800, 0xc467, 0x37dc, 0x0000, 0x0000, 0x0000, 0x3c72, 0xc5ae,
3002     0x37c3, 0x0000, 0x0000, 0x0000, 0xb006, 0xac69, 0x37a4, 0x0000, 0x0000, 0x0000,
3003     0x34a0, 0x8cdf, 0x3782, 0x0000, 0x0000, 0x0000, 0x9ed2, 0xd25e, 0x3766, 0x0000,
3004     0x0000, 0x0000, 0x6fec, 0xaaaa, 0x3747, 0x0000, 0x0000, 0x0000, 0x6040, 0xfb5c,
3005     0x3726, 0x0000, 0x0000, 0x0000, 0x764c, 0xa3fc, 0x3708, 0x0000, 0x0000, 0x0000,
3006     0xb254, 0x954e, 0x36e9, 0x0000, 0x0000, 0x0000, 0x3e1c, 0xf5dc, 0x36ca, 0x0000,
3007     0x0000, 0x0000, 0x7b06, 0xc635, 0x36ac, 0x0000, 0x0000, 0x0000, 0xa8ba, 0xd738,
3008     0x368d, 0x0000, 0x0000, 0x0000, 0x06cc, 0xb24e, 0x366d, 0x0000, 0x0000, 0x0000,
3009     0x7108, 0xac76, 0x364f, 0x0000, 0x0000, 0x0000, 0x2324, 0xa7cb, 0x3630, 0x0000,
3010     0x0000, 0x0000, 0xac40, 0xef15, 0x360f, 0x0000, 0x0000, 0x0000, 0xae46, 0xd516,
3011     0x35f2, 0x0000, 0x0000, 0x0000, 0x615e, 0xe003, 0x35d3, 0x0000, 0x0000, 0x0000,
3012     0x0cf0, 0xefe7, 0x35b1, 0x0000, 0x0000, 0x0000, 0xfb50, 0xf98c, 0x3595, 0x0000,
3013     0x0000, 0x0000, 0x0abc, 0xf333, 0x3575, 0x0000, 0x0000, 0x0000, 0xdd60, 0xca3f,
3014     0x3555, 0x0000, 0x0000, 0x0000, 0x7eb6, 0xd87f, 0x3538, 0x0000, 0x0000, 0x0000,
3015     0x44f4, 0xb291, 0x3519, 0x0000, 0x0000, 0x0000, 0xff80, 0xc982, 0x34f6, 0x0000,
3016     0x0000, 0x0000, 0x9de0, 0xd9b8, 0x34db, 0x0000, 0x0000, 0x0000, 0xcd42, 0x9366,
3017     0x34bc, 0x0000, 0x0000, 0x0000, 0xbef0, 0xfaee, 0x349d, 0x0000, 0x0000, 0x0000,
3018     0xdac4, 0xb6f1, 0x347d, 0x0000, 0x0000, 0x0000, 0xf140, 0x94de, 0x345d, 0x0000,
3019     0x0000, 0x0000, 0xa218, 0x8b4b, 0x343e, 0x0000, 0x0000, 0x0000, 0x6380, 0xa135,
3020     0x341e, 0x0000, 0x0000, 0x0000, 0xb184, 0x8cb2, 0x3402, 0x0000, 0x0000, 0x0000,
3021     0x196e, 0xdc61, 0x33e3, 0x0000, 0x0000, 0x0000, 0x0c00, 0xde05, 0x33c4, 0x0000,
3022     0x0000, 0x0000, 0xef9a, 0xbd38, 0x33a5, 0x0000, 0x0000, 0x0000, 0xc1a0, 0xdf00,
3023     0x3385, 0x0000, 0x0000, 0x0000, 0x1090, 0x9973, 0x3365, 0x0000, 0x0000, 0x0000,
3024     0x4882, 0x8301, 0x3348, 0x0000, 0x0000, 0x0000, 0x7abe, 0xadc7, 0x3329, 0x0000,
3025     0x0000, 0x0000, 0x7cba, 0xec2b, 0x330a, 0x0000, 0x0000, 0x0000, 0xa520, 0x8f21,
3026     0x32e9, 0x0000, 0x0000, 0x0000, 0x710c, 0x8d36, 0x32cc, 0x0000, 0x0000, 0x0000,
3027     0x5212, 0xc6ed, 0x32ad, 0x0000, 0x0000, 0x0000, 0x7308, 0xfd76, 0x328d, 0x0000,
3028     0x0000, 0x0000, 0x5014, 0xd548, 0x326f, 0x0000, 0x0000, 0x0000, 0xd3f2, 0xb499,
3029     0x3250, 0x0000, 0x0000, 0x0000, 0x7f74, 0xa606, 0x3230, 0x0000, 0x0000, 0x0000,
3030     0xf0a8, 0xd720, 0x3212, 0x0000, 0x0000, 0x0000, 0x185c, 0xe20f, 0x31f2, 0x0000,
3031     0x0000, 0x0000, 0xa5a8, 0x8738, 0x31d4, 0x0000, 0x0000, 0x0000, 0xdd74, 0xcafb,
3032     0x31b4, 0x0000, 0x0000, 0x0000, 0x98b6, 0xbd8e, 0x3196, 0x0000, 0x0000, 0x0000,
3033     0xe9de, 0x977f, 0x3177, 0x0000, 0x0000, 0x0000, 0x67c0, 0x818d, 0x3158, 0x0000,
3034     0x0000, 0x0000, 0xe52a, 0x9322, 0x3139, 0x0000, 0x0000, 0x0000, 0xe568, 0x9b6c,
3035     0x3119, 0x0000, 0x0000, 0x0000, 0x2358, 0xaa0a, 0x30fa, 0x0000, 0x0000, 0x0000,
3036     0xe480, 0xe13b, 0x30d9, 0x0000, 0x0000, 0x0000, 0x3024, 0x90a1, 0x30bd, 0x0000,
3037     0x0000, 0x0000, 0x9620, 0xda30, 0x309d, 0x0000, 0x0000, 0x0000, 0x898a, 0xb388,
3038     0x307f, 0x0000, 0x0000, 0x0000, 0xb24c, 0xc891, 0x3060, 0x0000, 0x0000, 0x0000,
3039     0x8056, 0xf98b, 0x3041, 0x0000, 0x0000, 0x0000, 0x72a4, 0xa1ea, 0x3021, 0x0000,
3040     0x0000, 0x0000, 0x6af8, 0x9488, 0x3001, 0x0000, 0x0000, 0x0000, 0xe00c, 0xdfcb,
3041     0x2fe4, 0x0000, 0x0000, 0x0000, 0xeeec, 0xc941, 0x2fc4, 0x0000, 0x0000, 0x0000,
3042     0x53e0, 0xe70f, 0x2fa4, 0x0000, 0x0000, 0x0000, 0x8f60, 0x9c07, 0x2f85, 0x0000,
3043     0x0000, 0x0000, 0xb328, 0xc3e7, 0x2f68, 0x0000, 0x0000, 0x0000, 0x9404, 0xf8c7,
3044     0x2f48, 0x0000, 0x0000, 0x0000, 0x38e0, 0xc99f, 0x2f29, 0x0000, 0x0000, 0x0000,
3045     0x9778, 0xd984, 0x2f09, 0x0000, 0x0000, 0x0000, 0xe700, 0xd142, 0x2eea, 0x0000,
3046     0x0000, 0x0000, 0xd904, 0x9443, 0x2ecd, 0x0000, 0x0000, 0x0000, 0xd4ba, 0xae7e,
3047     0x2eae, 0x0000, 0x0000, 0x0000, 0x8e5e, 0x8524, 0x2e8f, 0x0000, 0x0000, 0x0000,
3048     0xb550, 0xc9ed, 0x2e6e, 0x0000, 0x0000, 0x0000, 0x53b8, 0x8648, 0x2e51, 0x0000,
3049     0x0000, 0x0000, 0xdae4, 0x87f9, 0x2e32, 0x0000, 0x0000, 0x0000, 0x2942, 0xd966,
3050     0x2e13, 0x0000, 0x0000, 0x0000, 0x4f28, 0xcf3c, 0x2df3, 0x0000, 0x0000, 0x0000,
3051     0xfa40, 0xc4ef, 0x2dd1, 0x0000, 0x0000, 0x0000, 0x4424, 0xbca7, 0x2db5, 0x0000,
3052     0x0000, 0x0000, 0x2e62, 0xcdc5, 0x2d97, 0x0000, 0x0000, 0x0000, 0xed88, 0x996b,
3053     0x2d78, 0x0000, 0x0000, 0x0000, 0x7c30, 0xd97d, 0x2d56, 0x0000, 0x0000, 0x0000,
3054     0xed26, 0xbf6e, 0x2d3a, 0x0000, 0x0000, 0x0000, 0x2918, 0x921b, 0x2d1a, 0x0000,
3055     0x0000, 0x0000, 0x4e24, 0xe84e, 0x2cfb, 0x0000, 0x0000, 0x0000, 0x6dc0, 0x92ec,
3056     0x2cdd, 0x0000, 0x0000, 0x0000, 0x4f2c, 0xacf8, 0x2cbd, 0x0000, 0x0000, 0x0000,
3057     0xc634, 0xf094, 0x2c9e, 0x0000, 0x0000, 0x0000, 0xdc70, 0xe5d3, 0x2c7e, 0x0000,
3058     0x0000, 0x0000, 0x2180, 0xa600, 0x2c5b, 0x0000, 0x0000, 0x0000, 0x8480, 0xd680,
3059     0x2c3c, 0x0000, 0x0000, 0x0000, 0x8b24, 0xd63b, 0x2c22, 0x0000, 0x0000, 0x0000,
3060     0x02e0, 0xaa47, 0x2c00, 0x0000, 0x0000, 0x0000, 0x9ad0, 0xee84, 0x2be3, 0x0000,
3061     0x0000, 0x0000, 0xf7dc, 0xf699, 0x2bc6, 0x0000, 0x0000, 0x0000, 0xddde, 0xe490,
3062     0x2ba7, 0x0000, 0x0000, 0x0000, 0x34a0, 0xb4fd, 0x2b85, 0x0000, 0x0000, 0x0000,
3063     0x91b4, 0x8ef6, 0x2b68, 0x0000, 0x0000, 0x0000, 0xa3e0, 0xa2a7, 0x2b47, 0x0000,
3064     0x0000, 0x0000, 0xcce4, 0x82b3, 0x2b2a, 0x0000, 0x0000, 0x0000, 0xe4be, 0x8207,
3065     0x2b0c, 0x0000, 0x0000, 0x0000, 0x1d92, 0xab43, 0x2aed, 0x0000, 0x0000, 0x0000,
3066     0xe818, 0xf9f6, 0x2acd, 0x0000, 0x0000, 0x0000, 0xff12, 0xba80, 0x2aaf, 0x0000,
3067     0x0000, 0x0000, 0x5254, 0x8529, 0x2a90, 0x0000, 0x0000, 0x0000, 0x1b88, 0xe032,
3068     0x2a71, 0x0000, 0x0000, 0x0000, 0x3248, 0xd86d, 0x2a50, 0x0000, 0x0000, 0x0000,
3069     0x3140, 0xc9d5, 0x2a2e, 0x0000, 0x0000, 0x0000, 0x14e6, 0xbd47, 0x2a14, 0x0000,
3070     0x0000, 0x0000, 0x5c10, 0xe544, 0x29f4, 0x0000, 0x0000, 0x0000, 0x9f50, 0x90b6,
3071     0x29d4, 0x0000, 0x0000, 0x0000, 0x9850, 0xab55, 0x29b6, 0x0000, 0x0000, 0x0000,
3072     0x2750, 0x9d07, 0x2998, 0x0000, 0x0000, 0x0000, 0x6700, 0x8bbb, 0x2973, 0x0000,
3073     0x0000, 0x0000, 0x5dba, 0xed31, 0x295a, 0x0000, 0x0000, 0x0000, 0x61dc, 0x85fe,
3074     0x293a, 0x0000, 0x0000, 0x0000, 0x9ba2, 0xd6b4, 0x291c, 0x0000, 0x0000, 0x0000,
3075     0x2d30, 0xe3a5, 0x28fb, 0x0000, 0x0000, 0x0000, 0x6630, 0xb566, 0x28dd, 0x0000,
3076     0x0000, 0x0000, 0x5ad4, 0xa829, 0x28bf, 0x0000, 0x0000, 0x0000, 0x89d8, 0xe290,
3077     0x28a0, 0x0000, 0x0000, 0x0000, 0x3916, 0xc428, 0x2881, 0x0000, 0x0000, 0x0000,
3078     0x0490, 0xbea4, 0x2860, 0x0000, 0x0000, 0x0000, 0xee06, 0x80ee, 0x2843, 0x0000,
3079     0x0000, 0x0000, 0xfc00, 0xf327, 0x2820, 0x0000, 0x0000, 0x0000, 0xea40, 0xa871,
3080     0x2800, 0x0000, 0x0000, 0x0000, 0x63d8, 0x9c26, 0x27e4, 0x0000, 0x0000, 0x0000,
3081     0x07ba, 0xc0c9, 0x27c7, 0x0000, 0x0000, 0x0000, 0x3fa2, 0x9797, 0x27a8, 0x0000,
3082     0x0000, 0x0000, 0x21c6, 0xfeca, 0x2789, 0x0000, 0x0000, 0x0000, 0xde40, 0x860d,
3083     0x2768, 0x0000, 0x0000, 0x0000, 0x9cc8, 0x98ce, 0x2749, 0x0000, 0x0000, 0x0000,
3084     0x3778, 0xa31c, 0x272a, 0x0000, 0x0000, 0x0000, 0xe778, 0xf6e2, 0x270b, 0x0000,
3085     0x0000, 0x0000, 0x59b8, 0xf841, 0x26ed, 0x0000, 0x0000, 0x0000, 0x02e0, 0xad04,
3086     0x26cd, 0x0000, 0x0000, 0x0000, 0x5a92, 0x9380, 0x26b0, 0x0000, 0x0000, 0x0000,
3087     0xc740, 0x8886, 0x268d, 0x0000, 0x0000, 0x0000, 0x0680, 0xfaf8, 0x266c, 0x0000,
3088     0x0000, 0x0000, 0xfb60, 0x897f, 0x2653, 0x0000, 0x0000, 0x0000, 0x8760, 0xf903,
3089     0x2634, 0x0000, 0x0000, 0x0000, 0xad2a, 0xc2c8, 0x2615, 0x0000, 0x0000, 0x0000,
3090     0x2d86, 0x8aef, 0x25f6, 0x0000, 0x0000, 0x0000, 0x1ef4, 0xe627, 0x25d6, 0x0000,
3091     0x0000, 0x0000, 0x09e4, 0x8020, 0x25b7, 0x0000, 0x0000, 0x0000, 0x7548, 0xd227,
3092     0x2598, 0x0000, 0x0000, 0x0000, 0x75dc, 0xfb5b, 0x2579, 0x0000, 0x0000, 0x0000,
3093     0xea84, 0xc8b6, 0x255a, 0x0000, 0x0000, 0x0000, 0xe4d0, 0x8145, 0x253b, 0x0000,
3094     0x0000, 0x0000, 0x3640, 0x9768, 0x251c, 0x0000, 0x0000, 0x0000, 0x246a, 0xccec,
3095     0x24fe, 0x0000, 0x0000, 0x0000, 0x51d0, 0xa075, 0x24dd, 0x0000, 0x0000, 0x0000,
3096     0x4638, 0xa385, 0x24bf, 0x0000, 0x0000, 0x0000, 0xd788, 0xd776, 0x24a1, 0x0000,
3097     0x0000, 0x0000, 0x1370, 0x8997, 0x2482, 0x0000, 0x0000, 0x0000, 0x1e88, 0x9b67,
3098     0x2462, 0x0000, 0x0000, 0x0000, 0x6c08, 0xd975, 0x2444, 0x0000, 0x0000, 0x0000,
3099     0xfdb0, 0xcfc0, 0x2422, 0x0000, 0x0000, 0x0000, 0x3100, 0xc026, 0x2406, 0x0000,
3100     0x0000, 0x0000, 0xc5b4, 0xae64, 0x23e6, 0x0000, 0x0000, 0x0000, 0x2280, 0xf687,
3101     0x23c3, 0x0000, 0x0000, 0x0000, 0x2de0, 0x9006, 0x23a9, 0x0000, 0x0000, 0x0000,
3102     0x24bc, 0xf631, 0x238a, 0x0000, 0x0000, 0x0000, 0xb8d4, 0xa975, 0x236b, 0x0000,
3103     0x0000, 0x0000, 0xd9a4, 0xb949, 0x234b, 0x0000, 0x0000, 0x0000, 0xb54e, 0xbd39,
3104     0x232d, 0x0000, 0x0000, 0x0000, 0x4aac, 0x9a52, 0x230e, 0x0000, 0x0000, 0x0000,
3105     0xbbbc, 0xd085, 0x22ef, 0x0000, 0x0000, 0x0000, 0xdf18, 0xc633, 0x22cf, 0x0000,
3106     0x0000, 0x0000, 0x16d0, 0xeca5, 0x22af, 0x0000, 0x0000, 0x0000, 0xf2a0, 0xdf6f,
3107     0x228e, 0x0000, 0x0000, 0x0000, 0x8c44, 0xe86b, 0x2272, 0x0000, 0x0000, 0x0000,
3108     0x35c0, 0xbbf4, 0x2253, 0x0000, 0x0000, 0x0000, 0x0c40, 0xdafb, 0x2230, 0x0000,
3109     0x0000, 0x0000, 0x92dc, 0x9935, 0x2216, 0x0000, 0x0000, 0x0000, 0x0ca0, 0xbda6,
3110     0x21f3, 0x0000, 0x0000, 0x0000, 0x5958, 0xa6fd, 0x21d6, 0x0000, 0x0000, 0x0000,
3111     0xa3dc, 0x9d7f, 0x21b9, 0x0000, 0x0000, 0x0000, 0x79dc, 0xfcb5, 0x2199, 0x0000,
3112     0x0000, 0x0000, 0xf264, 0xcebb, 0x217b, 0x0000, 0x0000, 0x0000, 0x0abe, 0x8308,
3113     0x215c, 0x0000, 0x0000, 0x0000, 0x30ae, 0xb463, 0x213d, 0x0000, 0x0000, 0x0000,
3114     0x6228, 0xb040, 0x211c, 0x0000, 0x0000, 0x0000, 0xc9b2, 0xf43b, 0x20ff, 0x0000,
3115     0x0000, 0x0000, 0x3d8e, 0xa4b3, 0x20e0, 0x0000, 0x0000, 0x0000, 0x84e6, 0x8dab,
3116     0x20c1, 0x0000, 0x0000, 0x0000, 0xa124, 0x9b74, 0x20a1, 0x0000, 0x0000, 0x0000,
3117     0xc276, 0xd497, 0x2083, 0x0000, 0x0000, 0x0000, 0x6354, 0xa466, 0x2063, 0x0000,
3118     0x0000, 0x0000, 0x8654, 0xaf0a, 0x2044, 0x0000, 0x0000, 0x0000, 0x1d20, 0xfa5c,
3119     0x2024, 0x0000, 0x0000, 0x0000, 0xbcd0, 0xf3f0, 0x2004, 0x0000, 0x0000, 0x0000,
3120     0xedf0, 0xf0b6, 0x1fe7, 0x0000, 0x0000, 0x0000, 0x45bc, 0x9182, 0x1fc9, 0x0000,
3121     0x0000, 0x0000, 0xe254, 0xdc85, 0x1faa, 0x0000, 0x0000, 0x0000, 0xb898, 0xe9b1,
3122     0x1f8a, 0x0000, 0x0000, 0x0000, 0x0ebe, 0xe6f0, 0x1f6c, 0x0000, 0x0000, 0x0000,
3123     0xa9b8, 0xf584, 0x1f4c, 0x0000, 0x0000, 0x0000, 0x12e8, 0xdf6b, 0x1f2e, 0x0000,
3124     0x0000, 0x0000, 0x9f9e, 0xcd55, 0x1f0f, 0x0000, 0x0000, 0x0000, 0x05a0, 0xec3a,
3125     0x1eef, 0x0000, 0x0000, 0x0000, 0xd8e0, 0x96f8, 0x1ed1, 0x0000, 0x0000, 0x0000,
3126     0x3bd4, 0xccc6, 0x1eb1, 0x0000, 0x0000, 0x0000, 0x4910, 0xb87b, 0x1e93, 0x0000,
3127     0x0000, 0x0000, 0xbefc, 0xd40b, 0x1e73, 0x0000, 0x0000, 0x0000, 0x317e, 0xa406,
3128     0x1e55, 0x0000, 0x0000, 0x0000, 0x6bb2, 0xc2b2, 0x1e36, 0x0000, 0x0000, 0x0000,
3129     0xb87e, 0xbb78, 0x1e17, 0x0000, 0x0000, 0x0000, 0xa03c, 0xdbbd, 0x1df7, 0x0000,
3130     0x0000, 0x0000, 0x5b6c, 0xe3c8, 0x1dd9, 0x0000, 0x0000, 0x0000, 0x8968, 0xca8e,
3131     0x1dba, 0x0000, 0x0000, 0x0000, 0xc024, 0xe6ab, 0x1d9a, 0x0000, 0x0000, 0x0000,
3132     0x4110, 0xd4eb, 0x1d7a, 0x0000, 0x0000, 0x0000, 0xa168, 0xbdb5, 0x1d5d, 0x0000,
3133     0x0000, 0x0000, 0x012e, 0xa5fa, 0x1d3e, 0x0000, 0x0000, 0x0000, 0x6838, 0x9c1f,
3134     0x1d1e, 0x0000, 0x0000, 0x0000, 0xa158, 0xaa76, 0x1d00, 0x0000, 0x0000, 0x0000,
3135     0x090a, 0xbd95, 0x1ce1, 0x0000, 0x0000, 0x0000, 0xf73e, 0x8b6d, 0x1cc2, 0x0000,
3136     0x0000, 0x0000, 0x5fda, 0xbcbf, 0x1ca3, 0x0000, 0x0000, 0x0000, 0xdbe8, 0xb89f,
3137     0x1c84, 0x0000, 0x0000, 0x0000, 0x6e4c, 0x96c7, 0x1c64, 0x0000, 0x0000, 0x0000,
3138     0x19c2, 0xf2a4, 0x1c46, 0x0000, 0x0000, 0x0000, 0xb800, 0xf855, 0x1c1e, 0x0000,
3139     0x0000, 0x0000, 0x87fc, 0x85ff, 0x1c08, 0x0000, 0x0000, 0x0000, 0x1418, 0x839f,
3140     0x1be9, 0x0000, 0x0000, 0x0000, 0x6186, 0xd9d8, 0x1bca, 0x0000, 0x0000, 0x0000,
3141     0xf500, 0xabaa, 0x1ba6, 0x0000, 0x0000, 0x0000, 0x7b36, 0xdafe, 0x1b8c, 0x0000,
3142     0x0000, 0x0000, 0xf394, 0xe6d8, 0x1b6c, 0x0000, 0x0000, 0x0000, 0x6efc, 0x9e55,
3143     0x1b4e, 0x0000, 0x0000, 0x0000, 0x5e10, 0xc523, 0x1b2e, 0x0000, 0x0000, 0x0000,
3144     0x8210, 0xb6f9, 0x1b0d, 0x0000, 0x0000, 0x0000, 0x9ab0, 0x96e3, 0x1af1, 0x0000,
3145     0x0000, 0x0000, 0x3864, 0x92e7, 0x1ad1, 0x0000, 0x0000, 0x0000, 0x9878, 0xdc65,
3146     0x1ab1, 0x0000, 0x0000, 0x0000, 0xfa20, 0xd6cb, 0x1a94, 0x0000, 0x0000, 0x0000,
3147     0x6c00, 0xa4e4, 0x1a70, 0x0000, 0x0000, 0x0000, 0xab40, 0xb41b, 0x1a53, 0x0000,
3148     0x0000, 0x0000, 0x43a4, 0x8ede, 0x1a37, 0x0000, 0x0000, 0x0000, 0x22e0, 0x9314,
3149     0x1a15, 0x0000, 0x0000, 0x0000, 0x6170, 0xb949, 0x19f8, 0x0000, 0x0000, 0x0000,
3150     0x6b00, 0xe056, 0x19d8, 0x0000, 0x0000, 0x0000, 0x9ba8, 0xa94c, 0x19b9, 0x0000,
3151     0x0000, 0x0000, 0xfaa0, 0xaa16, 0x199b, 0x0000, 0x0000, 0x0000, 0x899a, 0xf627,
3152     0x197d, 0x0000, 0x0000, 0x0000, 0x9f20, 0xfb70, 0x195d, 0x0000, 0x0000, 0x0000,
3153     0xa4b8, 0xc176, 0x193e, 0x0000, 0x0000, 0x0000, 0xb21c, 0x85c3, 0x1920, 0x0000,
3154     0x0000, 0x0000, 0x50d2, 0x9b19, 0x1901, 0x0000, 0x0000, 0x0000, 0xd4b0, 0xb708,
3155     0x18e0, 0x0000, 0x0000, 0x0000, 0xfb88, 0xf510, 0x18c1, 0x0000, 0x0000, 0x0000,
3156     0x31ec, 0xdc8d, 0x18a3, 0x0000, 0x0000, 0x0000, 0x3c00, 0xbff9, 0x1885, 0x0000,
3157     0x0000, 0x0000, 0x5020, 0xc30b, 0x1862, 0x0000, 0x0000, 0x0000, 0xd4f0, 0xda0c,
3158     0x1844, 0x0000, 0x0000, 0x0000, 0x20d2, 0x99a5, 0x1828, 0x0000, 0x0000, 0x0000,
3159     0x852e, 0xd159, 0x1809, 0x0000, 0x0000, 0x0000, 0x7cd8, 0x97a1, 0x17e9, 0x0000,
3160     0x0000, 0x0000, 0x423a, 0x997b, 0x17cb, 0x0000, 0x0000, 0x0000, 0xc1c0, 0xbe7d,
3161     0x17a8, 0x0000, 0x0000, 0x0000, 0xe8bc, 0xdcdd, 0x178d, 0x0000, 0x0000, 0x0000,
3162     0x8b28, 0xae06, 0x176e, 0x0000, 0x0000, 0x0000, 0x102e, 0xb8d4, 0x174f, 0x0000,
3163     0x0000, 0x0000, 0xaa00, 0xaa5c, 0x172f, 0x0000, 0x0000, 0x0000, 0x51f0, 0x9fc0,
3164     0x170e, 0x0000, 0x0000, 0x0000, 0xf858, 0xe181, 0x16f2, 0x0000, 0x0000, 0x0000,
3165     0x91a8, 0x8162, 0x16d3, 0x0000, 0x0000, 0x0000, 0x5f40, 0xcb6f, 0x16b1, 0x0000,
3166     0x0000, 0x0000, 0xbb50, 0xe55f, 0x1693, 0x0000, 0x0000, 0x0000, 0xacd2, 0xd895,
3167     0x1676, 0x0000, 0x0000, 0x0000, 0xef30, 0x97bf, 0x1654, 0x0000, 0x0000, 0x0000,
3168     0xf700, 0xb3d7, 0x1633, 0x0000, 0x0000, 0x0000, 0x3454, 0xa7b5, 0x1619, 0x0000,
3169     0x0000, 0x0000, 0x6b00, 0xa929, 0x15f6, 0x0000, 0x0000, 0x0000, 0x9f04, 0x89f7,
3170     0x15db, 0x0000, 0x0000, 0x0000, 0xad78, 0xd985, 0x15bc, 0x0000, 0x0000, 0x0000,
3171     0xa46a, 0xae3f, 0x159d, 0x0000, 0x0000, 0x0000, 0x63a0, 0xd0da, 0x157c, 0x0000,
3172     0x0000, 0x0000, 0x5e90, 0x817d, 0x155e, 0x0000, 0x0000, 0x0000, 0x1494, 0xb13f,
3173     0x1540, 0x0000, 0x0000, 0x0000, 0x0090, 0x9c40, 0x1521, 0x0000, 0x0000, 0x0000,
3174     0xdd70, 0xcc86, 0x1500, 0x0000, 0x0000, 0x0000, 0x64f8, 0xdb6f, 0x14e1, 0x0000,
3175     0x0000, 0x0000, 0xe22c, 0xac17, 0x14c3, 0x0000, 0x0000, 0x0000, 0x60e0, 0xa9ad,
3176     0x14a3, 0x0000, 0x0000, 0x0000, 0x4640, 0xd658, 0x1481, 0x0000, 0x0000, 0x0000,
3177     0x6490, 0xa181, 0x1467, 0x0000, 0x0000, 0x0000, 0x1df4, 0xaaa2, 0x1447, 0x0000,
3178     0x0000, 0x0000, 0xb94a, 0x8f61, 0x1429, 0x0000, 0x0000, 0x0000, 0x5198, 0x9d83,
3179     0x1409, 0x0000, 0x0000, 0x0000, 0x0f7a, 0xa818, 0x13eb, 0x0000, 0x0000, 0x0000,
3180     0xc45e, 0xc06c, 0x13cc, 0x0000, 0x0000, 0x0000, 0x4ec0, 0xfa29, 0x13a8, 0x0000,
3181     0x0000, 0x0000, 0x6418, 0x8cad, 0x138c, 0x0000, 0x0000, 0x0000, 0xbcc8, 0xe7d1,
3182     0x136f, 0x0000, 0x0000, 0x0000, 0xc934, 0xf9b0, 0x134f, 0x0000, 0x0000, 0x0000,
3183     0x6ce0, 0x98df, 0x1331, 0x0000, 0x0000, 0x0000, 0x3516, 0xe5e9, 0x1312, 0x0000,
3184     0x0000, 0x0000, 0xc6c0, 0xef8b, 0x12ef, 0x0000, 0x0000, 0x0000, 0xaf02, 0x913d,
3185     0x12d4, 0x0000, 0x0000, 0x0000, 0xd230, 0xe1d5, 0x12b5, 0x0000, 0x0000, 0x0000,
3186     0xfba8, 0xc232, 0x1295, 0x0000, 0x0000, 0x0000, 0x7ba4, 0xabeb, 0x1277, 0x0000,
3187     0x0000, 0x0000, 0x6e5c, 0xc692, 0x1258, 0x0000, 0x0000, 0x0000, 0x76a2, 0x9756,
3188     0x1239, 0x0000, 0x0000, 0x0000, 0xe180, 0xe423, 0x1214, 0x0000, 0x0000, 0x0000,
3189     0x8c3c, 0x90f8, 0x11fb, 0x0000, 0x0000, 0x0000, 0x9f3c, 0x9fd2, 0x11dc, 0x0000,
3190     0x0000, 0x0000, 0x53e0, 0xb73e, 0x11bd, 0x0000, 0x0000, 0x0000, 0x45be, 0x88d6,
3191     0x119e, 0x0000, 0x0000, 0x0000, 0x111a, 0x8bc0, 0x117f, 0x0000, 0x0000, 0x0000,
3192     0xe26a, 0xd7ff, 0x1160, 0x0000, 0x0000, 0x0000, 0xfb60, 0xdd8d, 0x113f, 0x0000,
3193     0x0000, 0x0000, 0x9370, 0xc108, 0x1120, 0x0000, 0x0000, 0x0000, 0x9654, 0x8baf,
3194     0x1103, 0x0000, 0x0000, 0x0000, 0xd6ec, 0xd6b9, 0x10e4, 0x0000, 0x0000, 0x0000,
3195     0x23e4, 0xd7b7, 0x10c4, 0x0000, 0x0000, 0x0000, 0x1aa6, 0xa847, 0x10a6, 0x0000,
3196     0x0000, 0x0000, 0xbee6, 0x9fef, 0x1087, 0x0000, 0x0000, 0x0000, 0x26d0, 0xa6eb,
3197     0x1066, 0x0000, 0x0000, 0x0000, 0x5b86, 0xa880, 0x1049, 0x0000, 0x0000, 0x0000,
3198     0x125c, 0xd971, 0x1029, 0x0000, 0x0000, 0x0000, 0x1f78, 0x9d18, 0x100a, 0x0000,
3199     0x0000, 0x0000, 0x0e84, 0xb15b, 0x0feb, 0x0000, 0x0000, 0x0000, 0xd0c0, 0xc150,
3200     0x0fcc, 0x0000, 0x0000, 0x0000, 0xa330, 0xc40c, 0x0fad, 0x0000, 0x0000, 0x0000,
3201     0x5202, 0xfc2c, 0x0f8f, 0x0000, 0x0000, 0x0000, 0x3f7c, 0xecf5, 0x0f6f, 0x0000,
3202     0x0000, 0x0000, 0xef44, 0xfdfd, 0x0f50, 0x0000, 0x0000, 0x0000, 0x3f6c, 0xab1b,
3203     0x0f31, 0x0000, 0x0000, 0x0000, 0xf658, 0x89ec, 0x0f11, 0x0000, 0x0000, 0x0000,
3204     0xbfc8, 0x9ba8, 0x0ef4, 0x0000, 0x0000, 0x0000, 0x3d40, 0xbe21, 0x0ed5, 0x0000,
3205     0x0000, 0x0000, 0xbbc4, 0xc70d, 0x0eb6, 0x0000, 0x0000, 0x0000, 0x5158, 0xdb16,
3206     0x0e96, 0x0000, 0x0000, 0x0000, 0xb5a8, 0xa8d8, 0x0e78, 0x0000, 0x0000, 0x0000,
3207     0xcccc, 0xb40e, 0x0e58, 0x0000, 0x0000, 0x0000, 0x448c, 0xcb62, 0x0e3a, 0x0000,
3208     0x0000, 0x0000, 0xf12a, 0x8aed, 0x0e1b, 0x0000, 0x0000, 0x0000, 0x79d0, 0xc59c,
3209     0x0dfb, 0x0000, 0x0000, 0x0000, 0x06b4, 0xcdc9, 0x0ddd, 0x0000, 0x0000, 0x0000,
3210     0xae70, 0xa979, 0x0dbe, 0x0000, 0x0000, 0x0000, 0x317c, 0xa8fb, 0x0d9e, 0x0000,
3211     0x0000, 0x0000, 0x5fe0, 0x8a50, 0x0d7d, 0x0000, 0x0000, 0x0000, 0x70b6, 0xfdfa,
3212     0x0d61, 0x0000, 0x0000, 0x0000, 0x1640, 0x9dc7, 0x0d41, 0x0000, 0x0000, 0x0000,
3213     0x9a9c, 0xdc50, 0x0d23, 0x0000, 0x0000, 0x0000, 0x4fcc, 0x9a9b, 0x0d04, 0x0000,
3214     0x0000, 0x0000, 0x7e48, 0x8f77, 0x0ce5, 0x0000, 0x0000, 0x0000, 0x84e4, 0xd4b9,
3215     0x0cc6, 0x0000, 0x0000, 0x0000, 0x84e0, 0xbd10, 0x0ca6, 0x0000, 0x0000, 0x0000,
3216     0x1b0a, 0xc8d9, 0x0c88, 0x0000, 0x0000, 0x0000, 0x6a48, 0xfc81, 0x0c68, 0x0000,
3217     0x0000, 0x0000, 0x070a, 0xbef6, 0x0c4a, 0x0000, 0x0000, 0x0000, 0x8a70, 0xf096,
3218     0x0c2b, 0x0000, 0x0000, 0x0000, 0xecc2, 0xc994, 0x0c0c, 0x0000, 0x0000, 0x0000,
3219     0x1540, 0x9537, 0x0bea, 0x0000, 0x0000, 0x0000, 0x1b02, 0xab5b, 0x0bce, 0x0000,
3220     0x0000, 0x0000, 0x5dc0, 0xb0c8, 0x0bad, 0x0000, 0x0000, 0x0000, 0xc928, 0xe034,
3221     0x0b8f, 0x0000, 0x0000, 0x0000, 0x2d12, 0xb4b0, 0x0b71, 0x0000, 0x0000, 0x0000,
3222     0x8fc2, 0xbb94, 0x0b52, 0x0000, 0x0000, 0x0000, 0xe236, 0xe22f, 0x0b33, 0x0000,
3223     0x0000, 0x0000, 0xb97c, 0xbe9e, 0x0b13, 0x0000, 0x0000, 0x0000, 0xe1a6, 0xe16d,
3224     0x0af5, 0x0000, 0x0000, 0x0000, 0xd330, 0xbaf0, 0x0ad6, 0x0000, 0x0000, 0x0000,
3225     0xc0bc, 0xbbd0, 0x0ab7, 0x0000, 0x0000, 0x0000, 0x8e66, 0xdd9b, 0x0a98, 0x0000,
3226     0x0000, 0x0000, 0xc95c, 0xf799, 0x0a79, 0x0000, 0x0000, 0x0000, 0xdac0, 0xbe4c,
3227     0x0a55, 0x0000, 0x0000, 0x0000, 0xafc0, 0xc378, 0x0a37, 0x0000, 0x0000, 0x0000,
3228     0xa880, 0xe341, 0x0a19, 0x0000, 0x0000, 0x0000, 0xc242, 0x81f6, 0x09fd, 0x0000,
3229     0x0000, 0x0000, 0x7470, 0xc777, 0x09de, 0x0000, 0x0000, 0x0000, 0x62bc, 0xb684,
3230     0x09be, 0x0000, 0x0000, 0x0000, 0x43ac, 0x8c58, 0x099f, 0x0000, 0x0000, 0x0000,
3231     0xcc3c, 0xf9ac, 0x0981, 0x0000, 0x0000, 0x0000, 0x1526, 0xb670, 0x0962, 0x0000,
3232     0x0000, 0x0000, 0xc9fe, 0xdf50, 0x0943, 0x0000, 0x0000, 0x0000, 0x6ae6, 0xc065,
3233     0x0924, 0x0000, 0x0000, 0x0000, 0xb114, 0xcf29, 0x0905, 0x0000, 0x0000, 0x0000,
3234     0xd388, 0x922a, 0x08e4, 0x0000, 0x0000, 0x0000, 0xcf54, 0xb926, 0x08c7, 0x0000,
3235     0x0000, 0x0000, 0x3826, 0xe855, 0x08a8, 0x0000, 0x0000, 0x0000, 0xe7c8, 0x829b,
3236     0x0888, 0x0000, 0x0000, 0x0000, 0x546c, 0xa903, 0x086a, 0x0000, 0x0000, 0x0000,
3237     0x8768, 0x99cc, 0x0849, 0x0000, 0x0000, 0x0000, 0x00ac, 0xf529, 0x082b, 0x0000,
3238     0x0000, 0x0000, 0x2658, 0x9f0b, 0x080c, 0x0000, 0x0000, 0x0000, 0xfe5c, 0x9e21,
3239     0x07ee, 0x0000, 0x0000, 0x0000, 0x6da2, 0x9910, 0x07cf, 0x0000, 0x0000, 0x0000,
3240     0x9220, 0xf9b3, 0x07b0, 0x0000, 0x0000, 0x0000, 0x3d90, 0xa541, 0x0791, 0x0000,
3241     0x0000, 0x0000, 0x6e4c, 0xe7cc, 0x0771, 0x0000, 0x0000, 0x0000, 0xa8fa, 0xe80a,
3242     0x0753, 0x0000, 0x0000, 0x0000, 0x4e14, 0xc3a7, 0x0734, 0x0000, 0x0000, 0x0000,
3243     0xf7e0, 0xbad9, 0x0712, 0x0000, 0x0000, 0x0000, 0xfea0, 0xeff2, 0x06f5, 0x0000,
3244     0x0000, 0x0000, 0xcef6, 0xbd48, 0x06d7, 0x0000, 0x0000, 0x0000, 0x7544, 0xf559,
3245     0x06b7, 0x0000, 0x0000, 0x0000, 0x2388, 0xf655, 0x0698, 0x0000, 0x0000, 0x0000,
3246     0xe900, 0xad56, 0x0676, 0x0000, 0x0000, 0x0000, 0x2cc0, 0x8437, 0x0659, 0x0000,
3247     0x0000, 0x0000, 0x3068, 0xc544, 0x063b, 0x0000, 0x0000, 0x0000, 0xdc70, 0xe73c,
3248     0x061b, 0x0000, 0x0000, 0x0000, 0xee50, 0x9d49, 0x05fc, 0x0000, 0x0000, 0x0000,
3249     0x93d2, 0x81f6, 0x05df, 0x0000, 0x0000, 0x0000, 0x941c, 0xadff, 0x05bf, 0x0000,
3250     0x0000, 0x0000, 0x2ce2, 0x8e45, 0x05a1, 0x0000, 0x0000, 0x0000, 0x4a60, 0x95fd,
3251     0x0581, 0x0000, 0x0000, 0x0000, 0x79f8, 0xb83a, 0x0563, 0x0000, 0x0000, 0x0000,
3252     0xcb58, 0xa1f5, 0x0543, 0x0000, 0x0000, 0x0000, 0x2a3a, 0xdc36, 0x0525, 0x0000,
3253     0x0000, 0x0000, 0x14ee, 0x890e, 0x0506, 0x0000, 0x0000, 0x0000, 0x8f20, 0xc432,
3254     0x04e3, 0x0000, 0x0000, 0x0000, 0x8440, 0xb21d, 0x04c6, 0x0000, 0x0000, 0x0000,
3255     0x5430, 0xf698, 0x04a7, 0x0000, 0x0000, 0x0000, 0x04ae, 0x8b20, 0x048a, 0x0000,
3256     0x0000, 0x0000, 0x04d0, 0xe872, 0x046b, 0x0000, 0x0000, 0x0000, 0xc78e, 0x8893,
3257     0x044c, 0x0000, 0x0000, 0x0000, 0x0f78, 0x9895, 0x042b, 0x0000, 0x0000, 0x0000,
3258     0x11d4, 0xdf2e, 0x040d, 0x0000, 0x0000, 0x0000, 0xe84c, 0x89d5, 0x03ef, 0x0000,
3259     0x0000, 0x0000, 0xf7be, 0x8a67, 0x03d0, 0x0000, 0x0000, 0x0000, 0x95d0, 0xc906,
3260     0x03b1, 0x0000, 0x0000, 0x0000, 0x64ce, 0xd96c, 0x0392, 0x0000, 0x0000, 0x0000,
3261     0x97ba, 0xa16f, 0x0373, 0x0000, 0x0000, 0x0000, 0x463c, 0xc51a, 0x0354, 0x0000,
3262     0x0000, 0x0000, 0xef0a, 0xe93e, 0x0335, 0x0000, 0x0000, 0x0000, 0x526a, 0xa466,
3263     0x0316, 0x0000, 0x0000, 0x0000, 0x4140, 0xa94d, 0x02f5, 0x0000, 0x0000, 0x0000,
3264     0xb4ec, 0xce68, 0x02d8, 0x0000, 0x0000, 0x0000, 0x4fa2, 0x8490, 0x02b9, 0x0000,
3265     0x0000, 0x0000, 0x4e60, 0xca98, 0x0298, 0x0000, 0x0000, 0x0000, 0x08dc, 0xe09c,
3266     0x027a, 0x0000, 0x0000, 0x0000, 0x2b90, 0xc7e3, 0x025c, 0x0000, 0x0000, 0x0000,
3267     0x5a7c, 0xf8ef, 0x023c, 0x0000, 0x0000, 0x0000, 0x5022, 0x9d58, 0x021e, 0x0000,
3268     0x0000, 0x0000, 0x553a, 0xe242, 0x01ff, 0x0000, 0x0000, 0x0000, 0x7e6e, 0xb54d,
3269     0x01e0, 0x0000, 0x0000, 0x0000, 0xd2d4, 0xa88c, 0x01c1, 0x0000, 0x0000, 0x0000,
3270     0x75b6, 0xfe6d, 0x01a2, 0x0000, 0x0000, 0x0000, 0x3bb2, 0xf04c, 0x0183, 0x0000,
3271     0x0000, 0x0000, 0xc2d0, 0xc046, 0x0163, 0x0000, 0x0000, 0x0000, 0x250c, 0xf9d6,
3272     0x0145, 0x0000, 0x0000, 0x0000, 0xb7b4, 0x8a0d, 0x0126, 0x0000, 0x0000, 0x0000,
3273     0x1a72, 0xe4f5, 0x0107, 0x0000, 0x0000, 0x0000, 0x825c, 0xa9b8, 0x00e8, 0x0000,
3274     0x0000, 0x0000, 0x6c90, 0xc9ad, 0x00c6, 0x0000, 0x0000, 0x0000, 0x4d00, 0xd1bb,
3275     0x00aa, 0x0000, 0x0000, 0x0000, 0xa4a0, 0xee01, 0x0087, 0x0000, 0x0000, 0x0000,
3276     0x89a8, 0xbe9f, 0x006b, 0x0000, 0x0000, 0x0000, 0x038e, 0xc80c, 0x004d, 0x0000,
3277     0x0000, 0x0000, 0xfe26, 0x8384, 0x002e, 0x0000, 0x0000, 0x0000, 0xcd90, 0xca57,
3278     0x000e, 0x0000
3279 };
3280 
3281 void MacroAssembler::libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
3282   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;
3283   Label B1_13, B1_14, B1_15;
3284 
3285   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
3286 
3287   address zero_none = (address)_zero_none;
3288   address _4onpi_d = (address)__4onpi_d;
3289   address TWO_32H = (address)_TWO_32H;
3290   address pi04_3d = (address)_pi04_3d;
3291   address pi04_5d = (address)_pi04_5d;
3292   address SCALE = (address)_SCALE;
3293   address zeros = (address)_zeros;
3294   address pi04_2d = (address)_pi04_2d;
3295   address TWO_12H = (address)_TWO_12H;
3296   address _4onpi_31l = (address)__4onpi_31l;
3297 
3298   bind(B1_1);
3299   push(ebp);
3300   movl(ebp, esp);
3301   andl(esp, -16);
3302   push(esi);
3303   push(edi);
3304   push(ebx);
3305   subl(esp, 20);
3306   movzwl(ebx, Address(ebp, 16));
3307   andl(ebx, 32767);
3308   movl(eax, Address(ebp, 20));
3309   cmpl(ebx, 16413);
3310   movl(esi, Address(ebp, 24));
3311   movl(Address(esp, 4), eax);
3312   jcc(Assembler::greaterEqual, B1_8);
3313 
3314   bind(B1_2);
3315   fld_x(Address(ebp, 8));
3316   fld_d(ExternalAddress(_4onpi_d));    //0x6dc9c883UL, 0x3ff45f30UL
3317   fmul(1);
3318   fstp_x(Address(esp, 8));
3319   movzwl(ecx, Address(esp, 16));
3320   negl(ecx);
3321   addl(ecx, 30);
3322   movl(eax, Address(esp, 12));
3323   shrl(eax);
3324   cmpl(Address(esp, 4), 0);
3325   jcc(Assembler::notEqual, B1_4);
3326 
3327   bind(B1_3);
3328   lea(ecx, Address(eax, 1));
3329   andl(ecx, -2);
3330   jmp(B1_5);
3331 
3332   bind(B1_4);
3333   movl(ecx, eax);
3334   addl(eax, Address(esp, 4));
3335   movl(edx, eax);
3336   andl(edx, 1);
3337   addl(ecx, edx);
3338 
3339   bind(B1_5);
3340   fld_d(ExternalAddress(TWO_32H));    //0x00000000UL, 0x41f80000UL
3341   cmpl(ebx, 16400);
3342   movl(Address(esp, 0), ecx);
3343   fild_s(Address(esp, 0));
3344   jcc(Assembler::greaterEqual, B1_7);
3345 
3346   bind(B1_6);
3347   fld_d(ExternalAddress(pi04_3d));    //0x54442d00UL, 0x3fe921fbUL
3348   fmul(1);
3349   fsubp(3);
3350   fxch(1);
3351   fmul(2);
3352   fld_s(2);
3353   fadd(1);
3354   fsubrp(1);
3355   fld_s(0);
3356   fxch(1);
3357   fsuba(3);
3358   fld_d(ExternalAddress(8 + pi04_3d));    //0x98cc5180UL, 0x3ce84698UL
3359   fmul(3);
3360   fsuba(2);
3361   fxch(1);
3362   fsub(2);
3363   fsubrp(1);
3364   faddp(3);
3365   fld_d(ExternalAddress(16 + pi04_3d));    //0xcbb5bf6cUL, 0xb9dfc8f8UL
3366   fmulp(2);
3367   fld_s(1);
3368   fsubr(1);
3369   fsuba(1);
3370   fxch(2);
3371   fsubp(1);
3372   faddp(2);
3373   fxch(1);
3374   jmp(B1_15);
3375 
3376   bind(B1_7);
3377   fld_d(ExternalAddress(pi04_5d));    //0x54400000UL, 0x3fe921fbUL
3378   fmul(1);
3379   fsubp(3);
3380   fxch(1);
3381   fmul(2);
3382   fld_s(2);
3383   fadd(1);
3384   fsubrp(1);
3385   fld_s(0);
3386   fxch(1);
3387   fsuba(3);
3388   fld_d(ExternalAddress(8 + pi04_5d));    //0x1a600000UL, 0x3dc0b461UL
3389   fmul(3);
3390   fsuba(2);
3391   fxch(1);
3392   fsub(2);
3393   fsubrp(1);
3394   faddp(3);
3395   fld_d(ExternalAddress(16 + pi04_5d));    //0x2e000000UL, 0x3b93198aUL
3396   fmul(2);
3397   fld_s(0);
3398   fsubr(2);
3399   fsuba(2);
3400   fxch(1);
3401   fsubp(2);
3402   fxch(1);
3403   faddp(3);
3404   fld_d(ExternalAddress(24 + pi04_5d));    //0x25200000UL, 0x396b839aUL
3405   fmul(2);
3406   fld_s(0);
3407   fsubr(2);
3408   fsuba(2);
3409   fxch(1);
3410   fsubp(2);
3411   fxch(1);
3412   faddp(3);
3413   fld_d(ExternalAddress(32 + pi04_5d));    //0x533e63a0UL, 0x37027044UL
3414   fmulp(2);
3415   fld_s(1);
3416   fsubr(1);
3417   fsuba(1);
3418   fxch(2);
3419   fsubp(1);
3420   faddp(2);
3421   fxch(1);
3422   jmp(B1_15);
3423 
3424   bind(B1_8);
3425   fld_x(Address(ebp, 8));
3426   addl(ebx, -16417);
3427   fmul_d(as_Address(ExternalAddress(SCALE)));    //0x00000000UL, 0x32600000UL
3428   movl(eax, -2078209981);
3429   imull(ebx);
3430   addl(edx, ebx);
3431   movl(ecx, ebx);
3432   sarl(edx, 4);
3433   sarl(ecx, 31);
3434   subl(edx, ecx);
3435   movl(eax, edx);
3436   shll(eax, 5);
3437   fstp_x(Address(ebp, 8));
3438   fld_x(Address(ebp, 8));
3439   subl(eax, edx);
3440   movl(Address(ebp, 8), 0);
3441   subl(ebx, eax);
3442   fld_x(Address(ebp, 8));
3443   cmpl(ebx, 17);
3444   fsuba(1);
3445   jcc(Assembler::less, B1_10);
3446 
3447   bind(B1_9);
3448   lea(eax, Address(noreg, edx, Address::times_8));
3449   lea(ecx, Address(eax, edx, Address::times_4));
3450   incl(edx);
3451   fld_x(Address(_4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3452   fmul(2);
3453   fld_x(Address(12 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3454   fmul(2);
3455   fld_s(0);
3456   fadd(2);
3457   fsuba(2);
3458   fxch(1);
3459   faddp(2);
3460   fld_s(1);
3461   fadd(1);
3462   fstp_x(Address(esp, 8));
3463   andl(Address(esp, 8), -16777216);
3464   fld_x(Address(esp, 8));
3465   fsubp(1);
3466   jmp(B1_11);
3467 
3468   bind(B1_10);
3469   fld_d(ExternalAddress(zeros));    //0x00000000UL, 0x00000000UL
3470   fld_s(0);
3471 
3472   bind(B1_11);
3473   fld_s(0);
3474   lea(eax, Address(noreg, edx, Address::times_8));
3475   fld_s(3);
3476   lea(edx, Address(eax, edx, Address::times_4));
3477   fld_x(Address(_4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
3478   fmul(6);
3479   movl(Address(esp, 0), edx);
3480   fadda(2);
3481   fxch(2);
3482   fsuba(3);
3483   fxch(2);
3484   faddp(3);
3485   fxch(2);
3486   faddp(3);
3487   fld_x(Address(12 + _4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
3488   fmula(2);
3489   fld_s(2);
3490   fadd(2);
3491   fld_s(0);
3492   fxch(1);
3493   fsubra(3);
3494   fxch(3);
3495   fchs();
3496   faddp(4);
3497   fxch(3);
3498   faddp(4);
3499   fxch(2);
3500   fadd(3);
3501   fxch(2);
3502   fmul(5);
3503   fadda(2);
3504   fld_s(4);
3505   fld_x(Address(24 + _4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
3506   fmula(1);
3507   fxch(1);
3508   fadda(4);
3509   fxch(4);
3510   fstp_x(Address(esp, 8));
3511   movzwl(ebx, Address(esp, 16));
3512   andl(ebx, 32767);
3513   cmpl(ebx, 16415);
3514   jcc(Assembler::greaterEqual, B1_13);
3515 
3516   bind(B1_12);
3517   negl(ebx);
3518   addl(ebx, 30);
3519   movl(ecx, ebx);
3520   movl(eax, Address(esp, 12));
3521   shrl(eax);
3522   shll(eax);
3523   movl(Address(esp, 12), eax);
3524   movl(Address(esp, 8), 0);
3525   shrl(eax);
3526   jmp(B1_14);
3527 
3528   bind(B1_13);
3529   negl(ebx);
3530   addl(ebx, 30);
3531   movl(ecx, ebx);
3532   movl(edx, Address(esp, 8));
3533   shrl(edx);
3534   shll(edx);
3535   negl(ecx);
3536   movl(eax, Address(esp, 12));
3537   shll(eax);
3538   movl(ecx, ebx);
3539   movl(Address(esp, 8), edx);
3540   shrl(edx);
3541   orl(eax, edx);
3542 
3543   bind(B1_14);
3544   fld_x(Address(esp, 8));
3545   addl(eax, Address(esp, 4));
3546   fsubp(3);
3547   fmul(6);
3548   fld_s(4);
3549   movl(edx, eax);
3550   andl(edx, 1);
3551   fadd(3);
3552   movl(ecx, Address(esp, 0));
3553   fsuba(3);
3554   fxch(3);
3555   faddp(5);
3556   fld_s(1);
3557   fxch(3);
3558   fadd_d(Address(zero_none, RelocationHolder::none).plus_disp(edx, Address::times_8));
3559   fadda(3);
3560   fsub(3);
3561   faddp(2);
3562   fxch(1);
3563   faddp(4);
3564   fld_s(2);
3565   fadd(2);
3566   fsuba(2);
3567   fxch(3);
3568   faddp(2);
3569   fxch(1);
3570   faddp(3);
3571   fld_s(0);
3572   fadd(2);
3573   fsuba(2);
3574   fxch(1);
3575   faddp(2);
3576   fxch(1);
3577   faddp(2);
3578   fld_s(2);
3579   fld_x(Address(36 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3580   fmula(1);
3581   fld_s(1);
3582   fadd(3);
3583   fsuba(3);
3584   fxch(2);
3585   faddp(3);
3586   fxch(2);
3587   faddp(3);
3588   fxch(1);
3589   fmul(4);
3590   fld_s(0);
3591   fadd(2);
3592   fsuba(2);
3593   fxch(1);
3594   faddp(2);
3595   fxch(1);
3596   faddp(2);
3597   fld_s(2);
3598   fld_x(Address(48 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3599   fmula(1);
3600   fld_s(1);
3601   fadd(3);
3602   fsuba(3);
3603   fxch(2);
3604   faddp(3);
3605   fxch(2);
3606   faddp(3);
3607   fld_s(3);
3608   fxch(2);
3609   fmul(5);
3610   fld_x(Address(60 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3611   fmula(3);
3612   fxch(3);
3613   faddp(1);
3614   fld_s(0);
3615   fadd(2);
3616   fsuba(2);
3617   fxch(1);
3618   faddp(2);
3619   fxch(1);
3620   faddp(3);
3621   fld_s(3);
3622   fxch(2);
3623   fmul(5);
3624   fld_x(Address(72 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3625   fmula(3);
3626   fxch(3);
3627   faddp(1);
3628   fld_s(0);
3629   fadd(2);
3630   fsuba(2);
3631   fxch(1);
3632   faddp(2);
3633   fxch(1);
3634   faddp(3);
3635   fxch(1);
3636   fmulp(4);
3637   fld_x(Address(84 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
3638   fmulp(3);
3639   fxch(2);
3640   faddp(3);
3641   fld_s(2);
3642   fadd(2);
3643   fld_d(ExternalAddress(TWO_32H));    //0x00000000UL, 0x41f80000UL
3644   fmul(1);
3645   fadda(1);
3646   fsubp(1);
3647   fsuba(2);
3648   fxch(3);
3649   faddp(2);
3650   faddp(1);
3651   fld_d(ExternalAddress(pi04_2d));    //0x54400000UL, 0x3fe921fbUL
3652   fld_s(0);
3653   fmul(2);
3654   fxch(2);
3655   fadd(3);
3656   fxch(1);
3657   fmulp(3);
3658   fmul_d(as_Address(ExternalAddress(8 + pi04_2d)));    //0x1a626331UL, 0x3dc0b461UL
3659   faddp(1);
3660 
3661   bind(B1_15);
3662   fld_d(ExternalAddress(TWO_12H));    //0x00000000UL, 0x40b80000UL
3663   fld_s(2);
3664   fadd(2);
3665   fmula(1);
3666   fstp_x(Address(esp, 8));
3667   fld_x(Address(esp, 8));
3668   fadd(1);
3669   fsubrp(1);
3670   fst_d(Address(esi, 0));
3671   fsubp(2);
3672   faddp(1);
3673   fstp_d(Address(esi, 8));
3674   addl(esp, 20);
3675   pop(ebx);
3676   pop(edi);
3677   pop(esi);
3678   movl(esp, ebp);
3679   pop(ebp);
3680   ret(0);
3681 }
3682 
3683 ALIGNED_(16) juint _L_2il0floatpacket_0[] =
3684 {
3685     0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
3686 };
3687 
3688 ALIGNED_(16) juint _Pi4Inv[] =
3689 {
3690     0x6dc9c883UL, 0x3ff45f30UL
3691 };
3692 
3693 ALIGNED_(16) juint _Pi4x3[] =
3694 {
3695     0x54443000UL, 0xbfe921fbUL, 0x3b39a000UL, 0x3d373dcbUL, 0xe0e68948UL,
3696     0xba845c06UL
3697 };
3698 
3699 ALIGNED_(16) juint _Pi4x4[] =
3700 {
3701     0x54400000UL, 0xbfe921fbUL, 0x1a600000UL, 0xbdc0b461UL, 0x2e000000UL,
3702     0xbb93198aUL, 0x252049c1UL, 0xb96b839aUL
3703 };
3704 
3705 ALIGNED_(16) jushort _SP[] =
3706 {
3707     0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffc, 0x0000, 0x8887, 0x8888, 0x8888, 0x8888,
3708     0x3ff8, 0x0000, 0xc527, 0x0d00, 0x00d0, 0xd00d, 0xbff2, 0x0000, 0x45f6, 0xb616,
3709     0x1d2a, 0xb8ef, 0x3fec, 0x0000, 0x825b, 0x3997, 0x2b3f, 0xd732, 0xbfe5, 0x0000,
3710     0xbf33, 0x8bb4, 0x2fda, 0xb092, 0x3fde, 0x0000, 0x44a6, 0xed1a, 0x29ef, 0xd73e,
3711     0xbfd6, 0x0000, 0x8610, 0x307f, 0x62a1, 0xc921, 0x3fce, 0x0000
3712 };
3713 
3714 ALIGNED_(16) jushort _CP[] =
3715 {
3716     0x0000, 0x0000, 0x0000, 0x8000, 0xbffe, 0x0000, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa,
3717     0x3ffa, 0x0000, 0x9c2f, 0x0b60, 0x60b6, 0xb60b, 0xbff5, 0x0000, 0xf024, 0x0cac,
3718     0x00d0, 0xd00d, 0x3fef, 0x0000, 0x03fe, 0x3f65, 0x7dbb, 0x93f2, 0xbfe9, 0x0000,
3719     0xd84d, 0xadee, 0xc698, 0x8f76, 0x3fe2, 0x0000, 0xdaba, 0xfe79, 0xea36, 0xc9c9,
3720     0xbfda, 0x0000, 0x3ac6, 0x0ba0, 0x07ce, 0xd585, 0x3fd2, 0x0000
3721 };
3722 
3723 ALIGNED_(16) juint _ones[] =
3724 {
3725     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xbff00000UL
3726 };
3727 
3728 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) {
3729   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;
3730   Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
3731   Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
3732   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;
3733 
3734   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
3735 
3736   address L_2il0floatpacket_0 = (address)_L_2il0floatpacket_0;
3737   address Pi4Inv = (address)_Pi4Inv;
3738   address Pi4x3 = (address)_Pi4x3;
3739   address Pi4x4 = (address)_Pi4x4;
3740   address ones = (address)_ones;
3741   address CP = (address)_CP;
3742   address SP = (address)_SP;
3743 
3744   bind(B1_1);
3745   push(ebp);
3746   movl(ebp, esp);
3747   andl(esp, -64);
3748   push(esi);
3749   push(edi);
3750   push(ebx);
3751   subl(esp, 52);
3752   movl(eax, Address(ebp, 16));
3753   movl(edx, Address(ebp, 20));
3754   movl(Address(esp, 32), eax);
3755   movl(Address(esp, 36), edx);
3756 
3757   bind(B1_2);
3758   fnstcw(Address(esp, 30));
3759 
3760   bind(B1_3);
3761   movsd(xmm1, Address(ebp, 8));
3762   movl(esi, Address(ebp, 12));
3763   movl(eax, esi);
3764   andl(eax, 2147483647);
3765   andps(xmm1, ExternalAddress(L_2il0floatpacket_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
3766   shrl(esi, 31);
3767   movl(Address(esp, 40), eax);
3768   cmpl(eax, 1104150528);
3769   movsd(Address(ebp, 8), xmm1);
3770   jcc(Assembler::aboveEqual, B1_11);
3771 
3772   bind(B1_4);
3773   movsd(xmm0, ExternalAddress(Pi4Inv));    //0x6dc9c883UL, 0x3ff45f30UL
3774   mulsd(xmm0, xmm1);
3775   movzwl(edx, Address(esp, 30));
3776   movl(eax, edx);
3777   andl(eax, 768);
3778   movsd(Address(esp, 0), xmm0);
3779   cmpl(eax, 768);
3780   jcc(Assembler::equal, B1_42);
3781 
3782   bind(B1_5);
3783   orl(edx, -64768);
3784   movw(Address(esp, 28), edx);
3785 
3786   bind(B1_6);
3787   fldcw(Address(esp, 28));
3788 
3789   bind(B1_7);
3790   movsd(xmm1, Address(ebp, 8));
3791   movl(ebx, 1);
3792 
3793   bind(B1_8);
3794   movl(Address(esp, 12), ebx);
3795   movl(ebx, Address(esp, 4));
3796   movl(eax, ebx);
3797   movl(Address(esp, 8), esi);
3798   movl(esi, ebx);
3799   shrl(esi, 20);
3800   andl(eax, 1048575);
3801   movl(ecx, esi);
3802   orl(eax, 1048576);
3803   negl(ecx);
3804   movl(edx, eax);
3805   addl(ecx, 19);
3806   addl(esi, 13);
3807   movl(Address(esp, 24), ecx);
3808   shrl(edx);
3809   movl(ecx, esi);
3810   shll(eax);
3811   movl(ecx, Address(esp, 24));
3812   movl(esi, Address(esp, 0));
3813   shrl(esi);
3814   orl(eax, esi);
3815   cmpl(ebx, 1094713344);
3816   movsd(Address(esp, 16), xmm1);
3817   fld_d(Address(esp, 16));
3818   cmov32(Assembler::below, eax, edx);
3819   movl(esi, Address(esp, 8));
3820   lea(edx, Address(eax, 1));
3821   movl(ebx, edx);
3822   andl(ebx, -2);
3823   movl(Address(esp, 16), ebx);
3824   fild_s(Address(esp, 16));
3825   movl(ebx, Address(esp, 12));
3826   cmpl(Address(esp, 40), 1094713344);
3827   jcc(Assembler::aboveEqual, B1_10);
3828 
3829   bind(B1_9);
3830   fld_d(ExternalAddress(Pi4x3));    //0x54443000UL, 0xbfe921fbUL
3831   fmul(1);
3832   faddp(2);
3833   fld_d(ExternalAddress(8 + Pi4x3));    //0x3b39a000UL, 0x3d373dcbUL
3834   fmul(1);
3835   faddp(2);
3836   fld_d(ExternalAddress(16 + Pi4x3));    //0xe0e68948UL, 0xba845c06UL
3837   fmulp(1);
3838   faddp(1);
3839   jmp(B1_17);
3840 
3841   bind(B1_10);
3842   fld_d(ExternalAddress(Pi4x4));    //0x54400000UL, 0xbfe921fbUL
3843   fmul(1);
3844   faddp(2);
3845   fld_d(ExternalAddress(8 + Pi4x4));    //0x1a600000UL, 0xbdc0b461UL
3846   fmul(1);
3847   faddp(2);
3848   fld_d(ExternalAddress(16 + Pi4x4));    //0x2e000000UL, 0xbb93198aUL
3849   fmul(1);
3850   faddp(2);
3851   fld_d(ExternalAddress(24 + Pi4x4));    //0x252049c1UL, 0xb96b839aUL
3852   fmulp(1);
3853   faddp(1);
3854   jmp(B1_17);
3855 
3856   bind(B1_11);
3857   movzwl(edx, Address(esp, 30));
3858   movl(eax, edx);
3859   andl(eax, 768);
3860   cmpl(eax, 768);
3861   jcc(Assembler::equal, B1_43);
3862   bind(B1_12);
3863   orl(edx, -64768);
3864   movw(Address(esp, 28), edx);
3865 
3866   bind(B1_13);
3867   fldcw(Address(esp, 28));
3868 
3869   bind(B1_14);
3870   movsd(xmm1, Address(ebp, 8));
3871   movl(ebx, 1);
3872 
3873   bind(B1_15);
3874   movsd(Address(esp, 16), xmm1);
3875   fld_d(Address(esp, 16));
3876   addl(esp, -32);
3877   lea(eax, Address(esp, 32));
3878   fstp_x(Address(esp, 0));
3879   movl(Address(esp, 12), 0);
3880   movl(Address(esp, 16), eax);
3881   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l())));
3882 
3883   bind(B1_46);
3884   addl(esp, 32);
3885 
3886   bind(B1_16);
3887   fld_d(Address(esp, 0));
3888   lea(edx, Address(eax, 1));
3889   fld_d(Address(esp, 8));
3890   faddp(1);
3891 
3892   bind(B1_17);
3893   movl(ecx, edx);
3894   addl(eax, 3);
3895   shrl(ecx, 2);
3896   andl(ecx, 1);
3897   shrl(eax, 2);
3898   xorl(esi, ecx);
3899   movl(ecx, Address(esp, 36));
3900   andl(eax, 1);
3901   andl(ecx, 3);
3902   cmpl(ecx, 3);
3903   jcc(Assembler::notEqual, B1_25);
3904 
3905   bind(B1_18);
3906   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
3907   fld_s(1);
3908   fmul((2));
3909   testb(edx, 2);
3910   fmula((1));
3911   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
3912   faddp(2);
3913   fmula(1);
3914   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
3915   faddp(2);
3916   fmula(1);
3917   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
3918   faddp(2);
3919   fmula(1);
3920   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
3921   faddp(2);
3922   fmula(1);
3923   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
3924   faddp(2);
3925   fmula(1);
3926   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
3927   faddp(2);
3928   fmula(1);
3929   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
3930   faddp(2);
3931   fmula(1);
3932   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
3933   fmul(1);
3934   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
3935   faddp(1);
3936   fmul(1);
3937   fld_x(ExternalAddress(62 + CP));    //0xd84d, 0xadee, 0xc6
3938   faddp(1);
3939   fmul(1);
3940   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
3941   faddp(1);
3942   fmul(1);
3943   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
3944   faddp(1);
3945   fmul(1);
3946   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
3947   faddp(1);
3948   fmul(1);
3949   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
3950   faddp(1);
3951   fmul(1);
3952   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
3953   faddp(1);
3954   fmulp(1);
3955   fld_d(Address(ones, RelocationHolder::none).plus_disp(esi, Address::times_8));
3956   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
3957   jcc(Assembler::equal, B1_22);
3958 
3959   bind(B1_19);
3960   fmulp(4);
3961   testl(ebx, ebx);
3962   fxch(2);
3963   fmul(3);
3964   movl(eax, Address(esp, 2));
3965   faddp(3);
3966   fxch(2);
3967   fstp_d(Address(eax, 0));
3968   fmula(1);
3969   faddp(1);
3970   fstp_d(Address(eax, 8));
3971   jcc(Assembler::equal, B1_21);
3972 
3973   bind(B1_20);
3974   fldcw(Address(esp, 30));
3975 
3976   bind(B1_21);
3977   addl(esp, 52);
3978   pop(ebx);
3979   pop(edi);
3980   pop(esi);
3981   movl(esp, ebp);
3982   pop(ebp);
3983   ret(0);
3984 
3985   bind(B1_22);
3986   fxch(1);
3987   fmulp(4);
3988   testl(ebx, ebx);
3989   fxch(2);
3990   fmul(3);
3991   movl(eax, Address(esp, 32));
3992   faddp(3);
3993   fxch(2);
3994   fstp_d(Address(eax, 8));
3995   fmula(1);
3996   faddp(1);
3997   fstp_d(Address(eax, 0));
3998   jcc(Assembler::equal, B1_24);
3999 
4000   bind(B1_23);
4001   fldcw(Address(esp, 30));
4002 
4003   bind(B1_24);
4004   addl(esp, 52);
4005   pop(ebx);
4006   pop(edi);
4007   pop(esi);
4008   movl(esp, ebp);
4009   pop(ebp);
4010   ret(0);
4011 
4012   bind(B1_25);
4013   testb(Address(esp, 36), 2);
4014   jcc(Assembler::equal, B1_33);
4015 
4016   bind(B1_26);
4017   fld_s(0);
4018   testb(edx, 2);
4019   fmul(1);
4020   fld_s(0);
4021   fmul(1);
4022   jcc(Assembler::equal, B1_30);
4023 
4024   bind(B1_27);
4025   fstp_d(2);
4026   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
4027   testl(ebx, ebx);
4028   fmul(2);
4029   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
4030   fmul(3);
4031   fld_x(ExternalAddress(60 + CP));    //0xd84d, 0xadee, 0xc6
4032   movl(eax, Address(rsp, 32));
4033   faddp(2);
4034   fxch(1);
4035   fmul(3);
4036   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
4037   faddp(2);
4038   fxch(1);
4039   fmul(3);
4040   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
4041   faddp(2);
4042   fxch(1);
4043   fmul(3);
4044   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
4045   faddp(2);
4046   fxch(1);
4047   fmul(3);
4048   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
4049   faddp(2);
4050   fxch(1);
4051   fmulp(3);
4052   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
4053   faddp(1);
4054   fmulp(1);
4055   faddp(1);
4056   fld_d(Address(ones, RelocationHolder::none).plus_disp(rsi, Address::times_8));
4057   fmula(1);
4058   faddp(1);
4059   fstp_d(Address(eax, 8));
4060   jcc(Assembler::equal, B1_29);
4061 
4062   bind(B1_28);
4063   fldcw(Address(esp, 30));
4064 
4065   bind(B1_29);
4066   addl(esp, 52);
4067   pop(ebx);
4068   pop(edi);
4069   pop(esi);
4070   movl(esp, ebp);
4071   pop(ebp);
4072   ret(0);
4073 
4074   bind(B1_30);
4075   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
4076   testl(ebx, ebx);
4077   fmul(1);
4078   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
4079   fmul(2);
4080   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
4081   movl(eax, Address(rsp, 32));
4082   faddp(2);
4083   fxch(1);
4084   fmul(2);
4085   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
4086   faddp(2);
4087   fxch(1);
4088   fmul(2);
4089   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
4090   faddp(2);
4091   fxch(1);
4092   fmul(2);
4093   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
4094   faddp(2);
4095   fxch(1);
4096   fmul(2);
4097   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
4098   faddp(2);
4099   fxch(1);
4100   fmulp(2);
4101   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
4102   faddp(1);
4103   fmulp(2);
4104   faddp(1);
4105   fld_d(Address(ones, RelocationHolder::none).plus_disp(rsi, Address::times_8));
4106   fmulp(2);
4107   fmul(1);
4108   faddp(1);
4109   fstp_d(Address(eax, 8));
4110   jcc(Assembler::equal, B1_32);
4111 
4112   bind(B1_31);
4113   fldcw(Address(esp, 30));
4114 
4115   bind(B1_32);
4116   addl(esp, 52);
4117   pop(ebx);
4118   pop(edi);
4119   pop(esi);
4120   movl(esp, ebp);
4121   pop(ebp);
4122   ret(0);
4123 
4124   bind(B1_33);
4125   testb(Address(esp, 36), 1);
4126   jcc(Assembler::equal, B1_41);
4127 
4128   bind(B1_34);
4129   fld_s(0);
4130   testb(edx, 2);
4131   fmul(1);
4132   fld_s(0);
4133   fmul(1);
4134   jcc(Assembler::equal, B1_38);
4135 
4136   bind(B1_35);
4137   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
4138   testl(ebx, ebx);
4139   fmul(1);
4140   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
4141   fmul(2);
4142   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
4143   faddp(2);
4144   fxch(1);
4145   fmul(2);
4146   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
4147   faddp(2);
4148   fxch(1);
4149   fmul(2);
4150   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
4151   faddp(2);
4152   fxch(1);
4153   fmul(2);
4154   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
4155   faddp(2);
4156   fxch(1);
4157   fmul(2);
4158   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
4159   faddp(2);
4160   fxch(1);
4161   fmulp(2);
4162   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
4163   faddp(1);
4164   fmulp(2);
4165   faddp(1);
4166   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
4167   fmulp(2);
4168   fmul(1);
4169   movl(eax, Address(esp, 32));
4170   faddp(1);
4171   fstp_d(Address(eax, 0));
4172   jcc(Assembler::equal, B1_37);
4173 
4174   bind(B1_36);
4175   fldcw(Address(esp, 30));
4176 
4177   bind(B1_37);
4178   addl(esp, 52);
4179   pop(ebx);
4180   pop(edi);
4181   pop(esi);
4182   movl(esp, ebp);
4183   pop(ebp);
4184   ret(0);
4185 
4186   bind(B1_38);
4187   fstp_d(2);
4188   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
4189   testl(ebx, ebx);
4190   fmul(2);
4191   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
4192   fmul(3);
4193   fld_x(ExternalAddress(60 + CP));    //0xd84d, 0xadee, 0xc6
4194   faddp(2);
4195   fxch(1);
4196   fmul(3);
4197   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
4198   faddp(2);
4199   fxch(1);
4200   fmul(3);
4201   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
4202   faddp(2);
4203   fxch(1);
4204   fmul(3);
4205   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
4206   faddp(2);
4207   fxch(1);
4208   fmul(3);
4209   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
4210   faddp(2);
4211   fxch(1);
4212   fmulp(3);
4213   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
4214   faddp(1);
4215   fmulp(1);
4216   faddp(1);
4217   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
4218   fmula(1);
4219   movl(eax, Address(esp, 32));
4220   faddp(1);
4221   fstp_d(Address(eax, 0));
4222   jcc(Assembler::equal, B1_40);
4223 
4224   bind(B1_39);
4225   fldcw(Address(esp, 30));
4226   bind(B1_40);
4227   addl(esp, 52);
4228   pop(ebx);
4229   pop(edi);
4230   pop(esi);
4231   movl(esp, ebp);
4232   pop(ebp);
4233   ret(0);
4234   bind(B1_41);
4235   fstp_d(0);
4236   addl(esp, 52);
4237   pop(ebx);
4238   pop(edi);
4239   pop(esi);
4240   movl(esp, ebp);
4241   pop(ebp);
4242   ret(0);
4243   bind(B1_42);
4244   xorl(ebx, ebx);
4245   jmp(B1_8);
4246   bind(B1_43);
4247   xorl(ebx, ebx);
4248   jmp(B1_15);
4249 }
4250 
4251 ALIGNED_(16) juint _static_const_table_sin[] =
4252 {
4253     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4254     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
4255     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
4256     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
4257     0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
4258     0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
4259     0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
4260     0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
4261     0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
4262     0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
4263     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
4264     0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
4265     0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
4266     0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
4267     0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
4268     0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
4269     0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
4270     0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
4271     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
4272     0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
4273     0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
4274     0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
4275     0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
4276     0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
4277     0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
4278     0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
4279     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4280     0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
4281     0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
4282     0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
4283     0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
4284     0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
4285     0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
4286     0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
4287     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
4288     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
4289     0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
4290     0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
4291     0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
4292     0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
4293     0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
4294     0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
4295     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
4296     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
4297     0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
4298     0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
4299     0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
4300     0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
4301     0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
4302     0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
4303     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
4304     0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4305     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
4306     0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
4307     0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
4308     0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
4309     0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
4310     0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
4311     0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
4312     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
4313     0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
4314     0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
4315     0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
4316     0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
4317     0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
4318     0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
4319     0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
4320     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
4321     0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
4322     0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
4323     0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
4324     0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
4325     0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
4326     0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
4327     0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
4328     0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
4329     0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
4330     0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
4331     0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
4332     0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
4333     0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
4334     0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
4335     0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
4336     0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
4337     0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
4338     0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
4339     0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
4340     0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
4341     0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
4342     0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
4343     0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
4344     0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
4345     0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
4346     0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
4347     0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
4348     0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
4349     0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
4350     0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
4351     0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
4352     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
4353     0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
4354     0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
4355     0x00000000UL, 0x3ff00000UL, 0x55555555UL, 0xbfc55555UL, 0x00000000UL,
4356     0xbfe00000UL, 0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL,
4357     0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL, 0xa556c734UL,
4358     0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL, 0x1a600000UL, 0x3d90b461UL,
4359     0x1a600000UL, 0x3d90b461UL, 0x54400000UL, 0x3fb921fbUL, 0x00000000UL,
4360     0x00000000UL, 0x2e037073UL, 0x3b63198aUL, 0x00000000UL, 0x00000000UL,
4361     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4362     0x43380000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
4363     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
4364     0x00000000UL, 0xffffffffUL, 0x3fefffffUL, 0x00000000UL, 0x00000000UL,
4365     0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4366     0x80000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL, 0x3fe00000UL,
4367     0x00000000UL, 0x3fe00000UL
4368 };
4369 
4370 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) {
4371 
4372   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;
4373   Label L_2TAG_PACKET_4_0_2, start;
4374   assert_different_registers(eax, ebx, edx);
4375   address static_const_table_sin = (address)_static_const_table_sin;
4376 
4377   bind(start);
4378   subl(rsp, 120);
4379   movl(Address(rsp, 56), ebx);
4380   lea(ebx, ExternalAddress(static_const_table_sin));
4381   movsd(xmm0, Address(rsp, 128));
4382   pextrw(eax, xmm0, 3);
4383   andl(eax, 32767);
4384   subl(eax, 12336);
4385   cmpl(eax, 4293);
4386   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
4387   movsd(xmm1, Address(ebx, 2160));
4388   mulsd(xmm1, xmm0);
4389   movsd(xmm5, Address(ebx, 2272));
4390   movdqu(xmm4, Address(ebx, 2256));
4391   pand(xmm4, xmm0);
4392   por(xmm5, xmm4);
4393   movsd(xmm3, Address(ebx, 2128));
4394   movdqu(xmm2, Address(ebx, 2112));
4395   addpd(xmm1, xmm5);
4396   cvttsd2sil(edx, xmm1);
4397   cvtsi2sdl(xmm1, edx);
4398   mulsd(xmm3, xmm1);
4399   unpcklpd(xmm1, xmm1);
4400   addl(edx, 1865216);
4401   movdqu(xmm4, xmm0);
4402   andl(edx, 63);
4403   movdqu(xmm5, Address(ebx, 2096));
4404   lea(eax, Address(ebx, 0));
4405   shll(edx, 5);
4406   addl(eax, edx);
4407   mulpd(xmm2, xmm1);
4408   subsd(xmm0, xmm3);
4409   mulsd(xmm1, Address(ebx, 2144));
4410   subsd(xmm4, xmm3);
4411   movsd(xmm7, Address(eax, 8));
4412   unpcklpd(xmm0, xmm0);
4413   movapd(xmm3, xmm4);
4414   subsd(xmm4, xmm2);
4415   mulpd(xmm5, xmm0);
4416   subpd(xmm0, xmm2);
4417   movdqu(xmm6, Address(ebx, 2064));
4418   mulsd(xmm7, xmm4);
4419   subsd(xmm3, xmm4);
4420   mulpd(xmm5, xmm0);
4421   mulpd(xmm0, xmm0);
4422   subsd(xmm3, xmm2);
4423   movdqu(xmm2, Address(eax, 0));
4424   subsd(xmm1, xmm3);
4425   movsd(xmm3, Address(eax, 24));
4426   addsd(xmm2, xmm3);
4427   subsd(xmm7, xmm2);
4428   mulsd(xmm2, xmm4);
4429   mulpd(xmm6, xmm0);
4430   mulsd(xmm3, xmm4);
4431   mulpd(xmm2, xmm0);
4432   mulpd(xmm0, xmm0);
4433   addpd(xmm5, Address(ebx, 2080));
4434   mulsd(xmm4, Address(eax, 0));
4435   addpd(xmm6, Address(ebx, 2048));
4436   mulpd(xmm5, xmm0);
4437   movapd(xmm0, xmm3);
4438   addsd(xmm3, Address(eax, 8));
4439   mulpd(xmm1, xmm7);
4440   movapd(xmm7, xmm4);
4441   addsd(xmm4, xmm3);
4442   addpd(xmm6, xmm5);
4443   movsd(xmm5, Address(eax, 8));
4444   subsd(xmm5, xmm3);
4445   subsd(xmm3, xmm4);
4446   addsd(xmm1, Address(eax, 16));
4447   mulpd(xmm6, xmm2);
4448   addsd(xmm5, xmm0);
4449   addsd(xmm3, xmm7);
4450   addsd(xmm1, xmm5);
4451   addsd(xmm1, xmm3);
4452   addsd(xmm1, xmm6);
4453   unpckhpd(xmm6, xmm6);
4454   addsd(xmm1, xmm6);
4455   addsd(xmm4, xmm1);
4456   movsd(Address(rsp, 0), xmm4);
4457   fld_d(Address(rsp, 0));
4458   jmp(L_2TAG_PACKET_1_0_2);
4459 
4460   bind(L_2TAG_PACKET_0_0_2);
4461   jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
4462   shrl(eax, 4);
4463   cmpl(eax, 268434685);
4464   jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
4465   movsd(Address(rsp, 0), xmm0);
4466   fld_d(Address(rsp, 0));
4467   jmp(L_2TAG_PACKET_1_0_2);
4468 
4469   bind(L_2TAG_PACKET_3_0_2);
4470   movsd(xmm3, Address(ebx, 2192));
4471   mulsd(xmm3, xmm0);
4472   subsd(xmm3, xmm0);
4473   mulsd(xmm3, Address(ebx, 2208));
4474   movsd(Address(rsp, 0), xmm0);
4475   fld_d(Address(rsp, 0));
4476   jmp(L_2TAG_PACKET_1_0_2);
4477 
4478   bind(L_2TAG_PACKET_2_0_2);
4479   movl(eax, Address(rsp, 132));
4480   andl(eax, 2146435072);
4481   cmpl(eax, 2146435072);
4482   jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
4483   subl(rsp, 32);
4484   movsd(Address(rsp, 0), xmm0);
4485   lea(eax, Address(rsp, 40));
4486   movl(Address(rsp, 8), eax);
4487   movl(eax, 2);
4488   movl(Address(rsp, 12), eax);
4489   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_sin_cos_huge())));
4490   addl(rsp, 32);
4491   fld_d(Address(rsp, 16));
4492   jmp(L_2TAG_PACKET_1_0_2);
4493   bind(L_2TAG_PACKET_4_0_2);
4494   fld_d(Address(rsp, 128));
4495   fmul_d(Address(ebx, 2240));
4496   bind(L_2TAG_PACKET_1_0_2);
4497   movl(ebx, Address(rsp, 56));
4498 }
4499 
4500 /******************************************************************************/
4501 //                     ALGORITHM DESCRIPTION - COS()
4502 //                     ---------------------
4503 //
4504 //     1. RANGE REDUCTION
4505 //
4506 //     We perform an initial range reduction from X to r with
4507 //
4508 //          X =~= N * pi/32 + r
4509 //
4510 //     so that |r| <= pi/64 + epsilon. We restrict inputs to those
4511 //     where |N| <= 932560. Beyond this, the range reduction is
4512 //     insufficiently accurate. For extremely small inputs,
4513 //     denormalization can occur internally, impacting performance.
4514 //     This means that the main path is actually only taken for
4515 //     2^-252 <= |X| < 90112.
4516 //
4517 //     To avoid branches, we perform the range reduction to full
4518 //     accuracy each time.
4519 //
4520 //          X - N * (P_1 + P_2 + P_3)
4521 //
4522 //     where P_1 and P_2 are 32-bit numbers (so multiplication by N
4523 //     is exact) and P_3 is a 53-bit number. Together, these
4524 //     approximate pi well enough for all cases in the restricted
4525 //     range.
4526 //
4527 //     The main reduction sequence is:
4528 //
4529 //             y = 32/pi * x
4530 //             N = integer(y)
4531 //     (computed by adding and subtracting off SHIFTER)
4532 //
4533 //             m_1 = N * P_1
4534 //             m_2 = N * P_2
4535 //             r_1 = x - m_1
4536 //             r = r_1 - m_2
4537 //     (this r can be used for most of the calculation)
4538 //
4539 //             c_1 = r_1 - r
4540 //             m_3 = N * P_3
4541 //             c_2 = c_1 - m_2
4542 //             c = c_2 - m_3
4543 //
4544 //     2. MAIN ALGORITHM
4545 //
4546 //     The algorithm uses a table lookup based on B = M * pi / 32
4547 //     where M = N mod 64. The stored values are:
4548 //       sigma             closest power of 2 to cos(B)
4549 //       C_hl              53-bit cos(B) - sigma
4550 //       S_hi + S_lo       2 * 53-bit sin(B)
4551 //
4552 //     The computation is organized as follows:
4553 //
4554 //          sin(B + r + c) = [sin(B) + sigma * r] +
4555 //                           r * (cos(B) - sigma) +
4556 //                           sin(B) * [cos(r + c) - 1] +
4557 //                           cos(B) * [sin(r + c) - r]
4558 //
4559 //     which is approximately:
4560 //
4561 //          [S_hi + sigma * r] +
4562 //          C_hl * r +
4563 //          S_lo + S_hi * [(cos(r) - 1) - r * c] +
4564 //          (C_hl + sigma) * [(sin(r) - r) + c]
4565 //
4566 //     and this is what is actually computed. We separate this sum
4567 //     into four parts:
4568 //
4569 //          hi + med + pols + corr
4570 //
4571 //     where
4572 //
4573 //          hi       = S_hi + sigma r
4574 //          med      = C_hl * r
4575 //          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
4576 //          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
4577 //
4578 //     3. POLYNOMIAL
4579 //
4580 //     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
4581 //     (sin(r) - r) can be rearranged freely, since it is quite
4582 //     small, so we exploit parallelism to the fullest.
4583 //
4584 //          psc4       =   SC_4 * r_1
4585 //          msc4       =   psc4 * r
4586 //          r2         =   r * r
4587 //          msc2       =   SC_2 * r2
4588 //          r4         =   r2 * r2
4589 //          psc3       =   SC_3 + msc4
4590 //          psc1       =   SC_1 + msc2
4591 //          msc3       =   r4 * psc3
4592 //          sincospols =   psc1 + msc3
4593 //          pols       =   sincospols *
4594 //                         <S_hi * r^2 | (C_hl + sigma) * r^3>
4595 //
4596 //     4. CORRECTION TERM
4597 //
4598 //     This is where the "c" component of the range reduction is
4599 //     taken into account; recall that just "r" is used for most of
4600 //     the calculation.
4601 //
4602 //          -c   = m_3 - c_2
4603 //          -d   = S_hi * r - (C_hl + sigma)
4604 //          corr = -c * -d + S_lo
4605 //
4606 //     5. COMPENSATED SUMMATIONS
4607 //
4608 //     The two successive compensated summations add up the high
4609 //     and medium parts, leaving just the low parts to add up at
4610 //     the end.
4611 //
4612 //          rs        =  sigma * r
4613 //          res_int   =  S_hi + rs
4614 //          k_0       =  S_hi - res_int
4615 //          k_2       =  k_0 + rs
4616 //          med       =  C_hl * r
4617 //          res_hi    =  res_int + med
4618 //          k_1       =  res_int - res_hi
4619 //          k_3       =  k_1 + med
4620 //
4621 //     6. FINAL SUMMATION
4622 //
4623 //     We now add up all the small parts:
4624 //
4625 //          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
4626 //
4627 //     Now the overall result is just:
4628 //
4629 //          res_hi + res_lo
4630 //
4631 //     7. SMALL ARGUMENTS
4632 //
4633 //     Inputs with |X| < 2^-252 are treated specially as
4634 //     1 - |x|.
4635 //
4636 // Special cases:
4637 //  cos(NaN) = quiet NaN, and raise invalid exception
4638 //  cos(INF) = NaN and raise invalid exception
4639 //  cos(0) = 1
4640 //
4641 /******************************************************************************/
4642 
4643 ALIGNED_(16) juint _static_const_table_cos[] =
4644 {
4645     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4646     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
4647     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
4648     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
4649     0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
4650     0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
4651     0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
4652     0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
4653     0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
4654     0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
4655     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
4656     0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
4657     0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
4658     0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
4659     0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
4660     0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
4661     0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
4662     0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
4663     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
4664     0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
4665     0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
4666     0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
4667     0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
4668     0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
4669     0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
4670     0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
4671     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4672     0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
4673     0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
4674     0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
4675     0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
4676     0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
4677     0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
4678     0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
4679     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
4680     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
4681     0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
4682     0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
4683     0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
4684     0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
4685     0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
4686     0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
4687     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
4688     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
4689     0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
4690     0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
4691     0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
4692     0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
4693     0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
4694     0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
4695     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
4696     0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4697     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
4698     0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
4699     0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
4700     0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
4701     0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
4702     0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
4703     0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
4704     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
4705     0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
4706     0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
4707     0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
4708     0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
4709     0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
4710     0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
4711     0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
4712     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
4713     0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
4714     0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
4715     0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
4716     0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
4717     0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
4718     0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
4719     0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
4720     0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
4721     0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
4722     0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
4723     0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
4724     0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
4725     0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
4726     0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
4727     0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
4728     0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
4729     0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
4730     0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
4731     0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
4732     0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
4733     0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
4734     0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
4735     0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
4736     0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
4737     0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
4738     0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
4739     0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
4740     0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
4741     0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
4742     0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
4743     0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
4744     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
4745     0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
4746     0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
4747     0x00000000UL, 0x3ff00000UL, 0x55555555UL, 0xbfc55555UL, 0x00000000UL,
4748     0xbfe00000UL, 0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL,
4749     0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL, 0xa556c734UL,
4750     0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL, 0x1a600000UL, 0x3d90b461UL,
4751     0x1a600000UL, 0x3d90b461UL, 0x54400000UL, 0x3fb921fbUL, 0x00000000UL,
4752     0x00000000UL, 0x2e037073UL, 0x3b63198aUL, 0x00000000UL, 0x00000000UL,
4753     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
4754     0x43380000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3ff00000UL,
4755     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL,
4756     0x00000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL,
4757     0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
4758 };
4759 
4760 //registers,
4761 // input: (rbp + 8)
4762 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
4763 //          rax, rdx, rcx, rbx (tmp)
4764 
4765 // Code generated by Intel C compiler for LIBM library
4766 
4767 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) {
4768   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;
4769   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;
4770   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;
4771   Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
4772 
4773   assert_different_registers(tmp, eax, ecx, edx);
4774 
4775   address static_const_table_cos = (address)_static_const_table_cos;
4776 
4777   bind(start);
4778   subl(rsp, 120);
4779   movl(Address(rsp, 56), tmp);
4780   lea(tmp, ExternalAddress(static_const_table_cos));
4781   movsd(xmm0, Address(rsp, 128));
4782   pextrw(eax, xmm0, 3);
4783   andl(eax, 32767);
4784   subl(eax, 12336);
4785   cmpl(eax, 4293);
4786   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
4787   movsd(xmm1, Address(tmp, 2160));
4788   mulsd(xmm1, xmm0);
4789   movdqu(xmm5, Address(tmp, 2240));
4790   movsd(xmm4, Address(tmp, 2224));
4791   pand(xmm4, xmm0);
4792   por(xmm5, xmm4);
4793   movsd(xmm3, Address(tmp, 2128));
4794   movdqu(xmm2, Address(tmp, 2112));
4795   addpd(xmm1, xmm5);
4796   cvttsd2sil(edx, xmm1);
4797   cvtsi2sdl(xmm1, edx);
4798   mulsd(xmm3, xmm1);
4799   unpcklpd(xmm1, xmm1);
4800   addl(edx, 1865232);
4801   movdqu(xmm4, xmm0);
4802   andl(edx, 63);
4803   movdqu(xmm5, Address(tmp, 2096));
4804   lea(eax, Address(tmp, 0));
4805   shll(edx, 5);
4806   addl(eax, edx);
4807   mulpd(xmm2, xmm1);
4808   subsd(xmm0, xmm3);
4809   mulsd(xmm1, Address(tmp, 2144));
4810   subsd(xmm4, xmm3);
4811   movsd(xmm7, Address(eax, 8));
4812   unpcklpd(xmm0, xmm0);
4813   movapd(xmm3, xmm4);
4814   subsd(xmm4, xmm2);
4815   mulpd(xmm5, xmm0);
4816   subpd(xmm0, xmm2);
4817   movdqu(xmm6, Address(tmp, 2064));
4818   mulsd(xmm7, xmm4);
4819   subsd(xmm3, xmm4);
4820   mulpd(xmm5, xmm0);
4821   mulpd(xmm0, xmm0);
4822   subsd(xmm3, xmm2);
4823   movdqu(xmm2, Address(eax, 0));
4824   subsd(xmm1, xmm3);
4825   movsd(xmm3, Address(eax, 24));
4826   addsd(xmm2, xmm3);
4827   subsd(xmm7, xmm2);
4828   mulsd(xmm2, xmm4);
4829   mulpd(xmm6, xmm0);
4830   mulsd(xmm3, xmm4);
4831   mulpd(xmm2, xmm0);
4832   mulpd(xmm0, xmm0);
4833   addpd(xmm5, Address(tmp, 2080));
4834   mulsd(xmm4, Address(eax, 0));
4835   addpd(xmm6, Address(tmp, 2048));
4836   mulpd(xmm5, xmm0);
4837   movapd(xmm0, xmm3);
4838   addsd(xmm3, Address(eax, 8));
4839   mulpd(xmm1, xmm7);
4840   movapd(xmm7, xmm4);
4841   addsd(xmm4, xmm3);
4842   addpd(xmm6, xmm5);
4843   movsd(xmm5, Address(eax, 8));
4844   subsd(xmm5, xmm3);
4845   subsd(xmm3, xmm4);
4846   addsd(xmm1, Address(eax, 16));
4847   mulpd(xmm6, xmm2);
4848   addsd(xmm5, xmm0);
4849   addsd(xmm3, xmm7);
4850   addsd(xmm1, xmm5);
4851   addsd(xmm1, xmm3);
4852   addsd(xmm1, xmm6);
4853   unpckhpd(xmm6, xmm6);
4854   addsd(xmm1, xmm6);
4855   addsd(xmm4, xmm1);
4856   movsd(Address(rsp, 0), xmm4);
4857   fld_d(Address(rsp, 0));
4858   jmp(L_2TAG_PACKET_1_0_2);
4859 
4860   bind(L_2TAG_PACKET_0_0_2);
4861   jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
4862   pextrw(eax, xmm0, 3);
4863   andl(eax, 32767);
4864   pinsrw(xmm0, eax, 3);
4865   movsd(xmm1, Address(tmp, 2192));
4866   subsd(xmm1, xmm0);
4867   movsd(Address(rsp, 0), xmm1);
4868   fld_d(Address(rsp, 0));
4869   jmp(L_2TAG_PACKET_1_0_2);
4870 
4871   bind(L_2TAG_PACKET_2_0_2);
4872   movl(eax, Address(rsp, 132));
4873   andl(eax, 2146435072);
4874   cmpl(eax, 2146435072);
4875   jcc(Assembler::equal, L_2TAG_PACKET_3_0_2);
4876   subl(rsp, 32);
4877   movsd(Address(rsp, 0), xmm0);
4878   lea(eax, Address(rsp, 40));
4879   movl(Address(rsp, 8), eax);
4880   movl(eax, 1);
4881   movl(Address(rsp, 12), eax);
4882   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_sin_cos_huge())));
4883   addl(rsp, 32);
4884   fld_d(Address(rsp, 8));
4885   jmp(L_2TAG_PACKET_1_0_2);
4886 
4887   bind(L_2TAG_PACKET_3_0_2);
4888   fld_d(Address(rsp, 128));
4889   fmul_d(Address(tmp, 2208));
4890 
4891   bind(L_2TAG_PACKET_1_0_2);
4892   movl(tmp, Address(rsp, 56));
4893 }
4894 
4895 /******************************************************************************/
4896 //                     ALGORITHM DESCRIPTION - TAN()
4897 //                     ---------------------
4898 //
4899 // Polynomials coefficients and other constants.
4900 //
4901 // Note that in this algorithm, there is a different polynomial for
4902 // each breakpoint, so there are 32 sets of polynomial coefficients
4903 // as well as 32 instances of the other constants.
4904 //
4905 // The polynomial coefficients and constants are offset from the start
4906 // of the main block as follows:
4907 //
4908 //   0:  c8 | c0
4909 //  16:  c9 | c1
4910 //  32: c10 | c2
4911 //  48: c11 | c3
4912 //  64: c12 | c4
4913 //  80: c13 | c5
4914 //  96: c14 | c6
4915 // 112: c15 | c7
4916 // 128: T_hi
4917 // 136: T_lo
4918 // 144: Sigma
4919 // 152: T_hl
4920 // 160: Tau
4921 // 168: Mask
4922 // 176: (end of block)
4923 //
4924 // The total table size is therefore 5632 bytes.
4925 //
4926 // Note that c0 and c1 are always zero. We could try storing
4927 // other constants here, and just loading the low part of the
4928 // SIMD register in these cases, after ensuring the high part
4929 // is zero.
4930 //
4931 // The higher terms of the polynomial are computed in the *low*
4932 // part of the SIMD register. This is so we can overlap the
4933 // multiplication by r^8 and the unpacking of the other part.
4934 //
4935 // The constants are:
4936 // T_hi + T_lo = accurate constant term in power series
4937 // Sigma + T_hl = accurate coefficient of r in power series (Sigma=1 bit)
4938 // Tau = multiplier for the reciprocal, always -1 or 0
4939 //
4940 // The basic reconstruction formula using these constants is:
4941 //
4942 // High = tau * recip_hi + t_hi
4943 // Med = (sgn * r + t_hl * r)_hi
4944 // Low = (sgn * r + t_hl * r)_lo +
4945 //       tau * recip_lo + T_lo + (T_hl + sigma) * c + pol
4946 //
4947 // where pol = c0 + c1 * r + c2 * r^2 + ... + c15 * r^15
4948 //
4949 // (c0 = c1 = 0, but using them keeps SIMD regularity)
4950 //
4951 // We then do a compensated sum High + Med, add the low parts together
4952 // and then do the final sum.
4953 //
4954 // Here recip_hi + recip_lo is an accurate reciprocal of the remainder
4955 // modulo pi/2
4956 //
4957 // Special cases:
4958 //  tan(NaN) = quiet NaN, and raise invalid exception
4959 //  tan(INF) = NaN and raise invalid exception
4960 //  tan(+/-0) = +/-0
4961 //
4962 /******************************************************************************/
4963 
4964 ALIGNED_(16) jushort _TP[] =
4965 {
4966     0x4cd6, 0xaf6c, 0xc710, 0xc662, 0xbffd, 0x0000, 0x4b06, 0xb0ac, 0xd3b2, 0xcc2c,
4967     0x3ff9, 0x0000, 0x00e3, 0xc850, 0xaa28, 0x9533, 0xbff3, 0x0000, 0x2ff0, 0x466d,
4968     0x1a3b, 0xb266, 0x3fe5, 0x0000
4969 };
4970 
4971 ALIGNED_(16) jushort _TQ[] =
4972 {
4973     0x399c, 0x8391, 0x154c, 0x94ca, 0xbfff, 0x0000, 0xb6a3, 0xc36a, 0x44e2, 0x8a2c,
4974     0x3ffe, 0x0000, 0xb70f, 0xd068, 0xa6ce, 0xe9dd, 0xbff9, 0x0000, 0x820f, 0x51ce,
4975     0x7d76, 0x9bff, 0x3ff3, 0x0000
4976 };
4977 
4978 ALIGNED_(16) jushort _GP[] =
4979 {
4980     0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffd, 0x0000, 0xb62f, 0x0b60, 0x60b6, 0xb60b,
4981     0xbff9, 0x0000, 0xdfa7, 0x08aa, 0x55e0, 0x8ab3, 0xbff6, 0x0000, 0x85a0, 0xa819,
4982     0xbc99, 0xddeb, 0xbff2, 0x0000, 0x7065, 0x6a37, 0x795f, 0xb354, 0xbfef, 0x0000,
4983     0xa8f9, 0x83f1, 0x2ec8, 0x9140, 0xbfec, 0x0000, 0xf3ca, 0x8c96, 0x8e0b, 0xeb6d,
4984     0xbfe8, 0x0000, 0x355b, 0xd910, 0x67c9, 0xbed3, 0xbfe5, 0x0000, 0x286b, 0xb49e,
4985     0xb854, 0x9a98, 0xbfe2, 0x0000, 0x0871, 0x1a2f, 0x6477, 0xfcc4, 0xbfde, 0x0000,
4986     0xa559, 0x1da9, 0xaed2, 0xba76, 0xbfdb, 0x0000, 0x00a3, 0x7fea, 0x9bc3, 0xf205,
4987     0xbfd8, 0x0000
4988 };
4989 
4990 void MacroAssembler::libm_tancot_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
4991   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;
4992   Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
4993   Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
4994   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;
4995 
4996   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
4997 
4998   address L_2il0floatpacket_0 = (address)_L_2il0floatpacket_0;
4999   address Pi4Inv = (address)_Pi4Inv;
5000   address Pi4x3 = (address)_Pi4x3;
5001   address Pi4x4 = (address)_Pi4x4;
5002   address ones = (address)_ones;
5003   address TP = (address)_TP;
5004   address TQ = (address)_TQ;
5005   address GP = (address)_GP;
5006 
5007   bind(B1_1);
5008   push(ebp);
5009   movl(ebp, esp);
5010   andl(esp, -64);
5011   push(esi);
5012   push(edi);
5013   push(ebx);
5014   subl(esp, 52);
5015   movl(eax, Address(ebp, 16));
5016   movl(ebx, Address(ebp, 20));
5017   movl(Address(esp, 40), eax);
5018 
5019   bind(B1_2);
5020   fnstcw(Address(esp, 38));
5021 
5022   bind(B1_3);
5023   movl(edx, Address(ebp, 12));
5024   movl(eax, edx);
5025   andl(eax, 2147483647);
5026   shrl(edx, 31);
5027   movl(Address(esp, 44), edx);
5028   cmpl(eax, 1104150528);
5029   jcc(Assembler::aboveEqual, B1_11);
5030 
5031   bind(B1_4);
5032   movsd(xmm1, Address(ebp, 8));
5033   movzwl(ecx, Address(esp, 38));
5034   movl(edx, ecx);
5035   andl(edx, 768);
5036   andps(xmm1, ExternalAddress(L_2il0floatpacket_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
5037   cmpl(edx, 768);
5038   movsd(xmm0, ExternalAddress(Pi4Inv));    ////0x6dc9c883UL, 0x3ff45f30UL
5039   mulsd(xmm0, xmm1);
5040   movsd(Address(ebp, 8), xmm1);
5041   movsd(Address(esp, 0), xmm0);
5042   jcc(Assembler::equal, B1_39);
5043 
5044   bind(B1_5);
5045   orl(ecx, -64768);
5046   movw(Address(esp, 36), ecx);
5047 
5048   bind(B1_6);
5049   fldcw(Address(esp, 36));
5050 
5051   bind(B1_7);
5052   movsd(xmm1, Address(ebp, 8));
5053   movl(edi, 1);
5054 
5055   bind(B1_8);
5056   movl(Address(esp, 12), esi);
5057   movl(esi, Address(esp, 4));
5058   movl(edx, esi);
5059   movl(Address(esp, 24), edi);
5060   movl(edi, esi);
5061   shrl(edi, 20);
5062   andl(edx, 1048575);
5063   movl(ecx, edi);
5064   orl(edx, 1048576);
5065   negl(ecx);
5066   addl(edi, 13);
5067   movl(Address(esp, 8), ebx);
5068   addl(ecx, 19);
5069   movl(ebx, edx);
5070   movl(Address(esp, 28), ecx);
5071   shrl(ebx);
5072   movl(ecx, edi);
5073   shll(edx);
5074   movl(ecx, Address(esp, 28));
5075   movl(edi, Address(esp, 0));
5076   shrl(edi);
5077   orl(edx, edi);
5078   cmpl(esi, 1094713344);
5079   movsd(Address(esp, 16), xmm1);
5080   fld_d(Address(esp, 16));
5081   cmov32(Assembler::below, edx, ebx);
5082   movl(edi, Address(esp, 24));
5083   movl(esi, Address(esp, 12));
5084   lea(ebx, Address(edx, 1));
5085   andl(ebx, -2);
5086   movl(Address(esp, 16), ebx);
5087   cmpl(eax, 1094713344);
5088   fild_s(Address(esp, 16));
5089   movl(ebx, Address(esp, 8));
5090   jcc(Assembler::aboveEqual, B1_10);
5091 
5092   bind(B1_9);
5093   fld_d(ExternalAddress(Pi4x3));    //0x54443000UL, 0xbfe921fbUL
5094   fmul(1);
5095   faddp(2);
5096   fld_d(ExternalAddress(8 + Pi4x3));    //0x3b39a000UL, 0x3d373dcbUL
5097   fmul(1);
5098   faddp(2);
5099   fld_d(ExternalAddress(16 + Pi4x3));    //0xe0e68948UL, 0xba845c06UL
5100   fmulp(1);
5101   faddp(1);
5102   jmp(B1_17);
5103 
5104   bind(B1_10);
5105   fld_d(ExternalAddress(Pi4x4));    //0x54400000UL, 0xbfe921fbUL
5106   fmul(1);
5107   faddp(2);
5108   fld_d(ExternalAddress(8 + Pi4x4));    //0x1a600000UL, 0xbdc0b461UL
5109   fmul(1);
5110   faddp(2);
5111   fld_d(ExternalAddress(16 + Pi4x4));    //0x2e000000UL, 0xbb93198aUL
5112   fmul(1);
5113   faddp(2);
5114   fld_d(ExternalAddress(24 + Pi4x4));    //0x252049c1UL, 0xb96b839aUL
5115   fmulp(1);
5116   faddp(1);
5117   jmp(B1_17);
5118 
5119   bind(B1_11);
5120   movzwl(edx, Address(esp, 38));
5121   movl(eax, edx);
5122   andl(eax, 768);
5123   cmpl(eax, 768);
5124   jcc(Assembler::equal, B1_40);
5125 
5126   bind(B1_12);
5127   orl(edx, -64768);
5128   movw(Address(esp, 36), edx);
5129 
5130   bind(B1_13);
5131   fldcw(Address(esp, 36));
5132 
5133   bind(B1_14);
5134   movl(edi, 1);
5135 
5136   bind(B1_15);
5137   movsd(xmm0, Address(ebp, 8));
5138   addl(esp, -32);
5139   andps(xmm0, ExternalAddress(L_2il0floatpacket_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
5140   lea(eax, Address(esp, 32));
5141   movsd(Address(eax, 16), xmm0);
5142   fld_d(Address(eax, 16));
5143   fstp_x(Address(esp, 0));
5144   movl(Address(esp, 12), 0);
5145   movl(Address(esp, 16), eax);
5146   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l())));
5147 
5148   bind(B1_43);
5149   movl(edx, eax);
5150   addl(esp, 32);
5151 
5152   bind(B1_16);
5153   fld_d(Address(esp, 0));
5154   fld_d(Address(esp, 8));
5155   faddp(1);
5156 
5157   bind(B1_17);
5158   movl(eax, ebx);
5159   andl(eax, 3);
5160   cmpl(eax, 3);
5161   jcc(Assembler::notEqual, B1_24);
5162 
5163   bind(B1_18);
5164   fld_d(ExternalAddress(ones));
5165   incl(edx);
5166   fdiv(1);
5167   testb(edx, 2);
5168   fstp_x(Address(esp, 24));
5169   fld_s(0);
5170   fmul(1);
5171   fld_s(0);
5172   fmul(1);
5173   fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
5174   fmul(2);
5175   fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
5176   faddp(1);
5177   fmul(2);
5178   fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
5179   faddp(1);
5180   fmul(2);
5181   fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
5182   fmul(3);
5183   fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
5184   faddp(1);
5185   fmul(3);
5186   fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
5187   faddp(1);
5188   fmul(3);
5189   fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
5190   faddp(1);
5191   fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
5192   faddp(2);
5193   fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
5194   fmul(3);
5195   fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
5196   fmul(4);
5197   fld_x(ExternalAddress(108 + GP));    //0x0871, 0x1a2f, 0x64
5198   faddp(2);
5199   fxch(1);
5200   fmul(4);
5201   fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
5202   faddp(2);
5203   fxch(1);
5204   fmul(4);
5205   fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
5206   faddp(2);
5207   fxch(1);
5208   fmul(4);
5209   fld_x(ExternalAddress(72 + GP));    //0x8c96, 0x8e0b, 0xeb
5210   faddp(2);
5211   fxch(1);
5212   fmul(4);
5213   fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
5214   faddp(2);
5215   fxch(1);
5216   fmul(4);
5217   fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
5218   faddp(2);
5219   fxch(1);
5220   fmul(4);
5221   fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
5222   faddp(2);
5223   fxch(1);
5224   fmul(4);
5225   fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
5226   faddp(2);
5227   fxch(1);
5228   fmulp(4);
5229   fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
5230   faddp(1);
5231   fmul(4);
5232   fmul(5);
5233   fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
5234   faddp(4);
5235   fxch(3);
5236   fmul(5);
5237   faddp(3);
5238   jcc(Assembler::equal, B1_20);
5239 
5240   bind(B1_19);
5241   fld_x(Address(esp, 24));
5242   fxch(1);
5243   fdivrp(2);
5244   fxch(1);
5245   fmulp(3);
5246   movl(eax, Address(esp, 44));
5247   xorl(eax, 1);
5248   fxch(2);
5249   fmul(3);
5250   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
5251   fmula(2);
5252   fmula(3);
5253   fxch(3);
5254   faddp(2);
5255   fxch(1);
5256   fstp_d(Address(esp, 16));
5257   fmul(1);
5258   fxch(1);
5259   fmulp(2);
5260   movsd(xmm0, Address(esp, 16));
5261   faddp(1);
5262   fstp_d(Address(esp, 16));
5263   movsd(xmm1, Address(esp, 16));
5264   jmp(B1_21);
5265 
5266   bind(B1_20);
5267   fdivrp(1);
5268   fmulp(2);
5269   fxch(1);
5270   fmul(2);
5271   movl(eax, Address(esp, 44));
5272   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
5273   fmula(1);
5274   fmula(3);
5275   fxch(3);
5276   faddp(1);
5277   fstp_d(Address(esp, 16));
5278   fmul(1);
5279   fld_x(Address(esp, 24));
5280   fmulp(2);
5281   movsd(xmm0, Address(esp, 16));
5282   faddp(1);
5283   fstp_d(Address(esp, 16));
5284   movsd(xmm1, Address(esp, 16));
5285 
5286   bind(B1_21);
5287   testl(edi, edi);
5288   jcc(Assembler::equal, B1_23);
5289 
5290   bind(B1_22);
5291   fldcw(Address(esp, 38));
5292 
5293   bind(B1_23);
5294   movl(eax, Address(esp, 40));
5295   movsd(Address(eax, 0), xmm0);
5296   movsd(Address(eax, 8), xmm1);
5297   addl(esp, 52);
5298   pop(ebx);
5299   pop(edi);
5300   pop(esi);
5301   movl(esp, ebp);
5302   pop(ebp);
5303   ret(0);
5304 
5305   bind(B1_24);
5306   testb(ebx, 2);
5307   jcc(Assembler::equal, B1_31);
5308 
5309   bind(B1_25);
5310   incl(edx);
5311   fld_s(0);
5312   fmul(1);
5313   testb(edx, 2);
5314   jcc(Assembler::equal, B1_27);
5315 
5316   bind(B1_26);
5317   fld_d(ExternalAddress(ones));
5318   fdiv(2);
5319   fld_s(1);
5320   fmul(2);
5321   fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
5322   fmul(1);
5323   fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
5324   fmul(2);
5325   fld_x(ExternalAddress(108 + GP));    //0x67c9, 0xbed3, 0xbf
5326   movl(eax, Address(esp, 44));
5327   faddp(2);
5328   fxch(1);
5329   fmul(2);
5330   xorl(eax, 1);
5331   fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
5332   faddp(2);
5333   fxch(1);
5334   fmul(2);
5335   fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
5336   faddp(2);
5337   fxch(1);
5338   fmul(2);
5339   fld_x(ExternalAddress(72 + GP));    //0xf3ca, 0x8c96, 0x8e
5340   faddp(2);
5341   fxch(1);
5342   fmul(2);
5343   fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
5344   faddp(2);
5345   fxch(1);
5346   fmul(2);
5347   fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
5348   faddp(2);
5349   fxch(1);
5350   fmul(2);
5351   fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
5352   faddp(2);
5353   fxch(1);
5354   fmul(2);
5355   fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
5356   faddp(2);
5357   fxch(1);
5358   fmulp(2);
5359   fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
5360   faddp(1);
5361   fmulp(3);
5362   fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
5363   faddp(1);
5364   fmul(3);
5365   fxch(2);
5366   fmulp(3);
5367   fxch(1);
5368   faddp(2);
5369   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
5370   fmula(2);
5371   fmulp(1);
5372   faddp(1);
5373   fstp_d(Address(esp, 16));
5374   movsd(xmm0, Address(esp, 16));
5375   jmp(B1_28);
5376 
5377   bind(B1_27);
5378   fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
5379   fmul(1);
5380   fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
5381   movl(eax, Address(esp, 44));
5382   faddp(1);
5383   fmul(1);
5384   fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
5385   fmul(2);
5386   fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
5387   faddp(1);
5388   fmul(2);
5389   fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
5390   faddp(1);
5391   fmul(2);
5392   fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
5393   faddp(1);
5394   fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
5395   faddp(2);
5396   fxch(1);
5397   fmul(2);
5398   fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
5399   faddp(1);
5400   fdivrp(1);
5401   fmulp(1);
5402   fmul(1);
5403   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
5404   fmula(1);
5405   fmulp(2);
5406   faddp(1);
5407   fstp_d(Address(esp, 16));
5408   movsd(xmm0, Address(esp, 16));
5409 
5410   bind(B1_28);
5411   testl(edi, edi);
5412   jcc(Assembler::equal, B1_30);
5413 
5414   bind(B1_29);
5415   fldcw(Address(esp, 38));
5416 
5417   bind(B1_30);
5418   movl(eax, Address(esp, 40));
5419   movsd(Address(eax, 0), xmm0);
5420   addl(esp, 52);
5421   pop(ebx);
5422   pop(edi);
5423   pop(esi);
5424   movl(esp, ebp);
5425   pop(ebp);
5426   ret(0);
5427 
5428   bind(B1_31);
5429   testb(ebx, 1);
5430   jcc(Assembler::equal, B1_38);
5431 
5432   bind(B1_32);
5433   incl(edx);
5434   fld_s(0);
5435   fmul(1);
5436   testb(edx, 2);
5437   jcc(Assembler::equal, B1_34);
5438 
5439   bind(B1_33);
5440   fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
5441   fmul(1);
5442   fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
5443   movl(eax, Address(esp, 44));
5444   faddp(1);
5445   fmul(1);
5446   xorl(eax, 1);
5447   fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
5448   fmul(2);
5449   fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
5450   faddp(1);
5451   fmul(2);
5452   fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
5453   faddp(1);
5454   fmul(2);
5455   fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
5456   faddp(1);
5457   fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
5458   faddp(2);
5459   fxch(1);
5460   fmul(2);
5461   fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
5462   faddp(1);
5463   fdivrp(1);
5464   fmulp(1);
5465   fmul(1);
5466   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
5467   fmula(1);
5468   fmulp(2);
5469   faddp(1);
5470   fstp_d(Address(esp, 16));
5471   movsd(xmm0, Address(esp, 16));
5472   jmp(B1_35);
5473 
5474   bind(B1_34);
5475   fld_d(ExternalAddress(ones));
5476   fdiv(2);
5477   fld_s(1);
5478   fmul(2);
5479   fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
5480   fmul(1);
5481   fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
5482   fmul(2);
5483   fld_x(ExternalAddress(108 + GP));    //0x67c9, 0xbed3, 0xbf
5484   movl(eax, Address(esp, 44));
5485   faddp(2);
5486   fxch(1);
5487   fmul(2);
5488   fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
5489   faddp(2);
5490   fxch(1);
5491   fmul(2);
5492   fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
5493   faddp(2);
5494   fxch(1);
5495   fmul(2);
5496   fld_x(ExternalAddress(72 + GP));    //0xf3ca, 0x8c96, 0x8e
5497   faddp(2);
5498   fxch(1);
5499   fmul(2);
5500   fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
5501   faddp(2);
5502   fxch(1);
5503   fmul(2);
5504   fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
5505   faddp(2);
5506   fxch(1);
5507   fmul(2);
5508   fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
5509   faddp(2);
5510   fxch(1);
5511   fmul(2);
5512   fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
5513   faddp(2);
5514   fxch(1);
5515   fmulp(2);
5516   fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
5517   faddp(1);
5518   fmulp(3);
5519   fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
5520   faddp(1);
5521   fmul(3);
5522   fxch(2);
5523   fmulp(3);
5524   fxch(1);
5525   faddp(2);
5526   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
5527   fmula(2);
5528   fmulp(1);
5529   faddp(1);
5530   fstp_d(Address(esp, 16));
5531   movsd(xmm0, Address(esp, 16));
5532 
5533   bind(B1_35);
5534   testl(edi, edi);
5535   jcc(Assembler::equal, B1_37);
5536 
5537   bind(B1_36);
5538   fldcw(Address(esp, 38));
5539 
5540   bind(B1_37);
5541   movl(eax, Address(esp, 40));
5542   movsd(Address(eax, 8), xmm0);
5543   addl(esp, 52);
5544   pop(ebx);
5545   pop(edi);
5546   pop(esi);
5547   mov(esp, ebp);
5548   pop(ebp);
5549   ret(0);
5550 
5551   bind(B1_38);
5552   fstp_d(0);
5553   addl(esp, 52);
5554   pop(ebx);
5555   pop(edi);
5556   pop(esi);
5557   mov(esp, ebp);
5558   pop(ebp);
5559   ret(0);
5560 
5561   bind(B1_39);
5562   xorl(edi, edi);
5563   jmp(B1_8);
5564 
5565   bind(B1_40);
5566   xorl(edi, edi);
5567   jmp(B1_15);
5568 }
5569 
5570 ALIGNED_(16) juint _static_const_table_tan[] =
5571 {
5572     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x882c10faUL,
5573     0x3f9664f4UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5574     0x00000000UL, 0x00000000UL, 0x55e6c23dUL, 0x3f8226e3UL, 0x55555555UL,
5575     0x3fd55555UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5576     0x0e157de0UL, 0x3f6d6d3dUL, 0x11111111UL, 0x3fc11111UL, 0x00000000UL,
5577     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x452b75e3UL, 0x3f57da36UL,
5578     0x1ba1ba1cUL, 0x3faba1baUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5579     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
5580     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL,
5581     0x3f953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL,
5582     0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0x3f85ad63UL, 0xdc230b9bUL,
5583     0x3fb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL,
5584     0x77bb08baUL, 0x3f757c85UL, 0xb6247521UL, 0x3fb1381eUL, 0x5922170cUL,
5585     0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0x3f64e391UL,
5586     0x3e666320UL, 0x3fa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL,
5587     0x3fafa8aeUL, 0x8c5b2da2UL, 0x3fb936bbUL, 0x4e88f7a5UL, 0x3c587d05UL,
5588     0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
5589     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x5a279ea3UL, 0x3faa3407UL,
5590     0x00000000UL, 0x00000000UL, 0x432d65faUL, 0x3fa70153UL, 0x00000000UL,
5591     0x00000000UL, 0x891a4602UL, 0x3f9d03efUL, 0xd62ca5f8UL, 0x3fca77d9UL,
5592     0xb35f4628UL, 0x3f97a265UL, 0x433258faUL, 0x3fd8cf51UL, 0xb58fd909UL,
5593     0x3f8f88e3UL, 0x01771ceaUL, 0x3fc2b154UL, 0xf3562f8eUL, 0x3f888f57UL,
5594     0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL, 0x3f80f44cUL, 0x214368e9UL,
5595     0x3fb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL, 0x172dbbf0UL, 0x3fb6cb8eUL,
5596     0xe0553158UL, 0x3fc975f5UL, 0x593fe814UL, 0x3c2ef5d3UL, 0x00000000UL,
5597     0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL, 0x00000000UL, 0x00000000UL,
5598     0x00000000UL, 0x00000000UL, 0x9314533eUL, 0x3fbb8ec5UL, 0x00000000UL,
5599     0x00000000UL, 0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL,
5600     0xdcb427fdUL, 0x3fb13950UL, 0xd87ab0bbUL, 0x3fd5335eUL, 0xce0ae8a5UL,
5601     0x3fabb382UL, 0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0x3fa552f1UL,
5602     0x59f21a6dUL, 0x3fd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL,
5603     0x3fd0576cUL, 0x8f2c2950UL, 0x3f9a4898UL, 0xc0b3f22cUL, 0x3fc59462UL,
5604     0x1883a4b8UL, 0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL,
5605     0x3fd36a08UL, 0x1dce993dUL, 0xbc6d704dUL, 0x00000000UL, 0x3ff00000UL,
5606     0x2b82ab63UL, 0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5607     0x00000000UL, 0x56f37042UL, 0x3fccfc56UL, 0x00000000UL, 0x00000000UL,
5608     0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL, 0x3d0e7c5dUL,
5609     0x3fc50533UL, 0x9bed9b2eUL, 0x3fdf0ed9UL, 0x5fe7c47cUL, 0x3fc1f250UL,
5610     0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0x3fbe5c71UL, 0x86362c20UL,
5611     0x3fda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL, 0x3fd911bdUL,
5612     0xb56658beUL, 0x3fb5e4c7UL, 0x93a2fd76UL, 0x3fd3c092UL, 0xda271794UL,
5613     0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL, 0x3fda8279UL,
5614     0xb68c1467UL, 0x3c708b2fUL, 0x00000000UL, 0x3ff00000UL, 0x980c4337UL,
5615     0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5616     0xcc03e501UL, 0x3fdff10fUL, 0x00000000UL, 0x00000000UL, 0x44a4e845UL,
5617     0x3fddb63bUL, 0x00000000UL, 0x00000000UL, 0x3768ad9fUL, 0x3fdb72a4UL,
5618     0x3dd01ccaUL, 0x3fe5fdb9UL, 0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL,
5619     0x3fe977f9UL, 0xd013b3abUL, 0x3fd78ca3UL, 0xbf0bf914UL, 0x3fe4f192UL,
5620     0x4d53e730UL, 0x3fd5d060UL, 0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL,
5621     0x3fd4322aUL, 0x5936a835UL, 0x3fe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL,
5622     0xef478605UL, 0x3fe1659eUL, 0x190834ecUL, 0x3fe11ab7UL, 0xcdb625eaUL,
5623     0xbc8e564bUL, 0x00000000UL, 0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL,
5624     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL,
5625     0x3ff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL,
5626     0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0x3ff3972eUL, 0xe93463bdUL,
5627     0x3feeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL,
5628     0xa04e8ea3UL, 0x3ff4541aUL, 0x386accd3UL, 0x3ff1369eUL, 0x222a66ddUL,
5629     0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0x3ff5178fUL,
5630     0xddaa0031UL, 0x3ff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL,
5631     0x3ff29311UL, 0x2ab7f990UL, 0x3fe561b8UL, 0x209c7df1UL, 0x3c87a8c5UL,
5632     0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL,
5633     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc7ab4d5aUL, 0x40085e24UL,
5634     0x00000000UL, 0x00000000UL, 0xe93ea75dUL, 0x400b963dUL, 0x00000000UL,
5635     0x00000000UL, 0x94a7f25aUL, 0x400f37e2UL, 0x4b6261cbUL, 0x3ff5f984UL,
5636     0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL, 0x3ffaf5a5UL, 0x7f2ce8e3UL,
5637     0x4013fe8bUL, 0xfe8e54faUL, 0x3ffd7334UL, 0x670d618dUL, 0x4016a10cUL,
5638     0x4db97058UL, 0x4000e012UL, 0x24df44ddUL, 0x40199c5fUL, 0x697d6eceUL,
5639     0x4003006eUL, 0x83298b82UL, 0x401cfc4dUL, 0x19d490d6UL, 0x40058c19UL,
5640     0x2ae42850UL, 0x3fea4300UL, 0x118e20e6UL, 0xbc7a6db8UL, 0x00000000UL,
5641     0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL, 0x00000000UL, 0x00000000UL,
5642     0x00000000UL, 0x00000000UL, 0x65965966UL, 0x40219659UL, 0x00000000UL,
5643     0x00000000UL, 0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL,
5644     0x83cd3723UL, 0x402c8342UL, 0x00000000UL, 0x40000000UL, 0x55e6c23dUL,
5645     0x403226e3UL, 0x55555555UL, 0x40055555UL, 0x34451939UL, 0x40371c96UL,
5646     0xaaaaaaabUL, 0x400aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL,
5647     0x40111111UL, 0xa738201fUL, 0x4042bbceUL, 0x05b05b06UL, 0x4015b05bUL,
5648     0x452b75e3UL, 0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL,
5649     0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL,
5650     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5651     0x00000000UL, 0x4f48b8d3UL, 0xbf33eaf9UL, 0x00000000UL, 0x00000000UL,
5652     0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL, 0xd0258911UL,
5653     0xbf0abaf3UL, 0x23e49fe9UL, 0xbfab5a8cUL, 0x2d53222eUL, 0x3ef60d15UL,
5654     0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0xbee1d3b5UL, 0xdbf93b8eUL,
5655     0xbf84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL, 0x3f743924UL,
5656     0x794a8297UL, 0xbeb7b7b9UL, 0xe015f797UL, 0xbf5d41f5UL, 0xe41a4a56UL,
5657     0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL, 0xbfce49ceUL,
5658     0x8c743719UL, 0x3d1eb860UL, 0x00000000UL, 0x00000000UL, 0x1b4863cfUL,
5659     0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
5660     0x535ad890UL, 0xbf2b9320UL, 0x00000000UL, 0x00000000UL, 0x018fdf1fUL,
5661     0x3f16d61dUL, 0x00000000UL, 0x00000000UL, 0x0359f1beUL, 0xbf0139e4UL,
5662     0xa4317c6dUL, 0xbfa67e17UL, 0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL,
5663     0x3f9f455bUL, 0x51ccf238UL, 0xbed55317UL, 0xf437b9acUL, 0xbf804beeUL,
5664     0xc791a2b5UL, 0x3ec0e993UL, 0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL,
5665     0xbeaa48a2UL, 0x0a268358UL, 0xbf55a443UL, 0xdfd978e4UL, 0x3e94b61fUL,
5666     0xd7767a58UL, 0x3f431806UL, 0x2aea0000UL, 0xbfc9bbe8UL, 0x7723ea61UL,
5667     0xbd3a2369UL, 0x00000000UL, 0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL,
5668     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL,
5669     0xbf231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL,
5670     0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0xbef66191UL, 0x848a46c6UL,
5671     0xbfa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL,
5672     0xfdd299efUL, 0xbec9dd1aUL, 0x3f8dbaafUL, 0xbf793363UL, 0x309fc6eaUL,
5673     0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0xbe9dae11UL,
5674     0x3e5c67b3UL, 0xbf4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL,
5675     0x3f3d1eb1UL, 0x29cfc000UL, 0xbfc549ceUL, 0xbf159358UL, 0xbd397b33UL,
5676     0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL,
5677     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x7d98a556UL, 0xbf1a3958UL,
5678     0x00000000UL, 0x00000000UL, 0x9d88dc01UL, 0x3f0704c2UL, 0x00000000UL,
5679     0x00000000UL, 0x73742a2bUL, 0xbeed054aUL, 0x58844587UL, 0xbf9c2a13UL,
5680     0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL, 0x3f9a48f4UL, 0xa8dc9888UL,
5681     0xbebf8939UL, 0xaad4b5b8UL, 0xbf72f746UL, 0x9102efa1UL, 0x3ea88f82UL,
5682     0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL, 0xbe90f456UL, 0x741fb4edUL,
5683     0xbf46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL, 0xca89ff3fUL, 0x3f36db70UL,
5684     0xa8a2a000UL, 0xbfc0ee13UL, 0x3da24be1UL, 0xbd338b9fUL, 0x00000000UL,
5685     0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL, 0x00000000UL, 0x3ff00000UL,
5686     0x00000000UL, 0xfffffff8UL, 0x1a154b97UL, 0xbf116b01UL, 0x00000000UL,
5687     0x00000000UL, 0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL,
5688     0xb93820c8UL, 0xbee264d4UL, 0xbb6cbb18UL, 0xbf94ab8cUL, 0x888d4d92UL,
5689     0x3ed0568bUL, 0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0xbeb2f950UL,
5690     0x22cf9f74UL, 0xbf6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL,
5691     0x3f64aad7UL, 0x637b73afUL, 0xbe83487cUL, 0xe522591aUL, 0xbf3fc092UL,
5692     0xa158e8bcUL, 0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL,
5693     0xbfb9477fUL, 0xc2c2d2bcUL, 0xbd135ef9UL, 0x00000000UL, 0x00000000UL,
5694     0xf2fdb123UL, 0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
5695     0xfffffff8UL, 0xc41acb64UL, 0xbf05448dUL, 0x00000000UL, 0x00000000UL,
5696     0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL, 0x9e42962dUL,
5697     0xbed5aea5UL, 0x2579f8efUL, 0xbf8b2398UL, 0x288a1ed9UL, 0x3ec81441UL,
5698     0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0xbea57cd3UL, 0x5766336fUL,
5699     0xbf617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL, 0x3f62c646UL,
5700     0x6b8fb29cUL, 0xbe74e3a3UL, 0xdc4c0409UL, 0xbf33f952UL, 0x9bffe365UL,
5701     0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL, 0xbfb0cc62UL,
5702     0x016b907fUL, 0xbd119cbcUL, 0x00000000UL, 0x00000000UL, 0xe6b9d8faUL,
5703     0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
5704     0x5daf22a6UL, 0xbef429d7UL, 0x00000000UL, 0x00000000UL, 0x06bca545UL,
5705     0x3ef7a27dUL, 0x00000000UL, 0x00000000UL, 0x7211c19aUL, 0xbec41c3eUL,
5706     0x956ed53eUL, 0xbf7ae3f4UL, 0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL,
5707     0x3f96f713UL, 0x36661e6cUL, 0xbe936e09UL, 0x506f9381UL, 0xbf5122e8UL,
5708     0xcb6dd43fUL, 0x3e9041b9UL, 0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL,
5709     0xbe625a8aUL, 0xe5a0e9dcUL, 0xbf23499dUL, 0x110384ddUL, 0x3e5b1c2cUL,
5710     0x68d43db6UL, 0x3f2cb899UL, 0x6ecac000UL, 0xbfa0c414UL, 0xcd7dd58cUL,
5711     0x3d13500fUL, 0x00000000UL, 0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL,
5712     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL,
5713     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2bf70ebeUL, 0x3ef66a8fUL,
5714     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5715     0x00000000UL, 0xd644267fUL, 0x3ec22805UL, 0x16c16c17UL, 0x3f96c16cUL,
5716     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc4e09162UL,
5717     0x3e8d6db2UL, 0xbc011567UL, 0x3f61566aUL, 0x00000000UL, 0x00000000UL,
5718     0x00000000UL, 0x00000000UL, 0x1f79955cUL, 0x3e57da4eUL, 0x9334ef0bUL,
5719     0x3f2bbd77UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5720     0x00000000UL, 0x00000000UL, 0x55555555UL, 0x3fd55555UL, 0x00000000UL,
5721     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x5daf22a6UL, 0x3ef429d7UL,
5722     0x00000000UL, 0x00000000UL, 0x06bca545UL, 0x3ef7a27dUL, 0x00000000UL,
5723     0x00000000UL, 0x7211c19aUL, 0x3ec41c3eUL, 0x956ed53eUL, 0x3f7ae3f4UL,
5724     0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL, 0x3f96f713UL, 0x36661e6cUL,
5725     0x3e936e09UL, 0x506f9381UL, 0x3f5122e8UL, 0xcb6dd43fUL, 0x3e9041b9UL,
5726     0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL, 0x3e625a8aUL, 0xe5a0e9dcUL,
5727     0x3f23499dUL, 0x110384ddUL, 0x3e5b1c2cUL, 0x68d43db6UL, 0x3f2cb899UL,
5728     0x6ecac000UL, 0x3fa0c414UL, 0xcd7dd58cUL, 0xbd13500fUL, 0x00000000UL,
5729     0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL, 0x00000000UL, 0x3ff00000UL,
5730     0x00000000UL, 0xfffffff8UL, 0xc41acb64UL, 0x3f05448dUL, 0x00000000UL,
5731     0x00000000UL, 0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL,
5732     0x9e42962dUL, 0x3ed5aea5UL, 0x2579f8efUL, 0x3f8b2398UL, 0x288a1ed9UL,
5733     0x3ec81441UL, 0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0x3ea57cd3UL,
5734     0x5766336fUL, 0x3f617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL,
5735     0x3f62c646UL, 0x6b8fb29cUL, 0x3e74e3a3UL, 0xdc4c0409UL, 0x3f33f952UL,
5736     0x9bffe365UL, 0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL,
5737     0x3fb0cc62UL, 0x016b907fUL, 0x3d119cbcUL, 0x00000000UL, 0x00000000UL,
5738     0xe6b9d8faUL, 0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
5739     0xfffffff8UL, 0x1a154b97UL, 0x3f116b01UL, 0x00000000UL, 0x00000000UL,
5740     0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL, 0xb93820c8UL,
5741     0x3ee264d4UL, 0xbb6cbb18UL, 0x3f94ab8cUL, 0x888d4d92UL, 0x3ed0568bUL,
5742     0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0x3eb2f950UL, 0x22cf9f74UL,
5743     0x3f6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL, 0x3f64aad7UL,
5744     0x637b73afUL, 0x3e83487cUL, 0xe522591aUL, 0x3f3fc092UL, 0xa158e8bcUL,
5745     0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL, 0x3fb9477fUL,
5746     0xc2c2d2bcUL, 0x3d135ef9UL, 0x00000000UL, 0x00000000UL, 0xf2fdb123UL,
5747     0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
5748     0x7d98a556UL, 0x3f1a3958UL, 0x00000000UL, 0x00000000UL, 0x9d88dc01UL,
5749     0x3f0704c2UL, 0x00000000UL, 0x00000000UL, 0x73742a2bUL, 0x3eed054aUL,
5750     0x58844587UL, 0x3f9c2a13UL, 0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL,
5751     0x3f9a48f4UL, 0xa8dc9888UL, 0x3ebf8939UL, 0xaad4b5b8UL, 0x3f72f746UL,
5752     0x9102efa1UL, 0x3ea88f82UL, 0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL,
5753     0x3e90f456UL, 0x741fb4edUL, 0x3f46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL,
5754     0xca89ff3fUL, 0x3f36db70UL, 0xa8a2a000UL, 0x3fc0ee13UL, 0x3da24be1UL,
5755     0x3d338b9fUL, 0x00000000UL, 0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL,
5756     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL,
5757     0x3f231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL,
5758     0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0x3ef66191UL, 0x848a46c6UL,
5759     0x3fa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL,
5760     0xfdd299efUL, 0x3ec9dd1aUL, 0x3f8dbaafUL, 0x3f793363UL, 0x309fc6eaUL,
5761     0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0x3e9dae11UL,
5762     0x3e5c67b3UL, 0x3f4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL,
5763     0x3f3d1eb1UL, 0x29cfc000UL, 0x3fc549ceUL, 0xbf159358UL, 0x3d397b33UL,
5764     0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL,
5765     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x535ad890UL, 0x3f2b9320UL,
5766     0x00000000UL, 0x00000000UL, 0x018fdf1fUL, 0x3f16d61dUL, 0x00000000UL,
5767     0x00000000UL, 0x0359f1beUL, 0x3f0139e4UL, 0xa4317c6dUL, 0x3fa67e17UL,
5768     0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL, 0x3f9f455bUL, 0x51ccf238UL,
5769     0x3ed55317UL, 0xf437b9acUL, 0x3f804beeUL, 0xc791a2b5UL, 0x3ec0e993UL,
5770     0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL, 0x3eaa48a2UL, 0x0a268358UL,
5771     0x3f55a443UL, 0xdfd978e4UL, 0x3e94b61fUL, 0xd7767a58UL, 0x3f431806UL,
5772     0x2aea0000UL, 0x3fc9bbe8UL, 0x7723ea61UL, 0x3d3a2369UL, 0x00000000UL,
5773     0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL, 0x00000000UL, 0x3ff00000UL,
5774     0x00000000UL, 0xfffffff8UL, 0x4f48b8d3UL, 0x3f33eaf9UL, 0x00000000UL,
5775     0x00000000UL, 0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL,
5776     0xd0258911UL, 0x3f0abaf3UL, 0x23e49fe9UL, 0x3fab5a8cUL, 0x2d53222eUL,
5777     0x3ef60d15UL, 0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0x3ee1d3b5UL,
5778     0xdbf93b8eUL, 0x3f84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL,
5779     0x3f743924UL, 0x794a8297UL, 0x3eb7b7b9UL, 0xe015f797UL, 0x3f5d41f5UL,
5780     0xe41a4a56UL, 0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL,
5781     0x3fce49ceUL, 0x8c743719UL, 0xbd1eb860UL, 0x00000000UL, 0x00000000UL,
5782     0x1b4863cfUL, 0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
5783     0xfffffff8UL, 0x65965966UL, 0xc0219659UL, 0x00000000UL, 0x00000000UL,
5784     0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL, 0x83cd3723UL,
5785     0xc02c8342UL, 0x00000000UL, 0xc0000000UL, 0x55e6c23dUL, 0x403226e3UL,
5786     0x55555555UL, 0x40055555UL, 0x34451939UL, 0xc0371c96UL, 0xaaaaaaabUL,
5787     0xc00aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL, 0x40111111UL,
5788     0xa738201fUL, 0xc042bbceUL, 0x05b05b06UL, 0xc015b05bUL, 0x452b75e3UL,
5789     0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL, 0xbff00000UL,
5790     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL, 0x00000000UL,
5791     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5792     0xc7ab4d5aUL, 0xc0085e24UL, 0x00000000UL, 0x00000000UL, 0xe93ea75dUL,
5793     0x400b963dUL, 0x00000000UL, 0x00000000UL, 0x94a7f25aUL, 0xc00f37e2UL,
5794     0x4b6261cbUL, 0xbff5f984UL, 0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL,
5795     0x3ffaf5a5UL, 0x7f2ce8e3UL, 0xc013fe8bUL, 0xfe8e54faUL, 0xbffd7334UL,
5796     0x670d618dUL, 0x4016a10cUL, 0x4db97058UL, 0x4000e012UL, 0x24df44ddUL,
5797     0xc0199c5fUL, 0x697d6eceUL, 0xc003006eUL, 0x83298b82UL, 0x401cfc4dUL,
5798     0x19d490d6UL, 0x40058c19UL, 0x2ae42850UL, 0xbfea4300UL, 0x118e20e6UL,
5799     0x3c7a6db8UL, 0x00000000UL, 0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL,
5800     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL,
5801     0xbff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL,
5802     0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0xbff3972eUL, 0xe93463bdUL,
5803     0xbfeeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL,
5804     0xa04e8ea3UL, 0xbff4541aUL, 0x386accd3UL, 0xbff1369eUL, 0x222a66ddUL,
5805     0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0xbff5178fUL,
5806     0xddaa0031UL, 0xbff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL,
5807     0x3ff29311UL, 0x2ab7f990UL, 0xbfe561b8UL, 0x209c7df1UL, 0xbc87a8c5UL,
5808     0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL,
5809     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xcc03e501UL, 0xbfdff10fUL,
5810     0x00000000UL, 0x00000000UL, 0x44a4e845UL, 0x3fddb63bUL, 0x00000000UL,
5811     0x00000000UL, 0x3768ad9fUL, 0xbfdb72a4UL, 0x3dd01ccaUL, 0xbfe5fdb9UL,
5812     0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL, 0x3fe977f9UL, 0xd013b3abUL,
5813     0xbfd78ca3UL, 0xbf0bf914UL, 0xbfe4f192UL, 0x4d53e730UL, 0x3fd5d060UL,
5814     0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL, 0xbfd4322aUL, 0x5936a835UL,
5815     0xbfe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL, 0xef478605UL, 0x3fe1659eUL,
5816     0x190834ecUL, 0xbfe11ab7UL, 0xcdb625eaUL, 0x3c8e564bUL, 0x00000000UL,
5817     0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL, 0x00000000UL, 0x00000000UL,
5818     0x00000000UL, 0x00000000UL, 0x56f37042UL, 0xbfccfc56UL, 0x00000000UL,
5819     0x00000000UL, 0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL,
5820     0x3d0e7c5dUL, 0xbfc50533UL, 0x9bed9b2eUL, 0xbfdf0ed9UL, 0x5fe7c47cUL,
5821     0x3fc1f250UL, 0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0xbfbe5c71UL,
5822     0x86362c20UL, 0xbfda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL,
5823     0x3fd911bdUL, 0xb56658beUL, 0xbfb5e4c7UL, 0x93a2fd76UL, 0xbfd3c092UL,
5824     0xda271794UL, 0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL,
5825     0xbfda8279UL, 0xb68c1467UL, 0xbc708b2fUL, 0x00000000UL, 0x3ff00000UL,
5826     0x980c4337UL, 0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5827     0x00000000UL, 0x9314533eUL, 0xbfbb8ec5UL, 0x00000000UL, 0x00000000UL,
5828     0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL, 0xdcb427fdUL,
5829     0xbfb13950UL, 0xd87ab0bbUL, 0xbfd5335eUL, 0xce0ae8a5UL, 0x3fabb382UL,
5830     0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0xbfa552f1UL, 0x59f21a6dUL,
5831     0xbfd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL, 0x3fd0576cUL,
5832     0x8f2c2950UL, 0xbf9a4898UL, 0xc0b3f22cUL, 0xbfc59462UL, 0x1883a4b8UL,
5833     0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL, 0xbfd36a08UL,
5834     0x1dce993dUL, 0x3c6d704dUL, 0x00000000UL, 0x3ff00000UL, 0x2b82ab63UL,
5835     0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
5836     0x5a279ea3UL, 0xbfaa3407UL, 0x00000000UL, 0x00000000UL, 0x432d65faUL,
5837     0x3fa70153UL, 0x00000000UL, 0x00000000UL, 0x891a4602UL, 0xbf9d03efUL,
5838     0xd62ca5f8UL, 0xbfca77d9UL, 0xb35f4628UL, 0x3f97a265UL, 0x433258faUL,
5839     0x3fd8cf51UL, 0xb58fd909UL, 0xbf8f88e3UL, 0x01771ceaUL, 0xbfc2b154UL,
5840     0xf3562f8eUL, 0x3f888f57UL, 0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL,
5841     0xbf80f44cUL, 0x214368e9UL, 0xbfb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL,
5842     0x172dbbf0UL, 0x3fb6cb8eUL, 0xe0553158UL, 0xbfc975f5UL, 0x593fe814UL,
5843     0xbc2ef5d3UL, 0x00000000UL, 0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL,
5844     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL,
5845     0xbf953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL,
5846     0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0xbf85ad63UL, 0xdc230b9bUL,
5847     0xbfb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL,
5848     0x77bb08baUL, 0xbf757c85UL, 0xb6247521UL, 0xbfb1381eUL, 0x5922170cUL,
5849     0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0xbf64e391UL,
5850     0x3e666320UL, 0xbfa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL,
5851     0x3fafa8aeUL, 0x8c5b2da2UL, 0xbfb936bbUL, 0x4e88f7a5UL, 0xbc587d05UL,
5852     0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
5853     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x6dc9c883UL, 0x3fe45f30UL,
5854     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x43780000UL, 0x00000000UL,
5855     0x43380000UL, 0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL,
5856     0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL, 0x3707344aUL,
5857     0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL, 0x00000000UL, 0x80000000UL,
5858     0x00000000UL, 0x80000000UL, 0x676733afUL, 0x3d32e7b9UL, 0x00000000UL,
5859     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
5860     0x00000000UL, 0x7ff00000UL, 0x00000000UL, 0x00000000UL, 0xfffc0000UL,
5861     0xffffffffUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
5862     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
5863     0x00000000UL, 0x00000000UL, 0x3ca00000UL, 0x00000000UL, 0x00000000UL,
5864     0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL, 0x00000000UL,
5865     0x40300000UL, 0x00000000UL, 0x3ff00000UL
5866 };
5867 
5868 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
5869 
5870   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;
5871   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;
5872   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;
5873   Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
5874 
5875   assert_different_registers(tmp, eax, ecx, edx);
5876 
5877   address static_const_table_tan = (address)_static_const_table_tan;
5878 
5879   bind(start);
5880   subl(rsp, 120);
5881   movl(Address(rsp, 56), tmp);
5882   lea(tmp, ExternalAddress(static_const_table_tan));
5883   movsd(xmm0, Address(rsp, 128));
5884   pextrw(eax, xmm0, 3);
5885   andl(eax, 32767);
5886   subl(eax, 14368);
5887   cmpl(eax, 2216);
5888   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
5889   movdqu(xmm5, Address(tmp, 5840));
5890   movdqu(xmm6, Address(tmp, 5856));
5891   unpcklpd(xmm0, xmm0);
5892   movdqu(xmm4, Address(tmp, 5712));
5893   andpd(xmm4, xmm0);
5894   movdqu(xmm1, Address(tmp, 5632));
5895   mulpd(xmm1, xmm0);
5896   por(xmm5, xmm4);
5897   addpd(xmm1, xmm5);
5898   movdqu(xmm7, xmm1);
5899   unpckhpd(xmm7, xmm7);
5900   cvttsd2sil(edx, xmm7);
5901   cvttpd2dq(xmm1, xmm1);
5902   cvtdq2pd(xmm1, xmm1);
5903   mulpd(xmm1, xmm6);
5904   movdqu(xmm3, Address(tmp, 5664));
5905   movsd(xmm5, Address(tmp, 5728));
5906   addl(edx, 469248);
5907   movdqu(xmm4, Address(tmp, 5680));
5908   mulpd(xmm3, xmm1);
5909   andl(edx, 31);
5910   mulsd(xmm5, xmm1);
5911   movl(ecx, edx);
5912   mulpd(xmm4, xmm1);
5913   shll(ecx, 1);
5914   subpd(xmm0, xmm3);
5915   mulpd(xmm1, Address(tmp, 5696));
5916   addl(edx, ecx);
5917   shll(ecx, 2);
5918   addl(edx, ecx);
5919   addsd(xmm5, xmm0);
5920   movdqu(xmm2, xmm0);
5921   subpd(xmm0, xmm4);
5922   movsd(xmm6, Address(tmp, 5744));
5923   shll(edx, 4);
5924   lea(eax, Address(tmp, 0));
5925   andpd(xmm5, Address(tmp, 5776));
5926   movdqu(xmm3, xmm0);
5927   addl(eax, edx);
5928   subpd(xmm2, xmm0);
5929   unpckhpd(xmm0, xmm0);
5930   divsd(xmm6, xmm5);
5931   subpd(xmm2, xmm4);
5932   movdqu(xmm7, Address(eax, 16));
5933   subsd(xmm3, xmm5);
5934   mulpd(xmm7, xmm0);
5935   subpd(xmm2, xmm1);
5936   movdqu(xmm1, Address(eax, 48));
5937   mulpd(xmm1, xmm0);
5938   movdqu(xmm4, Address(eax, 96));
5939   mulpd(xmm4, xmm0);
5940   addsd(xmm2, xmm3);
5941   movdqu(xmm3, xmm0);
5942   mulpd(xmm0, xmm0);
5943   addpd(xmm7, Address(eax, 0));
5944   addpd(xmm1, Address(eax, 32));
5945   mulpd(xmm1, xmm0);
5946   addpd(xmm4, Address(eax, 80));
5947   addpd(xmm7, xmm1);
5948   movdqu(xmm1, Address(eax, 112));
5949   mulpd(xmm1, xmm0);
5950   mulpd(xmm0, xmm0);
5951   addpd(xmm4, xmm1);
5952   movdqu(xmm1, Address(eax, 64));
5953   mulpd(xmm1, xmm0);
5954   addpd(xmm7, xmm1);
5955   movdqu(xmm1, xmm3);
5956   mulpd(xmm3, xmm0);
5957   mulsd(xmm0, xmm0);
5958   mulpd(xmm1, Address(eax, 144));
5959   mulpd(xmm4, xmm3);
5960   movdqu(xmm3, xmm1);
5961   addpd(xmm7, xmm4);
5962   movdqu(xmm4, xmm1);
5963   mulsd(xmm0, xmm7);
5964   unpckhpd(xmm7, xmm7);
5965   addsd(xmm0, xmm7);
5966   unpckhpd(xmm1, xmm1);
5967   addsd(xmm3, xmm1);
5968   subsd(xmm4, xmm3);
5969   addsd(xmm1, xmm4);
5970   movdqu(xmm4, xmm2);
5971   movsd(xmm7, Address(eax, 144));
5972   unpckhpd(xmm2, xmm2);
5973   addsd(xmm7, Address(eax, 152));
5974   mulsd(xmm7, xmm2);
5975   addsd(xmm7, Address(eax, 136));
5976   addsd(xmm7, xmm1);
5977   addsd(xmm0, xmm7);
5978   movsd(xmm7, Address(tmp, 5744));
5979   mulsd(xmm4, xmm6);
5980   movsd(xmm2, Address(eax, 168));
5981   andpd(xmm2, xmm6);
5982   mulsd(xmm5, xmm2);
5983   mulsd(xmm6, Address(eax, 160));
5984   subsd(xmm7, xmm5);
5985   subsd(xmm2, Address(eax, 128));
5986   subsd(xmm7, xmm4);
5987   mulsd(xmm7, xmm6);
5988   movdqu(xmm4, xmm3);
5989   subsd(xmm3, xmm2);
5990   addsd(xmm2, xmm3);
5991   subsd(xmm4, xmm2);
5992   addsd(xmm0, xmm4);
5993   subsd(xmm0, xmm7);
5994   addsd(xmm0, xmm3);
5995   movsd(Address(rsp, 0), xmm0);
5996   fld_d(Address(rsp, 0));
5997   jmp(L_2TAG_PACKET_1_0_2);
5998 
5999   bind(L_2TAG_PACKET_0_0_2);
6000   jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
6001   shrl(eax, 4);
6002   cmpl(eax, 268434558);
6003   jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
6004   movdqu(xmm3, xmm0);
6005   mulsd(xmm3, Address(tmp, 5808));
6006 
6007   bind(L_2TAG_PACKET_3_0_2);
6008   movsd(xmm3, Address(tmp, 5792));
6009   mulsd(xmm3, xmm0);
6010   addsd(xmm3, xmm0);
6011   mulsd(xmm3, Address(tmp, 5808));
6012   movsd(Address(rsp, 0), xmm3);
6013   fld_d(Address(rsp, 0));
6014   jmp(L_2TAG_PACKET_1_0_2);
6015 
6016   bind(L_2TAG_PACKET_2_0_2);
6017   movq(xmm7, Address(tmp, 5712));
6018   andpd(xmm7, xmm0);
6019   xorpd(xmm7, xmm0);
6020   ucomisd(xmm7, Address(tmp, 5760));
6021   jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
6022   subl(rsp, 32);
6023   movsd(Address(rsp, 0), xmm0);
6024   lea(eax, Address(rsp, 40));
6025   movl(Address(rsp, 8), eax);
6026   movl(eax, 2);
6027   movl(Address(rsp, 12), eax);
6028   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_tan_cot_huge())));
6029   addl(rsp, 32);
6030   fld_d(Address(rsp, 8));
6031   jmp(L_2TAG_PACKET_1_0_2);
6032 
6033   bind(L_2TAG_PACKET_4_0_2);
6034   movq(Address(rsp, 0), xmm0);
6035   fld_d(Address(rsp, 0));
6036   fsub_d(Address(rsp, 0));
6037 
6038   bind(L_2TAG_PACKET_1_0_2);
6039   movl(tmp, Address(rsp, 56));
6040 }