< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64MathIntrinsicBinaryOp.java

Print this page




   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 
  24 
  25 package org.graalvm.compiler.lir.amd64;
  26 
  27 import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.ILLEGAL;
  28 import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.REG;
  29 import static jdk.vm.ci.code.ValueUtil.asRegister;
  30 
  31 import org.graalvm.compiler.asm.Label;
  32 import org.graalvm.compiler.asm.amd64.AMD64Address;
  33 import org.graalvm.compiler.asm.amd64.AMD64Address.Scale;
  34 import org.graalvm.compiler.asm.amd64.AMD64Assembler.ConditionFlag;
  35 import org.graalvm.compiler.asm.amd64.AMD64MacroAssembler;
  36 import org.graalvm.compiler.core.common.LIRKind;
  37 import org.graalvm.compiler.debug.GraalError;
  38 import org.graalvm.compiler.lir.LIRInstructionClass;
  39 import org.graalvm.compiler.lir.Opcode;
  40 import org.graalvm.compiler.lir.asm.ArrayDataPointerConstant;
  41 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
  42 import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
  43 
  44 import jdk.vm.ci.amd64.AMD64;
  45 import jdk.vm.ci.amd64.AMD64Kind;
  46 import jdk.vm.ci.code.Register;
  47 import jdk.vm.ci.meta.AllocatableValue;
  48 import jdk.vm.ci.meta.Value;
  49 
  50 public final class AMD64MathIntrinsicBinaryOp extends AMD64LIRInstruction {
  51     public static final LIRInstructionClass<AMD64MathIntrinsicBinaryOp> TYPE = LIRInstructionClass.create(AMD64MathIntrinsicBinaryOp.class);

















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


   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 
  24 
  25 package org.graalvm.compiler.lir.amd64;
  26 
  27 import static jdk.vm.ci.amd64.AMD64.xmm0;
  28 import static jdk.vm.ci.amd64.AMD64.xmm1;
  29 import static org.graalvm.compiler.lir.amd64.AMD64HotSpotHelper.registersToValues;
  30 





  31 import org.graalvm.compiler.core.common.LIRKind;

  32 import org.graalvm.compiler.lir.LIRInstructionClass;
  33 import org.graalvm.compiler.lir.Variable;
  34 import org.graalvm.compiler.lir.gen.LIRGenerator;


  35 

  36 import jdk.vm.ci.amd64.AMD64Kind;
  37 import jdk.vm.ci.code.Register;
  38 import jdk.vm.ci.code.RegisterValue;
  39 import jdk.vm.ci.meta.Value;
  40 
  41 /**
  42  * AMD64MathIntrinsicBinaryOp assumes that the input values are stored in the xmm0 and xmm1
  43  * registers, and it will emit the output value into the xmm0 register.
  44  * {@link #emitLIRWrapper(LIRGenerator, Value, Value)} is provided for emitting necessary mov LIRs
  45  * before and after this LIR instruction.
  46  */
  47 public abstract class AMD64MathIntrinsicBinaryOp extends AMD64LIRInstruction {
  48 
  49     @Def protected Value output;
  50     @Use protected Value input0;
  51     @Use protected Value input1;
  52     @Temp protected Value[] temps;
  53 
  54     public AMD64MathIntrinsicBinaryOp(LIRInstructionClass<? extends AMD64MathIntrinsicBinaryOp> type, Register... registers) {
  55         super(type);
  56 
  57         input0 = xmm0.asValue(LIRKind.value(AMD64Kind.DOUBLE));
  58         input1 = xmm1.asValue(LIRKind.value(AMD64Kind.DOUBLE));
  59         output = xmm0.asValue(LIRKind.value(AMD64Kind.DOUBLE));
  60 
  61         temps = registersToValues(registers);

  62     }
  63 
  64     public final Variable emitLIRWrapper(LIRGenerator gen, Value x, Value y) {
  65         LIRKind kind = LIRKind.combine(x, y);
  66         RegisterValue xmm0Value = xmm0.asValue(kind);
  67         gen.emitMove(xmm0Value, x);
  68         RegisterValue xmm1Value = xmm1.asValue(kind);
  69         gen.emitMove(xmm1Value, y);
  70         gen.append(this);
  71         Variable result = gen.newVariable(kind);
  72         gen.emitMove(result, xmm0Value);
  73         return result;














































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































  74     }
  75 }
< prev index next >