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 "stubRoutines_x86.hpp"
  33 #include "utilities/globalDefinitions.hpp"
  34 
  35 /******************************************************************************/
  36 //                     ALGORITHM DESCRIPTION - SIN()
  37 //                     ---------------------
  38 //
  39 //     1. RANGE REDUCTION
  40 //
  41 //     We perform an initial range reduction from X to r with
  42 //
  43 //          X =~= N * pi/32 + r
  44 //
  45 //     so that |r| <= pi/64 + epsilon. We restrict inputs to those
  46 //     where |N| <= 932560. Beyond this, the range reduction is
  47 //     insufficiently accurate. For extremely small inputs,
  48 //     denormalization can occur internally, impacting performance.
  49 //     This means that the main path is actually only taken for
  50 //     2^-252 <= |X| < 90112.
  51 //
  52 //     To avoid branches, we perform the range reduction to full
  53 //     accuracy each time.
  54 //
  55 //          X - N * (P_1 + P_2 + P_3)
  56 //
  57 //     where P_1 and P_2 are 32-bit numbers (so multiplication by N
  58 //     is exact) and P_3 is a 53-bit number. Together, these
  59 //     approximate pi well enough for all cases in the restricted
  60 //     range.
  61 //
  62 //     The main reduction sequence is:
  63 //
  64 //             y = 32/pi * x
  65 //             N = integer(y)
  66 //     (computed by adding and subtracting off SHIFTER)
  67 //
  68 //             m_1 = N * P_1
  69 //             m_2 = N * P_2
  70 //             r_1 = x - m_1
  71 //             r = r_1 - m_2
  72 //     (this r can be used for most of the calculation)
  73 //
  74 //             c_1 = r_1 - r
  75 //             m_3 = N * P_3
  76 //             c_2 = c_1 - m_2
  77 //             c = c_2 - m_3
  78 //
  79 //     2. MAIN ALGORITHM
  80 //
  81 //     The algorithm uses a table lookup based on B = M * pi / 32
  82 //     where M = N mod 64. The stored values are:
  83 //       sigma             closest power of 2 to cos(B)
  84 //       C_hl              53-bit cos(B) - sigma
  85 //       S_hi + S_lo       2 * 53-bit sin(B)
  86 //
  87 //     The computation is organized as follows:
  88 //
  89 //          sin(B + r + c) = [sin(B) + sigma * r] +
  90 //                           r * (cos(B) - sigma) +
  91 //                           sin(B) * [cos(r + c) - 1] +
  92 //                           cos(B) * [sin(r + c) - r]
  93 //
  94 //     which is approximately:
  95 //
  96 //          [S_hi + sigma * r] +
  97 //          C_hl * r +
  98 //          S_lo + S_hi * [(cos(r) - 1) - r * c] +
  99 //          (C_hl + sigma) * [(sin(r) - r) + c]
 100 //
 101 //     and this is what is actually computed. We separate this sum
 102 //     into four parts:
 103 //
 104 //          hi + med + pols + corr
 105 //
 106 //     where
 107 //
 108 //          hi       = S_hi + sigma r
 109 //          med      = C_hl * r
 110 //          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
 111 //          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
 112 //
 113 //     3. POLYNOMIAL
 114 //
 115 //     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
 116 //     (sin(r) - r) can be rearranged freely, since it is quite
 117 //     small, so we exploit parallelism to the fullest.
 118 //
 119 //          psc4       =   SC_4 * r_1
 120 //          msc4       =   psc4 * r
 121 //          r2         =   r * r
 122 //          msc2       =   SC_2 * r2
 123 //          r4         =   r2 * r2
 124 //          psc3       =   SC_3 + msc4
 125 //          psc1       =   SC_1 + msc2
 126 //          msc3       =   r4 * psc3
 127 //          sincospols =   psc1 + msc3
 128 //          pols       =   sincospols *
 129 //                         <S_hi * r^2 | (C_hl + sigma) * r^3>
 130 //
 131 //     4. CORRECTION TERM
 132 //
 133 //     This is where the "c" component of the range reduction is
 134 //     taken into account; recall that just "r" is used for most of
 135 //     the calculation.
 136 //
 137 //          -c   = m_3 - c_2
 138 //          -d   = S_hi * r - (C_hl + sigma)
 139 //          corr = -c * -d + S_lo
 140 //
 141 //     5. COMPENSATED SUMMATIONS
 142 //
 143 //     The two successive compensated summations add up the high
 144 //     and medium parts, leaving just the low parts to add up at
 145 //     the end.
 146 //
 147 //          rs        =  sigma * r
 148 //          res_int   =  S_hi + rs
 149 //          k_0       =  S_hi - res_int
 150 //          k_2       =  k_0 + rs
 151 //          med       =  C_hl * r
 152 //          res_hi    =  res_int + med
 153 //          k_1       =  res_int - res_hi
 154 //          k_3       =  k_1 + med
 155 //
 156 //     6. FINAL SUMMATION
 157 //
 158 //     We now add up all the small parts:
 159 //
 160 //          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
 161 //
 162 //     Now the overall result is just:
 163 //
 164 //          res_hi + res_lo
 165 //
 166 //     7. SMALL ARGUMENTS
 167 //
 168 //     If |x| < SNN (SNN meaning the smallest normal number), we
 169 //     simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we
 170 //     do 2^-55 * (2^55 * x - x).
 171 //
 172 // Special cases:
 173 //  sin(NaN) = quiet NaN, and raise invalid exception
 174 //  sin(INF) = NaN and raise invalid exception
 175 //  sin(+/-0) = +/-0
 176 //
 177 /******************************************************************************/
 178 
 179 #ifdef _LP64
 180 // The 64 bit code is at most SSE2 compliant
 181 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_ONEHALF[] =
 182 {
 183     0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
 184 };
 185 
 186 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_P_2[] =
 187 {
 188     0x1a600000UL, 0x3d90b461UL, 0x1a600000UL, 0x3d90b461UL
 189 };
 190 
 191 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_SC_4[] =
 192 {
 193     0xa556c734UL, 0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL
 194 };
 195 
 196 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_Ctable[] =
 197 {
 198     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 199     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
 200     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
 201     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
 202     0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
 203     0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
 204     0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
 205     0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
 206     0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
 207     0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
 208     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
 209     0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
 210     0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
 211     0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
 212     0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
 213     0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
 214     0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
 215     0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
 216     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
 217     0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
 218     0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
 219     0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
 220     0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
 221     0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
 222     0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
 223     0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
 224     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 225     0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
 226     0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
 227     0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
 228     0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
 229     0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
 230     0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
 231     0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
 232     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
 233     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
 234     0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
 235     0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
 236     0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
 237     0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
 238     0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
 239     0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
 240     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
 241     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
 242     0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
 243     0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
 244     0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
 245     0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
 246     0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
 247     0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
 248     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
 249     0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
 250     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
 251     0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
 252     0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
 253     0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
 254     0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
 255     0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
 256     0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
 257     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
 258     0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
 259     0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
 260     0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
 261     0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
 262     0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
 263     0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
 264     0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
 265     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
 266     0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
 267     0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
 268     0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
 269     0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
 270     0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
 271     0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
 272     0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
 273     0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
 274     0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
 275     0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
 276     0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
 277     0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
 278     0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
 279     0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
 280     0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
 281     0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
 282     0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
 283     0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
 284     0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
 285     0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
 286     0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
 287     0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
 288     0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
 289     0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
 290     0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
 291     0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
 292     0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
 293     0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
 294     0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
 295     0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
 296     0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
 297     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
 298     0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
 299     0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
 300     0x00000000UL, 0x3ff00000UL
 301 };
 302 
 303 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_SC_2[] =
 304 {
 305     0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL
 306 };
 307 
 308 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_SC_3[] =
 309 {
 310     0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL
 311 };
 312 
 313 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_SC_1[] =
 314 {
 315     0x55555555UL, 0xbfc55555UL, 0x00000000UL, 0xbfe00000UL
 316 };
 317 
 318 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_PI_INV_TABLE[] =
 319 {
 320     0x00000000UL, 0x00000000UL, 0xa2f9836eUL, 0x4e441529UL, 0xfc2757d1UL,
 321     0xf534ddc0UL, 0xdb629599UL, 0x3c439041UL, 0xfe5163abUL, 0xdebbc561UL,
 322     0xb7246e3aUL, 0x424dd2e0UL, 0x06492eeaUL, 0x09d1921cUL, 0xfe1deb1cUL,
 323     0xb129a73eUL, 0xe88235f5UL, 0x2ebb4484UL, 0xe99c7026UL, 0xb45f7e41UL,
 324     0x3991d639UL, 0x835339f4UL, 0x9c845f8bUL, 0xbdf9283bUL, 0x1ff897ffUL,
 325     0xde05980fUL, 0xef2f118bUL, 0x5a0a6d1fUL, 0x6d367ecfUL, 0x27cb09b7UL,
 326     0x4f463f66UL, 0x9e5fea2dUL, 0x7527bac7UL, 0xebe5f17bUL, 0x3d0739f7UL,
 327     0x8a5292eaUL, 0x6bfb5fb1UL, 0x1f8d5d08UL, 0x56033046UL, 0xfc7b6babUL,
 328     0xf0cfbc21UL
 329 };
 330 
 331 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_PI_4[] =
 332 {
 333     0x40000000UL, 0x3fe921fbUL, 0x18469899UL, 0x3e64442dUL
 334 };
 335 
 336 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_PI32INV[] =
 337 {
 338     0x6dc9c883UL, 0x40245f30UL
 339 };
 340 
 341 ATTRIBUTE_ALIGNED(8) juint _SHIFTER[] =
 342 {
 343     0x00000000UL, 0x43380000UL
 344 };
 345 
 346 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_SIGN_MASK[] =
 347 {
 348     0x00000000UL, 0x80000000UL
 349 };
 350 
 351 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_P_3[] =
 352 {
 353     0x2e037073UL, 0x3b63198aUL
 354 };
 355 
 356 ATTRIBUTE_ALIGNED(8) juint _ALL_ONES[] =
 357 {
 358     0xffffffffUL, 0x3fefffffUL
 359 };
 360 
 361 ATTRIBUTE_ALIGNED(8) juint _TWO_POW_55[] =
 362 {
 363     0x00000000UL, 0x43600000UL
 364 };
 365 
 366 ATTRIBUTE_ALIGNED(8) juint _TWO_POW_M55[] =
 367 {
 368     0x00000000UL, 0x3c800000UL
 369 };
 370 
 371 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_P_1[] =
 372 {
 373     0x54400000UL, 0x3fb921fbUL
 374 };
 375 
 376 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_NEG_ZERO[] =
 377 {
 378     0x00000000UL, 0x80000000UL
 379 };
 380 
 381 void MacroAssembler::fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ebx, Register ecx, Register edx, Register tmp1, Register tmp2, Register tmp3, Register tmp4) {
 382   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;
 383   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;
 384   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;
 385   Label L_2TAG_PACKET_13_0_1, L_2TAG_PACKET_14_0_1;
 386   Label L_2TAG_PACKET_12_0_1, B1_4, start;
 387 
 388   assert_different_registers(tmp1, tmp2, tmp3, tmp4, eax, ebx, ecx, edx);
 389   address ONEHALF = StubRoutines::x86::_ONEHALF_addr();
 390   address P_2 = StubRoutines::x86::_P_2_addr();
 391   address SC_4 = StubRoutines::x86::_SC_4_addr();
 392   address Ctable = StubRoutines::x86::_Ctable_addr();
 393   address SC_2 = StubRoutines::x86::_SC_2_addr();
 394   address SC_3 = StubRoutines::x86::_SC_3_addr();
 395   address SC_1 = StubRoutines::x86::_SC_1_addr();
 396   address PI_INV_TABLE = StubRoutines::x86::_PI_INV_TABLE_addr();
 397   address PI_4 = (address)StubRoutines::x86::_PI_4_addr();
 398   address PI32INV = (address)StubRoutines::x86::_PI32INV_addr();
 399   address SHIFTER = (address)_SHIFTER;
 400   address SIGN_MASK = (address)StubRoutines::x86::_SIGN_MASK_addr();
 401   address P_3 = (address)StubRoutines::x86::_P_3_addr();
 402   address ALL_ONES = (address)_ALL_ONES;
 403   address TWO_POW_55 = (address)_TWO_POW_55;
 404   address TWO_POW_M55 = (address)_TWO_POW_M55;
 405   address P_1 = (address)StubRoutines::x86::_P_1_addr();
 406   address NEG_ZERO = (address)StubRoutines::x86::_NEG_ZERO_addr();
 407 
 408   bind(start);
 409   push(rbx);
 410   subq(rsp, 16);
 411   movsd(Address(rsp, 8), xmm0);
 412   movl(eax, Address(rsp, 12));
 413   movq(xmm1, ExternalAddress(PI32INV));    //0x6dc9c883UL, 0x40245f30UL
 414   movq(xmm2, ExternalAddress(SHIFTER));    //0x00000000UL, 0x43380000UL
 415   andl(eax, 2147418112);
 416   subl(eax, 808452096);
 417   cmpl(eax, 281346048);
 418   jcc(Assembler::above, L_2TAG_PACKET_0_0_1);
 419   mulsd(xmm1, xmm0);
 420   movdqu(xmm5, ExternalAddress(ONEHALF));    //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
 421   movq(xmm4, ExternalAddress(SIGN_MASK));    //0x00000000UL, 0x80000000UL
 422   pand(xmm4, xmm0);
 423   por(xmm5, xmm4);
 424   addpd(xmm1, xmm5);
 425   cvttsd2sil(edx, xmm1);
 426   cvtsi2sdl(xmm1, edx);
 427   movdqu(xmm6, ExternalAddress(P_2));    //0x1a600000UL, 0x3d90b461UL, 0x1a600000UL, 0x3d90b461UL
 428   mov64(r8, 0x3fb921fb54400000);
 429   movdq(xmm3, r8);
 430   movdqu(xmm5, ExternalAddress(SC_4));    //0xa556c734UL, 0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL
 431   pshufd(xmm4, xmm0, 68);
 432   mulsd(xmm3, xmm1);
 433   if (VM_Version::supports_sse3()) {
 434     movddup(xmm1, xmm1);
 435   }
 436   else {
 437     movlhps(xmm1, xmm1);
 438   }
 439   andl(edx, 63);
 440   shll(edx, 5);
 441   lea(rax, ExternalAddress(Ctable));
 442   addq(rax, rdx);
 443   mulpd(xmm6, xmm1);
 444   mulsd(xmm1, ExternalAddress(P_3));    //0x2e037073UL, 0x3b63198aUL
 445   subsd(xmm4, xmm3);
 446   movq(xmm7, Address(rax, 8));
 447   subsd(xmm0, xmm3);
 448   if (VM_Version::supports_sse3()) {
 449     movddup(xmm3, xmm4);
 450   }
 451   else {
 452     movdqu(xmm3, xmm4);
 453     movlhps(xmm3, xmm3);
 454   }
 455   subsd(xmm4, xmm6);
 456   pshufd(xmm0, xmm0, 68);
 457   movdqu(xmm2, Address(rax, 0));
 458   mulpd(xmm5, xmm0);
 459   subpd(xmm0, xmm6);
 460   mulsd(xmm7, xmm4);
 461   subsd(xmm3, xmm4);
 462   mulpd(xmm5, xmm0);
 463   mulpd(xmm0, xmm0);
 464   subsd(xmm3, xmm6);
 465   movdqu(xmm6, ExternalAddress(SC_2));    //0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL
 466   subsd(xmm1, xmm3);
 467   movq(xmm3, Address(rax, 24));
 468   addsd(xmm2, xmm3);
 469   subsd(xmm7, xmm2);
 470   mulsd(xmm2, xmm4);
 471   mulpd(xmm6, xmm0);
 472   mulsd(xmm3, xmm4);
 473   mulpd(xmm2, xmm0);
 474   mulpd(xmm0, xmm0);
 475   addpd(xmm5, ExternalAddress(SC_3));    //0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL
 476   mulsd(xmm4, Address(rax, 0));
 477   addpd(xmm6, ExternalAddress(SC_1));    //0x55555555UL, 0xbfc55555UL, 0x00000000UL, 0xbfe00000UL
 478   mulpd(xmm5, xmm0);
 479   movdqu(xmm0, xmm3);
 480   addsd(xmm3, Address(rax, 8));
 481   mulpd(xmm1, xmm7);
 482   movdqu(xmm7, xmm4);
 483   addsd(xmm4, xmm3);
 484   addpd(xmm6, xmm5);
 485   movq(xmm5, Address(rax, 8));
 486   subsd(xmm5, xmm3);
 487   subsd(xmm3, xmm4);
 488   addsd(xmm1, Address(rax, 16));
 489   mulpd(xmm6, xmm2);
 490   addsd(xmm5, xmm0);
 491   addsd(xmm3, xmm7);
 492   addsd(xmm1, xmm5);
 493   addsd(xmm1, xmm3);
 494   addsd(xmm1, xmm6);
 495   unpckhpd(xmm6, xmm6);
 496   movdqu(xmm0, xmm4);
 497   addsd(xmm1, xmm6);
 498   addsd(xmm0, xmm1);
 499   jmp(B1_4);
 500 
 501   bind(L_2TAG_PACKET_0_0_1);
 502   jcc(Assembler::greater, L_2TAG_PACKET_1_0_1);
 503   shrl(eax, 20);
 504   cmpl(eax, 3325);
 505   jcc(Assembler::notEqual, L_2TAG_PACKET_2_0_1);
 506   mulsd(xmm0, ExternalAddress(ALL_ONES));    //0xffffffffUL, 0x3fefffffUL
 507   jmp(B1_4);
 508 
 509   bind(L_2TAG_PACKET_2_0_1);
 510   movq(xmm3, ExternalAddress(TWO_POW_55));    //0x00000000UL, 0x43600000UL
 511   mulsd(xmm3, xmm0);
 512   subsd(xmm3, xmm0);
 513   mulsd(xmm3, ExternalAddress(TWO_POW_M55));    //0x00000000UL, 0x3c800000UL
 514   jmp(B1_4);
 515 
 516   bind(L_2TAG_PACKET_1_0_1);
 517   pextrw(eax, xmm0, 3);
 518   andl(eax, 32752);
 519   cmpl(eax, 32752);
 520   jcc(Assembler::equal, L_2TAG_PACKET_3_0_1);
 521   pextrw(ecx, xmm0, 3);
 522   andl(ecx, 32752);
 523   subl(ecx, 16224);
 524   shrl(ecx, 7);
 525   andl(ecx, 65532);
 526   lea(r11, ExternalAddress(PI_INV_TABLE));
 527   addq(rcx, r11);
 528   movdq(rax, xmm0);
 529   movl(r10, Address(rcx, 20));
 530   movl(r8, Address(rcx, 24));
 531   movl(edx, eax);
 532   shrq(rax, 21);
 533   orl(eax, INT_MIN);
 534   shrl(eax, 11);
 535   movl(r9, r10);
 536   imulq(r10, rdx);
 537   imulq(r9, rax);
 538   imulq(r8, rax);
 539   movl(rsi, Address(rcx, 16));
 540   movl(rdi, Address(rcx, 12));
 541   movl(r11, r10);
 542   shrq(r10, 32);
 543   addq(r9, r10);
 544   addq(r11, r8);
 545   movl(r8, r11);
 546   shrq(r11, 32);
 547   addq(r9, r11);
 548   movl(r10, rsi);
 549   imulq(rsi, rdx);
 550   imulq(r10, rax);
 551   movl(r11, rdi);
 552   imulq(rdi, rdx);
 553   movl(ebx, rsi);
 554   shrq(rsi, 32);
 555   addq(r9, rbx);
 556   movl(ebx, r9);
 557   shrq(r9, 32);
 558   addq(r10, rsi);
 559   addq(r10, r9);
 560   shlq(rbx, 32);
 561   orq(r8, rbx);
 562   imulq(r11, rax);
 563   movl(r9, Address(rcx, 8));
 564   movl(rsi, Address(rcx, 4));
 565   movl(ebx, rdi);
 566   shrq(rdi, 32);
 567   addq(r10, rbx);
 568   movl(ebx, r10);
 569   shrq(r10, 32);
 570   addq(r11, rdi);
 571   addq(r11, r10);
 572   movq(rdi, r9);
 573   imulq(r9, rdx);
 574   imulq(rdi, rax);
 575   movl(r10, r9);
 576   shrq(r9, 32);
 577   addq(r11, r10);
 578   movl(r10, r11);
 579   shrq(r11, 32);
 580   addq(rdi, r9);
 581   addq(rdi, r11);
 582   movq(r9, rsi);
 583   imulq(rsi, rdx);
 584   imulq(r9, rax);
 585   shlq(r10, 32);
 586   orq(r10, rbx);
 587   movl(eax, Address(rcx, 0));
 588   movl(r11, rsi);
 589   shrq(rsi, 32);
 590   addq(rdi, r11);
 591   movl(r11, rdi);
 592   shrq(rdi, 32);
 593   addq(r9, rsi);
 594   addq(r9, rdi);
 595   imulq(rdx, rax);
 596   pextrw(ebx, xmm0, 3);
 597   lea(rdi, ExternalAddress(PI_INV_TABLE));
 598   subq(rcx, rdi);
 599   addl(ecx, ecx);
 600   addl(ecx, ecx);
 601   addl(ecx, ecx);
 602   addl(ecx, 19);
 603   movl(rsi, 32768);
 604   andl(rsi, ebx);
 605   shrl(ebx, 4);
 606   andl(ebx, 2047);
 607   subl(ebx, 1023);
 608   subl(ecx, ebx);
 609   addq(r9, rdx);
 610   movl(edx, ecx);
 611   addl(edx, 32);
 612   cmpl(ecx, 1);
 613   jcc(Assembler::less, L_2TAG_PACKET_4_0_1);
 614   negl(ecx);
 615   addl(ecx, 29);
 616   shll(r9);
 617   movl(rdi, r9);
 618   andl(r9, 536870911);
 619   testl(r9, 268435456);
 620   jcc(Assembler::notEqual, L_2TAG_PACKET_5_0_1);
 621   shrl(r9);
 622   movl(ebx, 0);
 623   shlq(r9, 32);
 624   orq(r9, r11);
 625 
 626   bind(L_2TAG_PACKET_6_0_1);
 627 
 628   bind(L_2TAG_PACKET_7_0_1);
 629 
 630   cmpq(r9, 0);
 631   jcc(Assembler::equal, L_2TAG_PACKET_8_0_1);
 632 
 633   bind(L_2TAG_PACKET_9_0_1);
 634   bsrq(r11, r9);
 635   movl(ecx, 29);
 636   subl(ecx, r11);
 637   jcc(Assembler::lessEqual, L_2TAG_PACKET_10_0_1);
 638   shlq(r9);
 639   movq(rax, r10);
 640   shlq(r10);
 641   addl(edx, ecx);
 642   negl(ecx);
 643   addl(ecx, 64);
 644   shrq(rax);
 645   shrq(r8);
 646   orq(r9, rax);
 647   orq(r10, r8);
 648 
 649   bind(L_2TAG_PACKET_11_0_1);
 650   cvtsi2sdq(xmm0, r9);
 651   shrq(r10, 1);
 652   cvtsi2sdq(xmm3, r10);
 653   xorpd(xmm4, xmm4);
 654   shll(edx, 4);
 655   negl(edx);
 656   addl(edx, 16368);
 657   orl(edx, rsi);
 658   xorl(edx, ebx);
 659   pinsrw(xmm4, edx, 3);
 660   movq(xmm2, ExternalAddress(PI_4));    //0x40000000UL, 0x3fe921fbUL, 0x18469899UL, 0x3e64442dUL
 661   movq(xmm6, ExternalAddress(8 + PI_4));    //0x3fe921fbUL, 0x18469899UL, 0x3e64442dUL
 662   xorpd(xmm5, xmm5);
 663   subl(edx, 1008);
 664   pinsrw(xmm5, edx, 3);
 665   mulsd(xmm0, xmm4);
 666   shll(rsi, 16);
 667   sarl(rsi, 31);
 668   mulsd(xmm3, xmm5);
 669   movdqu(xmm1, xmm0);
 670   mulsd(xmm0, xmm2);
 671   shrl(rdi, 29);
 672   addsd(xmm1, xmm3);
 673   mulsd(xmm3, xmm2);
 674   addl(rdi, rsi);
 675   xorl(rdi, rsi);
 676   mulsd(xmm6, xmm1);
 677   movl(eax, rdi);
 678   addsd(xmm6, xmm3);
 679   movdqu(xmm2, xmm0);
 680   addsd(xmm0, xmm6);
 681   subsd(xmm2, xmm0);
 682   addsd(xmm6, xmm2);
 683 
 684   bind(L_2TAG_PACKET_12_0_1);
 685   movq(xmm1, ExternalAddress(PI32INV));    //0x6dc9c883UL, 0x40245f30UL
 686   mulsd(xmm1, xmm0);
 687   movq(xmm5, ExternalAddress(ONEHALF));    //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
 688   movq(xmm4, ExternalAddress(SIGN_MASK));    //0x00000000UL, 0x80000000UL
 689   pand(xmm4, xmm0);
 690   por(xmm5, xmm4);
 691   addpd(xmm1, xmm5);
 692   cvttsd2sil(edx, xmm1);
 693   cvtsi2sdl(xmm1, edx);
 694   movq(xmm3, ExternalAddress(P_1));    //0x54400000UL, 0x3fb921fbUL
 695   movdqu(xmm2, ExternalAddress(P_2));    //0x1a600000UL, 0x3d90b461UL, 0x1a600000UL, 0x3d90b461UL
 696   mulsd(xmm3, xmm1);
 697   unpcklpd(xmm1, xmm1);
 698   shll(eax, 3);
 699   addl(edx, 1865216);
 700   movdqu(xmm4, xmm0);
 701   addl(edx, eax);
 702   andl(edx, 63);
 703   movdqu(xmm5, ExternalAddress(SC_4));    //0x54400000UL, 0x3fb921fbUL
 704   lea(rax, ExternalAddress(Ctable));
 705   shll(edx, 5);
 706   addq(rax, rdx);
 707   mulpd(xmm2, xmm1);
 708   subsd(xmm0, xmm3);
 709   mulsd(xmm1, ExternalAddress(P_3));    //0x2e037073UL, 0x3b63198aUL
 710   subsd(xmm4, xmm3);
 711   movq(xmm7, Address(rax, 8));
 712   unpcklpd(xmm0, xmm0);
 713   movdqu(xmm3, xmm4);
 714   subsd(xmm4, xmm2);
 715   mulpd(xmm5, xmm0);
 716   subpd(xmm0, xmm2);
 717   mulsd(xmm7, xmm4);
 718   subsd(xmm3, xmm4);
 719   mulpd(xmm5, xmm0);
 720   mulpd(xmm0, xmm0);
 721   subsd(xmm3, xmm2);
 722   movdqu(xmm2, Address(rax, 0));
 723   subsd(xmm1, xmm3);
 724   movq(xmm3, Address(rax, 24));
 725   addsd(xmm2, xmm3);
 726   subsd(xmm7, xmm2);
 727   subsd(xmm1, xmm6);
 728   movdqu(xmm6, ExternalAddress(SC_2));    //0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL
 729   mulsd(xmm2, xmm4);
 730   mulpd(xmm6, xmm0);
 731   mulsd(xmm3, xmm4);
 732   mulpd(xmm2, xmm0);
 733   mulpd(xmm0, xmm0);
 734   addpd(xmm5, ExternalAddress(SC_3));    //0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL
 735   mulsd(xmm4, Address(rax, 0));
 736   addpd(xmm6, ExternalAddress(SC_1));    //0x55555555UL, 0xbfc55555UL, 0x00000000UL, 0xbfe00000UL
 737   mulpd(xmm5, xmm0);
 738   movdqu(xmm0, xmm3);
 739   addsd(xmm3, Address(rax, 8));
 740   mulpd(xmm1, xmm7);
 741   movdqu(xmm7, xmm4);
 742   addsd(xmm4, xmm3);
 743   addpd(xmm6, xmm5);
 744   movq(xmm5, Address(rax, 8));
 745   subsd(xmm5, xmm3);
 746   subsd(xmm3, xmm4);
 747   addsd(xmm1, Address(rax, 16));
 748   mulpd(xmm6, xmm2);
 749   addsd(xmm5, xmm0);
 750   addsd(xmm3, xmm7);
 751   addsd(xmm1, xmm5);
 752   addsd(xmm1, xmm3);
 753   addsd(xmm1, xmm6);
 754   unpckhpd(xmm6, xmm6);
 755   movdqu(xmm0, xmm4);
 756   addsd(xmm1, xmm6);
 757   addsd(xmm0, xmm1);
 758   jmp(B1_4);
 759 
 760   bind(L_2TAG_PACKET_8_0_1);
 761   addl(edx, 64);
 762   movq(r9, r10);
 763   movq(r10, r8);
 764   movl(r8, 0);
 765   cmpq(r9, 0);
 766   jcc(Assembler::notEqual, L_2TAG_PACKET_9_0_1);
 767   addl(edx, 64);
 768   movq(r9, r10);
 769   movq(r10, r8);
 770   cmpq(r9, 0);
 771   jcc(Assembler::notEqual, L_2TAG_PACKET_9_0_1);
 772   xorpd(xmm0, xmm0);
 773   xorpd(xmm6, xmm6);
 774   jmp(L_2TAG_PACKET_12_0_1);
 775 
 776   bind(L_2TAG_PACKET_10_0_1);
 777   jcc(Assembler::equal, L_2TAG_PACKET_11_0_1);
 778   negl(ecx);
 779   shrq(r10);
 780   movq(rax, r9);
 781   shrq(r9);
 782   subl(edx, ecx);
 783   negl(ecx);
 784   addl(ecx, 64);
 785   shlq(rax);
 786   orq(r10, rax);
 787   jmp(L_2TAG_PACKET_11_0_1);
 788 
 789   bind(L_2TAG_PACKET_4_0_1);
 790   negl(ecx);
 791   shlq(r9, 32);
 792   orq(r9, r11);
 793   shlq(r9);
 794   movq(rdi, r9);
 795   testl(r9, INT_MIN);
 796   jcc(Assembler::notEqual, L_2TAG_PACKET_13_0_1);
 797   shrl(r9);
 798   movl(ebx, 0);
 799   shrq(rdi, 3);
 800   jmp(L_2TAG_PACKET_7_0_1);
 801 
 802   bind(L_2TAG_PACKET_5_0_1);
 803   shrl(r9);
 804   movl(ebx, 536870912);
 805   shrl(ebx);
 806   shlq(r9, 32);
 807   orq(r9, r11);
 808   shlq(rbx, 32);
 809   addl(rdi, 536870912);
 810   movl(rcx, 0);
 811   movl(r11, 0);
 812   subq(rcx, r8);
 813   sbbq(r11, r10);
 814   sbbq(rbx, r9);
 815   movq(r8, rcx);
 816   movq(r10, r11);
 817   movq(r9, rbx);
 818   movl(ebx, 32768);
 819   jmp(L_2TAG_PACKET_6_0_1);
 820 
 821   bind(L_2TAG_PACKET_13_0_1);
 822   shrl(r9);
 823   mov64(rbx, 0x100000000);
 824   shrq(rbx);
 825   movl(rcx, 0);
 826   movl(r11, 0);
 827   subq(rcx, r8);
 828   sbbq(r11, r10);
 829   sbbq(rbx, r9);
 830   movq(r8, rcx);
 831   movq(r10, r11);
 832   movq(r9, rbx);
 833   movl(ebx, 32768);
 834   shrq(rdi, 3);
 835   addl(rdi, 536870912);
 836   jmp(L_2TAG_PACKET_7_0_1);
 837 
 838   bind(L_2TAG_PACKET_3_0_1);
 839   movq(xmm0, Address(rsp, 8));
 840   mulsd(xmm0, ExternalAddress(NEG_ZERO));    //0x00000000UL, 0x80000000UL
 841   movq(Address(rsp, 0), xmm0);
 842 
 843   bind(L_2TAG_PACKET_14_0_1);
 844 
 845   bind(B1_4);
 846   addq(rsp, 16);
 847   pop(rbx);
 848 }
 849 #else
 850 // The 32 bit code is at most SSE2 compliant
 851 ATTRIBUTE_ALIGNED(8) juint _zero_none[] =
 852 {
 853     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL
 854 };
 855 
 856 ATTRIBUTE_ALIGNED(4) juint __4onpi_d[] =
 857 {
 858     0x6dc9c883UL, 0x3ff45f30UL
 859 };
 860 
 861 ATTRIBUTE_ALIGNED(4) juint _TWO_32H[] =
 862 {
 863     0x00000000UL, 0x41f80000UL
 864 };
 865 
 866 ATTRIBUTE_ALIGNED(4) juint _pi04_3d[] =
 867 {
 868     0x54442d00UL, 0x3fe921fbUL, 0x98cc5180UL, 0x3ce84698UL, 0xcbb5bf6cUL,
 869     0xb9dfc8f8UL
 870 };
 871 
 872 ATTRIBUTE_ALIGNED(4) juint _pi04_5d[] =
 873 {
 874     0x54400000UL, 0x3fe921fbUL, 0x1a600000UL, 0x3dc0b461UL, 0x2e000000UL,
 875     0x3b93198aUL, 0x25200000UL, 0x396b839aUL, 0x533e63a0UL, 0x37027044UL
 876 };
 877 
 878 ATTRIBUTE_ALIGNED(4) juint _SCALE[] =
 879 {
 880     0x00000000UL, 0x32600000UL
 881 };
 882 
 883 ATTRIBUTE_ALIGNED(4) juint _zeros[] =
 884 {
 885     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL
 886 };
 887 
 888 ATTRIBUTE_ALIGNED(4) juint _pi04_2d[] =
 889 {
 890     0x54400000UL, 0x3fe921fbUL, 0x1a626331UL, 0x3dc0b461UL
 891 };
 892 
 893 ATTRIBUTE_ALIGNED(4) juint _TWO_12H[] =
 894 {
 895     0x00000000UL, 0x40b80000UL
 896 };
 897 
 898 ATTRIBUTE_ALIGNED(2) jushort __4onpi_31l[] =
 899 {
 900     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x836e, 0xa2f9,
 901     0x40d8, 0x0000, 0x0000, 0x0000, 0x2a50, 0x9c88, 0x40b7, 0x0000, 0x0000, 0x0000,
 902     0xabe8, 0xfe13, 0x4099, 0x0000, 0x0000, 0x0000, 0x6ee0, 0xfa9a, 0x4079, 0x0000,
 903     0x0000, 0x0000, 0x9580, 0xdb62, 0x4058, 0x0000, 0x0000, 0x0000, 0x1c82, 0xc9e2,
 904     0x403d, 0x0000, 0x0000, 0x0000, 0xb1c0, 0xff28, 0x4019, 0x0000, 0x0000, 0x0000,
 905     0xef14, 0xaf7a, 0x3ffe, 0x0000, 0x0000, 0x0000, 0x48dc, 0xc36e, 0x3fdf, 0x0000,
 906     0x0000, 0x0000, 0x3740, 0xe909, 0x3fbe, 0x0000, 0x0000, 0x0000, 0x924a, 0xb801,
 907     0x3fa2, 0x0000, 0x0000, 0x0000, 0x3a32, 0xdd41, 0x3f83, 0x0000, 0x0000, 0x0000,
 908     0x8778, 0x873f, 0x3f62, 0x0000, 0x0000, 0x0000, 0x1298, 0xb1cb, 0x3f44, 0x0000,
 909     0x0000, 0x0000, 0xa208, 0x9cfb, 0x3f26, 0x0000, 0x0000, 0x0000, 0xbaec, 0xd7d4,
 910     0x3f06, 0x0000, 0x0000, 0x0000, 0xd338, 0x8909, 0x3ee7, 0x0000, 0x0000, 0x0000,
 911     0x68b8, 0xe04d, 0x3ec7, 0x0000, 0x0000, 0x0000, 0x4e64, 0xdf90, 0x3eaa, 0x0000,
 912     0x0000, 0x0000, 0xc1a8, 0xeb1c, 0x3e89, 0x0000, 0x0000, 0x0000, 0x2720, 0xce7d,
 913     0x3e6a, 0x0000, 0x0000, 0x0000, 0x77b8, 0x8bf1, 0x3e4b, 0x0000, 0x0000, 0x0000,
 914     0xec7e, 0xe4a0, 0x3e2e, 0x0000, 0x0000, 0x0000, 0xffbc, 0xf12f, 0x3e0f, 0x0000,
 915     0x0000, 0x0000, 0xfdc0, 0xb301, 0x3deb, 0x0000, 0x0000, 0x0000, 0xc5ac, 0x9788,
 916     0x3dd1, 0x0000, 0x0000, 0x0000, 0x47da, 0x829b, 0x3db2, 0x0000, 0x0000, 0x0000,
 917     0xd9e4, 0xa6cf, 0x3d93, 0x0000, 0x0000, 0x0000, 0x36e8, 0xf961, 0x3d73, 0x0000,
 918     0x0000, 0x0000, 0xf668, 0xf463, 0x3d54, 0x0000, 0x0000, 0x0000, 0x5168, 0xf2ff,
 919     0x3d35, 0x0000, 0x0000, 0x0000, 0x758e, 0xea4f, 0x3d17, 0x0000, 0x0000, 0x0000,
 920     0xf17a, 0xebe5, 0x3cf8, 0x0000, 0x0000, 0x0000, 0x9cfa, 0x9e83, 0x3cd9, 0x0000,
 921     0x0000, 0x0000, 0xa4ba, 0xe294, 0x3cba, 0x0000, 0x0000, 0x0000, 0xd7ec, 0x9afe,
 922     0x3c9a, 0x0000, 0x0000, 0x0000, 0xae80, 0x8fc6, 0x3c79, 0x0000, 0x0000, 0x0000,
 923     0x3304, 0x8560, 0x3c5c, 0x0000, 0x0000, 0x0000, 0x6d70, 0xdf8f, 0x3c3b, 0x0000,
 924     0x0000, 0x0000, 0x3ef0, 0xafc3, 0x3c1e, 0x0000, 0x0000, 0x0000, 0xd0d8, 0x826b,
 925     0x3bfe, 0x0000, 0x0000, 0x0000, 0x1c80, 0xed4f, 0x3bdd, 0x0000, 0x0000, 0x0000,
 926     0x730c, 0xb0af, 0x3bc1, 0x0000, 0x0000, 0x0000, 0x6660, 0xc219, 0x3ba2, 0x0000,
 927     0x0000, 0x0000, 0x940c, 0xabe2, 0x3b83, 0x0000, 0x0000, 0x0000, 0xdffc, 0x8408,
 928     0x3b64, 0x0000, 0x0000, 0x0000, 0x6b98, 0xc402, 0x3b45, 0x0000, 0x0000, 0x0000,
 929     0x1818, 0x9cc4, 0x3b26, 0x0000, 0x0000, 0x0000, 0x5390, 0xaab6, 0x3b05, 0x0000,
 930     0x0000, 0x0000, 0xb070, 0xd464, 0x3ae9, 0x0000, 0x0000, 0x0000, 0x231a, 0x9ef0,
 931     0x3aca, 0x0000, 0x0000, 0x0000, 0x0670, 0xd1f1, 0x3aaa, 0x0000, 0x0000, 0x0000,
 932     0x7738, 0xd9f3, 0x3a8a, 0x0000, 0x0000, 0x0000, 0xa834, 0x8092, 0x3a6c, 0x0000,
 933     0x0000, 0x0000, 0xb45c, 0xce23, 0x3a4d, 0x0000, 0x0000, 0x0000, 0x36e8, 0xb0e5,
 934     0x3a2d, 0x0000, 0x0000, 0x0000, 0xd156, 0xaf44, 0x3a10, 0x0000, 0x0000, 0x0000,
 935     0x9f52, 0x8c82, 0x39f1, 0x0000, 0x0000, 0x0000, 0x829c, 0xff83, 0x39d1, 0x0000,
 936     0x0000, 0x0000, 0x7d06, 0xefc6, 0x39b3, 0x0000, 0x0000, 0x0000, 0x93e0, 0xb0b7,
 937     0x3992, 0x0000, 0x0000, 0x0000, 0xedde, 0xc193, 0x3975, 0x0000, 0x0000, 0x0000,
 938     0xbbc0, 0xcf49, 0x3952, 0x0000, 0x0000, 0x0000, 0xbdf0, 0xd63c, 0x3937, 0x0000,
 939     0x0000, 0x0000, 0x1f34, 0x9f3a, 0x3918, 0x0000, 0x0000, 0x0000, 0x3f8e, 0xe579,
 940     0x38f9, 0x0000, 0x0000, 0x0000, 0x90c8, 0xc3f8, 0x38d9, 0x0000, 0x0000, 0x0000,
 941     0x48c0, 0xf8f8, 0x38b7, 0x0000, 0x0000, 0x0000, 0xed56, 0xafa6, 0x389c, 0x0000,
 942     0x0000, 0x0000, 0x8218, 0xb969, 0x387d, 0x0000, 0x0000, 0x0000, 0x1852, 0xec57,
 943     0x385e, 0x0000, 0x0000, 0x0000, 0x670c, 0xd674, 0x383e, 0x0000, 0x0000, 0x0000,
 944     0xad40, 0xc2c4, 0x3820, 0x0000, 0x0000, 0x0000, 0x2e80, 0xa696, 0x3801, 0x0000,
 945     0x0000, 0x0000, 0xd800, 0xc467, 0x37dc, 0x0000, 0x0000, 0x0000, 0x3c72, 0xc5ae,
 946     0x37c3, 0x0000, 0x0000, 0x0000, 0xb006, 0xac69, 0x37a4, 0x0000, 0x0000, 0x0000,
 947     0x34a0, 0x8cdf, 0x3782, 0x0000, 0x0000, 0x0000, 0x9ed2, 0xd25e, 0x3766, 0x0000,
 948     0x0000, 0x0000, 0x6fec, 0xaaaa, 0x3747, 0x0000, 0x0000, 0x0000, 0x6040, 0xfb5c,
 949     0x3726, 0x0000, 0x0000, 0x0000, 0x764c, 0xa3fc, 0x3708, 0x0000, 0x0000, 0x0000,
 950     0xb254, 0x954e, 0x36e9, 0x0000, 0x0000, 0x0000, 0x3e1c, 0xf5dc, 0x36ca, 0x0000,
 951     0x0000, 0x0000, 0x7b06, 0xc635, 0x36ac, 0x0000, 0x0000, 0x0000, 0xa8ba, 0xd738,
 952     0x368d, 0x0000, 0x0000, 0x0000, 0x06cc, 0xb24e, 0x366d, 0x0000, 0x0000, 0x0000,
 953     0x7108, 0xac76, 0x364f, 0x0000, 0x0000, 0x0000, 0x2324, 0xa7cb, 0x3630, 0x0000,
 954     0x0000, 0x0000, 0xac40, 0xef15, 0x360f, 0x0000, 0x0000, 0x0000, 0xae46, 0xd516,
 955     0x35f2, 0x0000, 0x0000, 0x0000, 0x615e, 0xe003, 0x35d3, 0x0000, 0x0000, 0x0000,
 956     0x0cf0, 0xefe7, 0x35b1, 0x0000, 0x0000, 0x0000, 0xfb50, 0xf98c, 0x3595, 0x0000,
 957     0x0000, 0x0000, 0x0abc, 0xf333, 0x3575, 0x0000, 0x0000, 0x0000, 0xdd60, 0xca3f,
 958     0x3555, 0x0000, 0x0000, 0x0000, 0x7eb6, 0xd87f, 0x3538, 0x0000, 0x0000, 0x0000,
 959     0x44f4, 0xb291, 0x3519, 0x0000, 0x0000, 0x0000, 0xff80, 0xc982, 0x34f6, 0x0000,
 960     0x0000, 0x0000, 0x9de0, 0xd9b8, 0x34db, 0x0000, 0x0000, 0x0000, 0xcd42, 0x9366,
 961     0x34bc, 0x0000, 0x0000, 0x0000, 0xbef0, 0xfaee, 0x349d, 0x0000, 0x0000, 0x0000,
 962     0xdac4, 0xb6f1, 0x347d, 0x0000, 0x0000, 0x0000, 0xf140, 0x94de, 0x345d, 0x0000,
 963     0x0000, 0x0000, 0xa218, 0x8b4b, 0x343e, 0x0000, 0x0000, 0x0000, 0x6380, 0xa135,
 964     0x341e, 0x0000, 0x0000, 0x0000, 0xb184, 0x8cb2, 0x3402, 0x0000, 0x0000, 0x0000,
 965     0x196e, 0xdc61, 0x33e3, 0x0000, 0x0000, 0x0000, 0x0c00, 0xde05, 0x33c4, 0x0000,
 966     0x0000, 0x0000, 0xef9a, 0xbd38, 0x33a5, 0x0000, 0x0000, 0x0000, 0xc1a0, 0xdf00,
 967     0x3385, 0x0000, 0x0000, 0x0000, 0x1090, 0x9973, 0x3365, 0x0000, 0x0000, 0x0000,
 968     0x4882, 0x8301, 0x3348, 0x0000, 0x0000, 0x0000, 0x7abe, 0xadc7, 0x3329, 0x0000,
 969     0x0000, 0x0000, 0x7cba, 0xec2b, 0x330a, 0x0000, 0x0000, 0x0000, 0xa520, 0x8f21,
 970     0x32e9, 0x0000, 0x0000, 0x0000, 0x710c, 0x8d36, 0x32cc, 0x0000, 0x0000, 0x0000,
 971     0x5212, 0xc6ed, 0x32ad, 0x0000, 0x0000, 0x0000, 0x7308, 0xfd76, 0x328d, 0x0000,
 972     0x0000, 0x0000, 0x5014, 0xd548, 0x326f, 0x0000, 0x0000, 0x0000, 0xd3f2, 0xb499,
 973     0x3250, 0x0000, 0x0000, 0x0000, 0x7f74, 0xa606, 0x3230, 0x0000, 0x0000, 0x0000,
 974     0xf0a8, 0xd720, 0x3212, 0x0000, 0x0000, 0x0000, 0x185c, 0xe20f, 0x31f2, 0x0000,
 975     0x0000, 0x0000, 0xa5a8, 0x8738, 0x31d4, 0x0000, 0x0000, 0x0000, 0xdd74, 0xcafb,
 976     0x31b4, 0x0000, 0x0000, 0x0000, 0x98b6, 0xbd8e, 0x3196, 0x0000, 0x0000, 0x0000,
 977     0xe9de, 0x977f, 0x3177, 0x0000, 0x0000, 0x0000, 0x67c0, 0x818d, 0x3158, 0x0000,
 978     0x0000, 0x0000, 0xe52a, 0x9322, 0x3139, 0x0000, 0x0000, 0x0000, 0xe568, 0x9b6c,
 979     0x3119, 0x0000, 0x0000, 0x0000, 0x2358, 0xaa0a, 0x30fa, 0x0000, 0x0000, 0x0000,
 980     0xe480, 0xe13b, 0x30d9, 0x0000, 0x0000, 0x0000, 0x3024, 0x90a1, 0x30bd, 0x0000,
 981     0x0000, 0x0000, 0x9620, 0xda30, 0x309d, 0x0000, 0x0000, 0x0000, 0x898a, 0xb388,
 982     0x307f, 0x0000, 0x0000, 0x0000, 0xb24c, 0xc891, 0x3060, 0x0000, 0x0000, 0x0000,
 983     0x8056, 0xf98b, 0x3041, 0x0000, 0x0000, 0x0000, 0x72a4, 0xa1ea, 0x3021, 0x0000,
 984     0x0000, 0x0000, 0x6af8, 0x9488, 0x3001, 0x0000, 0x0000, 0x0000, 0xe00c, 0xdfcb,
 985     0x2fe4, 0x0000, 0x0000, 0x0000, 0xeeec, 0xc941, 0x2fc4, 0x0000, 0x0000, 0x0000,
 986     0x53e0, 0xe70f, 0x2fa4, 0x0000, 0x0000, 0x0000, 0x8f60, 0x9c07, 0x2f85, 0x0000,
 987     0x0000, 0x0000, 0xb328, 0xc3e7, 0x2f68, 0x0000, 0x0000, 0x0000, 0x9404, 0xf8c7,
 988     0x2f48, 0x0000, 0x0000, 0x0000, 0x38e0, 0xc99f, 0x2f29, 0x0000, 0x0000, 0x0000,
 989     0x9778, 0xd984, 0x2f09, 0x0000, 0x0000, 0x0000, 0xe700, 0xd142, 0x2eea, 0x0000,
 990     0x0000, 0x0000, 0xd904, 0x9443, 0x2ecd, 0x0000, 0x0000, 0x0000, 0xd4ba, 0xae7e,
 991     0x2eae, 0x0000, 0x0000, 0x0000, 0x8e5e, 0x8524, 0x2e8f, 0x0000, 0x0000, 0x0000,
 992     0xb550, 0xc9ed, 0x2e6e, 0x0000, 0x0000, 0x0000, 0x53b8, 0x8648, 0x2e51, 0x0000,
 993     0x0000, 0x0000, 0xdae4, 0x87f9, 0x2e32, 0x0000, 0x0000, 0x0000, 0x2942, 0xd966,
 994     0x2e13, 0x0000, 0x0000, 0x0000, 0x4f28, 0xcf3c, 0x2df3, 0x0000, 0x0000, 0x0000,
 995     0xfa40, 0xc4ef, 0x2dd1, 0x0000, 0x0000, 0x0000, 0x4424, 0xbca7, 0x2db5, 0x0000,
 996     0x0000, 0x0000, 0x2e62, 0xcdc5, 0x2d97, 0x0000, 0x0000, 0x0000, 0xed88, 0x996b,
 997     0x2d78, 0x0000, 0x0000, 0x0000, 0x7c30, 0xd97d, 0x2d56, 0x0000, 0x0000, 0x0000,
 998     0xed26, 0xbf6e, 0x2d3a, 0x0000, 0x0000, 0x0000, 0x2918, 0x921b, 0x2d1a, 0x0000,
 999     0x0000, 0x0000, 0x4e24, 0xe84e, 0x2cfb, 0x0000, 0x0000, 0x0000, 0x6dc0, 0x92ec,
1000     0x2cdd, 0x0000, 0x0000, 0x0000, 0x4f2c, 0xacf8, 0x2cbd, 0x0000, 0x0000, 0x0000,
1001     0xc634, 0xf094, 0x2c9e, 0x0000, 0x0000, 0x0000, 0xdc70, 0xe5d3, 0x2c7e, 0x0000,
1002     0x0000, 0x0000, 0x2180, 0xa600, 0x2c5b, 0x0000, 0x0000, 0x0000, 0x8480, 0xd680,
1003     0x2c3c, 0x0000, 0x0000, 0x0000, 0x8b24, 0xd63b, 0x2c22, 0x0000, 0x0000, 0x0000,
1004     0x02e0, 0xaa47, 0x2c00, 0x0000, 0x0000, 0x0000, 0x9ad0, 0xee84, 0x2be3, 0x0000,
1005     0x0000, 0x0000, 0xf7dc, 0xf699, 0x2bc6, 0x0000, 0x0000, 0x0000, 0xddde, 0xe490,
1006     0x2ba7, 0x0000, 0x0000, 0x0000, 0x34a0, 0xb4fd, 0x2b85, 0x0000, 0x0000, 0x0000,
1007     0x91b4, 0x8ef6, 0x2b68, 0x0000, 0x0000, 0x0000, 0xa3e0, 0xa2a7, 0x2b47, 0x0000,
1008     0x0000, 0x0000, 0xcce4, 0x82b3, 0x2b2a, 0x0000, 0x0000, 0x0000, 0xe4be, 0x8207,
1009     0x2b0c, 0x0000, 0x0000, 0x0000, 0x1d92, 0xab43, 0x2aed, 0x0000, 0x0000, 0x0000,
1010     0xe818, 0xf9f6, 0x2acd, 0x0000, 0x0000, 0x0000, 0xff12, 0xba80, 0x2aaf, 0x0000,
1011     0x0000, 0x0000, 0x5254, 0x8529, 0x2a90, 0x0000, 0x0000, 0x0000, 0x1b88, 0xe032,
1012     0x2a71, 0x0000, 0x0000, 0x0000, 0x3248, 0xd86d, 0x2a50, 0x0000, 0x0000, 0x0000,
1013     0x3140, 0xc9d5, 0x2a2e, 0x0000, 0x0000, 0x0000, 0x14e6, 0xbd47, 0x2a14, 0x0000,
1014     0x0000, 0x0000, 0x5c10, 0xe544, 0x29f4, 0x0000, 0x0000, 0x0000, 0x9f50, 0x90b6,
1015     0x29d4, 0x0000, 0x0000, 0x0000, 0x9850, 0xab55, 0x29b6, 0x0000, 0x0000, 0x0000,
1016     0x2750, 0x9d07, 0x2998, 0x0000, 0x0000, 0x0000, 0x6700, 0x8bbb, 0x2973, 0x0000,
1017     0x0000, 0x0000, 0x5dba, 0xed31, 0x295a, 0x0000, 0x0000, 0x0000, 0x61dc, 0x85fe,
1018     0x293a, 0x0000, 0x0000, 0x0000, 0x9ba2, 0xd6b4, 0x291c, 0x0000, 0x0000, 0x0000,
1019     0x2d30, 0xe3a5, 0x28fb, 0x0000, 0x0000, 0x0000, 0x6630, 0xb566, 0x28dd, 0x0000,
1020     0x0000, 0x0000, 0x5ad4, 0xa829, 0x28bf, 0x0000, 0x0000, 0x0000, 0x89d8, 0xe290,
1021     0x28a0, 0x0000, 0x0000, 0x0000, 0x3916, 0xc428, 0x2881, 0x0000, 0x0000, 0x0000,
1022     0x0490, 0xbea4, 0x2860, 0x0000, 0x0000, 0x0000, 0xee06, 0x80ee, 0x2843, 0x0000,
1023     0x0000, 0x0000, 0xfc00, 0xf327, 0x2820, 0x0000, 0x0000, 0x0000, 0xea40, 0xa871,
1024     0x2800, 0x0000, 0x0000, 0x0000, 0x63d8, 0x9c26, 0x27e4, 0x0000, 0x0000, 0x0000,
1025     0x07ba, 0xc0c9, 0x27c7, 0x0000, 0x0000, 0x0000, 0x3fa2, 0x9797, 0x27a8, 0x0000,
1026     0x0000, 0x0000, 0x21c6, 0xfeca, 0x2789, 0x0000, 0x0000, 0x0000, 0xde40, 0x860d,
1027     0x2768, 0x0000, 0x0000, 0x0000, 0x9cc8, 0x98ce, 0x2749, 0x0000, 0x0000, 0x0000,
1028     0x3778, 0xa31c, 0x272a, 0x0000, 0x0000, 0x0000, 0xe778, 0xf6e2, 0x270b, 0x0000,
1029     0x0000, 0x0000, 0x59b8, 0xf841, 0x26ed, 0x0000, 0x0000, 0x0000, 0x02e0, 0xad04,
1030     0x26cd, 0x0000, 0x0000, 0x0000, 0x5a92, 0x9380, 0x26b0, 0x0000, 0x0000, 0x0000,
1031     0xc740, 0x8886, 0x268d, 0x0000, 0x0000, 0x0000, 0x0680, 0xfaf8, 0x266c, 0x0000,
1032     0x0000, 0x0000, 0xfb60, 0x897f, 0x2653, 0x0000, 0x0000, 0x0000, 0x8760, 0xf903,
1033     0x2634, 0x0000, 0x0000, 0x0000, 0xad2a, 0xc2c8, 0x2615, 0x0000, 0x0000, 0x0000,
1034     0x2d86, 0x8aef, 0x25f6, 0x0000, 0x0000, 0x0000, 0x1ef4, 0xe627, 0x25d6, 0x0000,
1035     0x0000, 0x0000, 0x09e4, 0x8020, 0x25b7, 0x0000, 0x0000, 0x0000, 0x7548, 0xd227,
1036     0x2598, 0x0000, 0x0000, 0x0000, 0x75dc, 0xfb5b, 0x2579, 0x0000, 0x0000, 0x0000,
1037     0xea84, 0xc8b6, 0x255a, 0x0000, 0x0000, 0x0000, 0xe4d0, 0x8145, 0x253b, 0x0000,
1038     0x0000, 0x0000, 0x3640, 0x9768, 0x251c, 0x0000, 0x0000, 0x0000, 0x246a, 0xccec,
1039     0x24fe, 0x0000, 0x0000, 0x0000, 0x51d0, 0xa075, 0x24dd, 0x0000, 0x0000, 0x0000,
1040     0x4638, 0xa385, 0x24bf, 0x0000, 0x0000, 0x0000, 0xd788, 0xd776, 0x24a1, 0x0000,
1041     0x0000, 0x0000, 0x1370, 0x8997, 0x2482, 0x0000, 0x0000, 0x0000, 0x1e88, 0x9b67,
1042     0x2462, 0x0000, 0x0000, 0x0000, 0x6c08, 0xd975, 0x2444, 0x0000, 0x0000, 0x0000,
1043     0xfdb0, 0xcfc0, 0x2422, 0x0000, 0x0000, 0x0000, 0x3100, 0xc026, 0x2406, 0x0000,
1044     0x0000, 0x0000, 0xc5b4, 0xae64, 0x23e6, 0x0000, 0x0000, 0x0000, 0x2280, 0xf687,
1045     0x23c3, 0x0000, 0x0000, 0x0000, 0x2de0, 0x9006, 0x23a9, 0x0000, 0x0000, 0x0000,
1046     0x24bc, 0xf631, 0x238a, 0x0000, 0x0000, 0x0000, 0xb8d4, 0xa975, 0x236b, 0x0000,
1047     0x0000, 0x0000, 0xd9a4, 0xb949, 0x234b, 0x0000, 0x0000, 0x0000, 0xb54e, 0xbd39,
1048     0x232d, 0x0000, 0x0000, 0x0000, 0x4aac, 0x9a52, 0x230e, 0x0000, 0x0000, 0x0000,
1049     0xbbbc, 0xd085, 0x22ef, 0x0000, 0x0000, 0x0000, 0xdf18, 0xc633, 0x22cf, 0x0000,
1050     0x0000, 0x0000, 0x16d0, 0xeca5, 0x22af, 0x0000, 0x0000, 0x0000, 0xf2a0, 0xdf6f,
1051     0x228e, 0x0000, 0x0000, 0x0000, 0x8c44, 0xe86b, 0x2272, 0x0000, 0x0000, 0x0000,
1052     0x35c0, 0xbbf4, 0x2253, 0x0000, 0x0000, 0x0000, 0x0c40, 0xdafb, 0x2230, 0x0000,
1053     0x0000, 0x0000, 0x92dc, 0x9935, 0x2216, 0x0000, 0x0000, 0x0000, 0x0ca0, 0xbda6,
1054     0x21f3, 0x0000, 0x0000, 0x0000, 0x5958, 0xa6fd, 0x21d6, 0x0000, 0x0000, 0x0000,
1055     0xa3dc, 0x9d7f, 0x21b9, 0x0000, 0x0000, 0x0000, 0x79dc, 0xfcb5, 0x2199, 0x0000,
1056     0x0000, 0x0000, 0xf264, 0xcebb, 0x217b, 0x0000, 0x0000, 0x0000, 0x0abe, 0x8308,
1057     0x215c, 0x0000, 0x0000, 0x0000, 0x30ae, 0xb463, 0x213d, 0x0000, 0x0000, 0x0000,
1058     0x6228, 0xb040, 0x211c, 0x0000, 0x0000, 0x0000, 0xc9b2, 0xf43b, 0x20ff, 0x0000,
1059     0x0000, 0x0000, 0x3d8e, 0xa4b3, 0x20e0, 0x0000, 0x0000, 0x0000, 0x84e6, 0x8dab,
1060     0x20c1, 0x0000, 0x0000, 0x0000, 0xa124, 0x9b74, 0x20a1, 0x0000, 0x0000, 0x0000,
1061     0xc276, 0xd497, 0x2083, 0x0000, 0x0000, 0x0000, 0x6354, 0xa466, 0x2063, 0x0000,
1062     0x0000, 0x0000, 0x8654, 0xaf0a, 0x2044, 0x0000, 0x0000, 0x0000, 0x1d20, 0xfa5c,
1063     0x2024, 0x0000, 0x0000, 0x0000, 0xbcd0, 0xf3f0, 0x2004, 0x0000, 0x0000, 0x0000,
1064     0xedf0, 0xf0b6, 0x1fe7, 0x0000, 0x0000, 0x0000, 0x45bc, 0x9182, 0x1fc9, 0x0000,
1065     0x0000, 0x0000, 0xe254, 0xdc85, 0x1faa, 0x0000, 0x0000, 0x0000, 0xb898, 0xe9b1,
1066     0x1f8a, 0x0000, 0x0000, 0x0000, 0x0ebe, 0xe6f0, 0x1f6c, 0x0000, 0x0000, 0x0000,
1067     0xa9b8, 0xf584, 0x1f4c, 0x0000, 0x0000, 0x0000, 0x12e8, 0xdf6b, 0x1f2e, 0x0000,
1068     0x0000, 0x0000, 0x9f9e, 0xcd55, 0x1f0f, 0x0000, 0x0000, 0x0000, 0x05a0, 0xec3a,
1069     0x1eef, 0x0000, 0x0000, 0x0000, 0xd8e0, 0x96f8, 0x1ed1, 0x0000, 0x0000, 0x0000,
1070     0x3bd4, 0xccc6, 0x1eb1, 0x0000, 0x0000, 0x0000, 0x4910, 0xb87b, 0x1e93, 0x0000,
1071     0x0000, 0x0000, 0xbefc, 0xd40b, 0x1e73, 0x0000, 0x0000, 0x0000, 0x317e, 0xa406,
1072     0x1e55, 0x0000, 0x0000, 0x0000, 0x6bb2, 0xc2b2, 0x1e36, 0x0000, 0x0000, 0x0000,
1073     0xb87e, 0xbb78, 0x1e17, 0x0000, 0x0000, 0x0000, 0xa03c, 0xdbbd, 0x1df7, 0x0000,
1074     0x0000, 0x0000, 0x5b6c, 0xe3c8, 0x1dd9, 0x0000, 0x0000, 0x0000, 0x8968, 0xca8e,
1075     0x1dba, 0x0000, 0x0000, 0x0000, 0xc024, 0xe6ab, 0x1d9a, 0x0000, 0x0000, 0x0000,
1076     0x4110, 0xd4eb, 0x1d7a, 0x0000, 0x0000, 0x0000, 0xa168, 0xbdb5, 0x1d5d, 0x0000,
1077     0x0000, 0x0000, 0x012e, 0xa5fa, 0x1d3e, 0x0000, 0x0000, 0x0000, 0x6838, 0x9c1f,
1078     0x1d1e, 0x0000, 0x0000, 0x0000, 0xa158, 0xaa76, 0x1d00, 0x0000, 0x0000, 0x0000,
1079     0x090a, 0xbd95, 0x1ce1, 0x0000, 0x0000, 0x0000, 0xf73e, 0x8b6d, 0x1cc2, 0x0000,
1080     0x0000, 0x0000, 0x5fda, 0xbcbf, 0x1ca3, 0x0000, 0x0000, 0x0000, 0xdbe8, 0xb89f,
1081     0x1c84, 0x0000, 0x0000, 0x0000, 0x6e4c, 0x96c7, 0x1c64, 0x0000, 0x0000, 0x0000,
1082     0x19c2, 0xf2a4, 0x1c46, 0x0000, 0x0000, 0x0000, 0xb800, 0xf855, 0x1c1e, 0x0000,
1083     0x0000, 0x0000, 0x87fc, 0x85ff, 0x1c08, 0x0000, 0x0000, 0x0000, 0x1418, 0x839f,
1084     0x1be9, 0x0000, 0x0000, 0x0000, 0x6186, 0xd9d8, 0x1bca, 0x0000, 0x0000, 0x0000,
1085     0xf500, 0xabaa, 0x1ba6, 0x0000, 0x0000, 0x0000, 0x7b36, 0xdafe, 0x1b8c, 0x0000,
1086     0x0000, 0x0000, 0xf394, 0xe6d8, 0x1b6c, 0x0000, 0x0000, 0x0000, 0x6efc, 0x9e55,
1087     0x1b4e, 0x0000, 0x0000, 0x0000, 0x5e10, 0xc523, 0x1b2e, 0x0000, 0x0000, 0x0000,
1088     0x8210, 0xb6f9, 0x1b0d, 0x0000, 0x0000, 0x0000, 0x9ab0, 0x96e3, 0x1af1, 0x0000,
1089     0x0000, 0x0000, 0x3864, 0x92e7, 0x1ad1, 0x0000, 0x0000, 0x0000, 0x9878, 0xdc65,
1090     0x1ab1, 0x0000, 0x0000, 0x0000, 0xfa20, 0xd6cb, 0x1a94, 0x0000, 0x0000, 0x0000,
1091     0x6c00, 0xa4e4, 0x1a70, 0x0000, 0x0000, 0x0000, 0xab40, 0xb41b, 0x1a53, 0x0000,
1092     0x0000, 0x0000, 0x43a4, 0x8ede, 0x1a37, 0x0000, 0x0000, 0x0000, 0x22e0, 0x9314,
1093     0x1a15, 0x0000, 0x0000, 0x0000, 0x6170, 0xb949, 0x19f8, 0x0000, 0x0000, 0x0000,
1094     0x6b00, 0xe056, 0x19d8, 0x0000, 0x0000, 0x0000, 0x9ba8, 0xa94c, 0x19b9, 0x0000,
1095     0x0000, 0x0000, 0xfaa0, 0xaa16, 0x199b, 0x0000, 0x0000, 0x0000, 0x899a, 0xf627,
1096     0x197d, 0x0000, 0x0000, 0x0000, 0x9f20, 0xfb70, 0x195d, 0x0000, 0x0000, 0x0000,
1097     0xa4b8, 0xc176, 0x193e, 0x0000, 0x0000, 0x0000, 0xb21c, 0x85c3, 0x1920, 0x0000,
1098     0x0000, 0x0000, 0x50d2, 0x9b19, 0x1901, 0x0000, 0x0000, 0x0000, 0xd4b0, 0xb708,
1099     0x18e0, 0x0000, 0x0000, 0x0000, 0xfb88, 0xf510, 0x18c1, 0x0000, 0x0000, 0x0000,
1100     0x31ec, 0xdc8d, 0x18a3, 0x0000, 0x0000, 0x0000, 0x3c00, 0xbff9, 0x1885, 0x0000,
1101     0x0000, 0x0000, 0x5020, 0xc30b, 0x1862, 0x0000, 0x0000, 0x0000, 0xd4f0, 0xda0c,
1102     0x1844, 0x0000, 0x0000, 0x0000, 0x20d2, 0x99a5, 0x1828, 0x0000, 0x0000, 0x0000,
1103     0x852e, 0xd159, 0x1809, 0x0000, 0x0000, 0x0000, 0x7cd8, 0x97a1, 0x17e9, 0x0000,
1104     0x0000, 0x0000, 0x423a, 0x997b, 0x17cb, 0x0000, 0x0000, 0x0000, 0xc1c0, 0xbe7d,
1105     0x17a8, 0x0000, 0x0000, 0x0000, 0xe8bc, 0xdcdd, 0x178d, 0x0000, 0x0000, 0x0000,
1106     0x8b28, 0xae06, 0x176e, 0x0000, 0x0000, 0x0000, 0x102e, 0xb8d4, 0x174f, 0x0000,
1107     0x0000, 0x0000, 0xaa00, 0xaa5c, 0x172f, 0x0000, 0x0000, 0x0000, 0x51f0, 0x9fc0,
1108     0x170e, 0x0000, 0x0000, 0x0000, 0xf858, 0xe181, 0x16f2, 0x0000, 0x0000, 0x0000,
1109     0x91a8, 0x8162, 0x16d3, 0x0000, 0x0000, 0x0000, 0x5f40, 0xcb6f, 0x16b1, 0x0000,
1110     0x0000, 0x0000, 0xbb50, 0xe55f, 0x1693, 0x0000, 0x0000, 0x0000, 0xacd2, 0xd895,
1111     0x1676, 0x0000, 0x0000, 0x0000, 0xef30, 0x97bf, 0x1654, 0x0000, 0x0000, 0x0000,
1112     0xf700, 0xb3d7, 0x1633, 0x0000, 0x0000, 0x0000, 0x3454, 0xa7b5, 0x1619, 0x0000,
1113     0x0000, 0x0000, 0x6b00, 0xa929, 0x15f6, 0x0000, 0x0000, 0x0000, 0x9f04, 0x89f7,
1114     0x15db, 0x0000, 0x0000, 0x0000, 0xad78, 0xd985, 0x15bc, 0x0000, 0x0000, 0x0000,
1115     0xa46a, 0xae3f, 0x159d, 0x0000, 0x0000, 0x0000, 0x63a0, 0xd0da, 0x157c, 0x0000,
1116     0x0000, 0x0000, 0x5e90, 0x817d, 0x155e, 0x0000, 0x0000, 0x0000, 0x1494, 0xb13f,
1117     0x1540, 0x0000, 0x0000, 0x0000, 0x0090, 0x9c40, 0x1521, 0x0000, 0x0000, 0x0000,
1118     0xdd70, 0xcc86, 0x1500, 0x0000, 0x0000, 0x0000, 0x64f8, 0xdb6f, 0x14e1, 0x0000,
1119     0x0000, 0x0000, 0xe22c, 0xac17, 0x14c3, 0x0000, 0x0000, 0x0000, 0x60e0, 0xa9ad,
1120     0x14a3, 0x0000, 0x0000, 0x0000, 0x4640, 0xd658, 0x1481, 0x0000, 0x0000, 0x0000,
1121     0x6490, 0xa181, 0x1467, 0x0000, 0x0000, 0x0000, 0x1df4, 0xaaa2, 0x1447, 0x0000,
1122     0x0000, 0x0000, 0xb94a, 0x8f61, 0x1429, 0x0000, 0x0000, 0x0000, 0x5198, 0x9d83,
1123     0x1409, 0x0000, 0x0000, 0x0000, 0x0f7a, 0xa818, 0x13eb, 0x0000, 0x0000, 0x0000,
1124     0xc45e, 0xc06c, 0x13cc, 0x0000, 0x0000, 0x0000, 0x4ec0, 0xfa29, 0x13a8, 0x0000,
1125     0x0000, 0x0000, 0x6418, 0x8cad, 0x138c, 0x0000, 0x0000, 0x0000, 0xbcc8, 0xe7d1,
1126     0x136f, 0x0000, 0x0000, 0x0000, 0xc934, 0xf9b0, 0x134f, 0x0000, 0x0000, 0x0000,
1127     0x6ce0, 0x98df, 0x1331, 0x0000, 0x0000, 0x0000, 0x3516, 0xe5e9, 0x1312, 0x0000,
1128     0x0000, 0x0000, 0xc6c0, 0xef8b, 0x12ef, 0x0000, 0x0000, 0x0000, 0xaf02, 0x913d,
1129     0x12d4, 0x0000, 0x0000, 0x0000, 0xd230, 0xe1d5, 0x12b5, 0x0000, 0x0000, 0x0000,
1130     0xfba8, 0xc232, 0x1295, 0x0000, 0x0000, 0x0000, 0x7ba4, 0xabeb, 0x1277, 0x0000,
1131     0x0000, 0x0000, 0x6e5c, 0xc692, 0x1258, 0x0000, 0x0000, 0x0000, 0x76a2, 0x9756,
1132     0x1239, 0x0000, 0x0000, 0x0000, 0xe180, 0xe423, 0x1214, 0x0000, 0x0000, 0x0000,
1133     0x8c3c, 0x90f8, 0x11fb, 0x0000, 0x0000, 0x0000, 0x9f3c, 0x9fd2, 0x11dc, 0x0000,
1134     0x0000, 0x0000, 0x53e0, 0xb73e, 0x11bd, 0x0000, 0x0000, 0x0000, 0x45be, 0x88d6,
1135     0x119e, 0x0000, 0x0000, 0x0000, 0x111a, 0x8bc0, 0x117f, 0x0000, 0x0000, 0x0000,
1136     0xe26a, 0xd7ff, 0x1160, 0x0000, 0x0000, 0x0000, 0xfb60, 0xdd8d, 0x113f, 0x0000,
1137     0x0000, 0x0000, 0x9370, 0xc108, 0x1120, 0x0000, 0x0000, 0x0000, 0x9654, 0x8baf,
1138     0x1103, 0x0000, 0x0000, 0x0000, 0xd6ec, 0xd6b9, 0x10e4, 0x0000, 0x0000, 0x0000,
1139     0x23e4, 0xd7b7, 0x10c4, 0x0000, 0x0000, 0x0000, 0x1aa6, 0xa847, 0x10a6, 0x0000,
1140     0x0000, 0x0000, 0xbee6, 0x9fef, 0x1087, 0x0000, 0x0000, 0x0000, 0x26d0, 0xa6eb,
1141     0x1066, 0x0000, 0x0000, 0x0000, 0x5b86, 0xa880, 0x1049, 0x0000, 0x0000, 0x0000,
1142     0x125c, 0xd971, 0x1029, 0x0000, 0x0000, 0x0000, 0x1f78, 0x9d18, 0x100a, 0x0000,
1143     0x0000, 0x0000, 0x0e84, 0xb15b, 0x0feb, 0x0000, 0x0000, 0x0000, 0xd0c0, 0xc150,
1144     0x0fcc, 0x0000, 0x0000, 0x0000, 0xa330, 0xc40c, 0x0fad, 0x0000, 0x0000, 0x0000,
1145     0x5202, 0xfc2c, 0x0f8f, 0x0000, 0x0000, 0x0000, 0x3f7c, 0xecf5, 0x0f6f, 0x0000,
1146     0x0000, 0x0000, 0xef44, 0xfdfd, 0x0f50, 0x0000, 0x0000, 0x0000, 0x3f6c, 0xab1b,
1147     0x0f31, 0x0000, 0x0000, 0x0000, 0xf658, 0x89ec, 0x0f11, 0x0000, 0x0000, 0x0000,
1148     0xbfc8, 0x9ba8, 0x0ef4, 0x0000, 0x0000, 0x0000, 0x3d40, 0xbe21, 0x0ed5, 0x0000,
1149     0x0000, 0x0000, 0xbbc4, 0xc70d, 0x0eb6, 0x0000, 0x0000, 0x0000, 0x5158, 0xdb16,
1150     0x0e96, 0x0000, 0x0000, 0x0000, 0xb5a8, 0xa8d8, 0x0e78, 0x0000, 0x0000, 0x0000,
1151     0xcccc, 0xb40e, 0x0e58, 0x0000, 0x0000, 0x0000, 0x448c, 0xcb62, 0x0e3a, 0x0000,
1152     0x0000, 0x0000, 0xf12a, 0x8aed, 0x0e1b, 0x0000, 0x0000, 0x0000, 0x79d0, 0xc59c,
1153     0x0dfb, 0x0000, 0x0000, 0x0000, 0x06b4, 0xcdc9, 0x0ddd, 0x0000, 0x0000, 0x0000,
1154     0xae70, 0xa979, 0x0dbe, 0x0000, 0x0000, 0x0000, 0x317c, 0xa8fb, 0x0d9e, 0x0000,
1155     0x0000, 0x0000, 0x5fe0, 0x8a50, 0x0d7d, 0x0000, 0x0000, 0x0000, 0x70b6, 0xfdfa,
1156     0x0d61, 0x0000, 0x0000, 0x0000, 0x1640, 0x9dc7, 0x0d41, 0x0000, 0x0000, 0x0000,
1157     0x9a9c, 0xdc50, 0x0d23, 0x0000, 0x0000, 0x0000, 0x4fcc, 0x9a9b, 0x0d04, 0x0000,
1158     0x0000, 0x0000, 0x7e48, 0x8f77, 0x0ce5, 0x0000, 0x0000, 0x0000, 0x84e4, 0xd4b9,
1159     0x0cc6, 0x0000, 0x0000, 0x0000, 0x84e0, 0xbd10, 0x0ca6, 0x0000, 0x0000, 0x0000,
1160     0x1b0a, 0xc8d9, 0x0c88, 0x0000, 0x0000, 0x0000, 0x6a48, 0xfc81, 0x0c68, 0x0000,
1161     0x0000, 0x0000, 0x070a, 0xbef6, 0x0c4a, 0x0000, 0x0000, 0x0000, 0x8a70, 0xf096,
1162     0x0c2b, 0x0000, 0x0000, 0x0000, 0xecc2, 0xc994, 0x0c0c, 0x0000, 0x0000, 0x0000,
1163     0x1540, 0x9537, 0x0bea, 0x0000, 0x0000, 0x0000, 0x1b02, 0xab5b, 0x0bce, 0x0000,
1164     0x0000, 0x0000, 0x5dc0, 0xb0c8, 0x0bad, 0x0000, 0x0000, 0x0000, 0xc928, 0xe034,
1165     0x0b8f, 0x0000, 0x0000, 0x0000, 0x2d12, 0xb4b0, 0x0b71, 0x0000, 0x0000, 0x0000,
1166     0x8fc2, 0xbb94, 0x0b52, 0x0000, 0x0000, 0x0000, 0xe236, 0xe22f, 0x0b33, 0x0000,
1167     0x0000, 0x0000, 0xb97c, 0xbe9e, 0x0b13, 0x0000, 0x0000, 0x0000, 0xe1a6, 0xe16d,
1168     0x0af5, 0x0000, 0x0000, 0x0000, 0xd330, 0xbaf0, 0x0ad6, 0x0000, 0x0000, 0x0000,
1169     0xc0bc, 0xbbd0, 0x0ab7, 0x0000, 0x0000, 0x0000, 0x8e66, 0xdd9b, 0x0a98, 0x0000,
1170     0x0000, 0x0000, 0xc95c, 0xf799, 0x0a79, 0x0000, 0x0000, 0x0000, 0xdac0, 0xbe4c,
1171     0x0a55, 0x0000, 0x0000, 0x0000, 0xafc0, 0xc378, 0x0a37, 0x0000, 0x0000, 0x0000,
1172     0xa880, 0xe341, 0x0a19, 0x0000, 0x0000, 0x0000, 0xc242, 0x81f6, 0x09fd, 0x0000,
1173     0x0000, 0x0000, 0x7470, 0xc777, 0x09de, 0x0000, 0x0000, 0x0000, 0x62bc, 0xb684,
1174     0x09be, 0x0000, 0x0000, 0x0000, 0x43ac, 0x8c58, 0x099f, 0x0000, 0x0000, 0x0000,
1175     0xcc3c, 0xf9ac, 0x0981, 0x0000, 0x0000, 0x0000, 0x1526, 0xb670, 0x0962, 0x0000,
1176     0x0000, 0x0000, 0xc9fe, 0xdf50, 0x0943, 0x0000, 0x0000, 0x0000, 0x6ae6, 0xc065,
1177     0x0924, 0x0000, 0x0000, 0x0000, 0xb114, 0xcf29, 0x0905, 0x0000, 0x0000, 0x0000,
1178     0xd388, 0x922a, 0x08e4, 0x0000, 0x0000, 0x0000, 0xcf54, 0xb926, 0x08c7, 0x0000,
1179     0x0000, 0x0000, 0x3826, 0xe855, 0x08a8, 0x0000, 0x0000, 0x0000, 0xe7c8, 0x829b,
1180     0x0888, 0x0000, 0x0000, 0x0000, 0x546c, 0xa903, 0x086a, 0x0000, 0x0000, 0x0000,
1181     0x8768, 0x99cc, 0x0849, 0x0000, 0x0000, 0x0000, 0x00ac, 0xf529, 0x082b, 0x0000,
1182     0x0000, 0x0000, 0x2658, 0x9f0b, 0x080c, 0x0000, 0x0000, 0x0000, 0xfe5c, 0x9e21,
1183     0x07ee, 0x0000, 0x0000, 0x0000, 0x6da2, 0x9910, 0x07cf, 0x0000, 0x0000, 0x0000,
1184     0x9220, 0xf9b3, 0x07b0, 0x0000, 0x0000, 0x0000, 0x3d90, 0xa541, 0x0791, 0x0000,
1185     0x0000, 0x0000, 0x6e4c, 0xe7cc, 0x0771, 0x0000, 0x0000, 0x0000, 0xa8fa, 0xe80a,
1186     0x0753, 0x0000, 0x0000, 0x0000, 0x4e14, 0xc3a7, 0x0734, 0x0000, 0x0000, 0x0000,
1187     0xf7e0, 0xbad9, 0x0712, 0x0000, 0x0000, 0x0000, 0xfea0, 0xeff2, 0x06f5, 0x0000,
1188     0x0000, 0x0000, 0xcef6, 0xbd48, 0x06d7, 0x0000, 0x0000, 0x0000, 0x7544, 0xf559,
1189     0x06b7, 0x0000, 0x0000, 0x0000, 0x2388, 0xf655, 0x0698, 0x0000, 0x0000, 0x0000,
1190     0xe900, 0xad56, 0x0676, 0x0000, 0x0000, 0x0000, 0x2cc0, 0x8437, 0x0659, 0x0000,
1191     0x0000, 0x0000, 0x3068, 0xc544, 0x063b, 0x0000, 0x0000, 0x0000, 0xdc70, 0xe73c,
1192     0x061b, 0x0000, 0x0000, 0x0000, 0xee50, 0x9d49, 0x05fc, 0x0000, 0x0000, 0x0000,
1193     0x93d2, 0x81f6, 0x05df, 0x0000, 0x0000, 0x0000, 0x941c, 0xadff, 0x05bf, 0x0000,
1194     0x0000, 0x0000, 0x2ce2, 0x8e45, 0x05a1, 0x0000, 0x0000, 0x0000, 0x4a60, 0x95fd,
1195     0x0581, 0x0000, 0x0000, 0x0000, 0x79f8, 0xb83a, 0x0563, 0x0000, 0x0000, 0x0000,
1196     0xcb58, 0xa1f5, 0x0543, 0x0000, 0x0000, 0x0000, 0x2a3a, 0xdc36, 0x0525, 0x0000,
1197     0x0000, 0x0000, 0x14ee, 0x890e, 0x0506, 0x0000, 0x0000, 0x0000, 0x8f20, 0xc432,
1198     0x04e3, 0x0000, 0x0000, 0x0000, 0x8440, 0xb21d, 0x04c6, 0x0000, 0x0000, 0x0000,
1199     0x5430, 0xf698, 0x04a7, 0x0000, 0x0000, 0x0000, 0x04ae, 0x8b20, 0x048a, 0x0000,
1200     0x0000, 0x0000, 0x04d0, 0xe872, 0x046b, 0x0000, 0x0000, 0x0000, 0xc78e, 0x8893,
1201     0x044c, 0x0000, 0x0000, 0x0000, 0x0f78, 0x9895, 0x042b, 0x0000, 0x0000, 0x0000,
1202     0x11d4, 0xdf2e, 0x040d, 0x0000, 0x0000, 0x0000, 0xe84c, 0x89d5, 0x03ef, 0x0000,
1203     0x0000, 0x0000, 0xf7be, 0x8a67, 0x03d0, 0x0000, 0x0000, 0x0000, 0x95d0, 0xc906,
1204     0x03b1, 0x0000, 0x0000, 0x0000, 0x64ce, 0xd96c, 0x0392, 0x0000, 0x0000, 0x0000,
1205     0x97ba, 0xa16f, 0x0373, 0x0000, 0x0000, 0x0000, 0x463c, 0xc51a, 0x0354, 0x0000,
1206     0x0000, 0x0000, 0xef0a, 0xe93e, 0x0335, 0x0000, 0x0000, 0x0000, 0x526a, 0xa466,
1207     0x0316, 0x0000, 0x0000, 0x0000, 0x4140, 0xa94d, 0x02f5, 0x0000, 0x0000, 0x0000,
1208     0xb4ec, 0xce68, 0x02d8, 0x0000, 0x0000, 0x0000, 0x4fa2, 0x8490, 0x02b9, 0x0000,
1209     0x0000, 0x0000, 0x4e60, 0xca98, 0x0298, 0x0000, 0x0000, 0x0000, 0x08dc, 0xe09c,
1210     0x027a, 0x0000, 0x0000, 0x0000, 0x2b90, 0xc7e3, 0x025c, 0x0000, 0x0000, 0x0000,
1211     0x5a7c, 0xf8ef, 0x023c, 0x0000, 0x0000, 0x0000, 0x5022, 0x9d58, 0x021e, 0x0000,
1212     0x0000, 0x0000, 0x553a, 0xe242, 0x01ff, 0x0000, 0x0000, 0x0000, 0x7e6e, 0xb54d,
1213     0x01e0, 0x0000, 0x0000, 0x0000, 0xd2d4, 0xa88c, 0x01c1, 0x0000, 0x0000, 0x0000,
1214     0x75b6, 0xfe6d, 0x01a2, 0x0000, 0x0000, 0x0000, 0x3bb2, 0xf04c, 0x0183, 0x0000,
1215     0x0000, 0x0000, 0xc2d0, 0xc046, 0x0163, 0x0000, 0x0000, 0x0000, 0x250c, 0xf9d6,
1216     0x0145, 0x0000, 0x0000, 0x0000, 0xb7b4, 0x8a0d, 0x0126, 0x0000, 0x0000, 0x0000,
1217     0x1a72, 0xe4f5, 0x0107, 0x0000, 0x0000, 0x0000, 0x825c, 0xa9b8, 0x00e8, 0x0000,
1218     0x0000, 0x0000, 0x6c90, 0xc9ad, 0x00c6, 0x0000, 0x0000, 0x0000, 0x4d00, 0xd1bb,
1219     0x00aa, 0x0000, 0x0000, 0x0000, 0xa4a0, 0xee01, 0x0087, 0x0000, 0x0000, 0x0000,
1220     0x89a8, 0xbe9f, 0x006b, 0x0000, 0x0000, 0x0000, 0x038e, 0xc80c, 0x004d, 0x0000,
1221     0x0000, 0x0000, 0xfe26, 0x8384, 0x002e, 0x0000, 0x0000, 0x0000, 0xcd90, 0xca57,
1222     0x000e, 0x0000
1223 };
1224 
1225 void MacroAssembler::libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
1226   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;
1227   Label B1_13, B1_14, B1_15;
1228 
1229   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
1230 
1231   address zero_none = (address)_zero_none;
1232   address _4onpi_d = (address)__4onpi_d;
1233   address TWO_32H = (address)_TWO_32H;
1234   address pi04_3d = (address)_pi04_3d;
1235   address pi04_5d = (address)_pi04_5d;
1236   address SCALE = (address)_SCALE;
1237   address zeros = (address)_zeros;
1238   address pi04_2d = (address)_pi04_2d;
1239   address TWO_12H = (address)_TWO_12H;
1240   address _4onpi_31l = (address)__4onpi_31l;
1241 
1242   bind(B1_1);
1243   push(ebp);
1244   movl(ebp, esp);
1245   andl(esp, -16);
1246   push(esi);
1247   push(edi);
1248   push(ebx);
1249   subl(esp, 20);
1250   movzwl(ebx, Address(ebp, 16));
1251   andl(ebx, 32767);
1252   movl(eax, Address(ebp, 20));
1253   cmpl(ebx, 16413);
1254   movl(esi, Address(ebp, 24));
1255   movl(Address(esp, 4), eax);
1256   jcc(Assembler::greaterEqual, B1_8);
1257 
1258   bind(B1_2);
1259   fld_x(Address(ebp, 8));
1260   fld_d(ExternalAddress(_4onpi_d));    //0x6dc9c883UL, 0x3ff45f30UL
1261   fmul(1);
1262   fstp_x(Address(esp, 8));
1263   movzwl(ecx, Address(esp, 16));
1264   negl(ecx);
1265   addl(ecx, 30);
1266   movl(eax, Address(esp, 12));
1267   shrl(eax);
1268   cmpl(Address(esp, 4), 0);
1269   jcc(Assembler::notEqual, B1_4);
1270 
1271   bind(B1_3);
1272   lea(ecx, Address(eax, 1));
1273   andl(ecx, -2);
1274   jmp(B1_5);
1275 
1276   bind(B1_4);
1277   movl(ecx, eax);
1278   addl(eax, Address(esp, 4));
1279   movl(edx, eax);
1280   andl(edx, 1);
1281   addl(ecx, edx);
1282 
1283   bind(B1_5);
1284   fld_d(ExternalAddress(TWO_32H));    //0x00000000UL, 0x41f80000UL
1285   cmpl(ebx, 16400);
1286   movl(Address(esp, 0), ecx);
1287   fild_s(Address(esp, 0));
1288   jcc(Assembler::greaterEqual, B1_7);
1289 
1290   bind(B1_6);
1291   fld_d(ExternalAddress(pi04_3d));    //0x54442d00UL, 0x3fe921fbUL
1292   fmul(1);
1293   fsubp(3);
1294   fxch(1);
1295   fmul(2);
1296   fld_s(2);
1297   fadd(1);
1298   fsubrp(1);
1299   fld_s(0);
1300   fxch(1);
1301   fsuba(3);
1302   fld_d(ExternalAddress(8 + pi04_3d));    //0x98cc5180UL, 0x3ce84698UL
1303   fmul(3);
1304   fsuba(2);
1305   fxch(1);
1306   fsub(2);
1307   fsubrp(1);
1308   faddp(3);
1309   fld_d(ExternalAddress(16 + pi04_3d));    //0xcbb5bf6cUL, 0xb9dfc8f8UL
1310   fmulp(2);
1311   fld_s(1);
1312   fsubr(1);
1313   fsuba(1);
1314   fxch(2);
1315   fsubp(1);
1316   faddp(2);
1317   fxch(1);
1318   jmp(B1_15);
1319 
1320   bind(B1_7);
1321   fld_d(ExternalAddress(pi04_5d));    //0x54400000UL, 0x3fe921fbUL
1322   fmul(1);
1323   fsubp(3);
1324   fxch(1);
1325   fmul(2);
1326   fld_s(2);
1327   fadd(1);
1328   fsubrp(1);
1329   fld_s(0);
1330   fxch(1);
1331   fsuba(3);
1332   fld_d(ExternalAddress(8 + pi04_5d));    //0x1a600000UL, 0x3dc0b461UL
1333   fmul(3);
1334   fsuba(2);
1335   fxch(1);
1336   fsub(2);
1337   fsubrp(1);
1338   faddp(3);
1339   fld_d(ExternalAddress(16 + pi04_5d));    //0x2e000000UL, 0x3b93198aUL
1340   fmul(2);
1341   fld_s(0);
1342   fsubr(2);
1343   fsuba(2);
1344   fxch(1);
1345   fsubp(2);
1346   fxch(1);
1347   faddp(3);
1348   fld_d(ExternalAddress(24 + pi04_5d));    //0x25200000UL, 0x396b839aUL
1349   fmul(2);
1350   fld_s(0);
1351   fsubr(2);
1352   fsuba(2);
1353   fxch(1);
1354   fsubp(2);
1355   fxch(1);
1356   faddp(3);
1357   fld_d(ExternalAddress(32 + pi04_5d));    //0x533e63a0UL, 0x37027044UL
1358   fmulp(2);
1359   fld_s(1);
1360   fsubr(1);
1361   fsuba(1);
1362   fxch(2);
1363   fsubp(1);
1364   faddp(2);
1365   fxch(1);
1366   jmp(B1_15);
1367 
1368   bind(B1_8);
1369   fld_x(Address(ebp, 8));
1370   addl(ebx, -16417);
1371   fmul_d(as_Address(ExternalAddress(SCALE)));    //0x00000000UL, 0x32600000UL
1372   movl(eax, -2078209981);
1373   imull(ebx);
1374   addl(edx, ebx);
1375   movl(ecx, ebx);
1376   sarl(edx, 4);
1377   sarl(ecx, 31);
1378   subl(edx, ecx);
1379   movl(eax, edx);
1380   shll(eax, 5);
1381   fstp_x(Address(ebp, 8));
1382   fld_x(Address(ebp, 8));
1383   subl(eax, edx);
1384   movl(Address(ebp, 8), 0);
1385   subl(ebx, eax);
1386   fld_x(Address(ebp, 8));
1387   cmpl(ebx, 17);
1388   fsuba(1);
1389   jcc(Assembler::less, B1_10);
1390 
1391   bind(B1_9);
1392   lea(eax, Address(noreg, edx, Address::times_8));
1393   lea(ecx, Address(eax, edx, Address::times_4));
1394   incl(edx);
1395   fld_x(Address(_4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
1396   fmul(2);
1397   fld_x(Address(12 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
1398   fmul(2);
1399   fld_s(0);
1400   fadd(2);
1401   fsuba(2);
1402   fxch(1);
1403   faddp(2);
1404   fld_s(1);
1405   fadd(1);
1406   fstp_x(Address(esp, 8));
1407   andl(Address(esp, 8), -16777216);
1408   fld_x(Address(esp, 8));
1409   fsubp(1);
1410   jmp(B1_11);
1411 
1412   bind(B1_10);
1413   fld_d(ExternalAddress(zeros));    //0x00000000UL, 0x00000000UL
1414   fld_s(0);
1415 
1416   bind(B1_11);
1417   fld_s(0);
1418   lea(eax, Address(noreg, edx, Address::times_8));
1419   fld_s(3);
1420   lea(edx, Address(eax, edx, Address::times_4));
1421   fld_x(Address(_4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
1422   fmul(6);
1423   movl(Address(esp, 0), edx);
1424   fadda(2);
1425   fxch(2);
1426   fsuba(3);
1427   fxch(2);
1428   faddp(3);
1429   fxch(2);
1430   faddp(3);
1431   fld_x(Address(12 + _4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
1432   fmula(2);
1433   fld_s(2);
1434   fadd(2);
1435   fld_s(0);
1436   fxch(1);
1437   fsubra(3);
1438   fxch(3);
1439   fchs();
1440   faddp(4);
1441   fxch(3);
1442   faddp(4);
1443   fxch(2);
1444   fadd(3);
1445   fxch(2);
1446   fmul(5);
1447   fadda(2);
1448   fld_s(4);
1449   fld_x(Address(24 + _4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
1450   fmula(1);
1451   fxch(1);
1452   fadda(4);
1453   fxch(4);
1454   fstp_x(Address(esp, 8));
1455   movzwl(ebx, Address(esp, 16));
1456   andl(ebx, 32767);
1457   cmpl(ebx, 16415);
1458   jcc(Assembler::greaterEqual, B1_13);
1459 
1460   bind(B1_12);
1461   negl(ebx);
1462   addl(ebx, 30);
1463   movl(ecx, ebx);
1464   movl(eax, Address(esp, 12));
1465   shrl(eax);
1466   shll(eax);
1467   movl(Address(esp, 12), eax);
1468   movl(Address(esp, 8), 0);
1469   shrl(eax);
1470   jmp(B1_14);
1471 
1472   bind(B1_13);
1473   negl(ebx);
1474   addl(ebx, 30);
1475   movl(ecx, ebx);
1476   movl(edx, Address(esp, 8));
1477   shrl(edx);
1478   shll(edx);
1479   negl(ecx);
1480   movl(eax, Address(esp, 12));
1481   shll(eax);
1482   movl(ecx, ebx);
1483   movl(Address(esp, 8), edx);
1484   shrl(edx);
1485   orl(eax, edx);
1486 
1487   bind(B1_14);
1488   fld_x(Address(esp, 8));
1489   addl(eax, Address(esp, 4));
1490   fsubp(3);
1491   fmul(6);
1492   fld_s(4);
1493   movl(edx, eax);
1494   andl(edx, 1);
1495   fadd(3);
1496   movl(ecx, Address(esp, 0));
1497   fsuba(3);
1498   fxch(3);
1499   faddp(5);
1500   fld_s(1);
1501   fxch(3);
1502   fadd_d(Address(zero_none, RelocationHolder::none).plus_disp(edx, Address::times_8));
1503   fadda(3);
1504   fsub(3);
1505   faddp(2);
1506   fxch(1);
1507   faddp(4);
1508   fld_s(2);
1509   fadd(2);
1510   fsuba(2);
1511   fxch(3);
1512   faddp(2);
1513   fxch(1);
1514   faddp(3);
1515   fld_s(0);
1516   fadd(2);
1517   fsuba(2);
1518   fxch(1);
1519   faddp(2);
1520   fxch(1);
1521   faddp(2);
1522   fld_s(2);
1523   fld_x(Address(36 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
1524   fmula(1);
1525   fld_s(1);
1526   fadd(3);
1527   fsuba(3);
1528   fxch(2);
1529   faddp(3);
1530   fxch(2);
1531   faddp(3);
1532   fxch(1);
1533   fmul(4);
1534   fld_s(0);
1535   fadd(2);
1536   fsuba(2);
1537   fxch(1);
1538   faddp(2);
1539   fxch(1);
1540   faddp(2);
1541   fld_s(2);
1542   fld_x(Address(48 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
1543   fmula(1);
1544   fld_s(1);
1545   fadd(3);
1546   fsuba(3);
1547   fxch(2);
1548   faddp(3);
1549   fxch(2);
1550   faddp(3);
1551   fld_s(3);
1552   fxch(2);
1553   fmul(5);
1554   fld_x(Address(60 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
1555   fmula(3);
1556   fxch(3);
1557   faddp(1);
1558   fld_s(0);
1559   fadd(2);
1560   fsuba(2);
1561   fxch(1);
1562   faddp(2);
1563   fxch(1);
1564   faddp(3);
1565   fld_s(3);
1566   fxch(2);
1567   fmul(5);
1568   fld_x(Address(72 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
1569   fmula(3);
1570   fxch(3);
1571   faddp(1);
1572   fld_s(0);
1573   fadd(2);
1574   fsuba(2);
1575   fxch(1);
1576   faddp(2);
1577   fxch(1);
1578   faddp(3);
1579   fxch(1);
1580   fmulp(4);
1581   fld_x(Address(84 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
1582   fmulp(3);
1583   fxch(2);
1584   faddp(3);
1585   fld_s(2);
1586   fadd(2);
1587   fld_d(ExternalAddress(TWO_32H));    //0x00000000UL, 0x41f80000UL
1588   fmul(1);
1589   fadda(1);
1590   fsubp(1);
1591   fsuba(2);
1592   fxch(3);
1593   faddp(2);
1594   faddp(1);
1595   fld_d(ExternalAddress(pi04_2d));    //0x54400000UL, 0x3fe921fbUL
1596   fld_s(0);
1597   fmul(2);
1598   fxch(2);
1599   fadd(3);
1600   fxch(1);
1601   fmulp(3);
1602   fmul_d(as_Address(ExternalAddress(8 + pi04_2d)));    //0x1a626331UL, 0x3dc0b461UL
1603   faddp(1);
1604 
1605   bind(B1_15);
1606   fld_d(ExternalAddress(TWO_12H));    //0x00000000UL, 0x40b80000UL
1607   fld_s(2);
1608   fadd(2);
1609   fmula(1);
1610   fstp_x(Address(esp, 8));
1611   fld_x(Address(esp, 8));
1612   fadd(1);
1613   fsubrp(1);
1614   fst_d(Address(esi, 0));
1615   fsubp(2);
1616   faddp(1);
1617   fstp_d(Address(esi, 8));
1618   addl(esp, 20);
1619   pop(ebx);
1620   pop(edi);
1621   pop(esi);
1622   movl(esp, ebp);
1623   pop(ebp);
1624   ret(0);
1625 }
1626 
1627 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_L_2il0floatpacket_0[] =
1628 {
1629     0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
1630 };
1631 
1632 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_Pi4Inv[] =
1633 {
1634     0x6dc9c883UL, 0x3ff45f30UL
1635 };
1636 
1637 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_Pi4x3[] =
1638 {
1639     0x54443000UL, 0xbfe921fbUL, 0x3b39a000UL, 0x3d373dcbUL, 0xe0e68948UL,
1640     0xba845c06UL
1641 };
1642 
1643 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_Pi4x4[] =
1644 {
1645     0x54400000UL, 0xbfe921fbUL, 0x1a600000UL, 0xbdc0b461UL, 0x2e000000UL,
1646     0xbb93198aUL, 0x252049c1UL, 0xb96b839aUL
1647 };
1648 
1649 ATTRIBUTE_ALIGNED(16) jushort _SP[] =
1650 {
1651     0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffc, 0x0000, 0x8887, 0x8888, 0x8888, 0x8888,
1652     0x3ff8, 0x0000, 0xc527, 0x0d00, 0x00d0, 0xd00d, 0xbff2, 0x0000, 0x45f6, 0xb616,
1653     0x1d2a, 0xb8ef, 0x3fec, 0x0000, 0x825b, 0x3997, 0x2b3f, 0xd732, 0xbfe5, 0x0000,
1654     0xbf33, 0x8bb4, 0x2fda, 0xb092, 0x3fde, 0x0000, 0x44a6, 0xed1a, 0x29ef, 0xd73e,
1655     0xbfd6, 0x0000, 0x8610, 0x307f, 0x62a1, 0xc921, 0x3fce, 0x0000
1656 };
1657 
1658 ATTRIBUTE_ALIGNED(16) jushort _CP[] =
1659 {
1660     0x0000, 0x0000, 0x0000, 0x8000, 0xbffe, 0x0000, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa,
1661     0x3ffa, 0x0000, 0x9c2f, 0x0b60, 0x60b6, 0xb60b, 0xbff5, 0x0000, 0xf024, 0x0cac,
1662     0x00d0, 0xd00d, 0x3fef, 0x0000, 0x03fe, 0x3f65, 0x7dbb, 0x93f2, 0xbfe9, 0x0000,
1663     0xd84d, 0xadee, 0xc698, 0x8f76, 0x3fe2, 0x0000, 0xdaba, 0xfe79, 0xea36, 0xc9c9,
1664     0xbfda, 0x0000, 0x3ac6, 0x0ba0, 0x07ce, 0xd585, 0x3fd2, 0x0000
1665 };
1666 
1667 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_ones[] =
1668 {
1669     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xbff00000UL
1670 };
1671 
1672 void MacroAssembler::libm_sincos_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
1673   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;
1674   Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
1675   Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
1676   Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_41, B1_42, B1_43, B1_46;
1677 
1678   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
1679 
1680   address L_2il0floatpacket_0 = StubRoutines::x86::_L_2il0floatpacket_0_addr();
1681   address Pi4Inv = StubRoutines::x86::_Pi4Inv_addr();
1682   address Pi4x3 = StubRoutines::x86::_Pi4x3_addr();
1683   address Pi4x4 = StubRoutines::x86::_Pi4x4_addr();
1684   address ones = StubRoutines::x86::_ones_addr();
1685   address CP = (address)_CP;
1686   address SP = (address)_SP;
1687 
1688   bind(B1_1);
1689   push(ebp);
1690   movl(ebp, esp);
1691   andl(esp, -64);
1692   push(esi);
1693   push(edi);
1694   push(ebx);
1695   subl(esp, 52);
1696   movl(eax, Address(ebp, 16));
1697   movl(edx, Address(ebp, 20));
1698   movl(Address(esp, 32), eax);
1699   movl(Address(esp, 36), edx);
1700 
1701   bind(B1_2);
1702   fnstcw(Address(esp, 30));
1703 
1704   bind(B1_3);
1705   movsd(xmm1, Address(ebp, 8));
1706   movl(esi, Address(ebp, 12));
1707   movl(eax, esi);
1708   andl(eax, 2147483647);
1709   andps(xmm1, ExternalAddress(L_2il0floatpacket_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
1710   shrl(esi, 31);
1711   movl(Address(esp, 40), eax);
1712   cmpl(eax, 1104150528);
1713   movsd(Address(ebp, 8), xmm1);
1714   jcc(Assembler::aboveEqual, B1_11);
1715 
1716   bind(B1_4);
1717   movsd(xmm0, ExternalAddress(Pi4Inv));    //0x6dc9c883UL, 0x3ff45f30UL
1718   mulsd(xmm0, xmm1);
1719   movzwl(edx, Address(esp, 30));
1720   movl(eax, edx);
1721   andl(eax, 768);
1722   movsd(Address(esp, 0), xmm0);
1723   cmpl(eax, 768);
1724   jcc(Assembler::equal, B1_42);
1725 
1726   bind(B1_5);
1727   orl(edx, -64768);
1728   movw(Address(esp, 28), edx);
1729 
1730   bind(B1_6);
1731   fldcw(Address(esp, 28));
1732 
1733   bind(B1_7);
1734   movsd(xmm1, Address(ebp, 8));
1735   movl(ebx, 1);
1736 
1737   bind(B1_8);
1738   movl(Address(esp, 12), ebx);
1739   movl(ebx, Address(esp, 4));
1740   movl(eax, ebx);
1741   movl(Address(esp, 8), esi);
1742   movl(esi, ebx);
1743   shrl(esi, 20);
1744   andl(eax, 1048575);
1745   movl(ecx, esi);
1746   orl(eax, 1048576);
1747   negl(ecx);
1748   movl(edx, eax);
1749   addl(ecx, 19);
1750   addl(esi, 13);
1751   movl(Address(esp, 24), ecx);
1752   shrl(edx);
1753   movl(ecx, esi);
1754   shll(eax);
1755   movl(ecx, Address(esp, 24));
1756   movl(esi, Address(esp, 0));
1757   shrl(esi);
1758   orl(eax, esi);
1759   cmpl(ebx, 1094713344);
1760   movsd(Address(esp, 16), xmm1);
1761   fld_d(Address(esp, 16));
1762   cmov32(Assembler::below, eax, edx);
1763   movl(esi, Address(esp, 8));
1764   lea(edx, Address(eax, 1));
1765   movl(ebx, edx);
1766   andl(ebx, -2);
1767   movl(Address(esp, 16), ebx);
1768   fild_s(Address(esp, 16));
1769   movl(ebx, Address(esp, 12));
1770   cmpl(Address(esp, 40), 1094713344);
1771   jcc(Assembler::aboveEqual, B1_10);
1772 
1773   bind(B1_9);
1774   fld_d(ExternalAddress(Pi4x3));    //0x54443000UL, 0xbfe921fbUL
1775   fmul(1);
1776   faddp(2);
1777   fld_d(ExternalAddress(8 + Pi4x3));    //0x3b39a000UL, 0x3d373dcbUL
1778   fmul(1);
1779   faddp(2);
1780   fld_d(ExternalAddress(16 + Pi4x3));    //0xe0e68948UL, 0xba845c06UL
1781   fmulp(1);
1782   faddp(1);
1783   jmp(B1_17);
1784 
1785   bind(B1_10);
1786   fld_d(ExternalAddress(Pi4x4));    //0x54400000UL, 0xbfe921fbUL
1787   fmul(1);
1788   faddp(2);
1789   fld_d(ExternalAddress(8 + Pi4x4));    //0x1a600000UL, 0xbdc0b461UL
1790   fmul(1);
1791   faddp(2);
1792   fld_d(ExternalAddress(16 + Pi4x4));    //0x2e000000UL, 0xbb93198aUL
1793   fmul(1);
1794   faddp(2);
1795   fld_d(ExternalAddress(24 + Pi4x4));    //0x252049c1UL, 0xb96b839aUL
1796   fmulp(1);
1797   faddp(1);
1798   jmp(B1_17);
1799 
1800   bind(B1_11);
1801   movzwl(edx, Address(esp, 30));
1802   movl(eax, edx);
1803   andl(eax, 768);
1804   cmpl(eax, 768);
1805   jcc(Assembler::equal, B1_43);
1806   bind(B1_12);
1807   orl(edx, -64768);
1808   movw(Address(esp, 28), edx);
1809 
1810   bind(B1_13);
1811   fldcw(Address(esp, 28));
1812 
1813   bind(B1_14);
1814   movsd(xmm1, Address(ebp, 8));
1815   movl(ebx, 1);
1816 
1817   bind(B1_15);
1818   movsd(Address(esp, 16), xmm1);
1819   fld_d(Address(esp, 16));
1820   addl(esp, -32);
1821   lea(eax, Address(esp, 32));
1822   fstp_x(Address(esp, 0));
1823   movl(Address(esp, 12), 0);
1824   movl(Address(esp, 16), eax);
1825   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l())));
1826 
1827   bind(B1_46);
1828   addl(esp, 32);
1829 
1830   bind(B1_16);
1831   fld_d(Address(esp, 0));
1832   lea(edx, Address(eax, 1));
1833   fld_d(Address(esp, 8));
1834   faddp(1);
1835 
1836   bind(B1_17);
1837   movl(ecx, edx);
1838   addl(eax, 3);
1839   shrl(ecx, 2);
1840   andl(ecx, 1);
1841   shrl(eax, 2);
1842   xorl(esi, ecx);
1843   movl(ecx, Address(esp, 36));
1844   andl(eax, 1);
1845   andl(ecx, 3);
1846   cmpl(ecx, 3);
1847   jcc(Assembler::notEqual, B1_25);
1848 
1849   bind(B1_18);
1850   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
1851   fld_s(1);
1852   fmul((2));
1853   testb(edx, 2);
1854   fmula((1));
1855   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
1856   faddp(2);
1857   fmula(1);
1858   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
1859   faddp(2);
1860   fmula(1);
1861   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
1862   faddp(2);
1863   fmula(1);
1864   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
1865   faddp(2);
1866   fmula(1);
1867   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
1868   faddp(2);
1869   fmula(1);
1870   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
1871   faddp(2);
1872   fmula(1);
1873   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
1874   faddp(2);
1875   fmula(1);
1876   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
1877   fmul(1);
1878   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
1879   faddp(1);
1880   fmul(1);
1881   fld_x(ExternalAddress(62 + CP));    //0xd84d, 0xadee, 0xc6
1882   faddp(1);
1883   fmul(1);
1884   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
1885   faddp(1);
1886   fmul(1);
1887   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
1888   faddp(1);
1889   fmul(1);
1890   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
1891   faddp(1);
1892   fmul(1);
1893   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
1894   faddp(1);
1895   fmul(1);
1896   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
1897   faddp(1);
1898   fmulp(1);
1899   fld_d(Address(ones, RelocationHolder::none).plus_disp(esi, Address::times_8));
1900   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
1901   jcc(Assembler::equal, B1_22);
1902 
1903   bind(B1_19);
1904   fmulp(4);
1905   testl(ebx, ebx);
1906   fxch(2);
1907   fmul(3);
1908   movl(eax, Address(esp, 2));
1909   faddp(3);
1910   fxch(2);
1911   fstp_d(Address(eax, 0));
1912   fmula(1);
1913   faddp(1);
1914   fstp_d(Address(eax, 8));
1915   jcc(Assembler::equal, B1_21);
1916 
1917   bind(B1_20);
1918   fldcw(Address(esp, 30));
1919 
1920   bind(B1_21);
1921   addl(esp, 52);
1922   pop(ebx);
1923   pop(edi);
1924   pop(esi);
1925   movl(esp, ebp);
1926   pop(ebp);
1927   ret(0);
1928 
1929   bind(B1_22);
1930   fxch(1);
1931   fmulp(4);
1932   testl(ebx, ebx);
1933   fxch(2);
1934   fmul(3);
1935   movl(eax, Address(esp, 32));
1936   faddp(3);
1937   fxch(2);
1938   fstp_d(Address(eax, 8));
1939   fmula(1);
1940   faddp(1);
1941   fstp_d(Address(eax, 0));
1942   jcc(Assembler::equal, B1_24);
1943 
1944   bind(B1_23);
1945   fldcw(Address(esp, 30));
1946 
1947   bind(B1_24);
1948   addl(esp, 52);
1949   pop(ebx);
1950   pop(edi);
1951   pop(esi);
1952   movl(esp, ebp);
1953   pop(ebp);
1954   ret(0);
1955 
1956   bind(B1_25);
1957   testb(Address(esp, 36), 2);
1958   jcc(Assembler::equal, B1_33);
1959 
1960   bind(B1_26);
1961   fld_s(0);
1962   testb(edx, 2);
1963   fmul(1);
1964   fld_s(0);
1965   fmul(1);
1966   jcc(Assembler::equal, B1_30);
1967 
1968   bind(B1_27);
1969   fstp_d(2);
1970   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
1971   testl(ebx, ebx);
1972   fmul(2);
1973   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
1974   fmul(3);
1975   fld_x(ExternalAddress(60 + CP));    //0xd84d, 0xadee, 0xc6
1976   movl(eax, Address(rsp, 32));
1977   faddp(2);
1978   fxch(1);
1979   fmul(3);
1980   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
1981   faddp(2);
1982   fxch(1);
1983   fmul(3);
1984   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
1985   faddp(2);
1986   fxch(1);
1987   fmul(3);
1988   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
1989   faddp(2);
1990   fxch(1);
1991   fmul(3);
1992   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
1993   faddp(2);
1994   fxch(1);
1995   fmulp(3);
1996   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
1997   faddp(1);
1998   fmulp(1);
1999   faddp(1);
2000   fld_d(Address(ones, RelocationHolder::none).plus_disp(rsi, Address::times_8));
2001   fmula(1);
2002   faddp(1);
2003   fstp_d(Address(eax, 8));
2004   jcc(Assembler::equal, B1_29);
2005 
2006   bind(B1_28);
2007   fldcw(Address(esp, 30));
2008 
2009   bind(B1_29);
2010   addl(esp, 52);
2011   pop(ebx);
2012   pop(edi);
2013   pop(esi);
2014   movl(esp, ebp);
2015   pop(ebp);
2016   ret(0);
2017 
2018   bind(B1_30);
2019   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
2020   testl(ebx, ebx);
2021   fmul(1);
2022   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
2023   fmul(2);
2024   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
2025   movl(eax, Address(rsp, 32));
2026   faddp(2);
2027   fxch(1);
2028   fmul(2);
2029   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
2030   faddp(2);
2031   fxch(1);
2032   fmul(2);
2033   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
2034   faddp(2);
2035   fxch(1);
2036   fmul(2);
2037   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
2038   faddp(2);
2039   fxch(1);
2040   fmul(2);
2041   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
2042   faddp(2);
2043   fxch(1);
2044   fmulp(2);
2045   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
2046   faddp(1);
2047   fmulp(2);
2048   faddp(1);
2049   fld_d(Address(ones, RelocationHolder::none).plus_disp(rsi, Address::times_8));
2050   fmulp(2);
2051   fmul(1);
2052   faddp(1);
2053   fstp_d(Address(eax, 8));
2054   jcc(Assembler::equal, B1_32);
2055 
2056   bind(B1_31);
2057   fldcw(Address(esp, 30));
2058 
2059   bind(B1_32);
2060   addl(esp, 52);
2061   pop(ebx);
2062   pop(edi);
2063   pop(esi);
2064   movl(esp, ebp);
2065   pop(ebp);
2066   ret(0);
2067 
2068   bind(B1_33);
2069   testb(Address(esp, 36), 1);
2070   jcc(Assembler::equal, B1_41);
2071 
2072   bind(B1_34);
2073   fld_s(0);
2074   testb(edx, 2);
2075   fmul(1);
2076   fld_s(0);
2077   fmul(1);
2078   jcc(Assembler::equal, B1_38);
2079 
2080   bind(B1_35);
2081   fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
2082   testl(ebx, ebx);
2083   fmul(1);
2084   fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
2085   fmul(2);
2086   fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
2087   faddp(2);
2088   fxch(1);
2089   fmul(2);
2090   fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
2091   faddp(2);
2092   fxch(1);
2093   fmul(2);
2094   fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
2095   faddp(2);
2096   fxch(1);
2097   fmul(2);
2098   fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
2099   faddp(2);
2100   fxch(1);
2101   fmul(2);
2102   fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
2103   faddp(2);
2104   fxch(1);
2105   fmulp(2);
2106   fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
2107   faddp(1);
2108   fmulp(2);
2109   faddp(1);
2110   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
2111   fmulp(2);
2112   fmul(1);
2113   movl(eax, Address(esp, 32));
2114   faddp(1);
2115   fstp_d(Address(eax, 0));
2116   jcc(Assembler::equal, B1_37);
2117 
2118   bind(B1_36);
2119   fldcw(Address(esp, 30));
2120 
2121   bind(B1_37);
2122   addl(esp, 52);
2123   pop(ebx);
2124   pop(edi);
2125   pop(esi);
2126   movl(esp, ebp);
2127   pop(ebp);
2128   ret(0);
2129 
2130   bind(B1_38);
2131   fstp_d(2);
2132   fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
2133   testl(ebx, ebx);
2134   fmul(2);
2135   fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
2136   fmul(3);
2137   fld_x(ExternalAddress(60 + CP));    //0xd84d, 0xadee, 0xc6
2138   faddp(2);
2139   fxch(1);
2140   fmul(3);
2141   fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
2142   faddp(2);
2143   fxch(1);
2144   fmul(3);
2145   fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
2146   faddp(2);
2147   fxch(1);
2148   fmul(3);
2149   fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
2150   faddp(2);
2151   fxch(1);
2152   fmul(3);
2153   fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
2154   faddp(2);
2155   fxch(1);
2156   fmulp(3);
2157   fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
2158   faddp(1);
2159   fmulp(1);
2160   faddp(1);
2161   fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
2162   fmula(1);
2163   movl(eax, Address(esp, 32));
2164   faddp(1);
2165   fstp_d(Address(eax, 0));
2166   jcc(Assembler::equal, B1_40);
2167 
2168   bind(B1_39);
2169   fldcw(Address(esp, 30));
2170   bind(B1_40);
2171   addl(esp, 52);
2172   pop(ebx);
2173   pop(edi);
2174   pop(esi);
2175   movl(esp, ebp);
2176   pop(ebp);
2177   ret(0);
2178   bind(B1_41);
2179   fstp_d(0);
2180   addl(esp, 52);
2181   pop(ebx);
2182   pop(edi);
2183   pop(esi);
2184   movl(esp, ebp);
2185   pop(ebp);
2186   ret(0);
2187   bind(B1_42);
2188   xorl(ebx, ebx);
2189   jmp(B1_8);
2190   bind(B1_43);
2191   xorl(ebx, ebx);
2192   jmp(B1_15);
2193 }
2194 
2195 ATTRIBUTE_ALIGNED(16) juint _static_const_table_sin[] =
2196 {
2197     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
2198     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
2199     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
2200     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
2201     0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
2202     0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
2203     0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
2204     0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
2205     0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
2206     0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
2207     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
2208     0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
2209     0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
2210     0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
2211     0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
2212     0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
2213     0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
2214     0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
2215     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
2216     0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
2217     0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
2218     0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
2219     0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
2220     0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
2221     0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
2222     0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
2223     0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
2224     0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
2225     0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
2226     0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
2227     0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
2228     0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
2229     0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
2230     0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
2231     0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
2232     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
2233     0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
2234     0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
2235     0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
2236     0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
2237     0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
2238     0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
2239     0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
2240     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
2241     0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
2242     0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
2243     0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
2244     0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
2245     0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
2246     0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
2247     0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
2248     0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
2249     0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
2250     0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
2251     0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
2252     0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
2253     0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
2254     0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
2255     0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
2256     0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
2257     0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
2258     0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
2259     0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
2260     0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
2261     0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
2262     0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
2263     0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
2264     0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
2265     0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
2266     0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
2267     0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
2268     0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
2269     0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
2270     0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
2271     0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
2272     0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
2273     0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
2274     0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
2275     0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
2276     0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
2277     0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
2278     0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
2279     0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
2280     0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
2281     0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
2282     0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
2283     0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
2284     0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
2285     0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
2286     0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
2287     0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
2288     0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
2289     0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
2290     0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
2291     0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
2292     0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
2293     0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
2294     0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
2295     0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
2296     0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
2297     0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
2298     0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
2299     0x00000000UL, 0x3ff00000UL, 0x55555555UL, 0xbfc55555UL, 0x00000000UL,
2300     0xbfe00000UL, 0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL,
2301     0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL, 0xa556c734UL,
2302     0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL, 0x1a600000UL, 0x3d90b461UL,
2303     0x1a600000UL, 0x3d90b461UL, 0x54400000UL, 0x3fb921fbUL, 0x00000000UL,
2304     0x00000000UL, 0x2e037073UL, 0x3b63198aUL, 0x00000000UL, 0x00000000UL,
2305     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
2306     0x43380000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
2307     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
2308     0x00000000UL, 0xffffffffUL, 0x3fefffffUL, 0x00000000UL, 0x00000000UL,
2309     0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
2310     0x80000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL, 0x3fe00000UL,
2311     0x00000000UL, 0x3fe00000UL
2312 };
2313 
2314 void MacroAssembler::fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ebx, Register edx) {
2315 
2316   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;
2317   Label L_2TAG_PACKET_4_0_2, start;
2318   assert_different_registers(eax, ebx, edx);
2319   address static_const_table_sin = (address)_static_const_table_sin;
2320 
2321   bind(start);
2322   subl(rsp, 120);
2323   movl(Address(rsp, 56), ebx);
2324   lea(ebx, ExternalAddress(static_const_table_sin));
2325   movsd(xmm0, Address(rsp, 128));
2326   pextrw(eax, xmm0, 3);
2327   andl(eax, 32767);
2328   subl(eax, 12336);
2329   cmpl(eax, 4293);
2330   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
2331   movsd(xmm1, Address(ebx, 2160));
2332   mulsd(xmm1, xmm0);
2333   movsd(xmm5, Address(ebx, 2272));
2334   movdqu(xmm4, Address(ebx, 2256));
2335   pand(xmm4, xmm0);
2336   por(xmm5, xmm4);
2337   movsd(xmm3, Address(ebx, 2128));
2338   movdqu(xmm2, Address(ebx, 2112));
2339   addpd(xmm1, xmm5);
2340   cvttsd2sil(edx, xmm1);
2341   cvtsi2sdl(xmm1, edx);
2342   mulsd(xmm3, xmm1);
2343   unpcklpd(xmm1, xmm1);
2344   addl(edx, 1865216);
2345   movdqu(xmm4, xmm0);
2346   andl(edx, 63);
2347   movdqu(xmm5, Address(ebx, 2096));
2348   lea(eax, Address(ebx, 0));
2349   shll(edx, 5);
2350   addl(eax, edx);
2351   mulpd(xmm2, xmm1);
2352   subsd(xmm0, xmm3);
2353   mulsd(xmm1, Address(ebx, 2144));
2354   subsd(xmm4, xmm3);
2355   movsd(xmm7, Address(eax, 8));
2356   unpcklpd(xmm0, xmm0);
2357   movapd(xmm3, xmm4);
2358   subsd(xmm4, xmm2);
2359   mulpd(xmm5, xmm0);
2360   subpd(xmm0, xmm2);
2361   movdqu(xmm6, Address(ebx, 2064));
2362   mulsd(xmm7, xmm4);
2363   subsd(xmm3, xmm4);
2364   mulpd(xmm5, xmm0);
2365   mulpd(xmm0, xmm0);
2366   subsd(xmm3, xmm2);
2367   movdqu(xmm2, Address(eax, 0));
2368   subsd(xmm1, xmm3);
2369   movsd(xmm3, Address(eax, 24));
2370   addsd(xmm2, xmm3);
2371   subsd(xmm7, xmm2);
2372   mulsd(xmm2, xmm4);
2373   mulpd(xmm6, xmm0);
2374   mulsd(xmm3, xmm4);
2375   mulpd(xmm2, xmm0);
2376   mulpd(xmm0, xmm0);
2377   addpd(xmm5, Address(ebx, 2080));
2378   mulsd(xmm4, Address(eax, 0));
2379   addpd(xmm6, Address(ebx, 2048));
2380   mulpd(xmm5, xmm0);
2381   movapd(xmm0, xmm3);
2382   addsd(xmm3, Address(eax, 8));
2383   mulpd(xmm1, xmm7);
2384   movapd(xmm7, xmm4);
2385   addsd(xmm4, xmm3);
2386   addpd(xmm6, xmm5);
2387   movsd(xmm5, Address(eax, 8));
2388   subsd(xmm5, xmm3);
2389   subsd(xmm3, xmm4);
2390   addsd(xmm1, Address(eax, 16));
2391   mulpd(xmm6, xmm2);
2392   addsd(xmm5, xmm0);
2393   addsd(xmm3, xmm7);
2394   addsd(xmm1, xmm5);
2395   addsd(xmm1, xmm3);
2396   addsd(xmm1, xmm6);
2397   unpckhpd(xmm6, xmm6);
2398   addsd(xmm1, xmm6);
2399   addsd(xmm4, xmm1);
2400   movsd(Address(rsp, 0), xmm4);
2401   fld_d(Address(rsp, 0));
2402   jmp(L_2TAG_PACKET_1_0_2);
2403 
2404   bind(L_2TAG_PACKET_0_0_2);
2405   jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
2406   shrl(eax, 4);
2407   cmpl(eax, 268434685);
2408   jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
2409   movsd(Address(rsp, 0), xmm0);
2410   fld_d(Address(rsp, 0));
2411   jmp(L_2TAG_PACKET_1_0_2);
2412 
2413   bind(L_2TAG_PACKET_3_0_2);
2414   movsd(xmm3, Address(ebx, 2192));
2415   mulsd(xmm3, xmm0);
2416   subsd(xmm3, xmm0);
2417   mulsd(xmm3, Address(ebx, 2208));
2418   movsd(Address(rsp, 0), xmm0);
2419   fld_d(Address(rsp, 0));
2420   jmp(L_2TAG_PACKET_1_0_2);
2421 
2422   bind(L_2TAG_PACKET_2_0_2);
2423   movl(eax, Address(rsp, 132));
2424   andl(eax, 2146435072);
2425   cmpl(eax, 2146435072);
2426   jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
2427   subl(rsp, 32);
2428   movsd(Address(rsp, 0), xmm0);
2429   lea(eax, Address(rsp, 40));
2430   movl(Address(rsp, 8), eax);
2431   movl(eax, 2);
2432   movl(Address(rsp, 12), eax);
2433   call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_sin_cos_huge())));
2434   addl(rsp, 32);
2435   fld_d(Address(rsp, 16));
2436   jmp(L_2TAG_PACKET_1_0_2);
2437   bind(L_2TAG_PACKET_4_0_2);
2438   fld_d(Address(rsp, 128));
2439   fmul_d(Address(ebx, 2240));
2440   bind(L_2TAG_PACKET_1_0_2);
2441   movl(ebx, Address(rsp, 56));
2442 }
2443 #endif