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