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