1 /* 2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. 3 * Copyright (c) 2016, Intel Corporation. All rights reserved. 4 * Intel Math Library (LIBM) Source Code 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 package org.graalvm.compiler.lir.amd64; 28 29 import static jdk.vm.ci.amd64.AMD64.r10; 30 import static jdk.vm.ci.amd64.AMD64.r11; 31 import static jdk.vm.ci.amd64.AMD64.r8; 32 import static jdk.vm.ci.amd64.AMD64.r9; 33 import static jdk.vm.ci.amd64.AMD64.rax; 34 import static jdk.vm.ci.amd64.AMD64.rcx; 35 import static jdk.vm.ci.amd64.AMD64.rdx; 36 import static jdk.vm.ci.amd64.AMD64.rsp; 37 import static jdk.vm.ci.amd64.AMD64.xmm0; 38 import static jdk.vm.ci.amd64.AMD64.xmm1; 39 import static jdk.vm.ci.amd64.AMD64.xmm2; 40 import static jdk.vm.ci.amd64.AMD64.xmm3; 41 import static jdk.vm.ci.amd64.AMD64.xmm4; 42 import static jdk.vm.ci.amd64.AMD64.xmm5; 43 import static jdk.vm.ci.amd64.AMD64.xmm6; 44 import static jdk.vm.ci.amd64.AMD64.xmm7; 45 import static org.graalvm.compiler.lir.amd64.AMD64HotSpotHelper.pointerConstant; 46 import static org.graalvm.compiler.lir.amd64.AMD64HotSpotHelper.recordExternalAddress; 47 48 import org.graalvm.compiler.asm.Label; 49 import org.graalvm.compiler.asm.amd64.AMD64Address; 50 import org.graalvm.compiler.asm.amd64.AMD64Assembler; 51 import org.graalvm.compiler.asm.amd64.AMD64MacroAssembler; 52 import org.graalvm.compiler.lir.LIRInstructionClass; 53 import org.graalvm.compiler.lir.asm.ArrayDataPointerConstant; 54 import org.graalvm.compiler.lir.asm.CompilationResultBuilder; 55 56 import jdk.vm.ci.code.Register; 57 58 /** 59 * <pre> 60 * ALGORITHM DESCRIPTION - POW() 61 * --------------------- 62 * 63 * Let x=2^k * mx, mx in [1,2) 64 * 65 * log2(x) calculation: 66 * 67 * Get B~1/mx based on the output of rcpps instruction (B0) 68 * B = int((B0*LH*2^9+0.5))/2^9 69 * LH is a short approximation for log2(e) 70 * 71 * Reduced argument, scaled by LH: 72 * r=B*mx-LH (computed accurately in high and low parts) 73 * 74 * log2(x) result: k - log2(B) + p(r) 75 * p(r) is a degree 8 polynomial 76 * -log2(B) read from data table (high, low parts) 77 * log2(x) is formed from high and low parts 78 * For |x| in [1-1/32, 1+1/16), a slower but more accurate computation 79 * based om the same table design is performed. 80 * 81 * Main path is taken if | floor(log2(|log2(|x|)|) + floor(log2|y|) | < 8, 82 * to filter out all potential OF/UF cases. 83 * exp2(y*log2(x)) is computed using an 8-bit index table and a degree 5 84 * polynomial 85 * 86 * Special cases: 87 * pow(-0,y) = -INF and raises the divide-by-zero exception for y an odd 88 * integer < 0. 89 * pow(-0,y) = +INF and raises the divide-by-zero exception for y < 0 and 90 * not an odd integer. 91 * pow(-0,y) = -0 for y an odd integer > 0. 92 * pow(-0,y) = +0 for y > 0 and not an odd integer. 93 * pow(-1,-INF) = NaN. 94 * pow(+1,y) = NaN for any y, even a NaN. 95 * pow(x,-0) = 1 for any x, even a NaN. 96 * pow(x,y) = a NaN and raises the invalid exception for finite x < 0 and 97 * finite non-integer y. 98 * pow(x,-INF) = +INF for |x|<1. 99 * pow(x,-INF) = +0 for |x|>1. 100 * pow(x,+INF) = +0 for |x|<1. 101 * pow(x,+INF) = +INF for |x|>1. 102 * pow(-INF,y) = -0 for y an odd integer < 0. 103 * pow(-INF,y) = +0 for y < 0 and not an odd integer. 104 * pow(-INF,y) = -INF for y an odd integer > 0. 105 * pow(-INF,y) = +INF for y > 0 and not an odd integer. 106 * pow(+INF,y) = +0 for y <0. 107 * pow(+INF,y) = +INF for y >0. 108 * </pre> 109 */ 110 public final class AMD64MathPowOp extends AMD64MathIntrinsicBinaryOp { 111 112 public static final LIRInstructionClass<AMD64MathPowOp> TYPE = LIRInstructionClass.create(AMD64MathPowOp.class); 113 114 public AMD64MathPowOp() { 115 super(TYPE, /* GPR */ rax, rcx, rdx, r8, r9, r10, r11, 116 /* XMM */ xmm2, xmm3, xmm4, xmm5, xmm6, xmm7); 117 } 118 119 private ArrayDataPointerConstant highsigmask = pointerConstant(16, new int[]{ 120 //@formatter:off 121 0x00000000, 0xfffff800, 0x00000000, 0xfffff800 122 //@formatter:on 123 }); 124 125 private ArrayDataPointerConstant log2E = pointerConstant(16, new int[]{ 126 //@formatter:off 127 0x00000000, 0x3ff72000, 0x161bb241, 0xbf5dabe1 128 //@formatter:on 129 }); 130 131 private ArrayDataPointerConstant highmaskY = pointerConstant(8, new int[]{ 132 //@formatter:off 133 0x00000000, 0xfffffff8, 134 }); 135 private ArrayDataPointerConstant highmaskY8 = pointerConstant(8, new int[]{ 136 0x00000000, 0xffffffff 137 //@formatter:on 138 }); 139 140 private ArrayDataPointerConstant tExp = pointerConstant(16, new int[]{ 141 //@formatter:off 142 0x00000000, 0x3ff00000, 0x00000000, 0x3b700000, 0xfa5abcbf, 143 0x3ff00b1a, 0xa7609f71, 0xbc84f6b2, 0xa9fb3335, 0x3ff0163d, 144 0x9ab8cdb7, 0x3c9b6129, 0x143b0281, 0x3ff02168, 0x0fc54eb6, 145 0xbc82bf31, 0x3e778061, 0x3ff02c9a, 0x535b085d, 0xbc719083, 146 0x2e11bbcc, 0x3ff037d4, 0xeeade11a, 0x3c656811, 0xe86e7f85, 147 0x3ff04315, 0x1977c96e, 0xbc90a31c, 0x72f654b1, 0x3ff04e5f, 148 0x3aa0d08c, 0x3c84c379, 0xd3158574, 0x3ff059b0, 0xa475b465, 149 0x3c8d73e2, 0x0e3c1f89, 0x3ff0650a, 0x5799c397, 0xbc95cb7b, 150 0x29ddf6de, 0x3ff0706b, 0xe2b13c27, 0xbc8c91df, 0x2b72a836, 151 0x3ff07bd4, 0x54458700, 0x3c832334, 0x18759bc8, 0x3ff08745, 152 0x4bb284ff, 0x3c6186be, 0xf66607e0, 0x3ff092bd, 0x800a3fd1, 153 0xbc968063, 0xcac6f383, 0x3ff09e3e, 0x18316136, 0x3c914878, 154 0x9b1f3919, 0x3ff0a9c7, 0x873d1d38, 0x3c85d16c, 0x6cf9890f, 155 0x3ff0b558, 0x4adc610b, 0x3c98a62e, 0x45e46c85, 0x3ff0c0f1, 156 0x06d21cef, 0x3c94f989, 0x2b7247f7, 0x3ff0cc92, 0x16e24f71, 157 0x3c901edc, 0x23395dec, 0x3ff0d83b, 0xe43f316a, 0xbc9bc14d, 158 0x32d3d1a2, 0x3ff0e3ec, 0x27c57b52, 0x3c403a17, 0x5fdfa9c5, 159 0x3ff0efa5, 0xbc54021b, 0xbc949db9, 0xaffed31b, 0x3ff0fb66, 160 0xc44ebd7b, 0xbc6b9bed, 0x28d7233e, 0x3ff10730, 0x1692fdd5, 161 0x3c8d46eb, 0xd0125b51, 0x3ff11301, 0x39449b3a, 0xbc96c510, 162 0xab5e2ab6, 0x3ff11edb, 0xf703fb72, 0xbc9ca454, 0xc06c31cc, 163 0x3ff12abd, 0xb36ca5c7, 0xbc51b514, 0x14f204ab, 0x3ff136a8, 164 0xba48dcf0, 0xbc67108f, 0xaea92de0, 0x3ff1429a, 0x9af1369e, 165 0xbc932fbf, 0x934f312e, 0x3ff14e95, 0x39bf44ab, 0xbc8b91e8, 166 0xc8a58e51, 0x3ff15a98, 0xb9eeab0a, 0x3c82406a, 0x5471c3c2, 167 0x3ff166a4, 0x82ea1a32, 0x3c58f23b, 0x3c7d517b, 0x3ff172b8, 168 0xb9d78a76, 0xbc819041, 0x8695bbc0, 0x3ff17ed4, 0xe2ac5a64, 169 0x3c709e3f, 0x388c8dea, 0x3ff18af9, 0xd1970f6c, 0xbc911023, 170 0x58375d2f, 0x3ff19726, 0x85f17e08, 0x3c94aadd, 0xeb6fcb75, 171 0x3ff1a35b, 0x7b4968e4, 0x3c8e5b4c, 0xf8138a1c, 0x3ff1af99, 172 0xa4b69280, 0x3c97bf85, 0x84045cd4, 0x3ff1bbe0, 0x352ef607, 173 0xbc995386, 0x95281c6b, 0x3ff1c82f, 0x8010f8c9, 0x3c900977, 174 0x3168b9aa, 0x3ff1d487, 0x00a2643c, 0x3c9e016e, 0x5eb44027, 175 0x3ff1e0e7, 0x088cb6de, 0xbc96fdd8, 0x22fcd91d, 0x3ff1ed50, 176 0x027bb78c, 0xbc91df98, 0x8438ce4d, 0x3ff1f9c1, 0xa097af5c, 177 0xbc9bf524, 0x88628cd6, 0x3ff2063b, 0x814a8495, 0x3c8dc775, 178 0x3578a819, 0x3ff212be, 0x2cfcaac9, 0x3c93592d, 0x917ddc96, 179 0x3ff21f49, 0x9494a5ee, 0x3c82a97e, 0xa27912d1, 0x3ff22bdd, 180 0x5577d69f, 0x3c8d34fb, 0x6e756238, 0x3ff2387a, 0xb6c70573, 181 0x3c99b07e, 0xfb82140a, 0x3ff2451f, 0x911ca996, 0x3c8acfcc, 182 0x4fb2a63f, 0x3ff251ce, 0xbef4f4a4, 0x3c8ac155, 0x711ece75, 183 0x3ff25e85, 0x4ac31b2c, 0x3c93e1a2, 0x65e27cdd, 0x3ff26b45, 184 0x9940e9d9, 0x3c82bd33, 0x341ddf29, 0x3ff2780e, 0x05f9e76c, 185 0x3c9e067c, 0xe1f56381, 0x3ff284df, 0x8c3f0d7e, 0xbc9a4c3a, 186 0x7591bb70, 0x3ff291ba, 0x28401cbd, 0xbc82cc72, 0xf51fdee1, 187 0x3ff29e9d, 0xafad1255, 0x3c8612e8, 0x66d10f13, 0x3ff2ab8a, 188 0x191690a7, 0xbc995743, 0xd0dad990, 0x3ff2b87f, 0xd6381aa4, 189 0xbc410adc, 0x39771b2f, 0x3ff2c57e, 0xa6eb5124, 0xbc950145, 190 0xa6e4030b, 0x3ff2d285, 0x54db41d5, 0x3c900247, 0x1f641589, 191 0x3ff2df96, 0xfbbce198, 0x3c9d16cf, 0xa93e2f56, 0x3ff2ecaf, 192 0x45d52383, 0x3c71ca0f, 0x4abd886b, 0x3ff2f9d2, 0x532bda93, 193 0xbc653c55, 0x0a31b715, 0x3ff306fe, 0xd23182e4, 0x3c86f46a, 194 0xedeeb2fd, 0x3ff31432, 0xf3f3fcd1, 0x3c8959a3, 0xfc4cd831, 195 0x3ff32170, 0x8e18047c, 0x3c8a9ce7, 0x3ba8ea32, 0x3ff32eb8, 196 0x3cb4f318, 0xbc9c45e8, 0xb26416ff, 0x3ff33c08, 0x843659a6, 197 0x3c932721, 0x66e3fa2d, 0x3ff34962, 0x930881a4, 0xbc835a75, 198 0x5f929ff1, 0x3ff356c5, 0x5c4e4628, 0xbc8b5cee, 0xa2de883b, 199 0x3ff36431, 0xa06cb85e, 0xbc8c3144, 0x373aa9cb, 0x3ff371a7, 200 0xbf42eae2, 0xbc963aea, 0x231e754a, 0x3ff37f26, 0x9eceb23c, 201 0xbc99f5ca, 0x6d05d866, 0x3ff38cae, 0x3c9904bd, 0xbc9e958d, 202 0x1b7140ef, 0x3ff39a40, 0xfc8e2934, 0xbc99a9a5, 0x34e59ff7, 203 0x3ff3a7db, 0xd661f5e3, 0xbc75e436, 0xbfec6cf4, 0x3ff3b57f, 204 0xe26fff18, 0x3c954c66, 0xc313a8e5, 0x3ff3c32d, 0x375d29c3, 205 0xbc9efff8, 0x44ede173, 0x3ff3d0e5, 0x8c284c71, 0x3c7fe8d0, 206 0x4c123422, 0x3ff3dea6, 0x11f09ebc, 0x3c8ada09, 0xdf1c5175, 207 0x3ff3ec70, 0x7b8c9bca, 0xbc8af663, 0x04ac801c, 0x3ff3fa45, 208 0xf956f9f3, 0xbc97d023, 0xc367a024, 0x3ff40822, 0xb6f4d048, 209 0x3c8bddf8, 0x21f72e2a, 0x3ff4160a, 0x1c309278, 0xbc5ef369, 210 0x2709468a, 0x3ff423fb, 0xc0b314dd, 0xbc98462d, 0xd950a897, 211 0x3ff431f5, 0xe35f7999, 0xbc81c7dd, 0x3f84b9d4, 0x3ff43ffa, 212 0x9704c003, 0x3c8880be, 0x6061892d, 0x3ff44e08, 0x04ef80d0, 213 0x3c489b7a, 0x42a7d232, 0x3ff45c20, 0x82fb1f8e, 0xbc686419, 214 0xed1d0057, 0x3ff46a41, 0xd1648a76, 0x3c9c944b, 0x668b3237, 215 0x3ff4786d, 0xed445733, 0xbc9c20f0, 0xb5c13cd0, 0x3ff486a2, 216 0xb69062f0, 0x3c73c1a3, 0xe192aed2, 0x3ff494e1, 0x5e499ea0, 217 0xbc83b289, 0xf0d7d3de, 0x3ff4a32a, 0xf3d1be56, 0x3c99cb62, 218 0xea6db7d7, 0x3ff4b17d, 0x7f2897f0, 0xbc8125b8, 0xd5362a27, 219 0x3ff4bfda, 0xafec42e2, 0x3c7d4397, 0xb817c114, 0x3ff4ce41, 220 0x690abd5d, 0x3c905e29, 0x99fddd0d, 0x3ff4dcb2, 0xbc6a7833, 221 0x3c98ecdb, 0x81d8abff, 0x3ff4eb2d, 0x2e5d7a52, 0xbc95257d, 222 0x769d2ca7, 0x3ff4f9b2, 0xd25957e3, 0xbc94b309, 0x7f4531ee, 223 0x3ff50841, 0x49b7465f, 0x3c7a249b, 0xa2cf6642, 0x3ff516da, 224 0x69bd93ef, 0xbc8f7685, 0xe83f4eef, 0x3ff5257d, 0x43efef71, 225 0xbc7c998d, 0x569d4f82, 0x3ff5342b, 0x1db13cad, 0xbc807abe, 226 0xf4f6ad27, 0x3ff542e2, 0x192d5f7e, 0x3c87926d, 0xca5d920f, 227 0x3ff551a4, 0xefede59b, 0xbc8d689c, 0xdde910d2, 0x3ff56070, 228 0x168eebf0, 0xbc90fb6e, 0x36b527da, 0x3ff56f47, 0x011d93ad, 229 0x3c99bb2c, 0xdbe2c4cf, 0x3ff57e27, 0x8a57b9c4, 0xbc90b98c, 230 0xd497c7fd, 0x3ff58d12, 0x5b9a1de8, 0x3c8295e1, 0x27ff07cc, 231 0x3ff59c08, 0xe467e60f, 0xbc97e2ce, 0xdd485429, 0x3ff5ab07, 232 0x054647ad, 0x3c96324c, 0xfba87a03, 0x3ff5ba11, 0x4c233e1a, 233 0xbc9b77a1, 0x8a5946b7, 0x3ff5c926, 0x816986a2, 0x3c3c4b1b, 234 0x90998b93, 0x3ff5d845, 0xa8b45643, 0xbc9cd6a7, 0x15ad2148, 235 0x3ff5e76f, 0x3080e65e, 0x3c9ba6f9, 0x20dceb71, 0x3ff5f6a3, 236 0xe3cdcf92, 0xbc89eadd, 0xb976dc09, 0x3ff605e1, 0x9b56de47, 237 0xbc93e242, 0xe6cdf6f4, 0x3ff6152a, 0x4ab84c27, 0x3c9e4b3e, 238 0xb03a5585, 0x3ff6247e, 0x7e40b497, 0xbc9383c1, 0x1d1929fd, 239 0x3ff633dd, 0xbeb964e5, 0x3c984710, 0x34ccc320, 0x3ff64346, 240 0x759d8933, 0xbc8c483c, 0xfebc8fb7, 0x3ff652b9, 0xc9a73e09, 241 0xbc9ae3d5, 0x82552225, 0x3ff66238, 0x87591c34, 0xbc9bb609, 242 0xc70833f6, 0x3ff671c1, 0x586c6134, 0xbc8e8732, 0xd44ca973, 243 0x3ff68155, 0x44f73e65, 0x3c6038ae, 0xb19e9538, 0x3ff690f4, 244 0x9aeb445d, 0x3c8804bd, 0x667f3bcd, 0x3ff6a09e, 0x13b26456, 245 0xbc9bdd34, 0xfa75173e, 0x3ff6b052, 0x2c9a9d0e, 0x3c7a38f5, 246 0x750bdabf, 0x3ff6c012, 0x67ff0b0d, 0xbc728956, 0xddd47645, 247 0x3ff6cfdc, 0xb6f17309, 0x3c9c7aa9, 0x3c651a2f, 0x3ff6dfb2, 248 0x683c88ab, 0xbc6bbe3a, 0x98593ae5, 0x3ff6ef92, 0x9e1ac8b2, 249 0xbc90b974, 0xf9519484, 0x3ff6ff7d, 0x25860ef6, 0xbc883c0f, 250 0x66f42e87, 0x3ff70f74, 0xd45aa65f, 0x3c59d644, 0xe8ec5f74, 251 0x3ff71f75, 0x86887a99, 0xbc816e47, 0x86ead08a, 0x3ff72f82, 252 0x2cd62c72, 0xbc920aa0, 0x48a58174, 0x3ff73f9a, 0x6c65d53c, 253 0xbc90a8d9, 0x35d7cbfd, 0x3ff74fbd, 0x618a6e1c, 0x3c9047fd, 254 0x564267c9, 0x3ff75feb, 0x57316dd3, 0xbc902459, 0xb1ab6e09, 255 0x3ff77024, 0x169147f8, 0x3c9b7877, 0x4fde5d3f, 0x3ff78069, 256 0x0a02162d, 0x3c9866b8, 0x38ac1cf6, 0x3ff790b9, 0x62aadd3e, 257 0x3c9349a8, 0x73eb0187, 0x3ff7a114, 0xee04992f, 0xbc841577, 258 0x0976cfdb, 0x3ff7b17b, 0x8468dc88, 0xbc9bebb5, 0x0130c132, 259 0x3ff7c1ed, 0xd1164dd6, 0x3c9f124c, 0x62ff86f0, 0x3ff7d26a, 260 0xfb72b8b4, 0x3c91bddb, 0x36cf4e62, 0x3ff7e2f3, 0xba15797e, 261 0x3c705d02, 0x8491c491, 0x3ff7f387, 0xcf9311ae, 0xbc807f11, 262 0x543e1a12, 0x3ff80427, 0x626d972b, 0xbc927c86, 0xadd106d9, 263 0x3ff814d2, 0x0d151d4d, 0x3c946437, 0x994cce13, 0x3ff82589, 264 0xd41532d8, 0xbc9d4c1d, 0x1eb941f7, 0x3ff8364c, 0x31df2bd5, 265 0x3c999b9a, 0x4623c7ad, 0x3ff8471a, 0xa341cdfb, 0xbc88d684, 266 0x179f5b21, 0x3ff857f4, 0xf8b216d0, 0xbc5ba748, 0x9b4492ed, 267 0x3ff868d9, 0x9bd4f6ba, 0xbc9fc6f8, 0xd931a436, 0x3ff879ca, 268 0xd2db47bd, 0x3c85d2d7, 0xd98a6699, 0x3ff88ac7, 0xf37cb53a, 269 0x3c9994c2, 0xa478580f, 0x3ff89bd0, 0x4475202a, 0x3c9d5395, 270 0x422aa0db, 0x3ff8ace5, 0x56864b27, 0x3c96e9f1, 0xbad61778, 271 0x3ff8be05, 0xfc43446e, 0x3c9ecb5e, 0x16b5448c, 0x3ff8cf32, 272 0x32e9e3aa, 0xbc70d55e, 0x5e0866d9, 0x3ff8e06a, 0x6fc9b2e6, 273 0xbc97114a, 0x99157736, 0x3ff8f1ae, 0xa2e3976c, 0x3c85cc13, 274 0xd0282c8a, 0x3ff902fe, 0x85fe3fd2, 0x3c9592ca, 0x0b91ffc6, 275 0x3ff9145b, 0x2e582524, 0xbc9dd679, 0x53aa2fe2, 0x3ff925c3, 276 0xa639db7f, 0xbc83455f, 0xb0cdc5e5, 0x3ff93737, 0x81b57ebc, 277 0xbc675fc7, 0x2b5f98e5, 0x3ff948b8, 0x797d2d99, 0xbc8dc3d6, 278 0xcbc8520f, 0x3ff95a44, 0x96a5f039, 0xbc764b7c, 0x9a7670b3, 279 0x3ff96bdd, 0x7f19c896, 0xbc5ba596, 0x9fde4e50, 0x3ff97d82, 280 0x7c1b85d1, 0xbc9d185b, 0xe47a22a2, 0x3ff98f33, 0xa24c78ec, 281 0x3c7cabda, 0x70ca07ba, 0x3ff9a0f1, 0x91cee632, 0xbc9173bd, 282 0x4d53fe0d, 0x3ff9b2bb, 0x4df6d518, 0xbc9dd84e, 0x82a3f090, 283 0x3ff9c491, 0xb071f2be, 0x3c7c7c46, 0x194bb8d5, 0x3ff9d674, 284 0xa3dd8233, 0xbc9516be, 0x19e32323, 0x3ff9e863, 0x78e64c6e, 285 0x3c7824ca, 0x8d07f29e, 0x3ff9fa5e, 0xaaf1face, 0xbc84a9ce, 286 0x7b5de565, 0x3ffa0c66, 0x5d1cd533, 0xbc935949, 0xed8eb8bb, 287 0x3ffa1e7a, 0xee8be70e, 0x3c9c6618, 0xec4a2d33, 0x3ffa309b, 288 0x7ddc36ab, 0x3c96305c, 0x80460ad8, 0x3ffa42c9, 0x589fb120, 289 0xbc9aa780, 0xb23e255d, 0x3ffa5503, 0xdb8d41e1, 0xbc9d2f6e, 290 0x8af46052, 0x3ffa674a, 0x30670366, 0x3c650f56, 0x1330b358, 291 0x3ffa799e, 0xcac563c7, 0x3c9bcb7e, 0x53c12e59, 0x3ffa8bfe, 292 0xb2ba15a9, 0xbc94f867, 0x5579fdbf, 0x3ffa9e6b, 0x0ef7fd31, 293 0x3c90fac9, 0x21356eba, 0x3ffab0e5, 0xdae94545, 0x3c889c31, 294 0xbfd3f37a, 0x3ffac36b, 0xcae76cd0, 0xbc8f9234, 0x3a3c2774, 295 0x3ffad5ff, 0xb6b1b8e5, 0x3c97ef3b, 0x995ad3ad, 0x3ffae89f, 296 0x345dcc81, 0x3c97a1cd, 0xe622f2ff, 0x3ffafb4c, 0x0f315ecd, 297 0xbc94b2fc, 0x298db666, 0x3ffb0e07, 0x4c80e425, 0xbc9bdef5, 298 0x6c9a8952, 0x3ffb20ce, 0x4a0756cc, 0x3c94dd02, 0xb84f15fb, 299 0x3ffb33a2, 0x3084d708, 0xbc62805e, 0x15b749b1, 0x3ffb4684, 300 0xe9df7c90, 0xbc7f763d, 0x8de5593a, 0x3ffb5972, 0xbbba6de3, 301 0xbc9c71df, 0x29f1c52a, 0x3ffb6c6e, 0x52883f6e, 0x3c92a8f3, 302 0xf2fb5e47, 0x3ffb7f76, 0x7e54ac3b, 0xbc75584f, 0xf22749e4, 303 0x3ffb928c, 0x54cb65c6, 0xbc9b7216, 0x30a1064a, 0x3ffba5b0, 304 0x0e54292e, 0xbc9efcd3, 0xb79a6f1f, 0x3ffbb8e0, 0xc9696205, 305 0xbc3f52d1, 0x904bc1d2, 0x3ffbcc1e, 0x7a2d9e84, 0x3c823dd0, 306 0xc3f3a207, 0x3ffbdf69, 0x60ea5b53, 0xbc3c2623, 0x5bd71e09, 307 0x3ffbf2c2, 0x3f6b9c73, 0xbc9efdca, 0x6141b33d, 0x3ffc0628, 308 0xa1fbca34, 0xbc8d8a5a, 0xdd85529c, 0x3ffc199b, 0x895048dd, 309 0x3c811065, 0xd9fa652c, 0x3ffc2d1c, 0x17c8a5d7, 0xbc96e516, 310 0x5fffd07a, 0x3ffc40ab, 0xe083c60a, 0x3c9b4537, 0x78fafb22, 311 0x3ffc5447, 0x2493b5af, 0x3c912f07, 0x2e57d14b, 0x3ffc67f1, 312 0xff483cad, 0x3c92884d, 0x8988c933, 0x3ffc7ba8, 0xbe255559, 313 0xbc8e76bb, 0x9406e7b5, 0x3ffc8f6d, 0x48805c44, 0x3c71acbc, 314 0x5751c4db, 0x3ffca340, 0xd10d08f5, 0xbc87f2be, 0xdcef9069, 315 0x3ffcb720, 0xd1e949db, 0x3c7503cb, 0x2e6d1675, 0x3ffccb0f, 316 0x86009092, 0xbc7d220f, 0x555dc3fa, 0x3ffcdf0b, 0x53829d72, 317 0xbc8dd83b, 0x5b5bab74, 0x3ffcf315, 0xb86dff57, 0xbc9a08e9, 318 0x4a07897c, 0x3ffd072d, 0x43797a9c, 0xbc9cbc37, 0x2b08c968, 319 0x3ffd1b53, 0x219a36ee, 0x3c955636, 0x080d89f2, 0x3ffd2f87, 320 0x719d8578, 0xbc9d487b, 0xeacaa1d6, 0x3ffd43c8, 0xbf5a1614, 321 0x3c93db53, 0xdcfba487, 0x3ffd5818, 0xd75b3707, 0x3c82ed02, 322 0xe862e6d3, 0x3ffd6c76, 0x4a8165a0, 0x3c5fe87a, 0x16c98398, 323 0x3ffd80e3, 0x8beddfe8, 0xbc911ec1, 0x71ff6075, 0x3ffd955d, 324 0xbb9af6be, 0x3c9a052d, 0x03db3285, 0x3ffda9e6, 0x696db532, 325 0x3c9c2300, 0xd63a8315, 0x3ffdbe7c, 0x926b8be4, 0xbc9b76f1, 326 0xf301b460, 0x3ffdd321, 0x78f018c3, 0x3c92da57, 0x641c0658, 327 0x3ffde7d5, 0x8e79ba8f, 0xbc9ca552, 0x337b9b5f, 0x3ffdfc97, 328 0x4f184b5c, 0xbc91a5cd, 0x6b197d17, 0x3ffe1167, 0xbd5c7f44, 329 0xbc72b529, 0x14f5a129, 0x3ffe2646, 0x817a1496, 0xbc97b627, 330 0x3b16ee12, 0x3ffe3b33, 0x31fdc68b, 0xbc99f4a4, 0xe78b3ff6, 331 0x3ffe502e, 0x80a9cc8f, 0x3c839e89, 0x24676d76, 0x3ffe6539, 332 0x7522b735, 0xbc863ff8, 0xfbc74c83, 0x3ffe7a51, 0xca0c8de2, 333 0x3c92d522, 0x77cdb740, 0x3ffe8f79, 0x80b054b1, 0xbc910894, 334 0xa2a490da, 0x3ffea4af, 0x179c2893, 0xbc9e9c23, 0x867cca6e, 335 0x3ffeb9f4, 0x2293e4f2, 0x3c94832f, 0x2d8e67f1, 0x3ffecf48, 336 0xb411ad8c, 0xbc9c93f3, 0xa2188510, 0x3ffee4aa, 0xa487568d, 337 0x3c91c68d, 0xee615a27, 0x3ffefa1b, 0x86a4b6b0, 0x3c9dc7f4, 338 0x1cb6412a, 0x3fff0f9c, 0x65181d45, 0xbc932200, 0x376bba97, 339 0x3fff252b, 0xbf0d8e43, 0x3c93a1a5, 0x48dd7274, 0x3fff3ac9, 340 0x3ed837de, 0xbc795a5a, 0x5b6e4540, 0x3fff5076, 0x2dd8a18b, 341 0x3c99d3e1, 0x798844f8, 0x3fff6632, 0x3539343e, 0x3c9fa37b, 342 0xad9cbe14, 0x3fff7bfd, 0xd006350a, 0xbc9dbb12, 0x02243c89, 343 0x3fff91d8, 0xa779f689, 0xbc612ea8, 0x819e90d8, 0x3fffa7c1, 344 0xf3a5931e, 0x3c874853, 0x3692d514, 0x3fffbdba, 0x15098eb6, 345 0xbc796773, 0x2b8f71f1, 0x3fffd3c2, 0x966579e7, 0x3c62eb74, 346 0x6b2a23d9, 0x3fffe9d9, 0x7442fde3, 0x3c74a603 347 //@formatter:on 348 }); 349 350 private ArrayDataPointerConstant eCoeff = pointerConstant(16, new int[]{ 351 //@formatter:off 352 0xe78a6731, 0x3f55d87f, 0xd704a0c0, 0x3fac6b08, 353 }); 354 private ArrayDataPointerConstant eCoeff16 = pointerConstant(16, new int[]{ 355 0x6fba4e77, 0x3f83b2ab, 0xff82c58f, 0x3fcebfbd, 356 }); 357 private ArrayDataPointerConstant eCoeff32 = pointerConstant(16, new int[]{ 358 0xfefa39ef, 0x3fe62e42, 0x00000000, 0x00000000 359 //@formatter:on 360 }); 361 362 private ArrayDataPointerConstant coeffH = pointerConstant(8, new int[]{ 363 //@formatter:off 364 0x00000000, 0xbfd61a00, 365 }); 366 private ArrayDataPointerConstant coeffH8 = pointerConstant(8, new int[]{ 367 0x00000000, 0xbf5dabe1 368 //@formatter:on 369 }); 370 371 private ArrayDataPointerConstant highmaskLogX = pointerConstant(16, new int[]{ 372 //@formatter:off 373 0xf8000000, 0xffffffff, 0x00000000, 0xfffff800 374 //@formatter:on 375 }); 376 377 private ArrayDataPointerConstant halfmask = pointerConstant(8, new int[]{ 378 //@formatter:off 379 0xf8000000, 0xffffffff, 0xf8000000, 0xffffffff 380 //@formatter:on 381 }); 382 383 private ArrayDataPointerConstant coeff = pointerConstant(16, new int[]{ 384 //@formatter:off 385 0x6dc96112, 0xbf836578, 0xee241472, 0xbf9b0301, 386 }); 387 private ArrayDataPointerConstant coeff16 = pointerConstant(16, new int[]{ 388 0x9f95985a, 0xbfb528db, 0xb3841d2a, 0xbfd619b6, 389 }); 390 private ArrayDataPointerConstant coeff32 = pointerConstant(16, new int[]{ 391 0x518775e3, 0x3f9004f2, 0xac8349bb, 0x3fa76c9b, 392 }); 393 private ArrayDataPointerConstant coeff48 = pointerConstant(16, new int[]{ 394 0x486ececc, 0x3fc4635e, 0x161bb241, 0xbf5dabe1, 395 }); 396 private ArrayDataPointerConstant coeff64 = pointerConstant(16, new int[]{ 397 0x9f95985a, 0xbfb528db, 0xf8b5787d, 0x3ef2531e, 398 }); 399 private ArrayDataPointerConstant coeff80 = pointerConstant(16, new int[]{ 400 0x486ececb, 0x3fc4635e, 0x412055cc, 0xbdd61bb2 401 //@formatter:on 402 }); 403 404 private ArrayDataPointerConstant lTbl = pointerConstant(16, new int[]{ 405 //@formatter:off 406 0x00000000, 0x3ff00000, 0x00000000, 0x00000000, 0x20000000, 407 0x3feff00a, 0x96621f95, 0x3e5b1856, 0xe0000000, 0x3fefe019, 408 0xe5916f9e, 0xbe325278, 0x00000000, 0x3fefd02f, 0x859a1062, 409 0x3e595fb7, 0xc0000000, 0x3fefc049, 0xb245f18f, 0xbe529c38, 410 0xe0000000, 0x3fefb069, 0xad2880a7, 0xbe501230, 0x60000000, 411 0x3fefa08f, 0xc8e72420, 0x3e597bd1, 0x80000000, 0x3fef90ba, 412 0xc30c4500, 0xbe5d6c75, 0xe0000000, 0x3fef80ea, 0x02c63f43, 413 0x3e2e1318, 0xc0000000, 0x3fef7120, 0xb3d4cccc, 0xbe44c52a, 414 0x00000000, 0x3fef615c, 0xdbd91397, 0xbe4e7d6c, 0xa0000000, 415 0x3fef519c, 0x65c5cd68, 0xbe522dc8, 0xa0000000, 0x3fef41e2, 416 0x46d1306c, 0xbe5a840e, 0xe0000000, 0x3fef322d, 0xd2980e94, 417 0x3e5071af, 0xa0000000, 0x3fef227e, 0x773abade, 0xbe5891e5, 418 0xa0000000, 0x3fef12d4, 0xdc6bf46b, 0xbe5cccbe, 0xe0000000, 419 0x3fef032f, 0xbc7247fa, 0xbe2bab83, 0x80000000, 0x3feef390, 420 0xbcaa1e46, 0xbe53bb3b, 0x60000000, 0x3feee3f6, 0x5f6c682d, 421 0xbe54c619, 0x80000000, 0x3feed461, 0x5141e368, 0xbe4b6d86, 422 0xe0000000, 0x3feec4d1, 0xec678f76, 0xbe369af6, 0x80000000, 423 0x3feeb547, 0x41301f55, 0xbe2d4312, 0x60000000, 0x3feea5c2, 424 0x676da6bd, 0xbe4d8dd0, 0x60000000, 0x3fee9642, 0x57a891c4, 425 0x3e51f991, 0xa0000000, 0x3fee86c7, 0xe4eb491e, 0x3e579bf9, 426 0x20000000, 0x3fee7752, 0xfddc4a2c, 0xbe3356e6, 0xc0000000, 427 0x3fee67e1, 0xd75b5bf1, 0xbe449531, 0x80000000, 0x3fee5876, 428 0xbd423b8e, 0x3df54fe4, 0x60000000, 0x3fee4910, 0x330e51b9, 429 0x3e54289c, 0x80000000, 0x3fee39af, 0x8651a95f, 0xbe55aad6, 430 0xa0000000, 0x3fee2a53, 0x5e98c708, 0xbe2fc4a9, 0xe0000000, 431 0x3fee1afc, 0x0989328d, 0x3e23958c, 0x40000000, 0x3fee0bab, 432 0xee642abd, 0xbe425dd8, 0xa0000000, 0x3fedfc5e, 0xc394d236, 433 0x3e526362, 0x20000000, 0x3feded17, 0xe104aa8e, 0x3e4ce247, 434 0xc0000000, 0x3fedddd4, 0x265a9be4, 0xbe5bb77a, 0x40000000, 435 0x3fedce97, 0x0ecac52f, 0x3e4a7cb1, 0xe0000000, 0x3fedbf5e, 436 0x124cb3b8, 0x3e257024, 0x80000000, 0x3fedb02b, 0xe6d4febe, 437 0xbe2033ee, 0x20000000, 0x3feda0fd, 0x39cca00e, 0xbe3ddabc, 438 0xc0000000, 0x3fed91d3, 0xef8a552a, 0xbe543390, 0x40000000, 439 0x3fed82af, 0xb8e85204, 0x3e513850, 0xe0000000, 0x3fed738f, 440 0x3d59fe08, 0xbe5db728, 0x40000000, 0x3fed6475, 0x3aa7ead1, 441 0x3e58804b, 0xc0000000, 0x3fed555f, 0xf8a35ba9, 0xbe5298b0, 442 0x00000000, 0x3fed464f, 0x9a88dd15, 0x3e5a8cdb, 0x40000000, 443 0x3fed3743, 0xb0b0a190, 0x3e598635, 0x80000000, 0x3fed283c, 444 0xe2113295, 0xbe5c1119, 0x80000000, 0x3fed193a, 0xafbf1728, 445 0xbe492e9c, 0x60000000, 0x3fed0a3d, 0xe4a4ccf3, 0x3e19b90e, 446 0x20000000, 0x3fecfb45, 0xba3cbeb8, 0x3e406b50, 0xc0000000, 447 0x3fecec51, 0x110f7ddd, 0x3e0d6806, 0x40000000, 0x3fecdd63, 448 0x7dd7d508, 0xbe5a8943, 0x80000000, 0x3fecce79, 0x9b60f271, 449 0xbe50676a, 0x80000000, 0x3fecbf94, 0x0b9ad660, 0x3e59174f, 450 0x60000000, 0x3fecb0b4, 0x00823d9c, 0x3e5bbf72, 0x20000000, 451 0x3feca1d9, 0x38a6ec89, 0xbe4d38f9, 0x80000000, 0x3fec9302, 452 0x3a0b7d8e, 0x3e53dbfd, 0xc0000000, 0x3fec8430, 0xc6826b34, 453 0xbe27c5c9, 0xc0000000, 0x3fec7563, 0x0c706381, 0xbe593653, 454 0x60000000, 0x3fec669b, 0x7df34ec7, 0x3e461ab5, 0xe0000000, 455 0x3fec57d7, 0x40e5e7e8, 0xbe5c3dae, 0x00000000, 0x3fec4919, 456 0x5602770f, 0xbe55219d, 0xc0000000, 0x3fec3a5e, 0xec7911eb, 457 0x3e5a5d25, 0x60000000, 0x3fec2ba9, 0xb39ea225, 0xbe53c00b, 458 0x80000000, 0x3fec1cf8, 0x967a212e, 0x3e5a8ddf, 0x60000000, 459 0x3fec0e4c, 0x580798bd, 0x3e5f53ab, 0x00000000, 0x3febffa5, 460 0xb8282df6, 0xbe46b874, 0x20000000, 0x3febf102, 0xe33a6729, 461 0x3e54963f, 0x00000000, 0x3febe264, 0x3b53e88a, 0xbe3adce1, 462 0x60000000, 0x3febd3ca, 0xc2585084, 0x3e5cde9f, 0x80000000, 463 0x3febc535, 0xa335c5ee, 0xbe39fd9c, 0x20000000, 0x3febb6a5, 464 0x7325b04d, 0x3e42ba15, 0x60000000, 0x3feba819, 0x1564540f, 465 0x3e3a9f35, 0x40000000, 0x3feb9992, 0x83fff592, 0xbe5465ce, 466 0xa0000000, 0x3feb8b0f, 0xb9da63d3, 0xbe4b1a0a, 0x80000000, 467 0x3feb7c91, 0x6d6f1ea4, 0x3e557657, 0x00000000, 0x3feb6e18, 468 0x5e80a1bf, 0x3e4ddbb6, 0x00000000, 0x3feb5fa3, 0x1c9eacb5, 469 0x3e592877, 0xa0000000, 0x3feb5132, 0x6d40beb3, 0xbe51858c, 470 0xa0000000, 0x3feb42c6, 0xd740c67b, 0x3e427ad2, 0x40000000, 471 0x3feb345f, 0xa3e0ccee, 0xbe5c2fc4, 0x40000000, 0x3feb25fc, 472 0x8e752b50, 0xbe3da3c2, 0xc0000000, 0x3feb179d, 0xa892e7de, 473 0x3e1fb481, 0xc0000000, 0x3feb0943, 0x21ed71e9, 0xbe365206, 474 0x20000000, 0x3feafaee, 0x0e1380a3, 0x3e5c5b7b, 0x20000000, 475 0x3feaec9d, 0x3c3d640e, 0xbe5dbbd0, 0x60000000, 0x3feade50, 476 0x8f97a715, 0x3e3a8ec5, 0x20000000, 0x3fead008, 0x23ab2839, 477 0x3e2fe98a, 0x40000000, 0x3feac1c4, 0xf4bbd50f, 0x3e54d8f6, 478 0xe0000000, 0x3feab384, 0x14757c4d, 0xbe48774c, 0xc0000000, 479 0x3feaa549, 0x7c7b0eea, 0x3e5b51bb, 0x20000000, 0x3fea9713, 480 0xf56f7013, 0x3e386200, 0xe0000000, 0x3fea88e0, 0xbe428ebe, 481 0xbe514af5, 0xe0000000, 0x3fea7ab2, 0x8d0e4496, 0x3e4f9165, 482 0x60000000, 0x3fea6c89, 0xdbacc5d5, 0xbe5c063b, 0x20000000, 483 0x3fea5e64, 0x3f19d970, 0xbe5a0c8c, 0x20000000, 0x3fea5043, 484 0x09ea3e6b, 0x3e5065dc, 0x80000000, 0x3fea4226, 0x78df246c, 485 0x3e5e05f6, 0x40000000, 0x3fea340e, 0x4057d4a0, 0x3e431b2b, 486 0x40000000, 0x3fea25fa, 0x82867bb5, 0x3e4b76be, 0xa0000000, 487 0x3fea17ea, 0x9436f40a, 0xbe5aad39, 0x20000000, 0x3fea09df, 488 0x4b5253b3, 0x3e46380b, 0x00000000, 0x3fe9fbd8, 0x8fc52466, 489 0xbe386f9b, 0x20000000, 0x3fe9edd5, 0x22d3f344, 0xbe538347, 490 0x60000000, 0x3fe9dfd6, 0x1ac33522, 0x3e5dbc53, 0x00000000, 491 0x3fe9d1dc, 0xeabdff1d, 0x3e40fc0c, 0xe0000000, 0x3fe9c3e5, 492 0xafd30e73, 0xbe585e63, 0xe0000000, 0x3fe9b5f3, 0xa52f226a, 493 0xbe43e8f9, 0x20000000, 0x3fe9a806, 0xecb8698d, 0xbe515b36, 494 0x80000000, 0x3fe99a1c, 0xf2b4e89d, 0x3e48b62b, 0x20000000, 495 0x3fe98c37, 0x7c9a88fb, 0x3e44414c, 0x00000000, 0x3fe97e56, 496 0xda015741, 0xbe5d13ba, 0xe0000000, 0x3fe97078, 0x5fdace06, 497 0x3e51b947, 0x00000000, 0x3fe962a0, 0x956ca094, 0x3e518785, 498 0x40000000, 0x3fe954cb, 0x01164c1d, 0x3e5d5b57, 0xc0000000, 499 0x3fe946fa, 0xe63b3767, 0xbe4f84e7, 0x40000000, 0x3fe9392e, 500 0xe57cc2a9, 0x3e34eda3, 0xe0000000, 0x3fe92b65, 0x8c75b544, 501 0x3e5766a0, 0xc0000000, 0x3fe91da1, 0x37d1d087, 0xbe5e2ab1, 502 0x80000000, 0x3fe90fe1, 0xa953dc20, 0x3e5fa1f3, 0x80000000, 503 0x3fe90225, 0xdbd3f369, 0x3e47d6db, 0xa0000000, 0x3fe8f46d, 504 0x1c9be989, 0xbe5e2b0a, 0xa0000000, 0x3fe8e6b9, 0x3c93d76a, 505 0x3e5c8618, 0xe0000000, 0x3fe8d909, 0x2182fc9a, 0xbe41aa9e, 506 0x20000000, 0x3fe8cb5e, 0xe6b3539d, 0xbe530d19, 0x60000000, 507 0x3fe8bdb6, 0x49e58cc3, 0xbe3bb374, 0xa0000000, 0x3fe8b012, 508 0xa7cfeb8f, 0x3e56c412, 0x00000000, 0x3fe8a273, 0x8d52bc19, 509 0x3e1429b8, 0x60000000, 0x3fe894d7, 0x4dc32c6c, 0xbe48604c, 510 0xc0000000, 0x3fe8873f, 0x0c868e56, 0xbe564ee5, 0x00000000, 511 0x3fe879ac, 0x56aee828, 0x3e5e2fd8, 0x60000000, 0x3fe86c1c, 512 0x7ceab8ec, 0x3e493365, 0xc0000000, 0x3fe85e90, 0x78d4dadc, 513 0xbe4f7f25, 0x00000000, 0x3fe85109, 0x0ccd8280, 0x3e31e7a2, 514 0x40000000, 0x3fe84385, 0x34ba4e15, 0x3e328077, 0x80000000, 515 0x3fe83605, 0xa670975a, 0xbe53eee5, 0xa0000000, 0x3fe82889, 516 0xf61b77b2, 0xbe43a20a, 0xa0000000, 0x3fe81b11, 0x13e6643b, 517 0x3e5e5fe5, 0xc0000000, 0x3fe80d9d, 0x82cc94e8, 0xbe5ff1f9, 518 0xa0000000, 0x3fe8002d, 0x8a0c9c5d, 0xbe42b0e7, 0x60000000, 519 0x3fe7f2c1, 0x22a16f01, 0x3e5d9ea0, 0x20000000, 0x3fe7e559, 520 0xc38cd451, 0x3e506963, 0xc0000000, 0x3fe7d7f4, 0x9902bc71, 521 0x3e4503d7, 0x40000000, 0x3fe7ca94, 0xdef2a3c0, 0x3e3d98ed, 522 0xa0000000, 0x3fe7bd37, 0xed49abb0, 0x3e24c1ff, 0xe0000000, 523 0x3fe7afde, 0xe3b0be70, 0xbe40c467, 0x00000000, 0x3fe7a28a, 524 0xaf9f193c, 0xbe5dff6c, 0xe0000000, 0x3fe79538, 0xb74cf6b6, 525 0xbe258ed0, 0xa0000000, 0x3fe787eb, 0x1d9127c7, 0x3e345fb0, 526 0x40000000, 0x3fe77aa2, 0x1028c21d, 0xbe4619bd, 0xa0000000, 527 0x3fe76d5c, 0x7cb0b5e4, 0x3e40f1a2, 0xe0000000, 0x3fe7601a, 528 0x2b1bc4ad, 0xbe32e8bb, 0xe0000000, 0x3fe752dc, 0x6839f64e, 529 0x3e41f57b, 0xc0000000, 0x3fe745a2, 0xc4121f7e, 0xbe52c40a, 530 0x60000000, 0x3fe7386c, 0xd6852d72, 0xbe5c4e6b, 0xc0000000, 531 0x3fe72b39, 0x91d690f7, 0xbe57f88f, 0xe0000000, 0x3fe71e0a, 532 0x627a2159, 0xbe4425d5, 0xc0000000, 0x3fe710df, 0x50a54033, 533 0x3e422b7e, 0x60000000, 0x3fe703b8, 0x3b0b5f91, 0x3e5d3857, 534 0xe0000000, 0x3fe6f694, 0x84d628a2, 0xbe51f090, 0x00000000, 535 0x3fe6e975, 0x306d8894, 0xbe414d83, 0xe0000000, 0x3fe6dc58, 536 0x30bf24aa, 0xbe4650ca, 0x80000000, 0x3fe6cf40, 0xd4628d69, 537 0xbe5db007, 0xc0000000, 0x3fe6c22b, 0xa2aae57b, 0xbe31d279, 538 0xc0000000, 0x3fe6b51a, 0x860edf7e, 0xbe2d4c4a, 0x80000000, 539 0x3fe6a80d, 0xf3559341, 0xbe5f7e98, 0xe0000000, 0x3fe69b03, 540 0xa885899e, 0xbe5c2011, 0xe0000000, 0x3fe68dfd, 0x2bdc6d37, 541 0x3e224a82, 0xa0000000, 0x3fe680fb, 0xc12ad1b9, 0xbe40cf56, 542 0x00000000, 0x3fe673fd, 0x1bcdf659, 0xbdf52f2d, 0x00000000, 543 0x3fe66702, 0x5df10408, 0x3e5663e0, 0xc0000000, 0x3fe65a0a, 544 0xa4070568, 0xbe40b12f, 0x00000000, 0x3fe64d17, 0x71c54c47, 545 0x3e5f5e8b, 0x00000000, 0x3fe64027, 0xbd4b7e83, 0x3e42ead6, 546 0xa0000000, 0x3fe6333a, 0x61598bd2, 0xbe4c48d4, 0xc0000000, 547 0x3fe62651, 0x6f538d61, 0x3e548401, 0xa0000000, 0x3fe6196c, 548 0x14344120, 0xbe529af6, 0x00000000, 0x3fe60c8b, 0x5982c587, 549 0xbe3e1e4f, 0x00000000, 0x3fe5ffad, 0xfe51d4ea, 0xbe4c897a, 550 0x80000000, 0x3fe5f2d2, 0xfd46ebe1, 0x3e552e00, 0xa0000000, 551 0x3fe5e5fb, 0xa4695699, 0x3e5ed471, 0x60000000, 0x3fe5d928, 552 0x80d118ae, 0x3e456b61, 0xa0000000, 0x3fe5cc58, 0x304c330b, 553 0x3e54dc29, 0x80000000, 0x3fe5bf8c, 0x0af2dedf, 0xbe3aa9bd, 554 0xe0000000, 0x3fe5b2c3, 0x15fc9258, 0xbe479a37, 0xc0000000, 555 0x3fe5a5fe, 0x9292c7ea, 0x3e188650, 0x20000000, 0x3fe5993d, 556 0x33b4d380, 0x3e5d6d93, 0x20000000, 0x3fe58c7f, 0x02fd16c7, 557 0x3e2fe961, 0xa0000000, 0x3fe57fc4, 0x4a05edb6, 0xbe4d55b4, 558 0xa0000000, 0x3fe5730d, 0x3d443abb, 0xbe5e6954, 0x00000000, 559 0x3fe5665a, 0x024acfea, 0x3e50e61b, 0x00000000, 0x3fe559aa, 560 0xcc9edd09, 0xbe325403, 0x60000000, 0x3fe54cfd, 0x1fe26950, 561 0x3e5d500e, 0x60000000, 0x3fe54054, 0x6c5ae164, 0xbe4a79b4, 562 0xc0000000, 0x3fe533ae, 0x154b0287, 0xbe401571, 0xa0000000, 563 0x3fe5270c, 0x0673f401, 0xbe56e56b, 0xe0000000, 0x3fe51a6d, 564 0x751b639c, 0x3e235269, 0xa0000000, 0x3fe50dd2, 0x7c7b2bed, 565 0x3ddec887, 0xc0000000, 0x3fe5013a, 0xafab4e17, 0x3e5e7575, 566 0x60000000, 0x3fe4f4a6, 0x2e308668, 0x3e59aed6, 0x80000000, 567 0x3fe4e815, 0xf33e2a76, 0xbe51f184, 0xe0000000, 0x3fe4db87, 568 0x839f3e3e, 0x3e57db01, 0xc0000000, 0x3fe4cefd, 0xa9eda7bb, 569 0x3e535e0f, 0x00000000, 0x3fe4c277, 0x2a8f66a5, 0x3e5ce451, 570 0xc0000000, 0x3fe4b5f3, 0x05192456, 0xbe4e8518, 0xc0000000, 571 0x3fe4a973, 0x4aa7cd1d, 0x3e46784a, 0x40000000, 0x3fe49cf7, 572 0x8e23025e, 0xbe5749f2, 0x00000000, 0x3fe4907e, 0x18d30215, 573 0x3e360f39, 0x20000000, 0x3fe48408, 0x63dcf2f3, 0x3e5e00fe, 574 0xc0000000, 0x3fe47795, 0x46182d09, 0xbe5173d9, 0xa0000000, 575 0x3fe46b26, 0x8f0e62aa, 0xbe48f281, 0xe0000000, 0x3fe45eba, 576 0x5775c40c, 0xbe56aad4, 0x60000000, 0x3fe45252, 0x0fe25f69, 577 0x3e48bd71, 0x40000000, 0x3fe445ed, 0xe9989ec5, 0x3e590d97, 578 0x80000000, 0x3fe4398b, 0xb3d9ffe3, 0x3e479dbc, 0x20000000, 579 0x3fe42d2d, 0x388e4d2e, 0xbe5eed80, 0xe0000000, 0x3fe420d1, 580 0x6f797c18, 0x3e554b4c, 0x20000000, 0x3fe4147a, 0x31048bb4, 581 0xbe5b1112, 0x80000000, 0x3fe40825, 0x2efba4f9, 0x3e48ebc7, 582 0x40000000, 0x3fe3fbd4, 0x50201119, 0x3e40b701, 0x40000000, 583 0x3fe3ef86, 0x0a4db32c, 0x3e551de8, 0xa0000000, 0x3fe3e33b, 584 0x0c9c148b, 0xbe50c1f6, 0x20000000, 0x3fe3d6f4, 0xc9129447, 585 0x3e533fa0, 0x00000000, 0x3fe3cab0, 0xaae5b5a0, 0xbe22b68e, 586 0x20000000, 0x3fe3be6f, 0x02305e8a, 0xbe54fc08, 0x60000000, 587 0x3fe3b231, 0x7f908258, 0x3e57dc05, 0x00000000, 0x3fe3a5f7, 588 0x1a09af78, 0x3e08038b, 0xe0000000, 0x3fe399bf, 0x490643c1, 589 0xbe5dbe42, 0xe0000000, 0x3fe38d8b, 0x5e8ad724, 0xbe3c2b72, 590 0x20000000, 0x3fe3815b, 0xc67196b6, 0x3e1713cf, 0xa0000000, 591 0x3fe3752d, 0x6182e429, 0xbe3ec14c, 0x40000000, 0x3fe36903, 592 0xab6eb1ae, 0x3e5a2cc5, 0x40000000, 0x3fe35cdc, 0xfe5dc064, 593 0xbe5c5878, 0x40000000, 0x3fe350b8, 0x0ba6b9e4, 0x3e51619b, 594 0x80000000, 0x3fe34497, 0x857761aa, 0x3e5fff53, 0x00000000, 595 0x3fe3387a, 0xf872d68c, 0x3e484f4d, 0xa0000000, 0x3fe32c5f, 596 0x087e97c2, 0x3e52842e, 0x80000000, 0x3fe32048, 0x73d6d0c0, 597 0xbe503edf, 0x80000000, 0x3fe31434, 0x0c1456a1, 0xbe5f72ad, 598 0xa0000000, 0x3fe30823, 0x83a1a4d5, 0xbe5e65cc, 0xe0000000, 599 0x3fe2fc15, 0x855a7390, 0xbe506438, 0x40000000, 0x3fe2f00b, 600 0xa2898287, 0x3e3d22a2, 0xe0000000, 0x3fe2e403, 0x8b56f66f, 601 0xbe5aa5fd, 0x80000000, 0x3fe2d7ff, 0x52db119a, 0x3e3a2e3d, 602 0x60000000, 0x3fe2cbfe, 0xe2ddd4c0, 0xbe586469, 0x40000000, 603 0x3fe2c000, 0x6b01bf10, 0x3e352b9d, 0x40000000, 0x3fe2b405, 604 0xb07a1cdf, 0x3e5c5cda, 0x80000000, 0x3fe2a80d, 0xc7b5f868, 605 0xbe5668b3, 0xc0000000, 0x3fe29c18, 0x185edf62, 0xbe563d66, 606 0x00000000, 0x3fe29027, 0xf729e1cc, 0x3e59a9a0, 0x80000000, 607 0x3fe28438, 0x6433c727, 0xbe43cc89, 0x00000000, 0x3fe2784d, 608 0x41782631, 0xbe30750c, 0xa0000000, 0x3fe26c64, 0x914911b7, 609 0xbe58290e, 0x40000000, 0x3fe2607f, 0x3dcc73e1, 0xbe4269cd, 610 0x00000000, 0x3fe2549d, 0x2751bf70, 0xbe5a6998, 0xc0000000, 611 0x3fe248bd, 0x4248b9fb, 0xbe4ddb00, 0x80000000, 0x3fe23ce1, 612 0xf35cf82f, 0x3e561b71, 0x60000000, 0x3fe23108, 0x8e481a2d, 613 0x3e518fb9, 0x60000000, 0x3fe22532, 0x5ab96edc, 0xbe5fafc5, 614 0x40000000, 0x3fe2195f, 0x80943911, 0xbe07f819, 0x40000000, 615 0x3fe20d8f, 0x386f2d6c, 0xbe54ba8b, 0x40000000, 0x3fe201c2, 616 0xf29664ac, 0xbe5eb815, 0x20000000, 0x3fe1f5f8, 0x64f03390, 617 0x3e5e320c, 0x20000000, 0x3fe1ea31, 0x747ff696, 0x3e5ef0a5, 618 0x40000000, 0x3fe1de6d, 0x3e9ceb51, 0xbe5f8d27, 0x20000000, 619 0x3fe1d2ac, 0x4ae0b55e, 0x3e5faa21, 0x20000000, 0x3fe1c6ee, 620 0x28569a5e, 0x3e598a4f, 0x20000000, 0x3fe1bb33, 0x54b33e07, 621 0x3e46130a, 0x20000000, 0x3fe1af7b, 0x024f1078, 0xbe4dbf93, 622 0x00000000, 0x3fe1a3c6, 0xb0783bfa, 0x3e419248, 0xe0000000, 623 0x3fe19813, 0x2f02b836, 0x3e4e02b7, 0xc0000000, 0x3fe18c64, 624 0x28dec9d4, 0x3e09064f, 0x80000000, 0x3fe180b8, 0x45cbf406, 625 0x3e5b1f46, 0x40000000, 0x3fe1750f, 0x03d9964c, 0x3e5b0a79, 626 0x00000000, 0x3fe16969, 0x8b5b882b, 0xbe238086, 0xa0000000, 627 0x3fe15dc5, 0x73bad6f8, 0xbdf1fca4, 0x20000000, 0x3fe15225, 628 0x5385769c, 0x3e5e8d76, 0xa0000000, 0x3fe14687, 0x1676dc6b, 629 0x3e571d08, 0x20000000, 0x3fe13aed, 0xa8c41c7f, 0xbe598a25, 630 0x60000000, 0x3fe12f55, 0xc4e1aaf0, 0x3e435277, 0xa0000000, 631 0x3fe123c0, 0x403638e1, 0xbe21aa7c, 0xc0000000, 0x3fe1182e, 632 0x557a092b, 0xbdd0116b, 0xc0000000, 0x3fe10c9f, 0x7d779f66, 633 0x3e4a61ba, 0xc0000000, 0x3fe10113, 0x2b09c645, 0xbe5d586e, 634 0x20000000, 0x3fe0ea04, 0xea2cad46, 0x3e5aa97c, 0x20000000, 635 0x3fe0d300, 0x23190e54, 0x3e50f1a7, 0xa0000000, 0x3fe0bc07, 636 0x1379a5a6, 0xbe51619d, 0x60000000, 0x3fe0a51a, 0x926a3d4a, 637 0x3e5cf019, 0xa0000000, 0x3fe08e38, 0xa8c24358, 0x3e35241e, 638 0x20000000, 0x3fe07762, 0x24317e7a, 0x3e512cfa, 0x00000000, 639 0x3fe06097, 0xfd9cf274, 0xbe55bef3, 0x00000000, 0x3fe049d7, 640 0x3689b49d, 0xbe36d26d, 0x40000000, 0x3fe03322, 0xf72ef6c4, 641 0xbe54cd08, 0xa0000000, 0x3fe01c78, 0x23702d2d, 0xbe5900bf, 642 0x00000000, 0x3fe005da, 0x3f59c14c, 0x3e57d80b, 0x40000000, 643 0x3fdfde8d, 0xad67766d, 0xbe57fad4, 0x40000000, 0x3fdfb17c, 644 0x644f4ae7, 0x3e1ee43b, 0x40000000, 0x3fdf8481, 0x903234d2, 645 0x3e501a86, 0x40000000, 0x3fdf579c, 0xafe9e509, 0xbe267c3e, 646 0x00000000, 0x3fdf2acd, 0xb7dfda0b, 0xbe48149b, 0x40000000, 647 0x3fdefe13, 0x3b94305e, 0x3e5f4ea7, 0x80000000, 0x3fded16f, 648 0x5d95da61, 0xbe55c198, 0x00000000, 0x3fdea4e1, 0x406960c9, 649 0xbdd99a19, 0x00000000, 0x3fde7868, 0xd22f3539, 0x3e470c78, 650 0x80000000, 0x3fde4c04, 0x83eec535, 0xbe3e1232, 0x40000000, 651 0x3fde1fb6, 0x3dfbffcb, 0xbe4b7d71, 0x40000000, 0x3fddf37d, 652 0x7e1be4e0, 0xbe5b8f8f, 0x40000000, 0x3fddc759, 0x46dae887, 653 0xbe350458, 0x80000000, 0x3fdd9b4a, 0xed6ecc49, 0xbe5f0045, 654 0x80000000, 0x3fdd6f50, 0x2e9e883c, 0x3e2915da, 0x80000000, 655 0x3fdd436b, 0xf0bccb32, 0x3e4a68c9, 0x80000000, 0x3fdd179b, 656 0x9bbfc779, 0xbe54a26a, 0x00000000, 0x3fdcebe0, 0x7cea33ab, 657 0x3e43c6b7, 0x40000000, 0x3fdcc039, 0xe740fd06, 0x3e5526c2, 658 0x40000000, 0x3fdc94a7, 0x9eadeb1a, 0xbe396d8d, 0xc0000000, 659 0x3fdc6929, 0xf0a8f95a, 0xbe5c0ab2, 0x80000000, 0x3fdc3dc0, 660 0x6ee2693b, 0x3e0992e6, 0xc0000000, 0x3fdc126b, 0x5ac6b581, 661 0xbe2834b6, 0x40000000, 0x3fdbe72b, 0x8cc226ff, 0x3e3596a6, 662 0x00000000, 0x3fdbbbff, 0xf92a74bb, 0x3e3c5813, 0x00000000, 663 0x3fdb90e7, 0x479664c0, 0xbe50d644, 0x00000000, 0x3fdb65e3, 664 0x5004975b, 0xbe55258f, 0x00000000, 0x3fdb3af3, 0xe4b23194, 665 0xbe588407, 0xc0000000, 0x3fdb1016, 0xe65d4d0a, 0x3e527c26, 666 0x80000000, 0x3fdae54e, 0x814fddd6, 0x3e5962a2, 0x40000000, 667 0x3fdaba9a, 0xe19d0913, 0xbe562f4e, 0x80000000, 0x3fda8ff9, 668 0x43cfd006, 0xbe4cfdeb, 0x40000000, 0x3fda656c, 0x686f0a4e, 669 0x3e5e47a8, 0xc0000000, 0x3fda3af2, 0x7200d410, 0x3e5e1199, 670 0xc0000000, 0x3fda108c, 0xabd2266e, 0x3e5ee4d1, 0x40000000, 671 0x3fd9e63a, 0x396f8f2c, 0x3e4dbffb, 0x00000000, 0x3fd9bbfb, 672 0xe32b25dd, 0x3e5c3a54, 0x40000000, 0x3fd991cf, 0x431e4035, 673 0xbe457925, 0x80000000, 0x3fd967b6, 0x7bed3dd3, 0x3e40c61d, 674 0x00000000, 0x3fd93db1, 0xd7449365, 0x3e306419, 0x80000000, 675 0x3fd913be, 0x1746e791, 0x3e56fcfc, 0x40000000, 0x3fd8e9df, 676 0xf3a9028b, 0xbe5041b9, 0xc0000000, 0x3fd8c012, 0x56840c50, 677 0xbe26e20a, 0x40000000, 0x3fd89659, 0x19763102, 0xbe51f466, 678 0x80000000, 0x3fd86cb2, 0x7032de7c, 0xbe4d298a, 0x80000000, 679 0x3fd8431e, 0xdeb39fab, 0xbe4361eb, 0x40000000, 0x3fd8199d, 680 0x5d01cbe0, 0xbe5425b3, 0x80000000, 0x3fd7f02e, 0x3ce99aa9, 681 0x3e146fa8, 0x80000000, 0x3fd7c6d2, 0xd1a262b9, 0xbe5a1a69, 682 0xc0000000, 0x3fd79d88, 0x8606c236, 0x3e423a08, 0x80000000, 683 0x3fd77451, 0x8fd1e1b7, 0x3e5a6a63, 0xc0000000, 0x3fd74b2c, 684 0xe491456a, 0x3e42c1ca, 0x40000000, 0x3fd7221a, 0x4499a6d7, 685 0x3e36a69a, 0x00000000, 0x3fd6f91a, 0x5237df94, 0xbe0f8f02, 686 0x00000000, 0x3fd6d02c, 0xb6482c6e, 0xbe5abcf7, 0x00000000, 687 0x3fd6a750, 0x1919fd61, 0xbe57ade2, 0x00000000, 0x3fd67e86, 688 0xaa7a994d, 0xbe3f3fbd, 0x00000000, 0x3fd655ce, 0x67db014c, 689 0x3e33c550, 0x00000000, 0x3fd62d28, 0xa82856b7, 0xbe1409d1, 690 0xc0000000, 0x3fd60493, 0x1e6a300d, 0x3e55d899, 0x80000000, 691 0x3fd5dc11, 0x1222bd5c, 0xbe35bfc0, 0xc0000000, 0x3fd5b3a0, 692 0x6e8dc2d3, 0x3e5d4d79, 0x00000000, 0x3fd58b42, 0xe0e4ace6, 693 0xbe517303, 0x80000000, 0x3fd562f4, 0xb306e0a8, 0x3e5edf0f, 694 0xc0000000, 0x3fd53ab8, 0x6574bc54, 0x3e5ee859, 0x80000000, 695 0x3fd5128e, 0xea902207, 0x3e5f6188, 0xc0000000, 0x3fd4ea75, 696 0x9f911d79, 0x3e511735, 0x80000000, 0x3fd4c26e, 0xf9c77397, 697 0xbe5b1643, 0x40000000, 0x3fd49a78, 0x15fc9258, 0x3e479a37, 698 0x80000000, 0x3fd47293, 0xd5a04dd9, 0xbe426e56, 0xc0000000, 699 0x3fd44abf, 0xe04042f5, 0x3e56f7c6, 0x40000000, 0x3fd422fd, 700 0x1d8bf2c8, 0x3e5d8810, 0x00000000, 0x3fd3fb4c, 0x88a8ddee, 701 0xbe311454, 0xc0000000, 0x3fd3d3ab, 0x3e3b5e47, 0xbe5d1b72, 702 0x40000000, 0x3fd3ac1c, 0xc2ab5d59, 0x3e31b02b, 0xc0000000, 703 0x3fd3849d, 0xd4e34b9e, 0x3e51cb2f, 0x40000000, 0x3fd35d30, 704 0x177204fb, 0xbe2b8cd7, 0x80000000, 0x3fd335d3, 0xfcd38c82, 705 0xbe4356e1, 0x80000000, 0x3fd30e87, 0x64f54acc, 0xbe4e6224, 706 0x00000000, 0x3fd2e74c, 0xaa7975d9, 0x3e5dc0fe, 0x80000000, 707 0x3fd2c021, 0x516dab3f, 0xbe50ffa3, 0x40000000, 0x3fd29907, 708 0x2bfb7313, 0x3e5674a2, 0xc0000000, 0x3fd271fd, 0x0549fc99, 709 0x3e385d29, 0xc0000000, 0x3fd24b04, 0x55b63073, 0xbe500c6d, 710 0x00000000, 0x3fd2241c, 0x3f91953a, 0x3e389977, 0xc0000000, 711 0x3fd1fd43, 0xa1543f71, 0xbe3487ab, 0xc0000000, 0x3fd1d67b, 712 0x4ec8867c, 0x3df6a2dc, 0x00000000, 0x3fd1afc4, 0x4328e3bb, 713 0x3e41d9c0, 0x80000000, 0x3fd1891c, 0x2e1cda84, 0x3e3bdd87, 714 0x40000000, 0x3fd16285, 0x4b5331ae, 0xbe53128e, 0x00000000, 715 0x3fd13bfe, 0xb9aec164, 0xbe52ac98, 0xc0000000, 0x3fd11586, 716 0xd91e1316, 0xbe350630, 0x80000000, 0x3fd0ef1f, 0x7cacc12c, 717 0x3e3f5219, 0x40000000, 0x3fd0c8c8, 0xbce277b7, 0x3e3d30c0, 718 0x00000000, 0x3fd0a281, 0x2a63447d, 0xbe541377, 0x80000000, 719 0x3fd07c49, 0xfac483b5, 0xbe5772ec, 0xc0000000, 0x3fd05621, 720 0x36b8a570, 0xbe4fd4bd, 0xc0000000, 0x3fd03009, 0xbae505f7, 721 0xbe450388, 0x80000000, 0x3fd00a01, 0x3e35aead, 0xbe5430fc, 722 0x80000000, 0x3fcfc811, 0x707475ac, 0x3e38806e, 0x80000000, 723 0x3fcf7c3f, 0xc91817fc, 0xbe40ccea, 0x80000000, 0x3fcf308c, 724 0xae05d5e9, 0xbe4919b8, 0x80000000, 0x3fcee4f8, 0xae6cc9e6, 725 0xbe530b94, 0x00000000, 0x3fce9983, 0x1efe3e8e, 0x3e57747e, 726 0x00000000, 0x3fce4e2d, 0xda78d9bf, 0xbe59a608, 0x00000000, 727 0x3fce02f5, 0x8abe2c2e, 0x3e4a35ad, 0x00000000, 0x3fcdb7dc, 728 0x1495450d, 0xbe0872cc, 0x80000000, 0x3fcd6ce1, 0x86ee0ba0, 729 0xbe4f59a0, 0x00000000, 0x3fcd2205, 0xe81ca888, 0x3e5402c3, 730 0x00000000, 0x3fccd747, 0x3b4424b9, 0x3e5dfdc3, 0x80000000, 731 0x3fcc8ca7, 0xd305b56c, 0x3e202da6, 0x00000000, 0x3fcc4226, 732 0x399a6910, 0xbe482a1c, 0x80000000, 0x3fcbf7c2, 0x747f7938, 733 0xbe587372, 0x80000000, 0x3fcbad7c, 0x6fc246a0, 0x3e50d83d, 734 0x00000000, 0x3fcb6355, 0xee9e9be5, 0xbe5c35bd, 0x80000000, 735 0x3fcb194a, 0x8416c0bc, 0x3e546d4f, 0x00000000, 0x3fcacf5e, 736 0x49f7f08f, 0x3e56da76, 0x00000000, 0x3fca858f, 0x5dc30de2, 737 0x3e5f390c, 0x00000000, 0x3fca3bde, 0x950583b6, 0xbe5e4169, 738 0x80000000, 0x3fc9f249, 0x33631553, 0x3e52aeb1, 0x00000000, 739 0x3fc9a8d3, 0xde8795a6, 0xbe59a504, 0x00000000, 0x3fc95f79, 740 0x076bf41e, 0x3e5122fe, 0x80000000, 0x3fc9163c, 0x2914c8e7, 741 0x3e3dd064, 0x00000000, 0x3fc8cd1d, 0x3a30eca3, 0xbe21b4aa, 742 0x80000000, 0x3fc8841a, 0xb2a96650, 0xbe575444, 0x80000000, 743 0x3fc83b34, 0x2376c0cb, 0xbe2a74c7, 0x80000000, 0x3fc7f26b, 744 0xd8a0b653, 0xbe5181b6, 0x00000000, 0x3fc7a9bf, 0x32257882, 745 0xbe4a78b4, 0x00000000, 0x3fc7612f, 0x1eee8bd9, 0xbe1bfe9d, 746 0x80000000, 0x3fc718bb, 0x0c603cc4, 0x3e36fdc9, 0x80000000, 747 0x3fc6d064, 0x3728b8cf, 0xbe1e542e, 0x80000000, 0x3fc68829, 748 0xc79a4067, 0x3e5c380f, 0x00000000, 0x3fc6400b, 0xf69eac69, 749 0x3e550a84, 0x80000000, 0x3fc5f808, 0xb7a780a4, 0x3e5d9224, 750 0x80000000, 0x3fc5b022, 0xad9dfb1e, 0xbe55242f, 0x00000000, 751 0x3fc56858, 0x659b18be, 0xbe4bfda3, 0x80000000, 0x3fc520a9, 752 0x66ee3631, 0xbe57d769, 0x80000000, 0x3fc4d916, 0x1ec62819, 753 0x3e2427f7, 0x80000000, 0x3fc4919f, 0xdec25369, 0xbe435431, 754 0x00000000, 0x3fc44a44, 0xa8acfc4b, 0xbe3c62e8, 0x00000000, 755 0x3fc40304, 0xcf1d3eab, 0xbdfba29f, 0x80000000, 0x3fc3bbdf, 756 0x79aba3ea, 0xbdf1b7c8, 0x80000000, 0x3fc374d6, 0xb8d186da, 757 0xbe5130cf, 0x80000000, 0x3fc32de8, 0x9d74f152, 0x3e2285b6, 758 0x00000000, 0x3fc2e716, 0x50ae7ca9, 0xbe503920, 0x80000000, 759 0x3fc2a05e, 0x6caed92e, 0xbe533924, 0x00000000, 0x3fc259c2, 760 0x9cb5034e, 0xbe510e31, 0x80000000, 0x3fc21340, 0x12c4d378, 761 0xbe540b43, 0x80000000, 0x3fc1ccd9, 0xcc418706, 0x3e59887a, 762 0x00000000, 0x3fc1868e, 0x921f4106, 0xbe528e67, 0x80000000, 763 0x3fc1405c, 0x3969441e, 0x3e5d8051, 0x00000000, 0x3fc0fa46, 764 0xd941ef5b, 0x3e5f9079, 0x80000000, 0x3fc0b44a, 0x5a3e81b2, 765 0xbe567691, 0x00000000, 0x3fc06e69, 0x9d66afe7, 0xbe4d43fb, 766 0x00000000, 0x3fc028a2, 0x0a92a162, 0xbe52f394, 0x00000000, 767 0x3fbfc5ea, 0x209897e5, 0x3e529e37, 0x00000000, 0x3fbf3ac5, 768 0x8458bd7b, 0x3e582831, 0x00000000, 0x3fbeafd5, 0xb8d8b4b8, 769 0xbe486b4a, 0x00000000, 0x3fbe2518, 0xe0a3b7b6, 0x3e5bafd2, 770 0x00000000, 0x3fbd9a90, 0x2bf2710e, 0x3e383b2b, 0x00000000, 771 0x3fbd103c, 0x73eb6ab7, 0xbe56d78d, 0x00000000, 0x3fbc861b, 772 0x32ceaff5, 0xbe32dc5a, 0x00000000, 0x3fbbfc2e, 0xbee04cb7, 773 0xbe4a71a4, 0x00000000, 0x3fbb7274, 0x35ae9577, 0x3e38142f, 774 0x00000000, 0x3fbae8ee, 0xcbaddab4, 0xbe5490f0, 0x00000000, 775 0x3fba5f9a, 0x95ce1114, 0x3e597c71, 0x00000000, 0x3fb9d67a, 776 0x6d7c0f78, 0x3e3abc2d, 0x00000000, 0x3fb94d8d, 0x2841a782, 777 0xbe566cbc, 0x00000000, 0x3fb8c4d2, 0x6ed429c6, 0xbe3cfff9, 778 0x00000000, 0x3fb83c4a, 0xe4a49fbb, 0xbe552964, 0x00000000, 779 0x3fb7b3f4, 0x2193d81e, 0xbe42fa72, 0x00000000, 0x3fb72bd0, 780 0xdd70c122, 0x3e527a8c, 0x00000000, 0x3fb6a3df, 0x03108a54, 781 0xbe450393, 0x00000000, 0x3fb61c1f, 0x30ff7954, 0x3e565840, 782 0x00000000, 0x3fb59492, 0xdedd460c, 0xbe5422b5, 0x00000000, 783 0x3fb50d36, 0x950f9f45, 0xbe5313f6, 0x00000000, 0x3fb4860b, 784 0x582cdcb1, 0x3e506d39, 0x00000000, 0x3fb3ff12, 0x7216d3a6, 785 0x3e4aa719, 0x00000000, 0x3fb3784a, 0x57a423fd, 0x3e5a9b9f, 786 0x00000000, 0x3fb2f1b4, 0x7a138b41, 0xbe50b418, 0x00000000, 787 0x3fb26b4e, 0x2fbfd7ea, 0x3e23a53e, 0x00000000, 0x3fb1e519, 788 0x18913ccb, 0x3e465fc1, 0x00000000, 0x3fb15f15, 0x7ea24e21, 789 0x3e042843, 0x00000000, 0x3fb0d941, 0x7c6d9c77, 0x3e59f61e, 790 0x00000000, 0x3fb0539e, 0x114efd44, 0x3e4ccab7, 0x00000000, 791 0x3faf9c56, 0x1777f657, 0x3e552f65, 0x00000000, 0x3fae91d2, 792 0xc317b86a, 0xbe5a61e0, 0x00000000, 0x3fad87ac, 0xb7664efb, 793 0xbe41f64e, 0x00000000, 0x3fac7de6, 0x5d3d03a9, 0x3e0807a0, 794 0x00000000, 0x3fab7480, 0x743c38eb, 0xbe3726e1, 0x00000000, 795 0x3faa6b78, 0x06a253f1, 0x3e5ad636, 0x00000000, 0x3fa962d0, 796 0xa35f541b, 0x3e5a187a, 0x00000000, 0x3fa85a88, 0x4b86e446, 797 0xbe508150, 0x00000000, 0x3fa7529c, 0x2589cacf, 0x3e52938a, 798 0x00000000, 0x3fa64b10, 0xaf6b11f2, 0xbe3454cd, 0x00000000, 799 0x3fa543e2, 0x97506fef, 0xbe5fdec5, 0x00000000, 0x3fa43d10, 800 0xe75f7dd9, 0xbe388dd3, 0x00000000, 0x3fa3369c, 0xa4139632, 801 0xbdea5177, 0x00000000, 0x3fa23086, 0x352d6f1e, 0xbe565ad6, 802 0x00000000, 0x3fa12acc, 0x77449eb7, 0xbe50d5c7, 0x00000000, 803 0x3fa0256e, 0x7478da78, 0x3e404724, 0x00000000, 0x3f9e40dc, 804 0xf59cef7f, 0xbe539d0a, 0x00000000, 0x3f9c3790, 0x1511d43c, 805 0x3e53c2c8, 0x00000000, 0x3f9a2f00, 0x9b8bff3c, 0xbe43b3e1, 806 0x00000000, 0x3f982724, 0xad1e22a5, 0x3e46f0bd, 0x00000000, 807 0x3f962000, 0x130d9356, 0x3e475ba0, 0x00000000, 0x3f941994, 808 0x8f86f883, 0xbe513d0b, 0x00000000, 0x3f9213dc, 0x914d0dc8, 809 0xbe534335, 0x00000000, 0x3f900ed8, 0x2d73e5e7, 0xbe22ba75, 810 0x00000000, 0x3f8c1510, 0xc5b7d70e, 0x3e599c5d, 0x00000000, 811 0x3f880de0, 0x8a27857e, 0xbe3d28c8, 0x00000000, 0x3f840810, 812 0xda767328, 0x3e531b3d, 0x00000000, 0x3f8003b0, 0x77bacaf3, 813 0xbe5f04e3, 0x00000000, 0x3f780150, 0xdf4b0720, 0x3e5a8bff, 814 0x00000000, 0x3f6ffc40, 0x34c48e71, 0xbe3fcd99, 0x00000000, 815 0x3f5ff6c0, 0x1ad218af, 0xbe4c78a7, 0x00000000, 0x00000000, 816 0x00000000, 0x80000000 817 //@formatter:on 818 }); 819 820 private ArrayDataPointerConstant log2 = pointerConstant(8, new int[]{ 821 //@formatter:off 822 0xfefa39ef, 0x3fe62e42, 0xfefa39ef, 0xbfe62e42 823 //@formatter:on 824 }); 825 826 private ArrayDataPointerConstant double2 = pointerConstant(8, new int[]{ 827 //@formatter:off 828 0x00000000, 0x40000000 829 //@formatter:on 830 }); 831 832 @Override 833 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { 834 // registers, 835 // input: xmm0, xmm1 836 // scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7 837 // rax, rdx, rcx, r8, r11 838 839 // Code generated by Intel C compiler for LIBM library 840 Label block0 = new Label(); 841 Label block1 = new Label(); 842 Label block2 = new Label(); 843 Label block3 = new Label(); 844 Label block4 = new Label(); 845 Label block5 = new Label(); 846 Label block6 = new Label(); 847 Label block7 = new Label(); 848 Label block8 = new Label(); 849 Label block9 = new Label(); 850 Label block10 = new Label(); 851 Label block11 = new Label(); 852 Label block12 = new Label(); 853 Label block13 = new Label(); 854 Label block14 = new Label(); 855 Label block15 = new Label(); 856 Label block16 = new Label(); 857 Label block17 = new Label(); 858 Label block18 = new Label(); 859 Label block19 = new Label(); 860 Label block20 = new Label(); 861 Label block21 = new Label(); 862 Label block22 = new Label(); 863 Label block23 = new Label(); 864 Label block24 = new Label(); 865 Label block25 = new Label(); 866 Label block26 = new Label(); 867 Label block27 = new Label(); 868 Label block28 = new Label(); 869 Label block29 = new Label(); 870 Label block30 = new Label(); 871 Label block31 = new Label(); 872 Label block32 = new Label(); 873 Label block33 = new Label(); 874 Label block34 = new Label(); 875 Label block35 = new Label(); 876 Label block36 = new Label(); 877 Label block37 = new Label(); 878 Label block38 = new Label(); 879 Label block39 = new Label(); 880 Label block40 = new Label(); 881 Label block41 = new Label(); 882 Label block42 = new Label(); 883 Label block43 = new Label(); 884 Label block44 = new Label(); 885 Label block45 = new Label(); 886 Label block46 = new Label(); 887 Label block47 = new Label(); 888 Label block48 = new Label(); 889 Label block49 = new Label(); 890 Label block50 = new Label(); 891 Label block51 = new Label(); 892 Label block52 = new Label(); 893 Label block53 = new Label(); 894 Label block54 = new Label(); 895 Label block55 = new Label(); 896 Label block56 = new Label(); 897 Label block57 = new Label(); 898 899 Register tmp1 = r8; 900 Register tmp2 = r9; 901 Register tmp3 = r10; 902 Register tmp4 = r11; 903 904 masm.subq(rsp, 40); 905 masm.movsd(new AMD64Address(rsp, 8), xmm0); 906 masm.movsd(new AMD64Address(rsp, 16), xmm1); 907 908 // Special case: pow(x, 2.0) => x * x 909 masm.movdq(tmp1, xmm1); 910 masm.cmpq(tmp1, recordExternalAddress(crb, double2)); 911 masm.jccb(AMD64Assembler.ConditionFlag.NotEqual, block57); 912 masm.mulsd(xmm0, xmm0); 913 masm.jmp(block56); 914 915 masm.bind(block57); 916 masm.pextrw(rax, xmm0, 3); 917 masm.xorpd(xmm2, xmm2); 918 masm.movq(tmp2, 0x3ff0000000000000L); 919 masm.movdq(xmm2, tmp2); 920 masm.movl(tmp1, 1069088768); 921 masm.movdq(xmm7, tmp1); 922 masm.xorpd(xmm1, xmm1); 923 masm.movq(tmp3, 0x77f0000000000000L); 924 masm.movdq(xmm1, tmp3); 925 masm.movdqu(xmm3, xmm0); 926 masm.movl(rdx, 32752); 927 masm.andl(rdx, rax); 928 masm.subl(rdx, 16368); 929 masm.movl(rcx, rdx); 930 masm.sarl(rdx, 31); 931 masm.addl(rcx, rdx); 932 masm.xorl(rcx, rdx); 933 masm.por(xmm0, xmm2); 934 masm.movdqu(xmm6, recordExternalAddress(crb, highsigmask)); // 0x00000000, 0xfffff800, 935 // 0x00000000, 0xfffff800 936 masm.psrlq(xmm0, 27); 937 masm.movq(xmm2, recordExternalAddress(crb, log2E)); // 0x00000000, 0x3ff72000, 938 // 0x161bb241, 0xbf5dabe1 939 masm.psrld(xmm0, 2); 940 masm.addl(rcx, 16); 941 masm.bsrl(rcx, rcx); 942 masm.rcpps(xmm0, xmm0); 943 masm.psllq(xmm3, 12); 944 masm.movl(tmp4, 8192); 945 masm.movdq(xmm4, tmp4); 946 masm.psrlq(xmm3, 12); 947 masm.subl(rax, 16); 948 masm.cmpl(rax, 32736); 949 masm.jcc(AMD64Assembler.ConditionFlag.AboveEqual, block0); 950 masm.movl(tmp1, 0); 951 952 masm.bind(block1); 953 masm.mulss(xmm0, xmm7); 954 masm.movl(rdx, -1); 955 masm.subl(rcx, 4); 956 masm.shll(rdx); 957 masm.shlq(rdx, 32); 958 masm.movdq(xmm5, rdx); 959 masm.por(xmm3, xmm1); 960 masm.subl(rax, 16351); 961 masm.cmpl(rax, 1); 962 masm.jcc(AMD64Assembler.ConditionFlag.BelowEqual, block2); 963 masm.paddd(xmm0, xmm4); 964 masm.pand(xmm5, xmm3); 965 masm.movdl(rdx, xmm0); 966 masm.psllq(xmm0, 29); 967 968 masm.bind(block3); 969 masm.subsd(xmm3, xmm5); 970 masm.pand(xmm0, xmm6); 971 masm.subl(rax, 1); 972 masm.sarl(rax, 4); 973 masm.cvtsi2sdl(xmm7, rax); 974 masm.mulpd(xmm5, xmm0); 975 976 masm.bind(block4); 977 masm.mulsd(xmm3, xmm0); 978 masm.movdqu(xmm1, recordExternalAddress(crb, coeff)); // 0x6dc96112, 0xbf836578, 979 // 0xee241472, 0xbf9b0301 980 masm.leaq(tmp4, recordExternalAddress(crb, lTbl)); 981 masm.subsd(xmm5, xmm2); 982 masm.movdqu(xmm4, recordExternalAddress(crb, coeff16)); // 0x9f95985a, 0xbfb528db, 983 // 0xb3841d2a, 0xbfd619b6 984 masm.movl(rcx, rax); 985 masm.sarl(rax, 31); 986 masm.addl(rcx, rax); 987 masm.xorl(rax, rcx); 988 masm.addl(rax, 1); 989 masm.bsrl(rax, rax); 990 masm.unpcklpd(xmm5, xmm3); 991 masm.movdqu(xmm6, recordExternalAddress(crb, coeff32)); // 0x518775e3, 0x3f9004f2, 992 // 0xac8349bb, 0x3fa76c9b 993 masm.addsd(xmm3, xmm5); 994 masm.andl(rdx, 16760832); 995 masm.shrl(rdx, 10); 996 masm.addpd(xmm5, new AMD64Address(tmp4, rdx, AMD64Address.Scale.Times1, -3648)); 997 masm.movdqu(xmm0, recordExternalAddress(crb, coeff48)); // 0x486ececc, 0x3fc4635e, 998 // 0x161bb241, 0xbf5dabe1 999 masm.pshufd(xmm2, xmm3, 68); 1000 masm.mulsd(xmm3, xmm3); 1001 masm.mulpd(xmm1, xmm2); 1002 masm.mulpd(xmm4, xmm2); 1003 masm.addsd(xmm5, xmm7); 1004 masm.mulsd(xmm2, xmm3); 1005 masm.addpd(xmm6, xmm1); 1006 masm.mulsd(xmm3, xmm3); 1007 masm.addpd(xmm0, xmm4); 1008 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1009 masm.movw(rcx, new AMD64Address(rsp, 22)); 1010 masm.pshufd(xmm7, xmm5, 238); 1011 masm.movq(xmm4, recordExternalAddress(crb, highmaskY)); // 0x00000000, 0xfffffff8, 1012 // 0x00000000, 0xffffffff 1013 masm.mulpd(xmm6, xmm2); 1014 masm.pshufd(xmm3, xmm3, 68); 1015 masm.mulpd(xmm0, xmm2); 1016 masm.shll(rax, 4); 1017 masm.subl(rax, 15872); 1018 masm.andl(rcx, 32752); 1019 masm.addl(rax, rcx); 1020 masm.mulpd(xmm3, xmm6); 1021 masm.cmpl(rax, 624); 1022 masm.jcc(AMD64Assembler.ConditionFlag.AboveEqual, block5); 1023 masm.xorpd(xmm6, xmm6); 1024 masm.movl(rdx, 17080); 1025 masm.pinsrw(xmm6, rdx, 3); 1026 masm.movdqu(xmm2, xmm1); 1027 masm.pand(xmm4, xmm1); 1028 masm.subsd(xmm1, xmm4); 1029 masm.mulsd(xmm4, xmm5); 1030 masm.addsd(xmm0, xmm7); 1031 masm.mulsd(xmm1, xmm5); 1032 masm.movdqu(xmm7, xmm6); 1033 masm.addsd(xmm6, xmm4); 1034 masm.leaq(tmp4, recordExternalAddress(crb, tExp)); 1035 masm.addpd(xmm3, xmm0); 1036 masm.movdl(rdx, xmm6); 1037 masm.subsd(xmm6, xmm7); 1038 masm.pshufd(xmm0, xmm3, 238); 1039 masm.subsd(xmm4, xmm6); 1040 masm.addsd(xmm0, xmm3); 1041 masm.movl(rcx, rdx); 1042 masm.andl(rdx, 255); 1043 masm.addl(rdx, rdx); 1044 masm.movdqu(xmm5, new AMD64Address(tmp4, rdx, AMD64Address.Scale.Times8, 0)); 1045 masm.addsd(xmm4, xmm1); 1046 masm.mulsd(xmm2, xmm0); 1047 masm.movdqu(xmm7, recordExternalAddress(crb, eCoeff)); // 0xe78a6731, 0x3f55d87f, 1048 // 0xd704a0c0, 0x3fac6b08 1049 masm.movdqu(xmm3, recordExternalAddress(crb, eCoeff16)); // 0x6fba4e77, 0x3f83b2ab, 1050 // 0xff82c58f, 0x3fcebfbd 1051 masm.shll(rcx, 12); 1052 masm.xorl(rcx, tmp1); 1053 masm.andl(rcx, -1048576); 1054 masm.movdq(xmm6, rcx); 1055 masm.addsd(xmm2, xmm4); 1056 masm.movq(tmp2, 0x3fe62e42fefa39efL); 1057 masm.movdq(xmm1, tmp2); 1058 masm.pshufd(xmm0, xmm2, 68); 1059 masm.pshufd(xmm4, xmm2, 68); 1060 masm.mulsd(xmm1, xmm2); 1061 masm.pshufd(xmm6, xmm6, 17); 1062 masm.mulpd(xmm0, xmm0); 1063 masm.mulpd(xmm7, xmm4); 1064 masm.paddd(xmm5, xmm6); 1065 masm.mulsd(xmm1, xmm5); 1066 masm.pshufd(xmm6, xmm5, 238); 1067 masm.mulsd(xmm0, xmm0); 1068 masm.addpd(xmm3, xmm7); 1069 masm.addsd(xmm1, xmm6); 1070 masm.mulpd(xmm0, xmm3); 1071 masm.pshufd(xmm3, xmm0, 238); 1072 masm.mulsd(xmm0, xmm5); 1073 masm.mulsd(xmm3, xmm5); 1074 masm.addsd(xmm0, xmm1); 1075 masm.addsd(xmm0, xmm3); 1076 masm.addsd(xmm0, xmm5); 1077 masm.jmp(block56); 1078 1079 masm.bind(block0); 1080 masm.addl(rax, 16); 1081 masm.movl(rdx, 32752); 1082 masm.andl(rdx, rax); 1083 masm.cmpl(rdx, 32752); 1084 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block6); 1085 masm.testl(rax, 32768); 1086 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block7); 1087 1088 masm.bind(block8); 1089 masm.movq(xmm0, new AMD64Address(rsp, 8)); 1090 masm.movq(xmm3, new AMD64Address(rsp, 8)); 1091 masm.movdl(rdx, xmm3); 1092 masm.psrlq(xmm3, 32); 1093 masm.movdl(rcx, xmm3); 1094 masm.orl(rdx, rcx); 1095 masm.cmpl(rdx, 0); 1096 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block9); 1097 masm.xorpd(xmm3, xmm3); 1098 masm.movl(rax, 18416); 1099 masm.pinsrw(xmm3, rax, 3); 1100 masm.mulsd(xmm0, xmm3); 1101 masm.xorpd(xmm2, xmm2); 1102 masm.movl(rax, 16368); 1103 masm.pinsrw(xmm2, rax, 3); 1104 masm.movdqu(xmm3, xmm0); 1105 masm.pextrw(rax, xmm0, 3); 1106 masm.por(xmm0, xmm2); 1107 masm.movl(rcx, 18416); 1108 masm.psrlq(xmm0, 27); 1109 masm.movq(xmm2, recordExternalAddress(crb, log2E)); // 0x00000000, 0x3ff72000, 1110 // 0x161bb241, 0xbf5dabe1 1111 masm.psrld(xmm0, 2); 1112 masm.rcpps(xmm0, xmm0); 1113 masm.psllq(xmm3, 12); 1114 masm.movdqu(xmm6, recordExternalAddress(crb, highsigmask)); // 0x00000000, 0xfffff800, 1115 // 0x00000000, 0xfffff800 1116 masm.psrlq(xmm3, 12); 1117 masm.mulss(xmm0, xmm7); 1118 masm.movl(rdx, -1024); 1119 masm.movdl(xmm5, rdx); 1120 masm.por(xmm3, xmm1); 1121 masm.paddd(xmm0, xmm4); 1122 masm.psllq(xmm5, 32); 1123 masm.movdl(rdx, xmm0); 1124 masm.psllq(xmm0, 29); 1125 masm.pand(xmm5, xmm3); 1126 masm.movl(tmp1, 0); 1127 masm.pand(xmm0, xmm6); 1128 masm.subsd(xmm3, xmm5); 1129 masm.andl(rax, 32752); 1130 masm.subl(rax, 18416); 1131 masm.sarl(rax, 4); 1132 masm.cvtsi2sdl(xmm7, rax); 1133 masm.mulpd(xmm5, xmm0); 1134 masm.jmp(block4); 1135 1136 masm.bind(block10); 1137 masm.movq(xmm0, new AMD64Address(rsp, 8)); 1138 masm.movq(xmm3, new AMD64Address(rsp, 8)); 1139 masm.movdl(rdx, xmm3); 1140 masm.psrlq(xmm3, 32); 1141 masm.movdl(rcx, xmm3); 1142 masm.orl(rdx, rcx); 1143 masm.cmpl(rdx, 0); 1144 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block9); 1145 masm.xorpd(xmm3, xmm3); 1146 masm.movl(rax, 18416); 1147 masm.pinsrw(xmm3, rax, 3); 1148 masm.mulsd(xmm0, xmm3); 1149 masm.xorpd(xmm2, xmm2); 1150 masm.movl(rax, 16368); 1151 masm.pinsrw(xmm2, rax, 3); 1152 masm.movdqu(xmm3, xmm0); 1153 masm.pextrw(rax, xmm0, 3); 1154 masm.por(xmm0, xmm2); 1155 masm.movl(rcx, 18416); 1156 masm.psrlq(xmm0, 27); 1157 masm.movq(xmm2, recordExternalAddress(crb, log2E)); // 0x00000000, 0x3ff72000, 1158 // 0x161bb241, 0xbf5dabe1 1159 masm.psrld(xmm0, 2); 1160 masm.rcpps(xmm0, xmm0); 1161 masm.psllq(xmm3, 12); 1162 masm.movdqu(xmm6, recordExternalAddress(crb, highsigmask)); // 0x00000000, 0xfffff800, 1163 // 0x00000000, 0xfffff800 1164 masm.psrlq(xmm3, 12); 1165 masm.mulss(xmm0, xmm7); 1166 masm.movl(rdx, -1024); 1167 masm.movdl(xmm5, rdx); 1168 masm.por(xmm3, xmm1); 1169 masm.paddd(xmm0, xmm4); 1170 masm.psllq(xmm5, 32); 1171 masm.movdl(rdx, xmm0); 1172 masm.psllq(xmm0, 29); 1173 masm.pand(xmm5, xmm3); 1174 masm.movl(tmp1, Integer.MIN_VALUE); 1175 masm.pand(xmm0, xmm6); 1176 masm.subsd(xmm3, xmm5); 1177 masm.andl(rax, 32752); 1178 masm.subl(rax, 18416); 1179 masm.sarl(rax, 4); 1180 masm.cvtsi2sdl(xmm7, rax); 1181 masm.mulpd(xmm5, xmm0); 1182 masm.jmp(block4); 1183 1184 masm.bind(block5); 1185 masm.cmpl(rax, 0); 1186 masm.jcc(AMD64Assembler.ConditionFlag.Less, block11); 1187 masm.cmpl(rax, 752); 1188 masm.jcc(AMD64Assembler.ConditionFlag.AboveEqual, block12); 1189 masm.addsd(xmm0, xmm7); 1190 masm.movq(xmm2, recordExternalAddress(crb, halfmask)); // 0xf8000000, 0xffffffff, 1191 // 0xf8000000, 0xffffffff 1192 masm.addpd(xmm3, xmm0); 1193 masm.xorpd(xmm6, xmm6); 1194 masm.movl(rax, 17080); 1195 masm.pinsrw(xmm6, rax, 3); 1196 masm.pshufd(xmm0, xmm3, 238); 1197 masm.addsd(xmm0, xmm3); 1198 masm.movdqu(xmm3, xmm5); 1199 masm.addsd(xmm5, xmm0); 1200 masm.movdqu(xmm4, xmm2); 1201 masm.subsd(xmm3, xmm5); 1202 masm.movdqu(xmm7, xmm5); 1203 masm.pand(xmm5, xmm2); 1204 masm.movdqu(xmm2, xmm1); 1205 masm.pand(xmm4, xmm1); 1206 masm.subsd(xmm7, xmm5); 1207 masm.addsd(xmm0, xmm3); 1208 masm.subsd(xmm1, xmm4); 1209 masm.mulsd(xmm4, xmm5); 1210 masm.addsd(xmm0, xmm7); 1211 masm.mulsd(xmm2, xmm0); 1212 masm.movdqu(xmm7, xmm6); 1213 masm.mulsd(xmm1, xmm5); 1214 masm.addsd(xmm6, xmm4); 1215 masm.movdl(rax, xmm6); 1216 masm.subsd(xmm6, xmm7); 1217 masm.leaq(tmp4, recordExternalAddress(crb, tExp)); 1218 masm.addsd(xmm2, xmm1); 1219 masm.movdqu(xmm7, recordExternalAddress(crb, eCoeff)); // 0xe78a6731, 0x3f55d87f, 1220 // 0xd704a0c0, 0x3fac6b08 1221 masm.movdqu(xmm3, recordExternalAddress(crb, eCoeff16)); // 0x6fba4e77, 0x3f83b2ab, 1222 // 0xff82c58f, 0x3fcebfbd 1223 masm.subsd(xmm4, xmm6); 1224 masm.pextrw(rdx, xmm6, 3); 1225 masm.movl(rcx, rax); 1226 masm.andl(rax, 255); 1227 masm.addl(rax, rax); 1228 masm.movdqu(xmm5, new AMD64Address(tmp4, rax, AMD64Address.Scale.Times8, 0)); 1229 masm.addsd(xmm2, xmm4); 1230 masm.sarl(rcx, 8); 1231 masm.movl(rax, rcx); 1232 masm.sarl(rcx, 1); 1233 masm.subl(rax, rcx); 1234 masm.shll(rcx, 20); 1235 masm.xorl(rcx, tmp1); 1236 masm.movdl(xmm6, rcx); 1237 masm.movq(xmm1, recordExternalAddress(crb, eCoeff32)); // 0xfefa39ef, 0x3fe62e42, 1238 // 0x00000000, 0x00000000 1239 masm.andl(rdx, 32767); 1240 masm.cmpl(rdx, 16529); 1241 masm.jcc(AMD64Assembler.ConditionFlag.Above, block12); 1242 masm.pshufd(xmm0, xmm2, 68); 1243 masm.pshufd(xmm4, xmm2, 68); 1244 masm.mulpd(xmm0, xmm0); 1245 masm.mulpd(xmm7, xmm4); 1246 masm.pshufd(xmm6, xmm6, 17); 1247 masm.mulsd(xmm1, xmm2); 1248 masm.mulsd(xmm0, xmm0); 1249 masm.paddd(xmm5, xmm6); 1250 masm.addpd(xmm3, xmm7); 1251 masm.mulsd(xmm1, xmm5); 1252 masm.pshufd(xmm6, xmm5, 238); 1253 masm.mulpd(xmm0, xmm3); 1254 masm.addsd(xmm1, xmm6); 1255 masm.pshufd(xmm3, xmm0, 238); 1256 masm.mulsd(xmm0, xmm5); 1257 masm.mulsd(xmm3, xmm5); 1258 masm.shll(rax, 4); 1259 masm.xorpd(xmm4, xmm4); 1260 masm.addl(rax, 16368); 1261 masm.pinsrw(xmm4, rax, 3); 1262 masm.addsd(xmm0, xmm1); 1263 masm.addsd(xmm0, xmm3); 1264 masm.movdqu(xmm1, xmm0); 1265 masm.addsd(xmm0, xmm5); 1266 masm.mulsd(xmm0, xmm4); 1267 masm.pextrw(rax, xmm0, 3); 1268 masm.andl(rax, 32752); 1269 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block13); 1270 masm.cmpl(rax, 32752); 1271 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block14); 1272 masm.jmp(block56); 1273 1274 masm.bind(block6); 1275 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1276 masm.movq(xmm0, new AMD64Address(rsp, 8)); 1277 masm.movdqu(xmm2, xmm0); 1278 masm.movdl(rax, xmm2); 1279 masm.psrlq(xmm2, 20); 1280 masm.movdl(rdx, xmm2); 1281 masm.orl(rax, rdx); 1282 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block15); 1283 masm.movdl(rax, xmm1); 1284 masm.psrlq(xmm1, 32); 1285 masm.movdl(rdx, xmm1); 1286 masm.movl(rcx, rdx); 1287 masm.addl(rdx, rdx); 1288 masm.orl(rax, rdx); 1289 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block16); 1290 masm.addsd(xmm0, xmm0); 1291 masm.jmp(block56); 1292 1293 masm.bind(block16); 1294 masm.xorpd(xmm0, xmm0); 1295 masm.movl(rax, 16368); 1296 masm.pinsrw(xmm0, rax, 3); 1297 masm.movl(new AMD64Address(rsp, 0), 29); 1298 masm.jmp(block17); 1299 1300 masm.bind(block18); 1301 masm.movq(xmm0, new AMD64Address(rsp, 16)); 1302 masm.addpd(xmm0, xmm0); 1303 masm.jmp(block56); 1304 1305 masm.bind(block15); 1306 masm.movdl(rax, xmm1); 1307 masm.movdqu(xmm2, xmm1); 1308 masm.psrlq(xmm1, 32); 1309 masm.movdl(rdx, xmm1); 1310 masm.movl(rcx, rdx); 1311 masm.addl(rdx, rdx); 1312 masm.orl(rax, rdx); 1313 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block19); 1314 masm.pextrw(rax, xmm2, 3); 1315 masm.andl(rax, 32752); 1316 masm.cmpl(rax, 32752); 1317 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block20); 1318 masm.movdl(rax, xmm2); 1319 masm.psrlq(xmm2, 20); 1320 masm.movdl(rdx, xmm2); 1321 masm.orl(rax, rdx); 1322 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block18); 1323 1324 masm.bind(block20); 1325 masm.pextrw(rax, xmm0, 3); 1326 masm.testl(rax, 32768); 1327 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block21); 1328 masm.testl(rcx, Integer.MIN_VALUE); 1329 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block22); 1330 masm.jmp(block56); 1331 1332 masm.bind(block23); 1333 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1334 masm.movdl(rax, xmm1); 1335 masm.testl(rax, 1); 1336 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block24); 1337 masm.testl(rax, 2); 1338 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block25); 1339 masm.jmp(block24); 1340 1341 masm.bind(block21); 1342 masm.shrl(rcx, 20); 1343 masm.andl(rcx, 2047); 1344 masm.cmpl(rcx, 1075); 1345 masm.jcc(AMD64Assembler.ConditionFlag.Above, block24); 1346 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block26); 1347 masm.cmpl(rcx, 1074); 1348 masm.jcc(AMD64Assembler.ConditionFlag.Above, block23); 1349 masm.cmpl(rcx, 1023); 1350 masm.jcc(AMD64Assembler.ConditionFlag.Below, block24); 1351 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1352 masm.movl(rax, 17208); 1353 masm.xorpd(xmm3, xmm3); 1354 masm.pinsrw(xmm3, rax, 3); 1355 masm.movdqu(xmm4, xmm3); 1356 masm.addsd(xmm3, xmm1); 1357 masm.subsd(xmm4, xmm3); 1358 masm.addsd(xmm1, xmm4); 1359 masm.pextrw(rax, xmm1, 3); 1360 masm.andl(rax, 32752); 1361 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block24); 1362 masm.movdl(rax, xmm3); 1363 masm.andl(rax, 1); 1364 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block24); 1365 1366 masm.bind(block25); 1367 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1368 masm.pextrw(rax, xmm1, 3); 1369 masm.andl(rax, 32768); 1370 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block27); 1371 masm.jmp(block56); 1372 1373 masm.bind(block27); 1374 masm.xorpd(xmm0, xmm0); 1375 masm.movl(rax, 32768); 1376 masm.pinsrw(xmm0, rax, 3); 1377 masm.jmp(block56); 1378 1379 masm.bind(block24); 1380 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1381 masm.pextrw(rax, xmm1, 3); 1382 masm.andl(rax, 32768); 1383 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block22); 1384 masm.xorpd(xmm0, xmm0); 1385 masm.movl(rax, 32752); 1386 masm.pinsrw(xmm0, rax, 3); 1387 masm.jmp(block56); 1388 1389 masm.bind(block26); 1390 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1391 masm.movdl(rax, xmm1); 1392 masm.andl(rax, 1); 1393 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block24); 1394 masm.jmp(block25); 1395 1396 masm.bind(block28); 1397 masm.movdl(rax, xmm1); 1398 masm.psrlq(xmm1, 20); 1399 masm.movdl(rdx, xmm1); 1400 masm.orl(rax, rdx); 1401 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block29); 1402 masm.movq(xmm0, new AMD64Address(rsp, 16)); 1403 masm.addsd(xmm0, xmm0); 1404 masm.jmp(block56); 1405 1406 masm.bind(block29); 1407 masm.movq(xmm0, new AMD64Address(rsp, 8)); 1408 masm.pextrw(rax, xmm0, 3); 1409 masm.cmpl(rax, 49136); 1410 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block30); 1411 masm.movdl(rcx, xmm0); 1412 masm.psrlq(xmm0, 20); 1413 masm.movdl(rdx, xmm0); 1414 masm.orl(rcx, rdx); 1415 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block30); 1416 masm.xorpd(xmm0, xmm0); 1417 masm.movl(rax, 32760); 1418 masm.pinsrw(xmm0, rax, 3); 1419 masm.jmp(block56); 1420 1421 masm.bind(block30); 1422 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1423 masm.andl(rax, 32752); 1424 masm.subl(rax, 16368); 1425 masm.pextrw(rdx, xmm1, 3); 1426 masm.xorpd(xmm0, xmm0); 1427 masm.xorl(rax, rdx); 1428 masm.andl(rax, 32768); 1429 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block31); 1430 masm.jmp(block56); 1431 1432 masm.bind(block31); 1433 masm.movl(rcx, 32752); 1434 masm.pinsrw(xmm0, rcx, 3); 1435 masm.jmp(block56); 1436 1437 masm.bind(block32); 1438 masm.movdl(rax, xmm1); 1439 masm.cmpl(rdx, 17184); 1440 masm.jcc(AMD64Assembler.ConditionFlag.Above, block33); 1441 masm.testl(rax, 1); 1442 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block34); 1443 masm.testl(rax, 2); 1444 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block35); 1445 masm.jmp(block36); 1446 1447 masm.bind(block33); 1448 masm.testl(rax, 1); 1449 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block35); 1450 masm.jmp(block36); 1451 1452 masm.bind(block7); 1453 masm.movq(xmm2, new AMD64Address(rsp, 8)); 1454 masm.movdl(rax, xmm2); 1455 masm.psrlq(xmm2, 31); 1456 masm.movdl(rcx, xmm2); 1457 masm.orl(rax, rcx); 1458 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block9); 1459 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1460 masm.pextrw(rdx, xmm1, 3); 1461 masm.movdl(rax, xmm1); 1462 masm.movdqu(xmm2, xmm1); 1463 masm.psrlq(xmm2, 32); 1464 masm.movdl(rcx, xmm2); 1465 masm.addl(rcx, rcx); 1466 masm.orl(rcx, rax); 1467 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block37); 1468 masm.andl(rdx, 32752); 1469 masm.cmpl(rdx, 32752); 1470 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block28); 1471 masm.cmpl(rdx, 17200); 1472 masm.jcc(AMD64Assembler.ConditionFlag.Above, block35); 1473 masm.cmpl(rdx, 17184); 1474 masm.jcc(AMD64Assembler.ConditionFlag.AboveEqual, block32); 1475 masm.cmpl(rdx, 16368); 1476 masm.jcc(AMD64Assembler.ConditionFlag.Below, block34); 1477 masm.movl(rax, 17208); 1478 masm.xorpd(xmm2, xmm2); 1479 masm.pinsrw(xmm2, rax, 3); 1480 masm.movdqu(xmm4, xmm2); 1481 masm.addsd(xmm2, xmm1); 1482 masm.subsd(xmm4, xmm2); 1483 masm.addsd(xmm1, xmm4); 1484 masm.pextrw(rax, xmm1, 3); 1485 masm.andl(rax, 32767); 1486 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block34); 1487 masm.movdl(rax, xmm2); 1488 masm.andl(rax, 1); 1489 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block35); 1490 1491 masm.bind(block36); 1492 masm.xorpd(xmm1, xmm1); 1493 masm.movl(rdx, 30704); 1494 masm.pinsrw(xmm1, rdx, 3); 1495 masm.movq(xmm2, recordExternalAddress(crb, log2E)); // 0x00000000, 0x3ff72000, 1496 // 0x161bb241, 0xbf5dabe1 1497 masm.movq(xmm4, new AMD64Address(rsp, 8)); 1498 masm.pextrw(rax, xmm4, 3); 1499 masm.movl(rdx, 8192); 1500 masm.movdl(xmm4, rdx); 1501 masm.andl(rax, 32767); 1502 masm.subl(rax, 16); 1503 masm.jcc(AMD64Assembler.ConditionFlag.Less, block10); 1504 masm.movl(rdx, rax); 1505 masm.andl(rdx, 32752); 1506 masm.subl(rdx, 16368); 1507 masm.movl(rcx, rdx); 1508 masm.sarl(rdx, 31); 1509 masm.addl(rcx, rdx); 1510 masm.xorl(rcx, rdx); 1511 masm.addl(rcx, 16); 1512 masm.bsrl(rcx, rcx); 1513 masm.movl(tmp1, Integer.MIN_VALUE); 1514 masm.jmp(block1); 1515 1516 masm.bind(block34); 1517 masm.xorpd(xmm1, xmm1); 1518 masm.movl(rax, 32752); 1519 masm.pinsrw(xmm1, rax, 3); 1520 masm.xorpd(xmm0, xmm0); 1521 masm.mulsd(xmm0, xmm1); 1522 masm.movl(new AMD64Address(rsp, 0), 28); 1523 masm.jmp(block17); 1524 1525 masm.bind(block35); 1526 masm.xorpd(xmm1, xmm1); 1527 masm.movl(rdx, 30704); 1528 masm.pinsrw(xmm1, rdx, 3); 1529 masm.movq(xmm2, recordExternalAddress(crb, log2E)); // 0x00000000, 0x3ff72000, 1530 // 0x161bb241, 0xbf5dabe1 1531 masm.movq(xmm4, new AMD64Address(rsp, 8)); 1532 masm.pextrw(rax, xmm4, 3); 1533 masm.movl(rdx, 8192); 1534 masm.movdl(xmm4, rdx); 1535 masm.andl(rax, 32767); 1536 masm.subl(rax, 16); 1537 masm.jcc(AMD64Assembler.ConditionFlag.Less, block8); 1538 masm.movl(rdx, rax); 1539 masm.andl(rdx, 32752); 1540 masm.subl(rdx, 16368); 1541 masm.movl(rcx, rdx); 1542 masm.sarl(rdx, 31); 1543 masm.addl(rcx, rdx); 1544 masm.xorl(rcx, rdx); 1545 masm.addl(rcx, 16); 1546 masm.bsrl(rcx, rcx); 1547 masm.movl(tmp1, 0); 1548 masm.jmp(block1); 1549 1550 masm.bind(block19); 1551 masm.xorpd(xmm0, xmm0); 1552 masm.movl(rax, 16368); 1553 masm.pinsrw(xmm0, rax, 3); 1554 masm.jmp(block56); 1555 1556 masm.bind(block22); 1557 masm.xorpd(xmm0, xmm0); 1558 masm.jmp(block56); 1559 1560 masm.bind(block11); 1561 masm.addl(rax, 384); 1562 masm.cmpl(rax, 0); 1563 masm.jcc(AMD64Assembler.ConditionFlag.Less, block38); 1564 masm.mulsd(xmm5, xmm1); 1565 masm.addsd(xmm0, xmm7); 1566 masm.shrl(tmp1, 31); 1567 masm.addpd(xmm3, xmm0); 1568 masm.pshufd(xmm0, xmm3, 238); 1569 masm.addsd(xmm3, xmm0); 1570 masm.leaq(tmp4, recordExternalAddress(crb, log2)); // 0xfefa39ef, 0x3fe62e42, 1571 // 0xfefa39ef, 0xbfe62e42 1572 masm.movq(xmm4, new AMD64Address(tmp4, tmp1, AMD64Address.Scale.Times8, 0)); 1573 masm.mulsd(xmm1, xmm3); 1574 masm.xorpd(xmm0, xmm0); 1575 masm.movl(rax, 16368); 1576 masm.shll(tmp1, 15); 1577 masm.orl(rax, tmp1); 1578 masm.pinsrw(xmm0, rax, 3); 1579 masm.addsd(xmm5, xmm1); 1580 masm.mulsd(xmm5, xmm4); 1581 masm.addsd(xmm0, xmm5); 1582 masm.jmp(block56); 1583 1584 masm.bind(block38); 1585 1586 masm.bind(block37); 1587 masm.xorpd(xmm0, xmm0); 1588 masm.movl(rax, 16368); 1589 masm.pinsrw(xmm0, rax, 3); 1590 masm.jmp(block56); 1591 1592 masm.bind(block39); 1593 masm.xorpd(xmm0, xmm0); 1594 masm.movl(rax, 16368); 1595 masm.pinsrw(xmm0, rax, 3); 1596 masm.movl(new AMD64Address(rsp, 0), 26); 1597 masm.jmp(block17); 1598 1599 masm.bind(block9); 1600 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1601 masm.movdqu(xmm2, xmm1); 1602 masm.pextrw(rax, xmm1, 3); 1603 masm.andl(rax, 32752); 1604 masm.cmpl(rax, 32752); 1605 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block40); 1606 masm.movdl(rax, xmm2); 1607 masm.psrlq(xmm2, 20); 1608 masm.movdl(rdx, xmm2); 1609 masm.orl(rax, rdx); 1610 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block18); 1611 1612 masm.bind(block40); 1613 masm.movdl(rax, xmm1); 1614 masm.psrlq(xmm1, 32); 1615 masm.movdl(rdx, xmm1); 1616 masm.movl(rcx, rdx); 1617 masm.addl(rdx, rdx); 1618 masm.orl(rax, rdx); 1619 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block39); 1620 masm.shrl(rdx, 21); 1621 masm.cmpl(rdx, 1075); 1622 masm.jcc(AMD64Assembler.ConditionFlag.Above, block41); 1623 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block42); 1624 masm.cmpl(rdx, 1023); 1625 masm.jcc(AMD64Assembler.ConditionFlag.Below, block41); 1626 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1627 masm.movl(rax, 17208); 1628 masm.xorpd(xmm3, xmm3); 1629 masm.pinsrw(xmm3, rax, 3); 1630 masm.movdqu(xmm4, xmm3); 1631 masm.addsd(xmm3, xmm1); 1632 masm.subsd(xmm4, xmm3); 1633 masm.addsd(xmm1, xmm4); 1634 masm.pextrw(rax, xmm1, 3); 1635 masm.andl(rax, 32752); 1636 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block41); 1637 masm.movdl(rax, xmm3); 1638 masm.andl(rax, 1); 1639 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block41); 1640 1641 masm.bind(block43); 1642 masm.movq(xmm0, new AMD64Address(rsp, 8)); 1643 masm.testl(rcx, Integer.MIN_VALUE); 1644 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block44); 1645 masm.jmp(block56); 1646 1647 masm.bind(block42); 1648 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1649 masm.movdl(rax, xmm1); 1650 masm.testl(rax, 1); 1651 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block43); 1652 1653 masm.bind(block41); 1654 masm.testl(rcx, Integer.MIN_VALUE); 1655 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block22); 1656 masm.xorpd(xmm0, xmm0); 1657 1658 masm.bind(block44); 1659 masm.movl(rax, 16368); 1660 masm.xorpd(xmm1, xmm1); 1661 masm.pinsrw(xmm1, rax, 3); 1662 masm.divsd(xmm1, xmm0); 1663 masm.movdqu(xmm0, xmm1); 1664 masm.movl(new AMD64Address(rsp, 0), 27); 1665 masm.jmp(block17); 1666 1667 masm.bind(block12); 1668 masm.movq(xmm2, new AMD64Address(rsp, 8)); 1669 masm.movq(xmm6, new AMD64Address(rsp, 16)); 1670 masm.pextrw(rax, xmm2, 3); 1671 masm.pextrw(rdx, xmm6, 3); 1672 masm.movl(rcx, 32752); 1673 masm.andl(rcx, rdx); 1674 masm.cmpl(rcx, 32752); 1675 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block45); 1676 masm.andl(rax, 32752); 1677 masm.subl(rax, 16368); 1678 masm.xorl(rdx, rax); 1679 masm.testl(rdx, 32768); 1680 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block46); 1681 1682 masm.bind(block47); 1683 masm.movl(rax, 32736); 1684 masm.pinsrw(xmm0, rax, 3); 1685 masm.shrl(tmp1, 16); 1686 masm.orl(rax, tmp1); 1687 masm.pinsrw(xmm1, rax, 3); 1688 masm.mulsd(xmm0, xmm1); 1689 1690 masm.bind(block14); 1691 masm.movl(new AMD64Address(rsp, 0), 24); 1692 masm.jmp(block17); 1693 1694 masm.bind(block46); 1695 masm.movl(rax, 16); 1696 masm.pinsrw(xmm0, rax, 3); 1697 masm.mulsd(xmm0, xmm0); 1698 masm.testl(tmp1, Integer.MIN_VALUE); 1699 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block48); 1700 masm.movq(tmp2, 0x8000000000000000L); 1701 masm.movdq(xmm2, tmp2); 1702 masm.xorpd(xmm0, xmm2); 1703 1704 masm.bind(block48); 1705 masm.movl(new AMD64Address(rsp, 0), 25); 1706 masm.jmp(block17); 1707 1708 masm.bind(block13); 1709 masm.pextrw(rcx, xmm5, 3); 1710 masm.pextrw(rdx, xmm4, 3); 1711 masm.movl(rax, -1); 1712 masm.andl(rcx, 32752); 1713 masm.subl(rcx, 16368); 1714 masm.andl(rdx, 32752); 1715 masm.addl(rdx, rcx); 1716 masm.movl(rcx, -31); 1717 masm.sarl(rdx, 4); 1718 masm.subl(rcx, rdx); 1719 masm.jcc(AMD64Assembler.ConditionFlag.LessEqual, block49); 1720 masm.cmpl(rcx, 20); 1721 masm.jcc(AMD64Assembler.ConditionFlag.Above, block50); 1722 masm.shll(rax); 1723 1724 masm.bind(block49); 1725 masm.movdl(xmm0, rax); 1726 masm.psllq(xmm0, 32); 1727 masm.pand(xmm0, xmm5); 1728 masm.subsd(xmm5, xmm0); 1729 masm.addsd(xmm5, xmm1); 1730 masm.mulsd(xmm0, xmm4); 1731 masm.mulsd(xmm5, xmm4); 1732 masm.addsd(xmm0, xmm5); 1733 1734 masm.bind(block50); 1735 masm.jmp(block48); 1736 1737 masm.bind(block2); 1738 masm.movw(rcx, new AMD64Address(rsp, 22)); 1739 masm.movl(rdx, Integer.MIN_VALUE); 1740 masm.movdl(xmm1, rdx); 1741 masm.xorpd(xmm7, xmm7); 1742 masm.paddd(xmm0, xmm4); 1743 masm.movdl(rdx, xmm0); 1744 masm.psllq(xmm0, 29); 1745 masm.paddq(xmm1, xmm3); 1746 masm.pand(xmm5, xmm1); 1747 masm.andl(rcx, 32752); 1748 masm.cmpl(rcx, 16560); 1749 masm.jcc(AMD64Assembler.ConditionFlag.Less, block3); 1750 masm.pand(xmm0, xmm6); 1751 masm.subsd(xmm3, xmm5); 1752 masm.addl(rax, 16351); 1753 masm.shrl(rax, 4); 1754 masm.subl(rax, 1022); 1755 masm.cvtsi2sdl(xmm7, rax); 1756 masm.mulpd(xmm5, xmm0); 1757 masm.leaq(r11, recordExternalAddress(crb, lTbl)); 1758 masm.movq(xmm4, recordExternalAddress(crb, coeffH)); // 0x00000000, 0xbfd61a00, 1759 // 0x00000000, 0xbf5dabe1 1760 masm.mulsd(xmm3, xmm0); 1761 masm.movq(xmm6, recordExternalAddress(crb, coeffH)); // 0x00000000, 0xbfd61a00, 1762 // 0x00000000, 0xbf5dabe1 1763 masm.subsd(xmm5, xmm2); 1764 masm.movq(xmm1, recordExternalAddress(crb, coeffH8)); // 0x00000000, 0xbf5dabe1 1765 masm.pshufd(xmm2, xmm3, 68); 1766 masm.unpcklpd(xmm5, xmm3); 1767 masm.addsd(xmm3, xmm5); 1768 masm.movq(xmm0, recordExternalAddress(crb, coeffH8)); // 0x00000000, 0xbf5dabe1 1769 masm.andl(rdx, 16760832); 1770 masm.shrl(rdx, 10); 1771 masm.addpd(xmm7, new AMD64Address(tmp4, rdx, AMD64Address.Scale.Times1, -3648)); 1772 masm.mulsd(xmm4, xmm5); 1773 masm.mulsd(xmm0, xmm5); 1774 masm.mulsd(xmm6, xmm2); 1775 masm.mulsd(xmm1, xmm2); 1776 masm.movdqu(xmm2, xmm5); 1777 masm.mulsd(xmm4, xmm5); 1778 masm.addsd(xmm5, xmm0); 1779 masm.movdqu(xmm0, xmm7); 1780 masm.addsd(xmm2, xmm3); 1781 masm.addsd(xmm7, xmm5); 1782 masm.mulsd(xmm6, xmm2); 1783 masm.subsd(xmm0, xmm7); 1784 masm.movdqu(xmm2, xmm7); 1785 masm.addsd(xmm7, xmm4); 1786 masm.addsd(xmm0, xmm5); 1787 masm.subsd(xmm2, xmm7); 1788 masm.addsd(xmm4, xmm2); 1789 masm.pshufd(xmm2, xmm5, 238); 1790 masm.movdqu(xmm5, xmm7); 1791 masm.addsd(xmm7, xmm2); 1792 masm.addsd(xmm4, xmm0); 1793 masm.movdqu(xmm0, recordExternalAddress(crb, coeff)); // 0x6dc96112, 0xbf836578, 1794 // 0xee241472, 0xbf9b0301 1795 masm.subsd(xmm5, xmm7); 1796 masm.addsd(xmm6, xmm4); 1797 masm.movdqu(xmm4, xmm7); 1798 masm.addsd(xmm5, xmm2); 1799 masm.addsd(xmm7, xmm1); 1800 masm.movdqu(xmm2, recordExternalAddress(crb, coeff64)); // 0x486ececc, 0x3fc4635e, 1801 // 0x161bb241, 0xbf5dabe1 1802 masm.subsd(xmm4, xmm7); 1803 masm.addsd(xmm6, xmm5); 1804 masm.addsd(xmm4, xmm1); 1805 masm.pshufd(xmm5, xmm7, 238); 1806 masm.movapd(xmm1, xmm7); 1807 masm.addsd(xmm7, xmm5); 1808 masm.subsd(xmm1, xmm7); 1809 masm.addsd(xmm1, xmm5); 1810 masm.movdqu(xmm5, recordExternalAddress(crb, coeff80)); // 0x9f95985a, 0xbfb528db, 1811 // 0xf8b5787d, 0x3ef2531e 1812 masm.pshufd(xmm3, xmm3, 68); 1813 masm.addsd(xmm6, xmm4); 1814 masm.addsd(xmm6, xmm1); 1815 masm.movdqu(xmm1, recordExternalAddress(crb, coeff32)); // 0x9f95985a, 0xbfb528db, 1816 // 0xb3841d2a, 0xbfd619b6 1817 masm.mulpd(xmm0, xmm3); 1818 masm.mulpd(xmm2, xmm3); 1819 masm.pshufd(xmm4, xmm3, 68); 1820 masm.mulpd(xmm3, xmm3); 1821 masm.addpd(xmm0, xmm1); 1822 masm.addpd(xmm5, xmm2); 1823 masm.mulsd(xmm4, xmm3); 1824 masm.movq(xmm2, recordExternalAddress(crb, highmaskLogX)); // 0xf8000000, 0xffffffff, 1825 // 0x00000000, 0xfffff800 1826 masm.mulpd(xmm3, xmm3); 1827 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1828 masm.movw(rcx, new AMD64Address(rsp, 22)); 1829 masm.mulpd(xmm0, xmm4); 1830 masm.pextrw(rax, xmm7, 3); 1831 masm.mulpd(xmm5, xmm4); 1832 masm.mulpd(xmm0, xmm3); 1833 masm.movq(xmm4, recordExternalAddress(crb, highmaskY8)); // 0x00000000, 0xffffffff 1834 masm.pand(xmm2, xmm7); 1835 masm.addsd(xmm5, xmm6); 1836 masm.subsd(xmm7, xmm2); 1837 masm.addpd(xmm5, xmm0); 1838 masm.andl(rax, 32752); 1839 masm.subl(rax, 16368); 1840 masm.andl(rcx, 32752); 1841 masm.cmpl(rcx, 32752); 1842 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block45); 1843 masm.addl(rcx, rax); 1844 masm.cmpl(rcx, 16576); 1845 masm.jcc(AMD64Assembler.ConditionFlag.AboveEqual, block51); 1846 masm.pshufd(xmm0, xmm5, 238); 1847 masm.pand(xmm4, xmm1); 1848 masm.movdqu(xmm3, xmm1); 1849 masm.addsd(xmm5, xmm0); 1850 masm.subsd(xmm1, xmm4); 1851 masm.xorpd(xmm6, xmm6); 1852 masm.movl(rdx, 17080); 1853 masm.pinsrw(xmm6, rdx, 3); 1854 masm.addsd(xmm7, xmm5); 1855 masm.mulsd(xmm4, xmm2); 1856 masm.mulsd(xmm1, xmm2); 1857 masm.movdqu(xmm5, xmm6); 1858 masm.mulsd(xmm3, xmm7); 1859 masm.addsd(xmm6, xmm4); 1860 masm.addsd(xmm1, xmm3); 1861 masm.movdqu(xmm7, recordExternalAddress(crb, eCoeff)); // 0xe78a6731, 0x3f55d87f, 1862 // 0xd704a0c0, 0x3fac6b08 1863 masm.movdl(rdx, xmm6); 1864 masm.subsd(xmm6, xmm5); 1865 masm.leaq(tmp4, recordExternalAddress(crb, tExp)); 1866 masm.movdqu(xmm3, recordExternalAddress(crb, eCoeff16)); // 0x6fba4e77, 0x3f83b2ab, 1867 // 0xff82c58f, 0x3fcebfbd 1868 masm.movq(xmm2, recordExternalAddress(crb, eCoeff32)); // 0xfefa39ef, 0x3fe62e42, 1869 // 0x00000000, 0x00000000 1870 masm.subsd(xmm4, xmm6); 1871 masm.movl(rcx, rdx); 1872 masm.andl(rdx, 255); 1873 masm.addl(rdx, rdx); 1874 masm.movdqu(xmm5, new AMD64Address(tmp4, rdx, AMD64Address.Scale.Times8, 0)); 1875 masm.addsd(xmm4, xmm1); 1876 masm.pextrw(rdx, xmm6, 3); 1877 masm.shrl(rcx, 8); 1878 masm.movl(rax, rcx); 1879 masm.shrl(rcx, 1); 1880 masm.subl(rax, rcx); 1881 masm.shll(rcx, 20); 1882 masm.movdl(xmm6, rcx); 1883 masm.pshufd(xmm0, xmm4, 68); 1884 masm.pshufd(xmm1, xmm4, 68); 1885 masm.mulpd(xmm0, xmm0); 1886 masm.mulpd(xmm7, xmm1); 1887 masm.pshufd(xmm6, xmm6, 17); 1888 masm.mulsd(xmm2, xmm4); 1889 masm.andl(rdx, 32767); 1890 masm.cmpl(rdx, 16529); 1891 masm.jcc(AMD64Assembler.ConditionFlag.Above, block12); 1892 masm.mulsd(xmm0, xmm0); 1893 masm.paddd(xmm5, xmm6); 1894 masm.addpd(xmm3, xmm7); 1895 masm.mulsd(xmm2, xmm5); 1896 masm.pshufd(xmm6, xmm5, 238); 1897 masm.mulpd(xmm0, xmm3); 1898 masm.addsd(xmm2, xmm6); 1899 masm.pshufd(xmm3, xmm0, 238); 1900 masm.addl(rax, 1023); 1901 masm.shll(rax, 20); 1902 masm.orl(rax, tmp1); 1903 masm.movdl(xmm4, rax); 1904 masm.mulsd(xmm0, xmm5); 1905 masm.mulsd(xmm3, xmm5); 1906 masm.addsd(xmm0, xmm2); 1907 masm.psllq(xmm4, 32); 1908 masm.addsd(xmm0, xmm3); 1909 masm.movdqu(xmm1, xmm0); 1910 masm.addsd(xmm0, xmm5); 1911 masm.mulsd(xmm0, xmm4); 1912 masm.pextrw(rax, xmm0, 3); 1913 masm.andl(rax, 32752); 1914 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block13); 1915 masm.cmpl(rax, 32752); 1916 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block14); 1917 1918 masm.bind(block52); 1919 masm.jmp(block56); 1920 1921 masm.bind(block45); 1922 masm.movq(xmm0, new AMD64Address(rsp, 8)); 1923 masm.xorpd(xmm2, xmm2); 1924 masm.movl(rax, 49136); 1925 masm.pinsrw(xmm2, rax, 3); 1926 masm.addsd(xmm2, xmm0); 1927 masm.pextrw(rax, xmm2, 3); 1928 masm.cmpl(rax, 0); 1929 masm.jcc(AMD64Assembler.ConditionFlag.NotEqual, block53); 1930 masm.xorpd(xmm0, xmm0); 1931 masm.movl(rax, 32760); 1932 masm.pinsrw(xmm0, rax, 3); 1933 masm.jmp(block56); 1934 1935 masm.bind(block53); 1936 masm.movq(xmm1, new AMD64Address(rsp, 16)); 1937 masm.movdl(rdx, xmm1); 1938 masm.movdqu(xmm3, xmm1); 1939 masm.psrlq(xmm3, 20); 1940 masm.movdl(rcx, xmm3); 1941 masm.orl(rcx, rdx); 1942 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block54); 1943 masm.addsd(xmm1, xmm1); 1944 masm.movdqu(xmm0, xmm1); 1945 masm.jmp(block56); 1946 1947 masm.bind(block51); 1948 masm.pextrw(rax, xmm1, 3); 1949 masm.pextrw(rcx, xmm2, 3); 1950 masm.xorl(rax, rcx); 1951 masm.testl(rax, 32768); 1952 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block47); 1953 masm.jmp(block46); 1954 1955 masm.bind(block54); 1956 masm.pextrw(rax, xmm0, 3); 1957 masm.andl(rax, 32752); 1958 masm.pextrw(rdx, xmm1, 3); 1959 masm.xorpd(xmm0, xmm0); 1960 masm.subl(rax, 16368); 1961 masm.xorl(rax, rdx); 1962 masm.testl(rax, 32768); 1963 masm.jcc(AMD64Assembler.ConditionFlag.Equal, block55); 1964 masm.jmp(block56); 1965 1966 masm.bind(block55); 1967 masm.movl(rdx, 32752); 1968 masm.pinsrw(xmm0, rdx, 3); 1969 masm.jmp(block56); 1970 1971 masm.bind(block17); 1972 masm.movq(new AMD64Address(rsp, 24), xmm0); 1973 1974 masm.movq(xmm0, new AMD64Address(rsp, 24)); 1975 1976 masm.bind(block56); 1977 masm.addq(rsp, 40); 1978 } 1979 }