1 /*
   2 * Copyright (c) 2016, Intel Corporation.
   3 * Intel Math Library (LIBM) Source Code
   4 *
   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 #include "precompiled.hpp"
  28 #include "asm/assembler.hpp"
  29 #include "asm/assembler.inline.hpp"
  30 #include "macroAssembler_x86.hpp"
  31 #include "runtime/stubRoutines.hpp"
  32 #include "utilities/globalDefinitions.hpp"
  33 
  34 /******************************************************************************/
  35 //                     ALGORITHM DESCRIPTION - TAN()
  36 //                     ---------------------
  37 //
  38 // Polynomials coefficients and other constants.
  39 //
  40 // Note that in this algorithm, there is a different polynomial for
  41 // each breakpoint, so there are 32 sets of polynomial coefficients
  42 // as well as 32 instances of the other constants.
  43 //
  44 // The polynomial coefficients and constants are offset from the start
  45 // of the main block as follows:
  46 //
  47 //   0:  c8 | c0
  48 //  16:  c9 | c1
  49 //  32: c10 | c2
  50 //  48: c11 | c3
  51 //  64: c12 | c4
  52 //  80: c13 | c5
  53 //  96: c14 | c6
  54 // 112: c15 | c7
  55 // 128: T_hi
  56 // 136: T_lo
  57 // 144: Sigma
  58 // 152: T_hl
  59 // 160: Tau
  60 // 168: Mask
  61 // 176: (end of block)
  62 //
  63 // The total table size is therefore 5632 bytes.
  64 //
  65 // Note that c0 and c1 are always zero. We could try storing
  66 // other constants here, and just loading the low part of the
  67 // SIMD register in these cases, after ensuring the high part
  68 // is zero.
  69 //
  70 // The higher terms of the polynomial are computed in the *low*
  71 // part of the SIMD register. This is so we can overlap the
  72 // multiplication by r^8 and the unpacking of the other part.
  73 //
  74 // The constants are:
  75 // T_hi + T_lo = accurate constant term in power series
  76 // Sigma + T_hl = accurate coefficient of r in power series (Sigma=1 bit)
  77 // Tau = multiplier for the reciprocal, always -1 or 0
  78 //
  79 // The basic reconstruction formula using these constants is:
  80 //
  81 // High = tau * recip_hi + t_hi
  82 // Med = (sgn * r + t_hl * r)_hi
  83 // Low = (sgn * r + t_hl * r)_lo +
  84 //       tau * recip_lo + T_lo + (T_hl + sigma) * c + pol
  85 //
  86 // where pol = c0 + c1 * r + c2 * r^2 + ... + c15 * r^15
  87 //
  88 // (c0 = c1 = 0, but using them keeps SIMD regularity)
  89 //
  90 // We then do a compensated sum High + Med, add the low parts together
  91 // and then do the final sum.
  92 //
  93 // Here recip_hi + recip_lo is an accurate reciprocal of the remainder
  94 // modulo pi/2
  95 //
  96 // Special cases:
  97 //  tan(NaN) = quiet NaN, and raise invalid exception
  98 //  tan(INF) = NaN and raise invalid exception
  99 //  tan(+/-0) = +/-0
 100 //
 101 /******************************************************************************/
 102 
 103 #ifdef _LP64
 104 // The 64 bit code is at most SSE2 compliant
 105 ATTRIBUTE_ALIGNED(16) juint _ONEHALF_tan[] =
 106 {
 107     0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
 108 };
 109 
 110 ATTRIBUTE_ALIGNED(16) juint _MUL16[] =
 111 {
 112     0x00000000UL, 0x40300000UL, 0x00000000UL, 0x3ff00000UL
 113 };
 114 
 115 ATTRIBUTE_ALIGNED(16) juint _sign_mask_tan[] =
 116 {
 117     0x00000000UL, 0x80000000UL, 0x00000000UL, 0x80000000UL
 118 };
 119 
 120 ATTRIBUTE_ALIGNED(16) juint _PI32INV_tan[] =
 121 {
 122     0x6dc9c883UL, 0x3fe45f30UL, 0x6dc9c883UL, 0x40245f30UL
 123 };
 124 
 125 ATTRIBUTE_ALIGNED(16) juint _P_1_tan[] =
 126 {
 127     0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL
 128 };
 129 
 130 ATTRIBUTE_ALIGNED(16) juint _P_2_tan[] =
 131 {
 132     0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL
 133 };
 134 
 135 ATTRIBUTE_ALIGNED(16) juint _P_3_tan[] =
 136 {
 137     0x3707344aUL, 0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL
 138 };
 139 
 140 ATTRIBUTE_ALIGNED(16) juint _Ctable_tan[] =
 141 {
 142     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x882c10faUL,
 143     0x3f9664f4UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 144     0x00000000UL, 0x00000000UL, 0x55e6c23dUL, 0x3f8226e3UL, 0x55555555UL,
 145     0x3fd55555UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 146     0x0e157de0UL, 0x3f6d6d3dUL, 0x11111111UL, 0x3fc11111UL, 0x00000000UL,
 147     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x452b75e3UL, 0x3f57da36UL,
 148     0x1ba1ba1cUL, 0x3faba1baUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 149     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
 150     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL,
 151     0x3f953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL,
 152     0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0x3f85ad63UL, 0xdc230b9bUL,
 153     0x3fb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL,
 154     0x77bb08baUL, 0x3f757c85UL, 0xb6247521UL, 0x3fb1381eUL, 0x5922170cUL,
 155     0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0x3f64e391UL,
 156     0x3e666320UL, 0x3fa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL,
 157     0x3fafa8aeUL, 0x8c5b2da2UL, 0x3fb936bbUL, 0x4e88f7a5UL, 0x3c587d05UL,
 158     0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
 159     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x5a279ea3UL, 0x3faa3407UL,
 160     0x00000000UL, 0x00000000UL, 0x432d65faUL, 0x3fa70153UL, 0x00000000UL,
 161     0x00000000UL, 0x891a4602UL, 0x3f9d03efUL, 0xd62ca5f8UL, 0x3fca77d9UL,
 162     0xb35f4628UL, 0x3f97a265UL, 0x433258faUL, 0x3fd8cf51UL, 0xb58fd909UL,
 163     0x3f8f88e3UL, 0x01771ceaUL, 0x3fc2b154UL, 0xf3562f8eUL, 0x3f888f57UL,
 164     0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL, 0x3f80f44cUL, 0x214368e9UL,
 165     0x3fb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL, 0x172dbbf0UL, 0x3fb6cb8eUL,
 166     0xe0553158UL, 0x3fc975f5UL, 0x593fe814UL, 0x3c2ef5d3UL, 0x00000000UL,
 167     0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL, 0x00000000UL, 0x00000000UL,
 168     0x00000000UL, 0x00000000UL, 0x9314533eUL, 0x3fbb8ec5UL, 0x00000000UL,
 169     0x00000000UL, 0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL,
 170     0xdcb427fdUL, 0x3fb13950UL, 0xd87ab0bbUL, 0x3fd5335eUL, 0xce0ae8a5UL,
 171     0x3fabb382UL, 0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0x3fa552f1UL,
 172     0x59f21a6dUL, 0x3fd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL,
 173     0x3fd0576cUL, 0x8f2c2950UL, 0x3f9a4898UL, 0xc0b3f22cUL, 0x3fc59462UL,
 174     0x1883a4b8UL, 0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL,
 175     0x3fd36a08UL, 0x1dce993dUL, 0xbc6d704dUL, 0x00000000UL, 0x3ff00000UL,
 176     0x2b82ab63UL, 0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 177     0x00000000UL, 0x56f37042UL, 0x3fccfc56UL, 0x00000000UL, 0x00000000UL,
 178     0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL, 0x3d0e7c5dUL,
 179     0x3fc50533UL, 0x9bed9b2eUL, 0x3fdf0ed9UL, 0x5fe7c47cUL, 0x3fc1f250UL,
 180     0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0x3fbe5c71UL, 0x86362c20UL,
 181     0x3fda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL, 0x3fd911bdUL,
 182     0xb56658beUL, 0x3fb5e4c7UL, 0x93a2fd76UL, 0x3fd3c092UL, 0xda271794UL,
 183     0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL, 0x3fda8279UL,
 184     0xb68c1467UL, 0x3c708b2fUL, 0x00000000UL, 0x3ff00000UL, 0x980c4337UL,
 185     0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 186     0xcc03e501UL, 0x3fdff10fUL, 0x00000000UL, 0x00000000UL, 0x44a4e845UL,
 187     0x3fddb63bUL, 0x00000000UL, 0x00000000UL, 0x3768ad9fUL, 0x3fdb72a4UL,
 188     0x3dd01ccaUL, 0x3fe5fdb9UL, 0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL,
 189     0x3fe977f9UL, 0xd013b3abUL, 0x3fd78ca3UL, 0xbf0bf914UL, 0x3fe4f192UL,
 190     0x4d53e730UL, 0x3fd5d060UL, 0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL,
 191     0x3fd4322aUL, 0x5936a835UL, 0x3fe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL,
 192     0xef478605UL, 0x3fe1659eUL, 0x190834ecUL, 0x3fe11ab7UL, 0xcdb625eaUL,
 193     0xbc8e564bUL, 0x00000000UL, 0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL,
 194     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL,
 195     0x3ff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL,
 196     0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0x3ff3972eUL, 0xe93463bdUL,
 197     0x3feeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL,
 198     0xa04e8ea3UL, 0x3ff4541aUL, 0x386accd3UL, 0x3ff1369eUL, 0x222a66ddUL,
 199     0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0x3ff5178fUL,
 200     0xddaa0031UL, 0x3ff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL,
 201     0x3ff29311UL, 0x2ab7f990UL, 0x3fe561b8UL, 0x209c7df1UL, 0x3c87a8c5UL,
 202     0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL,
 203     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc7ab4d5aUL, 0x40085e24UL,
 204     0x00000000UL, 0x00000000UL, 0xe93ea75dUL, 0x400b963dUL, 0x00000000UL,
 205     0x00000000UL, 0x94a7f25aUL, 0x400f37e2UL, 0x4b6261cbUL, 0x3ff5f984UL,
 206     0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL, 0x3ffaf5a5UL, 0x7f2ce8e3UL,
 207     0x4013fe8bUL, 0xfe8e54faUL, 0x3ffd7334UL, 0x670d618dUL, 0x4016a10cUL,
 208     0x4db97058UL, 0x4000e012UL, 0x24df44ddUL, 0x40199c5fUL, 0x697d6eceUL,
 209     0x4003006eUL, 0x83298b82UL, 0x401cfc4dUL, 0x19d490d6UL, 0x40058c19UL,
 210     0x2ae42850UL, 0x3fea4300UL, 0x118e20e6UL, 0xbc7a6db8UL, 0x00000000UL,
 211     0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL, 0x00000000UL, 0x00000000UL,
 212     0x00000000UL, 0x00000000UL, 0x65965966UL, 0x40219659UL, 0x00000000UL,
 213     0x00000000UL, 0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL,
 214     0x83cd3723UL, 0x402c8342UL, 0x00000000UL, 0x40000000UL, 0x55e6c23dUL,
 215     0x403226e3UL, 0x55555555UL, 0x40055555UL, 0x34451939UL, 0x40371c96UL,
 216     0xaaaaaaabUL, 0x400aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL,
 217     0x40111111UL, 0xa738201fUL, 0x4042bbceUL, 0x05b05b06UL, 0x4015b05bUL,
 218     0x452b75e3UL, 0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL,
 219     0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL,
 220     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 221     0x00000000UL, 0x4f48b8d3UL, 0xbf33eaf9UL, 0x00000000UL, 0x00000000UL,
 222     0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL, 0xd0258911UL,
 223     0xbf0abaf3UL, 0x23e49fe9UL, 0xbfab5a8cUL, 0x2d53222eUL, 0x3ef60d15UL,
 224     0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0xbee1d3b5UL, 0xdbf93b8eUL,
 225     0xbf84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL, 0x3f743924UL,
 226     0x794a8297UL, 0xbeb7b7b9UL, 0xe015f797UL, 0xbf5d41f5UL, 0xe41a4a56UL,
 227     0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL, 0xbfce49ceUL,
 228     0x8c743719UL, 0x3d1eb860UL, 0x00000000UL, 0x00000000UL, 0x1b4863cfUL,
 229     0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
 230     0x535ad890UL, 0xbf2b9320UL, 0x00000000UL, 0x00000000UL, 0x018fdf1fUL,
 231     0x3f16d61dUL, 0x00000000UL, 0x00000000UL, 0x0359f1beUL, 0xbf0139e4UL,
 232     0xa4317c6dUL, 0xbfa67e17UL, 0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL,
 233     0x3f9f455bUL, 0x51ccf238UL, 0xbed55317UL, 0xf437b9acUL, 0xbf804beeUL,
 234     0xc791a2b5UL, 0x3ec0e993UL, 0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL,
 235     0xbeaa48a2UL, 0x0a268358UL, 0xbf55a443UL, 0xdfd978e4UL, 0x3e94b61fUL,
 236     0xd7767a58UL, 0x3f431806UL, 0x2aea0000UL, 0xbfc9bbe8UL, 0x7723ea61UL,
 237     0xbd3a2369UL, 0x00000000UL, 0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL,
 238     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL,
 239     0xbf231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL,
 240     0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0xbef66191UL, 0x848a46c6UL,
 241     0xbfa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL,
 242     0xfdd299efUL, 0xbec9dd1aUL, 0x3f8dbaafUL, 0xbf793363UL, 0x309fc6eaUL,
 243     0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0xbe9dae11UL,
 244     0x3e5c67b3UL, 0xbf4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL,
 245     0x3f3d1eb1UL, 0x29cfc000UL, 0xbfc549ceUL, 0xbf159358UL, 0xbd397b33UL,
 246     0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL,
 247     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x7d98a556UL, 0xbf1a3958UL,
 248     0x00000000UL, 0x00000000UL, 0x9d88dc01UL, 0x3f0704c2UL, 0x00000000UL,
 249     0x00000000UL, 0x73742a2bUL, 0xbeed054aUL, 0x58844587UL, 0xbf9c2a13UL,
 250     0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL, 0x3f9a48f4UL, 0xa8dc9888UL,
 251     0xbebf8939UL, 0xaad4b5b8UL, 0xbf72f746UL, 0x9102efa1UL, 0x3ea88f82UL,
 252     0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL, 0xbe90f456UL, 0x741fb4edUL,
 253     0xbf46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL, 0xca89ff3fUL, 0x3f36db70UL,
 254     0xa8a2a000UL, 0xbfc0ee13UL, 0x3da24be1UL, 0xbd338b9fUL, 0x00000000UL,
 255     0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL, 0x00000000UL, 0x3ff00000UL,
 256     0x00000000UL, 0xfffffff8UL, 0x1a154b97UL, 0xbf116b01UL, 0x00000000UL,
 257     0x00000000UL, 0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL,
 258     0xb93820c8UL, 0xbee264d4UL, 0xbb6cbb18UL, 0xbf94ab8cUL, 0x888d4d92UL,
 259     0x3ed0568bUL, 0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0xbeb2f950UL,
 260     0x22cf9f74UL, 0xbf6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL,
 261     0x3f64aad7UL, 0x637b73afUL, 0xbe83487cUL, 0xe522591aUL, 0xbf3fc092UL,
 262     0xa158e8bcUL, 0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL,
 263     0xbfb9477fUL, 0xc2c2d2bcUL, 0xbd135ef9UL, 0x00000000UL, 0x00000000UL,
 264     0xf2fdb123UL, 0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
 265     0xfffffff8UL, 0xc41acb64UL, 0xbf05448dUL, 0x00000000UL, 0x00000000UL,
 266     0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL, 0x9e42962dUL,
 267     0xbed5aea5UL, 0x2579f8efUL, 0xbf8b2398UL, 0x288a1ed9UL, 0x3ec81441UL,
 268     0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0xbea57cd3UL, 0x5766336fUL,
 269     0xbf617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL, 0x3f62c646UL,
 270     0x6b8fb29cUL, 0xbe74e3a3UL, 0xdc4c0409UL, 0xbf33f952UL, 0x9bffe365UL,
 271     0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL, 0xbfb0cc62UL,
 272     0x016b907fUL, 0xbd119cbcUL, 0x00000000UL, 0x00000000UL, 0xe6b9d8faUL,
 273     0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
 274     0x5daf22a6UL, 0xbef429d7UL, 0x00000000UL, 0x00000000UL, 0x06bca545UL,
 275     0x3ef7a27dUL, 0x00000000UL, 0x00000000UL, 0x7211c19aUL, 0xbec41c3eUL,
 276     0x956ed53eUL, 0xbf7ae3f4UL, 0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL,
 277     0x3f96f713UL, 0x36661e6cUL, 0xbe936e09UL, 0x506f9381UL, 0xbf5122e8UL,
 278     0xcb6dd43fUL, 0x3e9041b9UL, 0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL,
 279     0xbe625a8aUL, 0xe5a0e9dcUL, 0xbf23499dUL, 0x110384ddUL, 0x3e5b1c2cUL,
 280     0x68d43db6UL, 0x3f2cb899UL, 0x6ecac000UL, 0xbfa0c414UL, 0xcd7dd58cUL,
 281     0x3d13500fUL, 0x00000000UL, 0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL,
 282     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL,
 283     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2bf70ebeUL, 0x3ef66a8fUL,
 284     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 285     0x00000000UL, 0xd644267fUL, 0x3ec22805UL, 0x16c16c17UL, 0x3f96c16cUL,
 286     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc4e09162UL,
 287     0x3e8d6db2UL, 0xbc011567UL, 0x3f61566aUL, 0x00000000UL, 0x00000000UL,
 288     0x00000000UL, 0x00000000UL, 0x1f79955cUL, 0x3e57da4eUL, 0x9334ef0bUL,
 289     0x3f2bbd77UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 290     0x00000000UL, 0x00000000UL, 0x55555555UL, 0x3fd55555UL, 0x00000000UL,
 291     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x5daf22a6UL, 0x3ef429d7UL,
 292     0x00000000UL, 0x00000000UL, 0x06bca545UL, 0x3ef7a27dUL, 0x00000000UL,
 293     0x00000000UL, 0x7211c19aUL, 0x3ec41c3eUL, 0x956ed53eUL, 0x3f7ae3f4UL,
 294     0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL, 0x3f96f713UL, 0x36661e6cUL,
 295     0x3e936e09UL, 0x506f9381UL, 0x3f5122e8UL, 0xcb6dd43fUL, 0x3e9041b9UL,
 296     0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL, 0x3e625a8aUL, 0xe5a0e9dcUL,
 297     0x3f23499dUL, 0x110384ddUL, 0x3e5b1c2cUL, 0x68d43db6UL, 0x3f2cb899UL,
 298     0x6ecac000UL, 0x3fa0c414UL, 0xcd7dd58cUL, 0xbd13500fUL, 0x00000000UL,
 299     0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL, 0x00000000UL, 0x3ff00000UL,
 300     0x00000000UL, 0xfffffff8UL, 0xc41acb64UL, 0x3f05448dUL, 0x00000000UL,
 301     0x00000000UL, 0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL,
 302     0x9e42962dUL, 0x3ed5aea5UL, 0x2579f8efUL, 0x3f8b2398UL, 0x288a1ed9UL,
 303     0x3ec81441UL, 0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0x3ea57cd3UL,
 304     0x5766336fUL, 0x3f617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL,
 305     0x3f62c646UL, 0x6b8fb29cUL, 0x3e74e3a3UL, 0xdc4c0409UL, 0x3f33f952UL,
 306     0x9bffe365UL, 0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL,
 307     0x3fb0cc62UL, 0x016b907fUL, 0x3d119cbcUL, 0x00000000UL, 0x00000000UL,
 308     0xe6b9d8faUL, 0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
 309     0xfffffff8UL, 0x1a154b97UL, 0x3f116b01UL, 0x00000000UL, 0x00000000UL,
 310     0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL, 0xb93820c8UL,
 311     0x3ee264d4UL, 0xbb6cbb18UL, 0x3f94ab8cUL, 0x888d4d92UL, 0x3ed0568bUL,
 312     0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0x3eb2f950UL, 0x22cf9f74UL,
 313     0x3f6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL, 0x3f64aad7UL,
 314     0x637b73afUL, 0x3e83487cUL, 0xe522591aUL, 0x3f3fc092UL, 0xa158e8bcUL,
 315     0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL, 0x3fb9477fUL,
 316     0xc2c2d2bcUL, 0x3d135ef9UL, 0x00000000UL, 0x00000000UL, 0xf2fdb123UL,
 317     0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
 318     0x7d98a556UL, 0x3f1a3958UL, 0x00000000UL, 0x00000000UL, 0x9d88dc01UL,
 319     0x3f0704c2UL, 0x00000000UL, 0x00000000UL, 0x73742a2bUL, 0x3eed054aUL,
 320     0x58844587UL, 0x3f9c2a13UL, 0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL,
 321     0x3f9a48f4UL, 0xa8dc9888UL, 0x3ebf8939UL, 0xaad4b5b8UL, 0x3f72f746UL,
 322     0x9102efa1UL, 0x3ea88f82UL, 0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL,
 323     0x3e90f456UL, 0x741fb4edUL, 0x3f46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL,
 324     0xca89ff3fUL, 0x3f36db70UL, 0xa8a2a000UL, 0x3fc0ee13UL, 0x3da24be1UL,
 325     0x3d338b9fUL, 0x00000000UL, 0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL,
 326     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL,
 327     0x3f231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL,
 328     0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0x3ef66191UL, 0x848a46c6UL,
 329     0x3fa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL,
 330     0xfdd299efUL, 0x3ec9dd1aUL, 0x3f8dbaafUL, 0x3f793363UL, 0x309fc6eaUL,
 331     0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0x3e9dae11UL,
 332     0x3e5c67b3UL, 0x3f4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL,
 333     0x3f3d1eb1UL, 0x29cfc000UL, 0x3fc549ceUL, 0xbf159358UL, 0x3d397b33UL,
 334     0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL,
 335     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x535ad890UL, 0x3f2b9320UL,
 336     0x00000000UL, 0x00000000UL, 0x018fdf1fUL, 0x3f16d61dUL, 0x00000000UL,
 337     0x00000000UL, 0x0359f1beUL, 0x3f0139e4UL, 0xa4317c6dUL, 0x3fa67e17UL,
 338     0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL, 0x3f9f455bUL, 0x51ccf238UL,
 339     0x3ed55317UL, 0xf437b9acUL, 0x3f804beeUL, 0xc791a2b5UL, 0x3ec0e993UL,
 340     0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL, 0x3eaa48a2UL, 0x0a268358UL,
 341     0x3f55a443UL, 0xdfd978e4UL, 0x3e94b61fUL, 0xd7767a58UL, 0x3f431806UL,
 342     0x2aea0000UL, 0x3fc9bbe8UL, 0x7723ea61UL, 0x3d3a2369UL, 0x00000000UL,
 343     0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL, 0x00000000UL, 0x3ff00000UL,
 344     0x00000000UL, 0xfffffff8UL, 0x4f48b8d3UL, 0x3f33eaf9UL, 0x00000000UL,
 345     0x00000000UL, 0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL,
 346     0xd0258911UL, 0x3f0abaf3UL, 0x23e49fe9UL, 0x3fab5a8cUL, 0x2d53222eUL,
 347     0x3ef60d15UL, 0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0x3ee1d3b5UL,
 348     0xdbf93b8eUL, 0x3f84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL,
 349     0x3f743924UL, 0x794a8297UL, 0x3eb7b7b9UL, 0xe015f797UL, 0x3f5d41f5UL,
 350     0xe41a4a56UL, 0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL,
 351     0x3fce49ceUL, 0x8c743719UL, 0xbd1eb860UL, 0x00000000UL, 0x00000000UL,
 352     0x1b4863cfUL, 0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
 353     0xfffffff8UL, 0x65965966UL, 0xc0219659UL, 0x00000000UL, 0x00000000UL,
 354     0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL, 0x83cd3723UL,
 355     0xc02c8342UL, 0x00000000UL, 0xc0000000UL, 0x55e6c23dUL, 0x403226e3UL,
 356     0x55555555UL, 0x40055555UL, 0x34451939UL, 0xc0371c96UL, 0xaaaaaaabUL,
 357     0xc00aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL, 0x40111111UL,
 358     0xa738201fUL, 0xc042bbceUL, 0x05b05b06UL, 0xc015b05bUL, 0x452b75e3UL,
 359     0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL, 0xbff00000UL,
 360     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL, 0x00000000UL,
 361     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 362     0xc7ab4d5aUL, 0xc0085e24UL, 0x00000000UL, 0x00000000UL, 0xe93ea75dUL,
 363     0x400b963dUL, 0x00000000UL, 0x00000000UL, 0x94a7f25aUL, 0xc00f37e2UL,
 364     0x4b6261cbUL, 0xbff5f984UL, 0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL,
 365     0x3ffaf5a5UL, 0x7f2ce8e3UL, 0xc013fe8bUL, 0xfe8e54faUL, 0xbffd7334UL,
 366     0x670d618dUL, 0x4016a10cUL, 0x4db97058UL, 0x4000e012UL, 0x24df44ddUL,
 367     0xc0199c5fUL, 0x697d6eceUL, 0xc003006eUL, 0x83298b82UL, 0x401cfc4dUL,
 368     0x19d490d6UL, 0x40058c19UL, 0x2ae42850UL, 0xbfea4300UL, 0x118e20e6UL,
 369     0x3c7a6db8UL, 0x00000000UL, 0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL,
 370     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL,
 371     0xbff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL,
 372     0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0xbff3972eUL, 0xe93463bdUL,
 373     0xbfeeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL,
 374     0xa04e8ea3UL, 0xbff4541aUL, 0x386accd3UL, 0xbff1369eUL, 0x222a66ddUL,
 375     0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0xbff5178fUL,
 376     0xddaa0031UL, 0xbff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL,
 377     0x3ff29311UL, 0x2ab7f990UL, 0xbfe561b8UL, 0x209c7df1UL, 0xbc87a8c5UL,
 378     0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL,
 379     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xcc03e501UL, 0xbfdff10fUL,
 380     0x00000000UL, 0x00000000UL, 0x44a4e845UL, 0x3fddb63bUL, 0x00000000UL,
 381     0x00000000UL, 0x3768ad9fUL, 0xbfdb72a4UL, 0x3dd01ccaUL, 0xbfe5fdb9UL,
 382     0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL, 0x3fe977f9UL, 0xd013b3abUL,
 383     0xbfd78ca3UL, 0xbf0bf914UL, 0xbfe4f192UL, 0x4d53e730UL, 0x3fd5d060UL,
 384     0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL, 0xbfd4322aUL, 0x5936a835UL,
 385     0xbfe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL, 0xef478605UL, 0x3fe1659eUL,
 386     0x190834ecUL, 0xbfe11ab7UL, 0xcdb625eaUL, 0x3c8e564bUL, 0x00000000UL,
 387     0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL, 0x00000000UL, 0x00000000UL,
 388     0x00000000UL, 0x00000000UL, 0x56f37042UL, 0xbfccfc56UL, 0x00000000UL,
 389     0x00000000UL, 0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL,
 390     0x3d0e7c5dUL, 0xbfc50533UL, 0x9bed9b2eUL, 0xbfdf0ed9UL, 0x5fe7c47cUL,
 391     0x3fc1f250UL, 0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0xbfbe5c71UL,
 392     0x86362c20UL, 0xbfda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL,
 393     0x3fd911bdUL, 0xb56658beUL, 0xbfb5e4c7UL, 0x93a2fd76UL, 0xbfd3c092UL,
 394     0xda271794UL, 0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL,
 395     0xbfda8279UL, 0xb68c1467UL, 0xbc708b2fUL, 0x00000000UL, 0x3ff00000UL,
 396     0x980c4337UL, 0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 397     0x00000000UL, 0x9314533eUL, 0xbfbb8ec5UL, 0x00000000UL, 0x00000000UL,
 398     0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL, 0xdcb427fdUL,
 399     0xbfb13950UL, 0xd87ab0bbUL, 0xbfd5335eUL, 0xce0ae8a5UL, 0x3fabb382UL,
 400     0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0xbfa552f1UL, 0x59f21a6dUL,
 401     0xbfd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL, 0x3fd0576cUL,
 402     0x8f2c2950UL, 0xbf9a4898UL, 0xc0b3f22cUL, 0xbfc59462UL, 0x1883a4b8UL,
 403     0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL, 0xbfd36a08UL,
 404     0x1dce993dUL, 0x3c6d704dUL, 0x00000000UL, 0x3ff00000UL, 0x2b82ab63UL,
 405     0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 406     0x5a279ea3UL, 0xbfaa3407UL, 0x00000000UL, 0x00000000UL, 0x432d65faUL,
 407     0x3fa70153UL, 0x00000000UL, 0x00000000UL, 0x891a4602UL, 0xbf9d03efUL,
 408     0xd62ca5f8UL, 0xbfca77d9UL, 0xb35f4628UL, 0x3f97a265UL, 0x433258faUL,
 409     0x3fd8cf51UL, 0xb58fd909UL, 0xbf8f88e3UL, 0x01771ceaUL, 0xbfc2b154UL,
 410     0xf3562f8eUL, 0x3f888f57UL, 0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL,
 411     0xbf80f44cUL, 0x214368e9UL, 0xbfb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL,
 412     0x172dbbf0UL, 0x3fb6cb8eUL, 0xe0553158UL, 0xbfc975f5UL, 0x593fe814UL,
 413     0xbc2ef5d3UL, 0x00000000UL, 0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL,
 414     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL,
 415     0xbf953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL,
 416     0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0xbf85ad63UL, 0xdc230b9bUL,
 417     0xbfb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL,
 418     0x77bb08baUL, 0xbf757c85UL, 0xb6247521UL, 0xbfb1381eUL, 0x5922170cUL,
 419     0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0xbf64e391UL,
 420     0x3e666320UL, 0xbfa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL,
 421     0x3fafa8aeUL, 0x8c5b2da2UL, 0xbfb936bbUL, 0x4e88f7a5UL, 0xbc587d05UL,
 422     0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
 423     0x00000000UL, 0x00000000UL, 0x00000000UL
 424 };
 425 
 426 ATTRIBUTE_ALIGNED(16) juint _MASK_35_tan[] =
 427 {
 428     0xfffc0000UL, 0xffffffffUL, 0x00000000UL, 0x00000000UL
 429 };
 430 
 431 ATTRIBUTE_ALIGNED(16) juint _Q_11_tan[] =
 432 {
 433     0xb8fe4d77UL, 0x3f82609aUL
 434 };
 435 
 436 ATTRIBUTE_ALIGNED(16) juint _Q_9_tan[] =
 437 {
 438     0xbf847a43UL, 0x3f9664a0UL
 439 };
 440 
 441 ATTRIBUTE_ALIGNED(16) juint _Q_7_tan[] =
 442 {
 443     0x52c4c8abUL, 0x3faba1baUL
 444 };
 445 
 446 ATTRIBUTE_ALIGNED(16) juint _Q_5_tan[] =
 447 {
 448     0x11092746UL, 0x3fc11111UL
 449 };
 450 
 451 ATTRIBUTE_ALIGNED(16) juint _Q_3_tan[] =
 452 {
 453     0x55555612UL, 0x3fd55555UL
 454 };
 455 
 456 ATTRIBUTE_ALIGNED(16) juint _PI_INV_TABLE_tan[] =
 457 {
 458     0x00000000UL, 0x00000000UL, 0xa2f9836eUL, 0x4e441529UL, 0xfc2757d1UL,
 459     0xf534ddc0UL, 0xdb629599UL, 0x3c439041UL, 0xfe5163abUL, 0xdebbc561UL,
 460     0xb7246e3aUL, 0x424dd2e0UL, 0x06492eeaUL, 0x09d1921cUL, 0xfe1deb1cUL,
 461     0xb129a73eUL, 0xe88235f5UL, 0x2ebb4484UL, 0xe99c7026UL, 0xb45f7e41UL,
 462     0x3991d639UL, 0x835339f4UL, 0x9c845f8bUL, 0xbdf9283bUL, 0x1ff897ffUL,
 463     0xde05980fUL, 0xef2f118bUL, 0x5a0a6d1fUL, 0x6d367ecfUL, 0x27cb09b7UL,
 464     0x4f463f66UL, 0x9e5fea2dUL, 0x7527bac7UL, 0xebe5f17bUL, 0x3d0739f7UL,
 465     0x8a5292eaUL, 0x6bfb5fb1UL, 0x1f8d5d08UL, 0x56033046UL, 0xfc7b6babUL,
 466     0xf0cfbc21UL
 467 };
 468 
 469 ATTRIBUTE_ALIGNED(8) juint _PI_4_tan[] =
 470 {
 471     0x00000000UL, 0x3fe921fbUL, 0x4611a626UL, 0x3e85110bUL
 472 };
 473 
 474 ATTRIBUTE_ALIGNED(8) juint _QQ_2_tan[] =
 475 {
 476     0x676733afUL, 0x3d32e7b9UL
 477 };
 478 
 479 ATTRIBUTE_ALIGNED(8) juint _ONE_tan[] =
 480 {
 481     0x00000000UL, 0x3ff00000UL
 482 };
 483 
 484 ATTRIBUTE_ALIGNED(8) juint _TWO_POW_55_tan[] =
 485 {
 486     0x00000000UL, 0x43600000UL
 487 };
 488 
 489 ATTRIBUTE_ALIGNED(4) juint _TWO_POW_M55_tan[] =
 490 {
 491     0x00000000UL, 0x3c800000UL
 492 };
 493 
 494 ATTRIBUTE_ALIGNED(4) juint _NEG_ZERO_tan[] =
 495 {
 496     0x00000000UL, 0x80000000UL
 497 };
 498 
 499 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register r8, Register r9, Register r10, Register r11) {
 500 
 501   Label L_2TAG_PACKET_0_0_1, L_2TAG_PACKET_1_0_1, L_2TAG_PACKET_2_0_1, L_2TAG_PACKET_3_0_1;
 502   Label L_2TAG_PACKET_4_0_1, L_2TAG_PACKET_5_0_1, L_2TAG_PACKET_6_0_1, L_2TAG_PACKET_7_0_1;
 503   Label L_2TAG_PACKET_8_0_1, L_2TAG_PACKET_9_0_1, L_2TAG_PACKET_10_0_1, L_2TAG_PACKET_11_0_1;
 504   Label L_2TAG_PACKET_12_0_1, L_2TAG_PACKET_13_0_1, L_2TAG_PACKET_14_0_1, B1_2, B1_4, start;
 505 
 506   address ONEHALF = (address)_ONEHALF_tan;
 507   address MUL16 = (address)_MUL16;
 508   address sign_mask = (address)_sign_mask_tan;
 509   address PI32INV = (address)_PI32INV_tan;
 510   address P_1 = (address)_P_1_tan;
 511   address P_2 = (address)_P_2_tan;
 512   address P_3 = (address)_P_3_tan;
 513   address Ctable = (address)_Ctable_tan;
 514   address MASK_35 = (address)_MASK_35_tan;
 515   address Q_11 = (address)_Q_11_tan;
 516   address Q_9 = (address)_Q_9_tan;
 517   address Q_7 = (address)_Q_7_tan;
 518   address Q_5 = (address)_Q_5_tan;
 519   address Q_3 = (address)_Q_3_tan;
 520   address PI_INV_TABLE = (address)_PI_INV_TABLE_tan;
 521   address PI_4 = (address)_PI_4_tan;
 522   address QQ_2 = (address)_QQ_2_tan;
 523   address ONE = (address)_ONE_tan;
 524   address TWO_POW_55 = (address)_TWO_POW_55_tan;
 525   address TWO_POW_M55 = (address)_TWO_POW_M55_tan;
 526   address NEG_ZERO = (address)_NEG_ZERO_tan;
 527 
 528   bind(start);
 529   push(rbx);
 530   subq(rsp, 16);
 531   movsd(Address(rsp, 8), xmm0);
 532 
 533   bind(B1_2);
 534   pextrw(eax, xmm0, 3);
 535   andl(eax, 32767);
 536   subl(eax, 16314);
 537   cmpl(eax, 270);
 538   jcc(Assembler::above, L_2TAG_PACKET_0_0_1);
 539   movdqu(xmm5, ExternalAddress(ONEHALF));    //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
 540   movdqu(xmm6, ExternalAddress(MUL16));    //0x00000000UL, 0x40300000UL, 0x00000000UL, 0x3ff00000UL
 541   unpcklpd(xmm0, xmm0);
 542   movdqu(xmm4, ExternalAddress(sign_mask));    //0x00000000UL, 0x80000000UL, 0x00000000UL, 0x80000000UL
 543   andpd(xmm4, xmm0);
 544   movdqu(xmm1, ExternalAddress(PI32INV));    //0x6dc9c883UL, 0x3fe45f30UL, 0x6dc9c883UL, 0x40245f30UL
 545   mulpd(xmm1, xmm0);
 546   por(xmm5, xmm4);
 547   addpd(xmm1, xmm5);
 548   movdqu(xmm7, xmm1);
 549   unpckhpd(xmm7, xmm7);
 550   cvttsd2sil(edx, xmm7);
 551   cvttpd2dq(xmm1, xmm1);
 552   cvtdq2pd(xmm1, xmm1);
 553   mulpd(xmm1, xmm6);
 554   movdqu(xmm3, ExternalAddress(P_1));    //0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL
 555   movq(xmm5, ExternalAddress(QQ_2));    //0x676733afUL, 0x3d32e7b9UL
 556   addq(rdx, 469248);
 557   movdqu(xmm4, ExternalAddress(P_2));    //0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL
 558   mulpd(xmm3, xmm1);
 559   andq(rdx, 31);
 560   mulsd(xmm5, xmm1);
 561   movq(rcx, rdx);
 562   mulpd(xmm4, xmm1);
 563   shlq(rcx, 1);
 564   subpd(xmm0, xmm3);
 565   mulpd(xmm1, ExternalAddress(P_3));    //0x3707344aUL, 0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL
 566   addq(rdx, rcx);
 567   shlq(rcx, 2);
 568   addq(rdx, rcx);
 569   addsd(xmm5, xmm0);
 570   movdqu(xmm2, xmm0);
 571   subpd(xmm0, xmm4);
 572   movq(xmm6, ExternalAddress(ONE));    //0x00000000UL, 0x3ff00000UL
 573   shlq(rdx, 4);
 574   lea(rax, ExternalAddress(Ctable));
 575   andpd(xmm5, ExternalAddress(MASK_35));    //0xfffc0000UL, 0xffffffffUL, 0x00000000UL, 0x00000000UL
 576   movdqu(xmm3, xmm0);
 577   addq(rax, rdx);
 578   subpd(xmm2, xmm0);
 579   unpckhpd(xmm0, xmm0);
 580   divsd(xmm6, xmm5);
 581   subpd(xmm2, xmm4);
 582   movdqu(xmm7, Address(rax, 16));
 583   subsd(xmm3, xmm5);
 584   mulpd(xmm7, xmm0);
 585   subpd(xmm2, xmm1);
 586   movdqu(xmm1, Address(rax, 48));
 587   mulpd(xmm1, xmm0);
 588   movdqu(xmm4, Address(rax, 96));
 589   mulpd(xmm4, xmm0);
 590   addsd(xmm2, xmm3);
 591   movdqu(xmm3, xmm0);
 592   mulpd(xmm0, xmm0);
 593   addpd(xmm7, Address(rax, 0));
 594   addpd(xmm1, Address(rax, 32));
 595   mulpd(xmm1, xmm0);
 596   addpd(xmm4, Address(rax, 80));
 597   addpd(xmm7, xmm1);
 598   movdqu(xmm1, Address(rax, 112));
 599   mulpd(xmm1, xmm0);
 600   mulpd(xmm0, xmm0);
 601   addpd(xmm4, xmm1);
 602   movdqu(xmm1, Address(rax, 64));
 603   mulpd(xmm1, xmm0);
 604   addpd(xmm7, xmm1);
 605   movdqu(xmm1, xmm3);
 606   mulpd(xmm3, xmm0);
 607   mulsd(xmm0, xmm0);
 608   mulpd(xmm1, Address(rax, 144));
 609   mulpd(xmm4, xmm3);
 610   movdqu(xmm3, xmm1);
 611   addpd(xmm7, xmm4);
 612   movdqu(xmm4, xmm1);
 613   mulsd(xmm0, xmm7);
 614   unpckhpd(xmm7, xmm7);
 615   addsd(xmm0, xmm7);
 616   unpckhpd(xmm1, xmm1);
 617   addsd(xmm3, xmm1);
 618   subsd(xmm4, xmm3);
 619   addsd(xmm1, xmm4);
 620   movdqu(xmm4, xmm2);
 621   movq(xmm7, Address(rax, 144));
 622   unpckhpd(xmm2, xmm2);
 623   addsd(xmm7, Address(rax, 152));
 624   mulsd(xmm7, xmm2);
 625   addsd(xmm7, Address(rax, 136));
 626   addsd(xmm7, xmm1);
 627   addsd(xmm0, xmm7);
 628   movq(xmm7, ExternalAddress(ONE));    //0x00000000UL, 0x3ff00000UL
 629   mulsd(xmm4, xmm6);
 630   movq(xmm2, Address(rax, 168));
 631   andpd(xmm2, xmm6);
 632   mulsd(xmm5, xmm2);
 633   mulsd(xmm6, Address(rax, 160));
 634   subsd(xmm7, xmm5);
 635   subsd(xmm2, Address(rax, 128));
 636   subsd(xmm7, xmm4);
 637   mulsd(xmm7, xmm6);
 638   movdqu(xmm4, xmm3);
 639   subsd(xmm3, xmm2);
 640   addsd(xmm2, xmm3);
 641   subsd(xmm4, xmm2);
 642   addsd(xmm0, xmm4);
 643   subsd(xmm0, xmm7);
 644   addsd(xmm0, xmm3);
 645   jmp(B1_4);
 646 
 647   bind(L_2TAG_PACKET_0_0_1);
 648   jcc(Assembler::greater, L_2TAG_PACKET_1_0_1);
 649   pextrw(eax, xmm0, 3);
 650   movl(edx, eax);
 651   andl(eax, 32752);
 652   jcc(Assembler::equal, L_2TAG_PACKET_2_0_1);
 653   andl(edx, 32767);
 654   cmpl(edx, 15904);
 655   jcc(Assembler::below, L_2TAG_PACKET_3_0_1);
 656   movdqu(xmm2, xmm0);
 657   movdqu(xmm3, xmm0);
 658   movq(xmm1, ExternalAddress(Q_11));    //0xb8fe4d77UL, 0x3f82609aUL
 659   mulsd(xmm2, xmm0);
 660   mulsd(xmm3, xmm2);
 661   mulsd(xmm1, xmm2);
 662   addsd(xmm1, ExternalAddress(Q_9));    //0xbf847a43UL, 0x3f9664a0UL
 663   mulsd(xmm1, xmm2);
 664   addsd(xmm1, ExternalAddress(Q_7));    //0x52c4c8abUL, 0x3faba1baUL
 665   mulsd(xmm1, xmm2);
 666   addsd(xmm1, ExternalAddress(Q_5));    //0x11092746UL, 0x3fc11111UL
 667   mulsd(xmm1, xmm2);
 668   addsd(xmm1, ExternalAddress(Q_3));    //0x55555612UL, 0x3fd55555UL
 669   mulsd(xmm1, xmm3);
 670   addsd(xmm0, xmm1);
 671   jmp(B1_4);
 672 
 673   bind(L_2TAG_PACKET_3_0_1);
 674   movq(xmm3, ExternalAddress(TWO_POW_55));    //0x00000000UL, 0x43600000UL
 675   mulsd(xmm3, xmm0);
 676   addsd(xmm0, xmm3);
 677   mulsd(xmm0, ExternalAddress(TWO_POW_M55));    //0x00000000UL, 0x3c800000UL
 678   jmp(B1_4);
 679 
 680   bind(L_2TAG_PACKET_2_0_1);
 681   movdqu(xmm1, xmm0);
 682   mulsd(xmm1, xmm1);
 683   jmp(B1_4);
 684 
 685   bind(L_2TAG_PACKET_1_0_1);
 686   pextrw(eax, xmm0, 3);
 687   andl(eax, 32752);
 688   cmpl(eax, 32752);
 689   jcc(Assembler::equal, L_2TAG_PACKET_4_0_1);
 690   pextrw(ecx, xmm0, 3);
 691   andl(ecx, 32752);
 692   subl(ecx, 16224);
 693   shrl(ecx, 7);
 694   andl(ecx, 65532);
 695   lea(r11, ExternalAddress(PI_INV_TABLE));
 696   addq(rcx, r11);
 697   movdq(rax, xmm0);
 698   movl(r10, Address(rcx, 20));
 699   movl(r8, Address(rcx, 24));
 700   movl(edx, eax);
 701   shrq(rax, 21);
 702   orl(eax, INT_MIN);
 703   shrl(eax, 11);
 704   movl(r9, r10);
 705   imulq(r10, rdx);
 706   imulq(r9, rax);
 707   imulq(r8, rax);
 708   movl(rsi, Address(rcx, 16));
 709   movl(rdi, Address(rcx, 12));
 710   movl(r11, r10);
 711   shrq(r10, 32);
 712   addq(r9, r10);
 713   addq(r11, r8);
 714   movl(r8, r11);
 715   shrq(r11, 32);
 716   addq(r9, r11);
 717   movl(r10, rsi);
 718   imulq(rsi, rdx);
 719   imulq(r10, rax);
 720   movl(r11, rdi);
 721   imulq(rdi, rdx);
 722   movl(rbx, rsi);
 723   shrq(rsi, 32);
 724   addq(r9, rbx);
 725   movl(rbx, r9);
 726   shrq(r9, 32);
 727   addq(r10, rsi);
 728   addq(r10, r9);
 729   shlq(rbx, 32);
 730   orq(r8, rbx);
 731   imulq(r11, rax);
 732   movl(r9, Address(rcx, 8));
 733   movl(rsi, Address(rcx, 4));
 734   movl(rbx, rdi);
 735   shrq(rdi, 32);
 736   addq(r10, rbx);
 737   movl(rbx, r10);
 738   shrq(r10, 32);
 739   addq(r11, rdi);
 740   addq(r11, r10);
 741   movq(rdi, r9);
 742   imulq(r9, rdx);
 743   imulq(rdi, rax);
 744   movl(r10, r9);
 745   shrq(r9, 32);
 746   addq(r11, r10);
 747   movl(r10, r11);
 748   shrq(r11, 32);
 749   addq(rdi, r9);
 750   addq(rdi, r11);
 751   movq(r9, rsi);
 752   imulq(rsi, rdx);
 753   imulq(r9, rax);
 754   shlq(r10, 32);
 755   orq(r10, rbx);
 756   movl(eax, Address(rcx, 0));
 757   movl(r11, rsi);
 758   shrq(rsi, 32);
 759   addq(rdi, r11);
 760   movl(r11, rdi);
 761   shrq(rdi, 32);
 762   addq(r9, rsi);
 763   addq(r9, rdi);
 764   imulq(rdx, rax);
 765   pextrw(rbx, xmm0, 3);
 766   lea(rdi, ExternalAddress(PI_INV_TABLE));
 767   subq(rcx, rdi);
 768   addl(ecx, ecx);
 769   addl(ecx, ecx);
 770   addl(ecx, ecx);
 771   addl(ecx, 19);
 772   movl(rsi, 32768);
 773   andl(rsi, rbx);
 774   shrl(rbx, 4);
 775   andl(rbx, 2047);
 776   subl(rbx, 1023);
 777   subl(ecx, rbx);
 778   addq(r9, rdx);
 779   movl(edx, ecx);
 780   addl(edx, 32);
 781   cmpl(ecx, 0);
 782   jcc(Assembler::less, L_2TAG_PACKET_5_0_1);
 783   negl(ecx);
 784   addl(ecx, 29);
 785   shll(r9);
 786   movl(rdi, r9);
 787   andl(r9, 1073741823);
 788   testl(r9, 536870912);
 789   jcc(Assembler::notEqual, L_2TAG_PACKET_6_0_1);
 790   shrl(r9);
 791   movl(rbx, 0);
 792   shlq(r9, 32);
 793   orq(r9, r11);
 794 
 795   bind(L_2TAG_PACKET_7_0_1);
 796 
 797   bind(L_2TAG_PACKET_8_0_1);
 798   cmpq(r9, 0);
 799   jcc(Assembler::equal, L_2TAG_PACKET_9_0_1);
 800 
 801   bind(L_2TAG_PACKET_10_0_1);
 802   bsrq(r11, r9);
 803   movl(ecx, 29);
 804   subl(ecx, r11);
 805   jcc(Assembler::lessEqual, L_2TAG_PACKET_11_0_1);
 806   shlq(r9);
 807   movq(rax, r10);
 808   shlq(r10);
 809   addl(edx, ecx);
 810   negl(ecx);
 811   addl(ecx, 64);
 812   shrq(rax);
 813   shrq(r8);
 814   orq(r9, rax);
 815   orq(r10, r8);
 816 
 817   bind(L_2TAG_PACKET_12_0_1);
 818   cvtsi2sdq(xmm0, r9);
 819   shrq(r10, 1);
 820   cvtsi2sdq(xmm3, r10);
 821   xorpd(xmm4, xmm4);
 822   shll(edx, 4);
 823   negl(edx);
 824   addl(edx, 16368);
 825   orl(edx, rsi);
 826   xorl(edx, rbx);
 827   pinsrw(xmm4, edx, 3);
 828   movq(xmm2, ExternalAddress(PI_4));    //0x00000000UL, 0x3fe921fbUL, 0x4611a626UL, 0x3e85110bUL
 829   movq(xmm7, ExternalAddress(8 + PI_4));    //0x3fe921fbUL, 0x4611a626UL, 0x3e85110bUL
 830   xorpd(xmm5, xmm5);
 831   subl(edx, 1008);
 832   pinsrw(xmm5, edx, 3);
 833   mulsd(xmm0, xmm4);
 834   shll(rsi, 16);
 835   sarl(rsi, 31);
 836   mulsd(xmm3, xmm5);
 837   movdqu(xmm1, xmm0);
 838   mulsd(xmm0, xmm2);
 839   shrl(rdi, 30);
 840   addsd(xmm1, xmm3);
 841   mulsd(xmm3, xmm2);
 842   addl(rdi, rsi);
 843   xorl(rdi, rsi);
 844   mulsd(xmm7, xmm1);
 845   movl(eax, rdi);
 846   addsd(xmm7, xmm3);
 847   movdqu(xmm2, xmm0);
 848   addsd(xmm0, xmm7);
 849   subsd(xmm2, xmm0);
 850   addsd(xmm7, xmm2);
 851   movdqu(xmm1, ExternalAddress(PI32INV));    //0x6dc9c883UL, 0x3fe45f30UL, 0x6dc9c883UL, 0x40245f30UL
 852   if (VM_Version::supports_sse3()) {
 853     movddup(xmm0, xmm0);
 854   }
 855   else {
 856     movlhps(xmm0, xmm0);
 857   }
 858   movdqu(xmm4, ExternalAddress(sign_mask));    //0x00000000UL, 0x80000000UL, 0x00000000UL, 0x80000000UL
 859   andpd(xmm4, xmm0);
 860   mulpd(xmm1, xmm0);
 861   if (VM_Version::supports_sse3()) {
 862     movddup(xmm7, xmm7);
 863   }
 864   else {
 865     movlhps(xmm7, xmm7);
 866   }
 867   movdqu(xmm5, ExternalAddress(ONEHALF));    //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
 868   movdqu(xmm6, ExternalAddress(MUL16));    //0x00000000UL, 0x40300000UL, 0x00000000UL, 0x3ff00000UL
 869   por(xmm5, xmm4);
 870   addpd(xmm1, xmm5);
 871   movdqu(xmm5, xmm1);
 872   unpckhpd(xmm5, xmm5);
 873   cvttsd2sil(edx, xmm5);
 874   cvttpd2dq(xmm1, xmm1);
 875   cvtdq2pd(xmm1, xmm1);
 876   mulpd(xmm1, xmm6);
 877   movdqu(xmm3, ExternalAddress(P_1));    //0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL
 878   movq(xmm5, ExternalAddress(QQ_2));    //0x676733afUL, 0x3d32e7b9UL
 879   shll(eax, 4);
 880   addl(edx, 469248);
 881   movdqu(xmm4, ExternalAddress(P_2));    //0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL
 882   mulpd(xmm3, xmm1);
 883   addl(edx, eax);
 884   andl(edx, 31);
 885   mulsd(xmm5, xmm1);
 886   movl(ecx, edx);
 887   mulpd(xmm4, xmm1);
 888   shll(ecx, 1);
 889   subpd(xmm0, xmm3);
 890   mulpd(xmm1, ExternalAddress(P_3));    //0x3707344aUL, 0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL
 891   addl(edx, ecx);
 892   shll(ecx, 2);
 893   addl(edx, ecx);
 894   addsd(xmm5, xmm0);
 895   movdqu(xmm2, xmm0);
 896   subpd(xmm0, xmm4);
 897   movq(xmm6, ExternalAddress(ONE));    //0x00000000UL, 0x3ff00000UL
 898   shll(edx, 4);
 899   lea(rax, ExternalAddress(Ctable));
 900   andpd(xmm5, ExternalAddress(MASK_35));    //0xfffc0000UL, 0xffffffffUL, 0x00000000UL, 0x00000000UL
 901   movdqu(xmm3, xmm0);
 902   addq(rax, rdx);
 903   subpd(xmm2, xmm0);
 904   unpckhpd(xmm0, xmm0);
 905   divsd(xmm6, xmm5);
 906   subpd(xmm2, xmm4);
 907   subsd(xmm3, xmm5);
 908   subpd(xmm2, xmm1);
 909   movdqu(xmm1, Address(rax, 48));
 910   addpd(xmm2, xmm7);
 911   movdqu(xmm7, Address(rax, 16));
 912   mulpd(xmm7, xmm0);
 913   movdqu(xmm4, Address(rax, 96));
 914   mulpd(xmm1, xmm0);
 915   mulpd(xmm4, xmm0);
 916   addsd(xmm2, xmm3);
 917   movdqu(xmm3, xmm0);
 918   mulpd(xmm0, xmm0);
 919   addpd(xmm7, Address(rax, 0));
 920   addpd(xmm1, Address(rax, 32));
 921   mulpd(xmm1, xmm0);
 922   addpd(xmm4, Address(rax, 80));
 923   addpd(xmm7, xmm1);
 924   movdqu(xmm1, Address(rax, 112));
 925   mulpd(xmm1, xmm0);
 926   mulpd(xmm0, xmm0);
 927   addpd(xmm4, xmm1);
 928   movdqu(xmm1, Address(rax, 64));
 929   mulpd(xmm1, xmm0);
 930   addpd(xmm7, xmm1);
 931   movdqu(xmm1, xmm3);
 932   mulpd(xmm3, xmm0);
 933   mulsd(xmm0, xmm0);
 934   mulpd(xmm1, Address(rax, 144));
 935   mulpd(xmm4, xmm3);
 936   movdqu(xmm3, xmm1);
 937   addpd(xmm7, xmm4);
 938   movdqu(xmm4, xmm1);
 939   mulsd(xmm0, xmm7);
 940   unpckhpd(xmm7, xmm7);
 941   addsd(xmm0, xmm7);
 942   unpckhpd(xmm1, xmm1);
 943   addsd(xmm3, xmm1);
 944   subsd(xmm4, xmm3);
 945   addsd(xmm1, xmm4);
 946   movdqu(xmm4, xmm2);
 947   movq(xmm7, Address(rax, 144));
 948   unpckhpd(xmm2, xmm2);
 949   addsd(xmm7, Address(rax, 152));
 950   mulsd(xmm7, xmm2);
 951   addsd(xmm7, Address(rax, 136));
 952   addsd(xmm7, xmm1);
 953   addsd(xmm0, xmm7);
 954   movq(xmm7, ExternalAddress(ONE));    //0x00000000UL, 0x3ff00000UL
 955   mulsd(xmm4, xmm6);
 956   movq(xmm2, Address(rax, 168));
 957   andpd(xmm2, xmm6);
 958   mulsd(xmm5, xmm2);
 959   mulsd(xmm6, Address(rax, 160));
 960   subsd(xmm7, xmm5);
 961   subsd(xmm2, Address(rax, 128));
 962   subsd(xmm7, xmm4);
 963   mulsd(xmm7, xmm6);
 964   movdqu(xmm4, xmm3);
 965   subsd(xmm3, xmm2);
 966   addsd(xmm2, xmm3);
 967   subsd(xmm4, xmm2);
 968   addsd(xmm0, xmm4);
 969   subsd(xmm0, xmm7);
 970   addsd(xmm0, xmm3);
 971   jmp(B1_4);
 972 
 973   bind(L_2TAG_PACKET_9_0_1);
 974   addl(edx, 64);
 975   movq(r9, r10);
 976   movq(r10, r8);
 977   movl(r8, 0);
 978   cmpq(r9, 0);
 979   jcc(Assembler::notEqual, L_2TAG_PACKET_10_0_1);
 980   addl(edx, 64);
 981   movq(r9, r10);
 982   movq(r10, r8);
 983   cmpq(r9, 0);
 984   jcc(Assembler::notEqual, L_2TAG_PACKET_10_0_1);
 985   jmp(L_2TAG_PACKET_12_0_1);
 986 
 987   bind(L_2TAG_PACKET_11_0_1);
 988   jcc(Assembler::equal, L_2TAG_PACKET_12_0_1);
 989   negl(ecx);
 990   shrq(r10);
 991   movq(rax, r9);
 992   shrq(r9);
 993   subl(edx, ecx);
 994   negl(ecx);
 995   addl(ecx, 64);
 996   shlq(rax);
 997   orq(r10, rax);
 998   jmp(L_2TAG_PACKET_12_0_1);
 999 
1000   bind(L_2TAG_PACKET_5_0_1);
1001   notl(ecx);
1002   shlq(r9, 32);
1003   orq(r9, r11);
1004   shlq(r9);
1005   movq(rdi, r9);
1006   testl(r9, INT_MIN);
1007   jcc(Assembler::notEqual, L_2TAG_PACKET_13_0_1);
1008   shrl(r9);
1009   movl(rbx, 0);
1010   shrq(rdi, 2);
1011   jmp(L_2TAG_PACKET_8_0_1);
1012 
1013   bind(L_2TAG_PACKET_6_0_1);
1014   shrl(r9);
1015   movl(rbx, 1073741824);
1016   shrl(rbx);
1017   shlq(r9, 32);
1018   orq(r9, r11);
1019   shlq(rbx, 32);
1020   addl(rdi, 1073741824);
1021   movl(rcx, 0);
1022   movl(r11, 0);
1023   subq(rcx, r8);
1024   sbbq(r11, r10);
1025   sbbq(rbx, r9);
1026   movq(r8, rcx);
1027   movq(r10, r11);
1028   movq(r9, rbx);
1029   movl(rbx, 32768);
1030   jmp(L_2TAG_PACKET_7_0_1);
1031 
1032   bind(L_2TAG_PACKET_13_0_1);
1033   shrl(r9);
1034   mov64(rbx, 0x100000000);
1035   shrq(rbx);
1036   movl(rcx, 0);
1037   movl(r11, 0);
1038   subq(rcx, r8);
1039   sbbq(r11, r10);
1040   sbbq(rbx, r9);
1041   movq(r8, rcx);
1042   movq(r10, r11);
1043   movq(r9, rbx);
1044   movl(rbx, 32768);
1045   shrq(rdi, 2);
1046   addl(rdi, 1073741824);
1047   jmp(L_2TAG_PACKET_8_0_1);
1048 
1049   bind(L_2TAG_PACKET_4_0_1);
1050   movq(xmm0, Address(rsp, 8));
1051   mulsd(xmm0, ExternalAddress(NEG_ZERO));    //0x00000000UL, 0x80000000UL
1052   movq(Address(rsp, 0), xmm0);
1053 
1054   bind(L_2TAG_PACKET_14_0_1);
1055 
1056   bind(B1_4);
1057   addq(rsp, 16);
1058   pop(rbx);
1059 }
1060 #else
1061 // The 32 bit code is at most SSE2 compliant
1062 ATTRIBUTE_ALIGNED(16) jushort _TP[] =
1063 {
1064     0x4cd6, 0xaf6c, 0xc710, 0xc662, 0xbffd, 0x0000, 0x4b06, 0xb0ac, 0xd3b2, 0xcc2c,
1065     0x3ff9, 0x0000, 0x00e3, 0xc850, 0xaa28, 0x9533, 0xbff3, 0x0000, 0x2ff0, 0x466d,
1066     0x1a3b, 0xb266, 0x3fe5, 0x0000
1067 };
1068 
1069 ATTRIBUTE_ALIGNED(16) jushort _TQ[] =
1070 {
1071     0x399c, 0x8391, 0x154c, 0x94ca, 0xbfff, 0x0000, 0xb6a3, 0xc36a, 0x44e2, 0x8a2c,
1072     0x3ffe, 0x0000, 0xb70f, 0xd068, 0xa6ce, 0xe9dd, 0xbff9, 0x0000, 0x820f, 0x51ce,
1073     0x7d76, 0x9bff, 0x3ff3, 0x0000
1074 };
1075 
1076 ATTRIBUTE_ALIGNED(16) jushort _GP[] =
1077 {
1078     0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffd, 0x0000, 0xb62f, 0x0b60, 0x60b6, 0xb60b,
1079     0xbff9, 0x0000, 0xdfa7, 0x08aa, 0x55e0, 0x8ab3, 0xbff6, 0x0000, 0x85a0, 0xa819,
1080     0xbc99, 0xddeb, 0xbff2, 0x0000, 0x7065, 0x6a37, 0x795f, 0xb354, 0xbfef, 0x0000,
1081     0xa8f9, 0x83f1, 0x2ec8, 0x9140, 0xbfec, 0x0000, 0xf3ca, 0x8c96, 0x8e0b, 0xeb6d,
1082     0xbfe8, 0x0000, 0x355b, 0xd910, 0x67c9, 0xbed3, 0xbfe5, 0x0000, 0x286b, 0xb49e,
1083     0xb854, 0x9a98, 0xbfe2, 0x0000, 0x0871, 0x1a2f, 0x6477, 0xfcc4, 0xbfde, 0x0000,
1084     0xa559, 0x1da9, 0xaed2, 0xba76, 0xbfdb, 0x0000, 0x00a3, 0x7fea, 0x9bc3, 0xf205,
1085     0xbfd8, 0x0000
1086 };
1087 
1088 void MacroAssembler::libm_tancot_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
1089   Label B1_1, B1_2, B1_3, B1_4, B1_5, B1_6, B1_7, B1_8, B1_9, B1_10, B1_11, B1_12;
1090   Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
1091   Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
1092   Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_43;
1093 
1094   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
1095 
1096   address L_2il0floatpacket_0 = StubRoutines::x86::_L_2il0floatpacket_0_addr();
1097   address Pi4Inv = StubRoutines::x86::_Pi4Inv_addr();
1098   address Pi4x3 = StubRoutines::x86::_Pi4x3_addr();
1099   address Pi4x4 = StubRoutines::x86::_Pi4x4_addr();
1100   address ones = StubRoutines::x86::_ones_addr();
1101   address TP = (address)_TP;
1102   address TQ = (address)_TQ;
1103   address GP = (address)_GP;
1104 
1105   bind(B1_1);
1106   push(ebp);
1107   movl(ebp, esp);
1108   andl(esp, -64);
1109   push(esi);
1110   push(edi);
1111   push(ebx);
1112   subl(esp, 52);
1113   movl(eax, Address(ebp, 16));
1114   movl(ebx, Address(ebp, 20));
1115   movl(Address(esp, 40), eax);
1116 
1117   bind(B1_2);
1118   fnstcw(Address(esp, 38));
1119 
1120   bind(B1_3);
1121   movl(edx, Address(ebp, 12));
1122   movl(eax, edx);
1123   andl(eax, 2147483647);
1124   shrl(edx, 31);
1125   movl(Address(esp, 44), edx);
1126   cmpl(eax, 1104150528);
1127   jcc(Assembler::aboveEqual, B1_11);
1128 
1129   bind(B1_4);
1130   movsd(xmm1, Address(ebp, 8));
1131   movzwl(ecx, Address(esp, 38));
1132   movl(edx, ecx);
1133   andl(edx, 768);
1134   andps(xmm1, ExternalAddress(L_2il0floatpacket_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
1135   cmpl(edx, 768);
1136   movsd(xmm0, ExternalAddress(Pi4Inv));    ////0x6dc9c883UL, 0x3ff45f30UL
1137   mulsd(xmm0, xmm1);
1138   movsd(Address(ebp, 8), xmm1);
1139   movsd(Address(esp, 0), xmm0);
1140   jcc(Assembler::equal, B1_39);
1141 
1142   bind(B1_5);
1143   orl(ecx, -64768);
1144   movw(Address(esp, 36), ecx);
1145 
1146   bind(B1_6);
1147   fldcw(Address(esp, 36));
1148 
1149   bind(B1_7);
1150   movsd(xmm1, Address(ebp, 8));
1151   movl(edi, 1);
1152 
1153   bind(B1_8);
1154   movl(Address(esp, 12), esi);
1155   movl(esi, Address(esp, 4));
1156   movl(edx, esi);
1157   movl(Address(esp, 24), edi);
1158   movl(edi, esi);
1159   shrl(edi, 20);
1160   andl(edx, 1048575);
1161   movl(ecx, edi);
1162   orl(edx, 1048576);
1163   negl(ecx);
1164   addl(edi, 13);
1165   movl(Address(esp, 8), ebx);
1166   addl(ecx, 19);
1167   movl(ebx, edx);
1168   movl(Address(esp, 28), ecx);
1169   shrl(ebx);
1170   movl(ecx, edi);
1171   shll(edx);
1172   movl(ecx, Address(esp, 28));
1173   movl(edi, Address(esp, 0));
1174   shrl(edi);
1175   orl(edx, edi);
1176   cmpl(esi, 1094713344);
1177   movsd(Address(esp, 16), xmm1);
1178   fld_d(Address(esp, 16));
1179   cmov32(Assembler::below, edx, ebx);
1180   movl(edi, Address(esp, 24));
1181   movl(esi, Address(esp, 12));
1182   lea(ebx, Address(edx, 1));
1183   andl(ebx, -2);
1184   movl(Address(esp, 16), ebx);
1185   cmpl(eax, 1094713344);
1186   fild_s(Address(esp, 16));
1187   movl(ebx, Address(esp, 8));
1188   jcc(Assembler::aboveEqual, B1_10);
1189 
1190   bind(B1_9);
1191   fld_d(ExternalAddress(Pi4x3));    //0x54443000UL, 0xbfe921fbUL
1192   fmul(1);
1193   faddp(2);
1194   fld_d(ExternalAddress(8 + Pi4x3));    //0x3b39a000UL, 0x3d373dcbUL
1195   fmul(1);
1196   faddp(2);
1197   fld_d(ExternalAddress(16 + Pi4x3));    //0xe0e68948UL, 0xba845c06UL
1198   fmulp(1);
1199   faddp(1);
1200   jmp(B1_17);
1201 
1202   bind(B1_10);
1203   fld_d(ExternalAddress(Pi4x4));    //0x54400000UL, 0xbfe921fbUL
1204   fmul(1);
1205   faddp(2);
1206   fld_d(ExternalAddress(8 + Pi4x4));    //0x1a600000UL, 0xbdc0b461UL
1207   fmul(1);
1208   faddp(2);
1209   fld_d(ExternalAddress(16 + Pi4x4));    //0x2e000000UL, 0xbb93198aUL
1210   fmul(1);
1211   faddp(2);
1212   fld_d(ExternalAddress(24 + Pi4x4));    //0x252049c1UL, 0xb96b839aUL
1213   fmulp(1);
1214   faddp(1);
1215   jmp(B1_17);
1216 
1217   bind(B1_11);
1218   movzwl(edx, Address(esp, 38));
1219   movl(eax, edx);
1220   andl(eax, 768);
1221   cmpl(eax, 768);
1222   jcc(Assembler::equal, B1_40);
1223 
1224   bind(B1_12);
1225   orl(edx, -64768);
1226   movw(Address(esp, 36), edx);
1227 
1228   bind(B1_13);
1229   fldcw(Address(esp, 36));
1230 
1231   bind(B1_14);
1232   movl(edi, 1);
1233 
1234   bind(B1_15);
1235   movsd(xmm0, Address(ebp, 8));
1236   addl(esp, -32);
1237   andps(xmm0, ExternalAddress(L_2il0floatpacket_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
1238   lea(eax, Address(esp, 32));
1239   movsd(Address(eax, 16), xmm0);
1240   fld_d(Address(eax, 16));
1241   fstp_x(Address(esp, 0));
1242   movl(Address(esp, 12), 0);
1243   movl(Address(esp, 16), eax);
1244   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l())));
1245 
1246   bind(B1_43);
1247   movl(edx, eax);
1248   addl(esp, 32);
1249 
1250   bind(B1_16);
1251   fld_d(Address(esp, 0));
1252   fld_d(Address(esp, 8));
1253   faddp(1);
1254 
1255   bind(B1_17);
1256   movl(eax, ebx);
1257   andl(eax, 3);
1258   cmpl(eax, 3);
1259   jcc(Assembler::notEqual, B1_24);
1260 
1261   bind(B1_18);
1262   fld_d(ExternalAddress(ones));
1263   incl(edx);
1264   fdiv(1);
1265   testb(edx, 2);
1266   fstp_x(Address(esp, 24));
1267   fld_s(0);
1268   fmul(1);
1269   fld_s(0);
1270   fmul(1);
1271   fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
1272   fmul(2);
1273   fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
1274   faddp(1);
1275   fmul(2);
1276   fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
1277   faddp(1);
1278   fmul(2);
1279   fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
1280   fmul(3);
1281   fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
1282   faddp(1);
1283   fmul(3);
1284   fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
1285   faddp(1);
1286   fmul(3);
1287   fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
1288   faddp(1);
1289   fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
1290   faddp(2);
1291   fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
1292   fmul(3);
1293   fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
1294   fmul(4);
1295   fld_x(ExternalAddress(108 + GP));    //0x0871, 0x1a2f, 0x64
1296   faddp(2);
1297   fxch(1);
1298   fmul(4);
1299   fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
1300   faddp(2);
1301   fxch(1);
1302   fmul(4);
1303   fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
1304   faddp(2);
1305   fxch(1);
1306   fmul(4);
1307   fld_x(ExternalAddress(72 + GP));    //0x8c96, 0x8e0b, 0xeb
1308   faddp(2);
1309   fxch(1);
1310   fmul(4);
1311   fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
1312   faddp(2);
1313   fxch(1);
1314   fmul(4);
1315   fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
1316   faddp(2);
1317   fxch(1);
1318   fmul(4);
1319   fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
1320   faddp(2);
1321   fxch(1);
1322   fmul(4);
1323   fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
1324   faddp(2);
1325   fxch(1);
1326   fmulp(4);
1327   fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
1328   faddp(1);
1329   fmul(4);
1330   fmul(5);
1331   fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
1332   faddp(4);
1333   fxch(3);
1334   fmul(5);
1335   faddp(3);
1336   jcc(Assembler::equal, B1_20);
1337 
1338   bind(B1_19);
1339   fld_x(Address(esp, 24));
1340   fxch(1);
1341   fdivrp(2);
1342   fxch(1);
1343   fmulp(3);
1344   movl(eax, Address(esp, 44));
1345   xorl(eax, 1);
1346   fxch(2);
1347   fmul(3);
1348   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
1349   fmula(2);
1350   fmula(3);
1351   fxch(3);
1352   faddp(2);
1353   fxch(1);
1354   fstp_d(Address(esp, 16));
1355   fmul(1);
1356   fxch(1);
1357   fmulp(2);
1358   movsd(xmm0, Address(esp, 16));
1359   faddp(1);
1360   fstp_d(Address(esp, 16));
1361   movsd(xmm1, Address(esp, 16));
1362   jmp(B1_21);
1363 
1364   bind(B1_20);
1365   fdivrp(1);
1366   fmulp(2);
1367   fxch(1);
1368   fmul(2);
1369   movl(eax, Address(esp, 44));
1370   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
1371   fmula(1);
1372   fmula(3);
1373   fxch(3);
1374   faddp(1);
1375   fstp_d(Address(esp, 16));
1376   fmul(1);
1377   fld_x(Address(esp, 24));
1378   fmulp(2);
1379   movsd(xmm0, Address(esp, 16));
1380   faddp(1);
1381   fstp_d(Address(esp, 16));
1382   movsd(xmm1, Address(esp, 16));
1383 
1384   bind(B1_21);
1385   testl(edi, edi);
1386   jcc(Assembler::equal, B1_23);
1387 
1388   bind(B1_22);
1389   fldcw(Address(esp, 38));
1390 
1391   bind(B1_23);
1392   movl(eax, Address(esp, 40));
1393   movsd(Address(eax, 0), xmm0);
1394   movsd(Address(eax, 8), xmm1);
1395   addl(esp, 52);
1396   pop(ebx);
1397   pop(edi);
1398   pop(esi);
1399   movl(esp, ebp);
1400   pop(ebp);
1401   ret(0);
1402 
1403   bind(B1_24);
1404   testb(ebx, 2);
1405   jcc(Assembler::equal, B1_31);
1406 
1407   bind(B1_25);
1408   incl(edx);
1409   fld_s(0);
1410   fmul(1);
1411   testb(edx, 2);
1412   jcc(Assembler::equal, B1_27);
1413 
1414   bind(B1_26);
1415   fld_d(ExternalAddress(ones));
1416   fdiv(2);
1417   fld_s(1);
1418   fmul(2);
1419   fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
1420   fmul(1);
1421   fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
1422   fmul(2);
1423   fld_x(ExternalAddress(108 + GP));    //0x67c9, 0xbed3, 0xbf
1424   movl(eax, Address(esp, 44));
1425   faddp(2);
1426   fxch(1);
1427   fmul(2);
1428   xorl(eax, 1);
1429   fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
1430   faddp(2);
1431   fxch(1);
1432   fmul(2);
1433   fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
1434   faddp(2);
1435   fxch(1);
1436   fmul(2);
1437   fld_x(ExternalAddress(72 + GP));    //0xf3ca, 0x8c96, 0x8e
1438   faddp(2);
1439   fxch(1);
1440   fmul(2);
1441   fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
1442   faddp(2);
1443   fxch(1);
1444   fmul(2);
1445   fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
1446   faddp(2);
1447   fxch(1);
1448   fmul(2);
1449   fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
1450   faddp(2);
1451   fxch(1);
1452   fmul(2);
1453   fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
1454   faddp(2);
1455   fxch(1);
1456   fmulp(2);
1457   fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
1458   faddp(1);
1459   fmulp(3);
1460   fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
1461   faddp(1);
1462   fmul(3);
1463   fxch(2);
1464   fmulp(3);
1465   fxch(1);
1466   faddp(2);
1467   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
1468   fmula(2);
1469   fmulp(1);
1470   faddp(1);
1471   fstp_d(Address(esp, 16));
1472   movsd(xmm0, Address(esp, 16));
1473   jmp(B1_28);
1474 
1475   bind(B1_27);
1476   fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
1477   fmul(1);
1478   fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
1479   movl(eax, Address(esp, 44));
1480   faddp(1);
1481   fmul(1);
1482   fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
1483   fmul(2);
1484   fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
1485   faddp(1);
1486   fmul(2);
1487   fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
1488   faddp(1);
1489   fmul(2);
1490   fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
1491   faddp(1);
1492   fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
1493   faddp(2);
1494   fxch(1);
1495   fmul(2);
1496   fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
1497   faddp(1);
1498   fdivrp(1);
1499   fmulp(1);
1500   fmul(1);
1501   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
1502   fmula(1);
1503   fmulp(2);
1504   faddp(1);
1505   fstp_d(Address(esp, 16));
1506   movsd(xmm0, Address(esp, 16));
1507 
1508   bind(B1_28);
1509   testl(edi, edi);
1510   jcc(Assembler::equal, B1_30);
1511 
1512   bind(B1_29);
1513   fldcw(Address(esp, 38));
1514 
1515   bind(B1_30);
1516   movl(eax, Address(esp, 40));
1517   movsd(Address(eax, 0), xmm0);
1518   addl(esp, 52);
1519   pop(ebx);
1520   pop(edi);
1521   pop(esi);
1522   movl(esp, ebp);
1523   pop(ebp);
1524   ret(0);
1525 
1526   bind(B1_31);
1527   testb(ebx, 1);
1528   jcc(Assembler::equal, B1_38);
1529 
1530   bind(B1_32);
1531   incl(edx);
1532   fld_s(0);
1533   fmul(1);
1534   testb(edx, 2);
1535   jcc(Assembler::equal, B1_34);
1536 
1537   bind(B1_33);
1538   fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
1539   fmul(1);
1540   fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
1541   movl(eax, Address(esp, 44));
1542   faddp(1);
1543   fmul(1);
1544   xorl(eax, 1);
1545   fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
1546   fmul(2);
1547   fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
1548   faddp(1);
1549   fmul(2);
1550   fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
1551   faddp(1);
1552   fmul(2);
1553   fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
1554   faddp(1);
1555   fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
1556   faddp(2);
1557   fxch(1);
1558   fmul(2);
1559   fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
1560   faddp(1);
1561   fdivrp(1);
1562   fmulp(1);
1563   fmul(1);
1564   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
1565   fmula(1);
1566   fmulp(2);
1567   faddp(1);
1568   fstp_d(Address(esp, 16));
1569   movsd(xmm0, Address(esp, 16));
1570   jmp(B1_35);
1571 
1572   bind(B1_34);
1573   fld_d(ExternalAddress(ones));
1574   fdiv(2);
1575   fld_s(1);
1576   fmul(2);
1577   fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
1578   fmul(1);
1579   fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
1580   fmul(2);
1581   fld_x(ExternalAddress(108 + GP));    //0x67c9, 0xbed3, 0xbf
1582   movl(eax, Address(esp, 44));
1583   faddp(2);
1584   fxch(1);
1585   fmul(2);
1586   fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
1587   faddp(2);
1588   fxch(1);
1589   fmul(2);
1590   fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
1591   faddp(2);
1592   fxch(1);
1593   fmul(2);
1594   fld_x(ExternalAddress(72 + GP));    //0xf3ca, 0x8c96, 0x8e
1595   faddp(2);
1596   fxch(1);
1597   fmul(2);
1598   fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
1599   faddp(2);
1600   fxch(1);
1601   fmul(2);
1602   fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
1603   faddp(2);
1604   fxch(1);
1605   fmul(2);
1606   fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
1607   faddp(2);
1608   fxch(1);
1609   fmul(2);
1610   fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
1611   faddp(2);
1612   fxch(1);
1613   fmulp(2);
1614   fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
1615   faddp(1);
1616   fmulp(3);
1617   fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
1618   faddp(1);
1619   fmul(3);
1620   fxch(2);
1621   fmulp(3);
1622   fxch(1);
1623   faddp(2);
1624   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
1625   fmula(2);
1626   fmulp(1);
1627   faddp(1);
1628   fstp_d(Address(esp, 16));
1629   movsd(xmm0, Address(esp, 16));
1630 
1631   bind(B1_35);
1632   testl(edi, edi);
1633   jcc(Assembler::equal, B1_37);
1634 
1635   bind(B1_36);
1636   fldcw(Address(esp, 38));
1637 
1638   bind(B1_37);
1639   movl(eax, Address(esp, 40));
1640   movsd(Address(eax, 8), xmm0);
1641   addl(esp, 52);
1642   pop(ebx);
1643   pop(edi);
1644   pop(esi);
1645   mov(esp, ebp);
1646   pop(ebp);
1647   ret(0);
1648 
1649   bind(B1_38);
1650   fstp_d(0);
1651   addl(esp, 52);
1652   pop(ebx);
1653   pop(edi);
1654   pop(esi);
1655   mov(esp, ebp);
1656   pop(ebp);
1657   ret(0);
1658 
1659   bind(B1_39);
1660   xorl(edi, edi);
1661   jmp(B1_8);
1662 
1663   bind(B1_40);
1664   xorl(edi, edi);
1665   jmp(B1_15);
1666 }
1667 
1668 ATTRIBUTE_ALIGNED(16) juint _static_const_table_tan[] =
1669 {
1670     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x882c10faUL,
1671     0x3f9664f4UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1672     0x00000000UL, 0x00000000UL, 0x55e6c23dUL, 0x3f8226e3UL, 0x55555555UL,
1673     0x3fd55555UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1674     0x0e157de0UL, 0x3f6d6d3dUL, 0x11111111UL, 0x3fc11111UL, 0x00000000UL,
1675     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x452b75e3UL, 0x3f57da36UL,
1676     0x1ba1ba1cUL, 0x3faba1baUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1677     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
1678     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL,
1679     0x3f953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL,
1680     0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0x3f85ad63UL, 0xdc230b9bUL,
1681     0x3fb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL,
1682     0x77bb08baUL, 0x3f757c85UL, 0xb6247521UL, 0x3fb1381eUL, 0x5922170cUL,
1683     0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0x3f64e391UL,
1684     0x3e666320UL, 0x3fa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL,
1685     0x3fafa8aeUL, 0x8c5b2da2UL, 0x3fb936bbUL, 0x4e88f7a5UL, 0x3c587d05UL,
1686     0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
1687     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x5a279ea3UL, 0x3faa3407UL,
1688     0x00000000UL, 0x00000000UL, 0x432d65faUL, 0x3fa70153UL, 0x00000000UL,
1689     0x00000000UL, 0x891a4602UL, 0x3f9d03efUL, 0xd62ca5f8UL, 0x3fca77d9UL,
1690     0xb35f4628UL, 0x3f97a265UL, 0x433258faUL, 0x3fd8cf51UL, 0xb58fd909UL,
1691     0x3f8f88e3UL, 0x01771ceaUL, 0x3fc2b154UL, 0xf3562f8eUL, 0x3f888f57UL,
1692     0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL, 0x3f80f44cUL, 0x214368e9UL,
1693     0x3fb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL, 0x172dbbf0UL, 0x3fb6cb8eUL,
1694     0xe0553158UL, 0x3fc975f5UL, 0x593fe814UL, 0x3c2ef5d3UL, 0x00000000UL,
1695     0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL, 0x00000000UL, 0x00000000UL,
1696     0x00000000UL, 0x00000000UL, 0x9314533eUL, 0x3fbb8ec5UL, 0x00000000UL,
1697     0x00000000UL, 0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL,
1698     0xdcb427fdUL, 0x3fb13950UL, 0xd87ab0bbUL, 0x3fd5335eUL, 0xce0ae8a5UL,
1699     0x3fabb382UL, 0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0x3fa552f1UL,
1700     0x59f21a6dUL, 0x3fd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL,
1701     0x3fd0576cUL, 0x8f2c2950UL, 0x3f9a4898UL, 0xc0b3f22cUL, 0x3fc59462UL,
1702     0x1883a4b8UL, 0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL,
1703     0x3fd36a08UL, 0x1dce993dUL, 0xbc6d704dUL, 0x00000000UL, 0x3ff00000UL,
1704     0x2b82ab63UL, 0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1705     0x00000000UL, 0x56f37042UL, 0x3fccfc56UL, 0x00000000UL, 0x00000000UL,
1706     0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL, 0x3d0e7c5dUL,
1707     0x3fc50533UL, 0x9bed9b2eUL, 0x3fdf0ed9UL, 0x5fe7c47cUL, 0x3fc1f250UL,
1708     0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0x3fbe5c71UL, 0x86362c20UL,
1709     0x3fda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL, 0x3fd911bdUL,
1710     0xb56658beUL, 0x3fb5e4c7UL, 0x93a2fd76UL, 0x3fd3c092UL, 0xda271794UL,
1711     0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL, 0x3fda8279UL,
1712     0xb68c1467UL, 0x3c708b2fUL, 0x00000000UL, 0x3ff00000UL, 0x980c4337UL,
1713     0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1714     0xcc03e501UL, 0x3fdff10fUL, 0x00000000UL, 0x00000000UL, 0x44a4e845UL,
1715     0x3fddb63bUL, 0x00000000UL, 0x00000000UL, 0x3768ad9fUL, 0x3fdb72a4UL,
1716     0x3dd01ccaUL, 0x3fe5fdb9UL, 0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL,
1717     0x3fe977f9UL, 0xd013b3abUL, 0x3fd78ca3UL, 0xbf0bf914UL, 0x3fe4f192UL,
1718     0x4d53e730UL, 0x3fd5d060UL, 0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL,
1719     0x3fd4322aUL, 0x5936a835UL, 0x3fe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL,
1720     0xef478605UL, 0x3fe1659eUL, 0x190834ecUL, 0x3fe11ab7UL, 0xcdb625eaUL,
1721     0xbc8e564bUL, 0x00000000UL, 0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL,
1722     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL,
1723     0x3ff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL,
1724     0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0x3ff3972eUL, 0xe93463bdUL,
1725     0x3feeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL,
1726     0xa04e8ea3UL, 0x3ff4541aUL, 0x386accd3UL, 0x3ff1369eUL, 0x222a66ddUL,
1727     0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0x3ff5178fUL,
1728     0xddaa0031UL, 0x3ff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL,
1729     0x3ff29311UL, 0x2ab7f990UL, 0x3fe561b8UL, 0x209c7df1UL, 0x3c87a8c5UL,
1730     0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL,
1731     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc7ab4d5aUL, 0x40085e24UL,
1732     0x00000000UL, 0x00000000UL, 0xe93ea75dUL, 0x400b963dUL, 0x00000000UL,
1733     0x00000000UL, 0x94a7f25aUL, 0x400f37e2UL, 0x4b6261cbUL, 0x3ff5f984UL,
1734     0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL, 0x3ffaf5a5UL, 0x7f2ce8e3UL,
1735     0x4013fe8bUL, 0xfe8e54faUL, 0x3ffd7334UL, 0x670d618dUL, 0x4016a10cUL,
1736     0x4db97058UL, 0x4000e012UL, 0x24df44ddUL, 0x40199c5fUL, 0x697d6eceUL,
1737     0x4003006eUL, 0x83298b82UL, 0x401cfc4dUL, 0x19d490d6UL, 0x40058c19UL,
1738     0x2ae42850UL, 0x3fea4300UL, 0x118e20e6UL, 0xbc7a6db8UL, 0x00000000UL,
1739     0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL, 0x00000000UL, 0x00000000UL,
1740     0x00000000UL, 0x00000000UL, 0x65965966UL, 0x40219659UL, 0x00000000UL,
1741     0x00000000UL, 0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL,
1742     0x83cd3723UL, 0x402c8342UL, 0x00000000UL, 0x40000000UL, 0x55e6c23dUL,
1743     0x403226e3UL, 0x55555555UL, 0x40055555UL, 0x34451939UL, 0x40371c96UL,
1744     0xaaaaaaabUL, 0x400aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL,
1745     0x40111111UL, 0xa738201fUL, 0x4042bbceUL, 0x05b05b06UL, 0x4015b05bUL,
1746     0x452b75e3UL, 0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL,
1747     0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL,
1748     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1749     0x00000000UL, 0x4f48b8d3UL, 0xbf33eaf9UL, 0x00000000UL, 0x00000000UL,
1750     0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL, 0xd0258911UL,
1751     0xbf0abaf3UL, 0x23e49fe9UL, 0xbfab5a8cUL, 0x2d53222eUL, 0x3ef60d15UL,
1752     0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0xbee1d3b5UL, 0xdbf93b8eUL,
1753     0xbf84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL, 0x3f743924UL,
1754     0x794a8297UL, 0xbeb7b7b9UL, 0xe015f797UL, 0xbf5d41f5UL, 0xe41a4a56UL,
1755     0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL, 0xbfce49ceUL,
1756     0x8c743719UL, 0x3d1eb860UL, 0x00000000UL, 0x00000000UL, 0x1b4863cfUL,
1757     0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
1758     0x535ad890UL, 0xbf2b9320UL, 0x00000000UL, 0x00000000UL, 0x018fdf1fUL,
1759     0x3f16d61dUL, 0x00000000UL, 0x00000000UL, 0x0359f1beUL, 0xbf0139e4UL,
1760     0xa4317c6dUL, 0xbfa67e17UL, 0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL,
1761     0x3f9f455bUL, 0x51ccf238UL, 0xbed55317UL, 0xf437b9acUL, 0xbf804beeUL,
1762     0xc791a2b5UL, 0x3ec0e993UL, 0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL,
1763     0xbeaa48a2UL, 0x0a268358UL, 0xbf55a443UL, 0xdfd978e4UL, 0x3e94b61fUL,
1764     0xd7767a58UL, 0x3f431806UL, 0x2aea0000UL, 0xbfc9bbe8UL, 0x7723ea61UL,
1765     0xbd3a2369UL, 0x00000000UL, 0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL,
1766     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL,
1767     0xbf231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL,
1768     0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0xbef66191UL, 0x848a46c6UL,
1769     0xbfa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL,
1770     0xfdd299efUL, 0xbec9dd1aUL, 0x3f8dbaafUL, 0xbf793363UL, 0x309fc6eaUL,
1771     0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0xbe9dae11UL,
1772     0x3e5c67b3UL, 0xbf4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL,
1773     0x3f3d1eb1UL, 0x29cfc000UL, 0xbfc549ceUL, 0xbf159358UL, 0xbd397b33UL,
1774     0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL,
1775     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x7d98a556UL, 0xbf1a3958UL,
1776     0x00000000UL, 0x00000000UL, 0x9d88dc01UL, 0x3f0704c2UL, 0x00000000UL,
1777     0x00000000UL, 0x73742a2bUL, 0xbeed054aUL, 0x58844587UL, 0xbf9c2a13UL,
1778     0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL, 0x3f9a48f4UL, 0xa8dc9888UL,
1779     0xbebf8939UL, 0xaad4b5b8UL, 0xbf72f746UL, 0x9102efa1UL, 0x3ea88f82UL,
1780     0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL, 0xbe90f456UL, 0x741fb4edUL,
1781     0xbf46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL, 0xca89ff3fUL, 0x3f36db70UL,
1782     0xa8a2a000UL, 0xbfc0ee13UL, 0x3da24be1UL, 0xbd338b9fUL, 0x00000000UL,
1783     0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL, 0x00000000UL, 0x3ff00000UL,
1784     0x00000000UL, 0xfffffff8UL, 0x1a154b97UL, 0xbf116b01UL, 0x00000000UL,
1785     0x00000000UL, 0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL,
1786     0xb93820c8UL, 0xbee264d4UL, 0xbb6cbb18UL, 0xbf94ab8cUL, 0x888d4d92UL,
1787     0x3ed0568bUL, 0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0xbeb2f950UL,
1788     0x22cf9f74UL, 0xbf6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL,
1789     0x3f64aad7UL, 0x637b73afUL, 0xbe83487cUL, 0xe522591aUL, 0xbf3fc092UL,
1790     0xa158e8bcUL, 0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL,
1791     0xbfb9477fUL, 0xc2c2d2bcUL, 0xbd135ef9UL, 0x00000000UL, 0x00000000UL,
1792     0xf2fdb123UL, 0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
1793     0xfffffff8UL, 0xc41acb64UL, 0xbf05448dUL, 0x00000000UL, 0x00000000UL,
1794     0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL, 0x9e42962dUL,
1795     0xbed5aea5UL, 0x2579f8efUL, 0xbf8b2398UL, 0x288a1ed9UL, 0x3ec81441UL,
1796     0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0xbea57cd3UL, 0x5766336fUL,
1797     0xbf617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL, 0x3f62c646UL,
1798     0x6b8fb29cUL, 0xbe74e3a3UL, 0xdc4c0409UL, 0xbf33f952UL, 0x9bffe365UL,
1799     0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL, 0xbfb0cc62UL,
1800     0x016b907fUL, 0xbd119cbcUL, 0x00000000UL, 0x00000000UL, 0xe6b9d8faUL,
1801     0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
1802     0x5daf22a6UL, 0xbef429d7UL, 0x00000000UL, 0x00000000UL, 0x06bca545UL,
1803     0x3ef7a27dUL, 0x00000000UL, 0x00000000UL, 0x7211c19aUL, 0xbec41c3eUL,
1804     0x956ed53eUL, 0xbf7ae3f4UL, 0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL,
1805     0x3f96f713UL, 0x36661e6cUL, 0xbe936e09UL, 0x506f9381UL, 0xbf5122e8UL,
1806     0xcb6dd43fUL, 0x3e9041b9UL, 0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL,
1807     0xbe625a8aUL, 0xe5a0e9dcUL, 0xbf23499dUL, 0x110384ddUL, 0x3e5b1c2cUL,
1808     0x68d43db6UL, 0x3f2cb899UL, 0x6ecac000UL, 0xbfa0c414UL, 0xcd7dd58cUL,
1809     0x3d13500fUL, 0x00000000UL, 0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL,
1810     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL,
1811     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2bf70ebeUL, 0x3ef66a8fUL,
1812     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1813     0x00000000UL, 0xd644267fUL, 0x3ec22805UL, 0x16c16c17UL, 0x3f96c16cUL,
1814     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc4e09162UL,
1815     0x3e8d6db2UL, 0xbc011567UL, 0x3f61566aUL, 0x00000000UL, 0x00000000UL,
1816     0x00000000UL, 0x00000000UL, 0x1f79955cUL, 0x3e57da4eUL, 0x9334ef0bUL,
1817     0x3f2bbd77UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1818     0x00000000UL, 0x00000000UL, 0x55555555UL, 0x3fd55555UL, 0x00000000UL,
1819     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x5daf22a6UL, 0x3ef429d7UL,
1820     0x00000000UL, 0x00000000UL, 0x06bca545UL, 0x3ef7a27dUL, 0x00000000UL,
1821     0x00000000UL, 0x7211c19aUL, 0x3ec41c3eUL, 0x956ed53eUL, 0x3f7ae3f4UL,
1822     0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL, 0x3f96f713UL, 0x36661e6cUL,
1823     0x3e936e09UL, 0x506f9381UL, 0x3f5122e8UL, 0xcb6dd43fUL, 0x3e9041b9UL,
1824     0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL, 0x3e625a8aUL, 0xe5a0e9dcUL,
1825     0x3f23499dUL, 0x110384ddUL, 0x3e5b1c2cUL, 0x68d43db6UL, 0x3f2cb899UL,
1826     0x6ecac000UL, 0x3fa0c414UL, 0xcd7dd58cUL, 0xbd13500fUL, 0x00000000UL,
1827     0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL, 0x00000000UL, 0x3ff00000UL,
1828     0x00000000UL, 0xfffffff8UL, 0xc41acb64UL, 0x3f05448dUL, 0x00000000UL,
1829     0x00000000UL, 0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL,
1830     0x9e42962dUL, 0x3ed5aea5UL, 0x2579f8efUL, 0x3f8b2398UL, 0x288a1ed9UL,
1831     0x3ec81441UL, 0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0x3ea57cd3UL,
1832     0x5766336fUL, 0x3f617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL,
1833     0x3f62c646UL, 0x6b8fb29cUL, 0x3e74e3a3UL, 0xdc4c0409UL, 0x3f33f952UL,
1834     0x9bffe365UL, 0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL,
1835     0x3fb0cc62UL, 0x016b907fUL, 0x3d119cbcUL, 0x00000000UL, 0x00000000UL,
1836     0xe6b9d8faUL, 0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
1837     0xfffffff8UL, 0x1a154b97UL, 0x3f116b01UL, 0x00000000UL, 0x00000000UL,
1838     0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL, 0xb93820c8UL,
1839     0x3ee264d4UL, 0xbb6cbb18UL, 0x3f94ab8cUL, 0x888d4d92UL, 0x3ed0568bUL,
1840     0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0x3eb2f950UL, 0x22cf9f74UL,
1841     0x3f6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL, 0x3f64aad7UL,
1842     0x637b73afUL, 0x3e83487cUL, 0xe522591aUL, 0x3f3fc092UL, 0xa158e8bcUL,
1843     0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL, 0x3fb9477fUL,
1844     0xc2c2d2bcUL, 0x3d135ef9UL, 0x00000000UL, 0x00000000UL, 0xf2fdb123UL,
1845     0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
1846     0x7d98a556UL, 0x3f1a3958UL, 0x00000000UL, 0x00000000UL, 0x9d88dc01UL,
1847     0x3f0704c2UL, 0x00000000UL, 0x00000000UL, 0x73742a2bUL, 0x3eed054aUL,
1848     0x58844587UL, 0x3f9c2a13UL, 0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL,
1849     0x3f9a48f4UL, 0xa8dc9888UL, 0x3ebf8939UL, 0xaad4b5b8UL, 0x3f72f746UL,
1850     0x9102efa1UL, 0x3ea88f82UL, 0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL,
1851     0x3e90f456UL, 0x741fb4edUL, 0x3f46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL,
1852     0xca89ff3fUL, 0x3f36db70UL, 0xa8a2a000UL, 0x3fc0ee13UL, 0x3da24be1UL,
1853     0x3d338b9fUL, 0x00000000UL, 0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL,
1854     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL,
1855     0x3f231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL,
1856     0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0x3ef66191UL, 0x848a46c6UL,
1857     0x3fa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL,
1858     0xfdd299efUL, 0x3ec9dd1aUL, 0x3f8dbaafUL, 0x3f793363UL, 0x309fc6eaUL,
1859     0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0x3e9dae11UL,
1860     0x3e5c67b3UL, 0x3f4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL,
1861     0x3f3d1eb1UL, 0x29cfc000UL, 0x3fc549ceUL, 0xbf159358UL, 0x3d397b33UL,
1862     0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL,
1863     0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x535ad890UL, 0x3f2b9320UL,
1864     0x00000000UL, 0x00000000UL, 0x018fdf1fUL, 0x3f16d61dUL, 0x00000000UL,
1865     0x00000000UL, 0x0359f1beUL, 0x3f0139e4UL, 0xa4317c6dUL, 0x3fa67e17UL,
1866     0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL, 0x3f9f455bUL, 0x51ccf238UL,
1867     0x3ed55317UL, 0xf437b9acUL, 0x3f804beeUL, 0xc791a2b5UL, 0x3ec0e993UL,
1868     0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL, 0x3eaa48a2UL, 0x0a268358UL,
1869     0x3f55a443UL, 0xdfd978e4UL, 0x3e94b61fUL, 0xd7767a58UL, 0x3f431806UL,
1870     0x2aea0000UL, 0x3fc9bbe8UL, 0x7723ea61UL, 0x3d3a2369UL, 0x00000000UL,
1871     0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL, 0x00000000UL, 0x3ff00000UL,
1872     0x00000000UL, 0xfffffff8UL, 0x4f48b8d3UL, 0x3f33eaf9UL, 0x00000000UL,
1873     0x00000000UL, 0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL,
1874     0xd0258911UL, 0x3f0abaf3UL, 0x23e49fe9UL, 0x3fab5a8cUL, 0x2d53222eUL,
1875     0x3ef60d15UL, 0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0x3ee1d3b5UL,
1876     0xdbf93b8eUL, 0x3f84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL,
1877     0x3f743924UL, 0x794a8297UL, 0x3eb7b7b9UL, 0xe015f797UL, 0x3f5d41f5UL,
1878     0xe41a4a56UL, 0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL,
1879     0x3fce49ceUL, 0x8c743719UL, 0xbd1eb860UL, 0x00000000UL, 0x00000000UL,
1880     0x1b4863cfUL, 0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
1881     0xfffffff8UL, 0x65965966UL, 0xc0219659UL, 0x00000000UL, 0x00000000UL,
1882     0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL, 0x83cd3723UL,
1883     0xc02c8342UL, 0x00000000UL, 0xc0000000UL, 0x55e6c23dUL, 0x403226e3UL,
1884     0x55555555UL, 0x40055555UL, 0x34451939UL, 0xc0371c96UL, 0xaaaaaaabUL,
1885     0xc00aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL, 0x40111111UL,
1886     0xa738201fUL, 0xc042bbceUL, 0x05b05b06UL, 0xc015b05bUL, 0x452b75e3UL,
1887     0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL, 0xbff00000UL,
1888     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL, 0x00000000UL,
1889     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1890     0xc7ab4d5aUL, 0xc0085e24UL, 0x00000000UL, 0x00000000UL, 0xe93ea75dUL,
1891     0x400b963dUL, 0x00000000UL, 0x00000000UL, 0x94a7f25aUL, 0xc00f37e2UL,
1892     0x4b6261cbUL, 0xbff5f984UL, 0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL,
1893     0x3ffaf5a5UL, 0x7f2ce8e3UL, 0xc013fe8bUL, 0xfe8e54faUL, 0xbffd7334UL,
1894     0x670d618dUL, 0x4016a10cUL, 0x4db97058UL, 0x4000e012UL, 0x24df44ddUL,
1895     0xc0199c5fUL, 0x697d6eceUL, 0xc003006eUL, 0x83298b82UL, 0x401cfc4dUL,
1896     0x19d490d6UL, 0x40058c19UL, 0x2ae42850UL, 0xbfea4300UL, 0x118e20e6UL,
1897     0x3c7a6db8UL, 0x00000000UL, 0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL,
1898     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL,
1899     0xbff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL,
1900     0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0xbff3972eUL, 0xe93463bdUL,
1901     0xbfeeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL,
1902     0xa04e8ea3UL, 0xbff4541aUL, 0x386accd3UL, 0xbff1369eUL, 0x222a66ddUL,
1903     0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0xbff5178fUL,
1904     0xddaa0031UL, 0xbff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL,
1905     0x3ff29311UL, 0x2ab7f990UL, 0xbfe561b8UL, 0x209c7df1UL, 0xbc87a8c5UL,
1906     0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL,
1907     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xcc03e501UL, 0xbfdff10fUL,
1908     0x00000000UL, 0x00000000UL, 0x44a4e845UL, 0x3fddb63bUL, 0x00000000UL,
1909     0x00000000UL, 0x3768ad9fUL, 0xbfdb72a4UL, 0x3dd01ccaUL, 0xbfe5fdb9UL,
1910     0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL, 0x3fe977f9UL, 0xd013b3abUL,
1911     0xbfd78ca3UL, 0xbf0bf914UL, 0xbfe4f192UL, 0x4d53e730UL, 0x3fd5d060UL,
1912     0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL, 0xbfd4322aUL, 0x5936a835UL,
1913     0xbfe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL, 0xef478605UL, 0x3fe1659eUL,
1914     0x190834ecUL, 0xbfe11ab7UL, 0xcdb625eaUL, 0x3c8e564bUL, 0x00000000UL,
1915     0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL, 0x00000000UL, 0x00000000UL,
1916     0x00000000UL, 0x00000000UL, 0x56f37042UL, 0xbfccfc56UL, 0x00000000UL,
1917     0x00000000UL, 0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL,
1918     0x3d0e7c5dUL, 0xbfc50533UL, 0x9bed9b2eUL, 0xbfdf0ed9UL, 0x5fe7c47cUL,
1919     0x3fc1f250UL, 0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0xbfbe5c71UL,
1920     0x86362c20UL, 0xbfda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL,
1921     0x3fd911bdUL, 0xb56658beUL, 0xbfb5e4c7UL, 0x93a2fd76UL, 0xbfd3c092UL,
1922     0xda271794UL, 0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL,
1923     0xbfda8279UL, 0xb68c1467UL, 0xbc708b2fUL, 0x00000000UL, 0x3ff00000UL,
1924     0x980c4337UL, 0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1925     0x00000000UL, 0x9314533eUL, 0xbfbb8ec5UL, 0x00000000UL, 0x00000000UL,
1926     0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL, 0xdcb427fdUL,
1927     0xbfb13950UL, 0xd87ab0bbUL, 0xbfd5335eUL, 0xce0ae8a5UL, 0x3fabb382UL,
1928     0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0xbfa552f1UL, 0x59f21a6dUL,
1929     0xbfd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL, 0x3fd0576cUL,
1930     0x8f2c2950UL, 0xbf9a4898UL, 0xc0b3f22cUL, 0xbfc59462UL, 0x1883a4b8UL,
1931     0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL, 0xbfd36a08UL,
1932     0x1dce993dUL, 0x3c6d704dUL, 0x00000000UL, 0x3ff00000UL, 0x2b82ab63UL,
1933     0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
1934     0x5a279ea3UL, 0xbfaa3407UL, 0x00000000UL, 0x00000000UL, 0x432d65faUL,
1935     0x3fa70153UL, 0x00000000UL, 0x00000000UL, 0x891a4602UL, 0xbf9d03efUL,
1936     0xd62ca5f8UL, 0xbfca77d9UL, 0xb35f4628UL, 0x3f97a265UL, 0x433258faUL,
1937     0x3fd8cf51UL, 0xb58fd909UL, 0xbf8f88e3UL, 0x01771ceaUL, 0xbfc2b154UL,
1938     0xf3562f8eUL, 0x3f888f57UL, 0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL,
1939     0xbf80f44cUL, 0x214368e9UL, 0xbfb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL,
1940     0x172dbbf0UL, 0x3fb6cb8eUL, 0xe0553158UL, 0xbfc975f5UL, 0x593fe814UL,
1941     0xbc2ef5d3UL, 0x00000000UL, 0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL,
1942     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL,
1943     0xbf953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL,
1944     0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0xbf85ad63UL, 0xdc230b9bUL,
1945     0xbfb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL,
1946     0x77bb08baUL, 0xbf757c85UL, 0xb6247521UL, 0xbfb1381eUL, 0x5922170cUL,
1947     0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0xbf64e391UL,
1948     0x3e666320UL, 0xbfa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL,
1949     0x3fafa8aeUL, 0x8c5b2da2UL, 0xbfb936bbUL, 0x4e88f7a5UL, 0xbc587d05UL,
1950     0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
1951     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x6dc9c883UL, 0x3fe45f30UL,
1952     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x43780000UL, 0x00000000UL,
1953     0x43380000UL, 0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL,
1954     0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL, 0x3707344aUL,
1955     0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL, 0x00000000UL, 0x80000000UL,
1956     0x00000000UL, 0x80000000UL, 0x676733afUL, 0x3d32e7b9UL, 0x00000000UL,
1957     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
1958     0x00000000UL, 0x7ff00000UL, 0x00000000UL, 0x00000000UL, 0xfffc0000UL,
1959     0xffffffffUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
1960     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
1961     0x00000000UL, 0x00000000UL, 0x3ca00000UL, 0x00000000UL, 0x00000000UL,
1962     0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL, 0x00000000UL,
1963     0x40300000UL, 0x00000000UL, 0x3ff00000UL
1964 };
1965 
1966 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
1967 
1968   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
1969   Label L_2TAG_PACKET_4_0_2;
1970   Label start;
1971 
1972   assert_different_registers(tmp, eax, ecx, edx);
1973 
1974   address static_const_table_tan = (address)_static_const_table_tan;
1975 
1976   bind(start);
1977   subl(rsp, 120);
1978   movl(Address(rsp, 56), tmp);
1979   lea(tmp, ExternalAddress(static_const_table_tan));
1980   movsd(xmm0, Address(rsp, 128));
1981   pextrw(eax, xmm0, 3);
1982   andl(eax, 32767);
1983   subl(eax, 14368);
1984   cmpl(eax, 2216);
1985   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
1986   movdqu(xmm5, Address(tmp, 5840));
1987   movdqu(xmm6, Address(tmp, 5856));
1988   unpcklpd(xmm0, xmm0);
1989   movdqu(xmm4, Address(tmp, 5712));
1990   andpd(xmm4, xmm0);
1991   movdqu(xmm1, Address(tmp, 5632));
1992   mulpd(xmm1, xmm0);
1993   por(xmm5, xmm4);
1994   addpd(xmm1, xmm5);
1995   movdqu(xmm7, xmm1);
1996   unpckhpd(xmm7, xmm7);
1997   cvttsd2sil(edx, xmm7);
1998   cvttpd2dq(xmm1, xmm1);
1999   cvtdq2pd(xmm1, xmm1);
2000   mulpd(xmm1, xmm6);
2001   movdqu(xmm3, Address(tmp, 5664));
2002   movsd(xmm5, Address(tmp, 5728));
2003   addl(edx, 469248);
2004   movdqu(xmm4, Address(tmp, 5680));
2005   mulpd(xmm3, xmm1);
2006   andl(edx, 31);
2007   mulsd(xmm5, xmm1);
2008   movl(ecx, edx);
2009   mulpd(xmm4, xmm1);
2010   shll(ecx, 1);
2011   subpd(xmm0, xmm3);
2012   mulpd(xmm1, Address(tmp, 5696));
2013   addl(edx, ecx);
2014   shll(ecx, 2);
2015   addl(edx, ecx);
2016   addsd(xmm5, xmm0);
2017   movdqu(xmm2, xmm0);
2018   subpd(xmm0, xmm4);
2019   movsd(xmm6, Address(tmp, 5744));
2020   shll(edx, 4);
2021   lea(eax, Address(tmp, 0));
2022   andpd(xmm5, Address(tmp, 5776));
2023   movdqu(xmm3, xmm0);
2024   addl(eax, edx);
2025   subpd(xmm2, xmm0);
2026   unpckhpd(xmm0, xmm0);
2027   divsd(xmm6, xmm5);
2028   subpd(xmm2, xmm4);
2029   movdqu(xmm7, Address(eax, 16));
2030   subsd(xmm3, xmm5);
2031   mulpd(xmm7, xmm0);
2032   subpd(xmm2, xmm1);
2033   movdqu(xmm1, Address(eax, 48));
2034   mulpd(xmm1, xmm0);
2035   movdqu(xmm4, Address(eax, 96));
2036   mulpd(xmm4, xmm0);
2037   addsd(xmm2, xmm3);
2038   movdqu(xmm3, xmm0);
2039   mulpd(xmm0, xmm0);
2040   addpd(xmm7, Address(eax, 0));
2041   addpd(xmm1, Address(eax, 32));
2042   mulpd(xmm1, xmm0);
2043   addpd(xmm4, Address(eax, 80));
2044   addpd(xmm7, xmm1);
2045   movdqu(xmm1, Address(eax, 112));
2046   mulpd(xmm1, xmm0);
2047   mulpd(xmm0, xmm0);
2048   addpd(xmm4, xmm1);
2049   movdqu(xmm1, Address(eax, 64));
2050   mulpd(xmm1, xmm0);
2051   addpd(xmm7, xmm1);
2052   movdqu(xmm1, xmm3);
2053   mulpd(xmm3, xmm0);
2054   mulsd(xmm0, xmm0);
2055   mulpd(xmm1, Address(eax, 144));
2056   mulpd(xmm4, xmm3);
2057   movdqu(xmm3, xmm1);
2058   addpd(xmm7, xmm4);
2059   movdqu(xmm4, xmm1);
2060   mulsd(xmm0, xmm7);
2061   unpckhpd(xmm7, xmm7);
2062   addsd(xmm0, xmm7);
2063   unpckhpd(xmm1, xmm1);
2064   addsd(xmm3, xmm1);
2065   subsd(xmm4, xmm3);
2066   addsd(xmm1, xmm4);
2067   movdqu(xmm4, xmm2);
2068   movsd(xmm7, Address(eax, 144));
2069   unpckhpd(xmm2, xmm2);
2070   addsd(xmm7, Address(eax, 152));
2071   mulsd(xmm7, xmm2);
2072   addsd(xmm7, Address(eax, 136));
2073   addsd(xmm7, xmm1);
2074   addsd(xmm0, xmm7);
2075   movsd(xmm7, Address(tmp, 5744));
2076   mulsd(xmm4, xmm6);
2077   movsd(xmm2, Address(eax, 168));
2078   andpd(xmm2, xmm6);
2079   mulsd(xmm5, xmm2);
2080   mulsd(xmm6, Address(eax, 160));
2081   subsd(xmm7, xmm5);
2082   subsd(xmm2, Address(eax, 128));
2083   subsd(xmm7, xmm4);
2084   mulsd(xmm7, xmm6);
2085   movdqu(xmm4, xmm3);
2086   subsd(xmm3, xmm2);
2087   addsd(xmm2, xmm3);
2088   subsd(xmm4, xmm2);
2089   addsd(xmm0, xmm4);
2090   subsd(xmm0, xmm7);
2091   addsd(xmm0, xmm3);
2092   movsd(Address(rsp, 0), xmm0);
2093   fld_d(Address(rsp, 0));
2094   jmp(L_2TAG_PACKET_1_0_2);
2095 
2096   bind(L_2TAG_PACKET_0_0_2);
2097   jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
2098   shrl(eax, 4);
2099   cmpl(eax, 268434558);
2100   jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
2101   movdqu(xmm3, xmm0);
2102   mulsd(xmm3, Address(tmp, 5808));
2103 
2104   bind(L_2TAG_PACKET_3_0_2);
2105   movsd(xmm3, Address(tmp, 5792));
2106   mulsd(xmm3, xmm0);
2107   addsd(xmm3, xmm0);
2108   mulsd(xmm3, Address(tmp, 5808));
2109   movsd(Address(rsp, 0), xmm3);
2110   fld_d(Address(rsp, 0));
2111   jmp(L_2TAG_PACKET_1_0_2);
2112 
2113   bind(L_2TAG_PACKET_2_0_2);
2114   movq(xmm7, Address(tmp, 5712));
2115   andpd(xmm7, xmm0);
2116   xorpd(xmm7, xmm0);
2117   ucomisd(xmm7, Address(tmp, 5760));
2118   jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
2119   subl(rsp, 32);
2120   movsd(Address(rsp, 0), xmm0);
2121   lea(eax, Address(rsp, 40));
2122   movl(Address(rsp, 8), eax);
2123   movl(eax, 2);
2124   movl(Address(rsp, 12), eax);
2125   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_tan_cot_huge())));
2126   addl(rsp, 32);
2127   fld_d(Address(rsp, 8));
2128   jmp(L_2TAG_PACKET_1_0_2);
2129 
2130   bind(L_2TAG_PACKET_4_0_2);
2131   movq(Address(rsp, 0), xmm0);
2132   fld_d(Address(rsp, 0));
2133   fsub_d(Address(rsp, 0));
2134 
2135   bind(L_2TAG_PACKET_1_0_2);
2136   movl(tmp, Address(rsp, 56));
2137 }
2138 #endif