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