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