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