/*
* Copyright ( c ) 2016 , 2021 , Intel Corporation . All rights reserved .
* Intel Math Library ( LIBM ) Source Code
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*
*/
#include "precompiled.hpp"
#include "asm/assembler.hpp"
#include "asm/assembler.inline.hpp"
#include "macroAssembler_x86.hpp"
#include "runtime/stubRoutines.hpp"
#include "stubRoutines_x86.hpp"
#include "utilities/globalDefinitions.hpp"
/******************************************************************************/
// ALGORITHM DESCRIPTION - SIN()
// ---------------------
//
// 1. RANGE REDUCTION
//
// We perform an initial range reduction from X to r with
//
// X =~= N * pi/32 + r
//
// so that |r| <= pi/64 + epsilon. We restrict inputs to those
// where |N| <= 932560. Beyond this, the range reduction is
// insufficiently accurate. For extremely small inputs,
// denormalization can occur internally, impacting performance.
// This means that the main path is actually only taken for
// 2^-252 <= |X| < 90112.
//
// To avoid branches, we perform the range reduction to full
// accuracy each time.
//
// X - N * (P_1 + P_2 + P_3)
//
// where P_1 and P_2 are 32-bit numbers (so multiplication by N
// is exact) and P_3 is a 53-bit number. Together, these
// approximate pi well enough for all cases in the restricted
// range.
//
// The main reduction sequence is:
//
// y = 32/pi * x
// N = integer(y)
// (computed by adding and subtracting off SHIFTER)
//
// m_1 = N * P_1
// m_2 = N * P_2
// r_1 = x - m_1
// r = r_1 - m_2
// (this r can be used for most of the calculation)
//
// c_1 = r_1 - r
// m_3 = N * P_3
// c_2 = c_1 - m_2
// c = c_2 - m_3
//
// 2. MAIN ALGORITHM
//
// The algorithm uses a table lookup based on B = M * pi / 32
// where M = N mod 64. The stored values are:
// sigma closest power of 2 to cos(B)
// C_hl 53-bit cos(B) - sigma
// S_hi + S_lo 2 * 53-bit sin(B)
//
// The computation is organized as follows:
//
// sin(B + r + c) = [sin(B) + sigma * r] +
// r * (cos(B) - sigma) +
// sin(B) * [cos(r + c) - 1] +
// cos(B) * [sin(r + c) - r]
//
// which is approximately:
//
// [S_hi + sigma * r] +
// C_hl * r +
// S_lo + S_hi * [(cos(r) - 1) - r * c] +
// (C_hl + sigma) * [(sin(r) - r) + c]
//
// and this is what is actually computed. We separate this sum
// into four parts:
//
// hi + med + pols + corr
//
// where
//
// hi = S_hi + sigma r
// med = C_hl * r
// pols = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
// corr = S_lo + c * ((C_hl + sigma) - S_hi * r)
//
// 3. POLYNOMIAL
//
// The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
// (sin(r) - r) can be rearranged freely, since it is quite
// small, so we exploit parallelism to the fullest.
//
// psc4 = SC_4 * r_1
// msc4 = psc4 * r
// r2 = r * r
// msc2 = SC_2 * r2
// r4 = r2 * r2
// psc3 = SC_3 + msc4
// psc1 = SC_1 + msc2
// msc3 = r4 * psc3
// sincospols = psc1 + msc3
// pols = sincospols *
// <S_hi * r^2 | (C_hl + sigma) * r^3>
//
// 4. CORRECTION TERM
//
// This is where the "c" component of the range reduction is
// taken into account; recall that just "r" is used for most of
// the calculation.
//
// -c = m_3 - c_2
// -d = S_hi * r - (C_hl + sigma)
// corr = -c * -d + S_lo
//
// 5. COMPENSATED SUMMATIONS
//
// The two successive compensated summations add up the high
// and medium parts, leaving just the low parts to add up at
// the end.
//
// rs = sigma * r
// res_int = S_hi + rs
// k_0 = S_hi - res_int
// k_2 = k_0 + rs
// med = C_hl * r
// res_hi = res_int + med
// k_1 = res_int - res_hi
// k_3 = k_1 + med
//
// 6. FINAL SUMMATION
//
// We now add up all the small parts:
//
// res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
//
// Now the overall result is just:
//
// res_hi + res_lo
//
// 7. SMALL ARGUMENTS
//
// If |x| < SNN (SNN meaning the smallest normal number), we
// simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we
// do 2^-55 * (2^55 * x - x).
//
// Special cases:
// sin(NaN) = quiet NaN, and raise invalid exception
// sin(INF) = NaN and raise invalid exception
// sin(+/-0) = +/-0
//
/******************************************************************************/
// The 32 bit code is at most SSE2 compliant
ATTRIBUTE_ALIGNED(8 ) juint _zero_none[] =
{
0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 xbff00000UL
};
ATTRIBUTE_ALIGNED(4 ) juint __4 onpi_d[] =
{
0 x6dc9c883UL, 0 x3ff45f30UL
};
ATTRIBUTE_ALIGNED(4 ) juint _TWO_32H[] =
{
0 x00000000UL, 0 x41f80000UL
};
ATTRIBUTE_ALIGNED(4 ) juint _pi04_3d[] =
{
0 x54442d00UL, 0 x3fe921fbUL, 0 x98cc5180UL, 0 x3ce84698UL, 0 xcbb5bf6cUL,
0 xb9dfc8f8UL
};
ATTRIBUTE_ALIGNED(4 ) juint _pi04_5d[] =
{
0 x54400000UL, 0 x3fe921fbUL, 0 x1a600000UL, 0 x3dc0b461UL, 0 x2e000000UL,
0 x3b93198aUL, 0 x25200000UL, 0 x396b839aUL, 0 x533e63a0UL, 0 x37027044UL
};
ATTRIBUTE_ALIGNED(4 ) juint _SCALE[] =
{
0 x00000000UL, 0 x32600000UL
};
ATTRIBUTE_ALIGNED(4 ) juint _zeros[] =
{
0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 x80000000UL
};
ATTRIBUTE_ALIGNED(4 ) juint _pi04_2d[] =
{
0 x54400000UL, 0 x3fe921fbUL, 0 x1a626331UL, 0 x3dc0b461UL
};
ATTRIBUTE_ALIGNED(4 ) juint _TWO_12H[] =
{
0 x00000000UL, 0 x40b80000UL
};
ATTRIBUTE_ALIGNED(2 ) jushort __4 onpi_31l[] =
{
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x836e, 0 xa2f9,
0 x40d8, 0 x0000, 0 x0000, 0 x0000, 0 x2a50, 0 x9c88, 0 x40b7, 0 x0000, 0 x0000, 0 x0000,
0 xabe8, 0 xfe13, 0 x4099, 0 x0000, 0 x0000, 0 x0000, 0 x6ee0, 0 xfa9a, 0 x4079, 0 x0000,
0 x0000, 0 x0000, 0 x9580, 0 xdb62, 0 x4058, 0 x0000, 0 x0000, 0 x0000, 0 x1c82, 0 xc9e2,
0 x403d, 0 x0000, 0 x0000, 0 x0000, 0 xb1c0, 0 xff28, 0 x4019, 0 x0000, 0 x0000, 0 x0000,
0 xef14, 0 xaf7a, 0 x3ffe, 0 x0000, 0 x0000, 0 x0000, 0 x48dc, 0 xc36e, 0 x3fdf, 0 x0000,
0 x0000, 0 x0000, 0 x3740, 0 xe909, 0 x3fbe, 0 x0000, 0 x0000, 0 x0000, 0 x924a, 0 xb801,
0 x3fa2, 0 x0000, 0 x0000, 0 x0000, 0 x3a32, 0 xdd41, 0 x3f83, 0 x0000, 0 x0000, 0 x0000,
0 x8778, 0 x873f, 0 x3f62, 0 x0000, 0 x0000, 0 x0000, 0 x1298, 0 xb1cb, 0 x3f44, 0 x0000,
0 x0000, 0 x0000, 0 xa208, 0 x9cfb, 0 x3f26, 0 x0000, 0 x0000, 0 x0000, 0 xbaec, 0 xd7d4,
0 x3f06, 0 x0000, 0 x0000, 0 x0000, 0 xd338, 0 x8909, 0 x3ee7, 0 x0000, 0 x0000, 0 x0000,
0 x68b8, 0 xe04d, 0 x3ec7, 0 x0000, 0 x0000, 0 x0000, 0 x4e64, 0 xdf90, 0 x3eaa, 0 x0000,
0 x0000, 0 x0000, 0 xc1a8, 0 xeb1c, 0 x3e89, 0 x0000, 0 x0000, 0 x0000, 0 x2720, 0 xce7d,
0 x3e6a, 0 x0000, 0 x0000, 0 x0000, 0 x77b8, 0 x8bf1, 0 x3e4b, 0 x0000, 0 x0000, 0 x0000,
0 xec7e, 0 xe4a0, 0 x3e2e, 0 x0000, 0 x0000, 0 x0000, 0 xffbc, 0 xf12f, 0 x3e0f, 0 x0000,
0 x0000, 0 x0000, 0 xfdc0, 0 xb301, 0 x3deb, 0 x0000, 0 x0000, 0 x0000, 0 xc5ac, 0 x9788,
0 x3dd1, 0 x0000, 0 x0000, 0 x0000, 0 x47da, 0 x829b, 0 x3db2, 0 x0000, 0 x0000, 0 x0000,
0 xd9e4, 0 xa6cf, 0 x3d93, 0 x0000, 0 x0000, 0 x0000, 0 x36e8, 0 xf961, 0 x3d73, 0 x0000,
0 x0000, 0 x0000, 0 xf668, 0 xf463, 0 x3d54, 0 x0000, 0 x0000, 0 x0000, 0 x5168, 0 xf2ff,
0 x3d35, 0 x0000, 0 x0000, 0 x0000, 0 x758e, 0 xea4f, 0 x3d17, 0 x0000, 0 x0000, 0 x0000,
0 xf17a, 0 xebe5, 0 x3cf8, 0 x0000, 0 x0000, 0 x0000, 0 x9cfa, 0 x9e83, 0 x3cd9, 0 x0000,
0 x0000, 0 x0000, 0 xa4ba, 0 xe294, 0 x3cba, 0 x0000, 0 x0000, 0 x0000, 0 xd7ec, 0 x9afe,
0 x3c9a, 0 x0000, 0 x0000, 0 x0000, 0 xae80, 0 x8fc6, 0 x3c79, 0 x0000, 0 x0000, 0 x0000,
0 x3304, 0 x8560, 0 x3c5c, 0 x0000, 0 x0000, 0 x0000, 0 x6d70, 0 xdf8f, 0 x3c3b, 0 x0000,
0 x0000, 0 x0000, 0 x3ef0, 0 xafc3, 0 x3c1e, 0 x0000, 0 x0000, 0 x0000, 0 xd0d8, 0 x826b,
0 x3bfe, 0 x0000, 0 x0000, 0 x0000, 0 x1c80, 0 xed4f, 0 x3bdd, 0 x0000, 0 x0000, 0 x0000,
0 x730c, 0 xb0af, 0 x3bc1, 0 x0000, 0 x0000, 0 x0000, 0 x6660, 0 xc219, 0 x3ba2, 0 x0000,
0 x0000, 0 x0000, 0 x940c, 0 xabe2, 0 x3b83, 0 x0000, 0 x0000, 0 x0000, 0 xdffc, 0 x8408,
0 x3b64, 0 x0000, 0 x0000, 0 x0000, 0 x6b98, 0 xc402, 0 x3b45, 0 x0000, 0 x0000, 0 x0000,
0 x1818, 0 x9cc4, 0 x3b26, 0 x0000, 0 x0000, 0 x0000, 0 x5390, 0 xaab6, 0 x3b05, 0 x0000,
0 x0000, 0 x0000, 0 xb070, 0 xd464, 0 x3ae9, 0 x0000, 0 x0000, 0 x0000, 0 x231a, 0 x9ef0,
0 x3aca, 0 x0000, 0 x0000, 0 x0000, 0 x0670, 0 xd1f1, 0 x3aaa, 0 x0000, 0 x0000, 0 x0000,
0 x7738, 0 xd9f3, 0 x3a8a, 0 x0000, 0 x0000, 0 x0000, 0 xa834, 0 x8092, 0 x3a6c, 0 x0000,
0 x0000, 0 x0000, 0 xb45c, 0 xce23, 0 x3a4d, 0 x0000, 0 x0000, 0 x0000, 0 x36e8, 0 xb0e5,
0 x3a2d, 0 x0000, 0 x0000, 0 x0000, 0 xd156, 0 xaf44, 0 x3a10, 0 x0000, 0 x0000, 0 x0000,
0 x9f52, 0 x8c82, 0 x39f1, 0 x0000, 0 x0000, 0 x0000, 0 x829c, 0 xff83, 0 x39d1, 0 x0000,
0 x0000, 0 x0000, 0 x7d06, 0 xefc6, 0 x39b3, 0 x0000, 0 x0000, 0 x0000, 0 x93e0, 0 xb0b7,
0 x3992, 0 x0000, 0 x0000, 0 x0000, 0 xedde, 0 xc193, 0 x3975, 0 x0000, 0 x0000, 0 x0000,
0 xbbc0, 0 xcf49, 0 x3952, 0 x0000, 0 x0000, 0 x0000, 0 xbdf0, 0 xd63c, 0 x3937, 0 x0000,
0 x0000, 0 x0000, 0 x1f34, 0 x9f3a, 0 x3918, 0 x0000, 0 x0000, 0 x0000, 0 x3f8e, 0 xe579,
0 x38f9, 0 x0000, 0 x0000, 0 x0000, 0 x90c8, 0 xc3f8, 0 x38d9, 0 x0000, 0 x0000, 0 x0000,
0 x48c0, 0 xf8f8, 0 x38b7, 0 x0000, 0 x0000, 0 x0000, 0 xed56, 0 xafa6, 0 x389c, 0 x0000,
0 x0000, 0 x0000, 0 x8218, 0 xb969, 0 x387d, 0 x0000, 0 x0000, 0 x0000, 0 x1852, 0 xec57,
0 x385e, 0 x0000, 0 x0000, 0 x0000, 0 x670c, 0 xd674, 0 x383e, 0 x0000, 0 x0000, 0 x0000,
0 xad40, 0 xc2c4, 0 x3820, 0 x0000, 0 x0000, 0 x0000, 0 x2e80, 0 xa696, 0 x3801, 0 x0000,
0 x0000, 0 x0000, 0 xd800, 0 xc467, 0 x37dc, 0 x0000, 0 x0000, 0 x0000, 0 x3c72, 0 xc5ae,
0 x37c3, 0 x0000, 0 x0000, 0 x0000, 0 xb006, 0 xac69, 0 x37a4, 0 x0000, 0 x0000, 0 x0000,
0 x34a0, 0 x8cdf, 0 x3782, 0 x0000, 0 x0000, 0 x0000, 0 x9ed2, 0 xd25e, 0 x3766, 0 x0000,
0 x0000, 0 x0000, 0 x6fec, 0 xaaaa, 0 x3747, 0 x0000, 0 x0000, 0 x0000, 0 x6040, 0 xfb5c,
0 x3726, 0 x0000, 0 x0000, 0 x0000, 0 x764c, 0 xa3fc, 0 x3708, 0 x0000, 0 x0000, 0 x0000,
0 xb254, 0 x954e, 0 x36e9, 0 x0000, 0 x0000, 0 x0000, 0 x3e1c, 0 xf5dc, 0 x36ca, 0 x0000,
0 x0000, 0 x0000, 0 x7b06, 0 xc635, 0 x36ac, 0 x0000, 0 x0000, 0 x0000, 0 xa8ba, 0 xd738,
0 x368d, 0 x0000, 0 x0000, 0 x0000, 0 x06cc, 0 xb24e, 0 x366d, 0 x0000, 0 x0000, 0 x0000,
0 x7108, 0 xac76, 0 x364f, 0 x0000, 0 x0000, 0 x0000, 0 x2324, 0 xa7cb, 0 x3630, 0 x0000,
0 x0000, 0 x0000, 0 xac40, 0 xef15, 0 x360f, 0 x0000, 0 x0000, 0 x0000, 0 xae46, 0 xd516,
0 x35f2, 0 x0000, 0 x0000, 0 x0000, 0 x615e, 0 xe003, 0 x35d3, 0 x0000, 0 x0000, 0 x0000,
0 x0cf0, 0 xefe7, 0 x35b1, 0 x0000, 0 x0000, 0 x0000, 0 xfb50, 0 xf98c, 0 x3595, 0 x0000,
0 x0000, 0 x0000, 0 x0abc, 0 xf333, 0 x3575, 0 x0000, 0 x0000, 0 x0000, 0 xdd60, 0 xca3f,
0 x3555, 0 x0000, 0 x0000, 0 x0000, 0 x7eb6, 0 xd87f, 0 x3538, 0 x0000, 0 x0000, 0 x0000,
0 x44f4, 0 xb291, 0 x3519, 0 x0000, 0 x0000, 0 x0000, 0 xff80, 0 xc982, 0 x34f6, 0 x0000,
0 x0000, 0 x0000, 0 x9de0, 0 xd9b8, 0 x34db, 0 x0000, 0 x0000, 0 x0000, 0 xcd42, 0 x9366,
0 x34bc, 0 x0000, 0 x0000, 0 x0000, 0 xbef0, 0 xfaee, 0 x349d, 0 x0000, 0 x0000, 0 x0000,
0 xdac4, 0 xb6f1, 0 x347d, 0 x0000, 0 x0000, 0 x0000, 0 xf140, 0 x94de, 0 x345d, 0 x0000,
0 x0000, 0 x0000, 0 xa218, 0 x8b4b, 0 x343e, 0 x0000, 0 x0000, 0 x0000, 0 x6380, 0 xa135,
0 x341e, 0 x0000, 0 x0000, 0 x0000, 0 xb184, 0 x8cb2, 0 x3402, 0 x0000, 0 x0000, 0 x0000,
0 x196e, 0 xdc61, 0 x33e3, 0 x0000, 0 x0000, 0 x0000, 0 x0c00, 0 xde05, 0 x33c4, 0 x0000,
0 x0000, 0 x0000, 0 xef9a, 0 xbd38, 0 x33a5, 0 x0000, 0 x0000, 0 x0000, 0 xc1a0, 0 xdf00,
0 x3385, 0 x0000, 0 x0000, 0 x0000, 0 x1090, 0 x9973, 0 x3365, 0 x0000, 0 x0000, 0 x0000,
0 x4882, 0 x8301, 0 x3348, 0 x0000, 0 x0000, 0 x0000, 0 x7abe, 0 xadc7, 0 x3329, 0 x0000,
0 x0000, 0 x0000, 0 x7cba, 0 xec2b, 0 x330a, 0 x0000, 0 x0000, 0 x0000, 0 xa520, 0 x8f21,
0 x32e9, 0 x0000, 0 x0000, 0 x0000, 0 x710c, 0 x8d36, 0 x32cc, 0 x0000, 0 x0000, 0 x0000,
0 x5212, 0 xc6ed, 0 x32ad, 0 x0000, 0 x0000, 0 x0000, 0 x7308, 0 xfd76, 0 x328d, 0 x0000,
0 x0000, 0 x0000, 0 x5014, 0 xd548, 0 x326f, 0 x0000, 0 x0000, 0 x0000, 0 xd3f2, 0 xb499,
0 x3250, 0 x0000, 0 x0000, 0 x0000, 0 x7f74, 0 xa606, 0 x3230, 0 x0000, 0 x0000, 0 x0000,
0 xf0a8, 0 xd720, 0 x3212, 0 x0000, 0 x0000, 0 x0000, 0 x185c, 0 xe20f, 0 x31f2, 0 x0000,
0 x0000, 0 x0000, 0 xa5a8, 0 x8738, 0 x31d4, 0 x0000, 0 x0000, 0 x0000, 0 xdd74, 0 xcafb,
0 x31b4, 0 x0000, 0 x0000, 0 x0000, 0 x98b6, 0 xbd8e, 0 x3196, 0 x0000, 0 x0000, 0 x0000,
0 xe9de, 0 x977f, 0 x3177, 0 x0000, 0 x0000, 0 x0000, 0 x67c0, 0 x818d, 0 x3158, 0 x0000,
0 x0000, 0 x0000, 0 xe52a, 0 x9322, 0 x3139, 0 x0000, 0 x0000, 0 x0000, 0 xe568, 0 x9b6c,
0 x3119, 0 x0000, 0 x0000, 0 x0000, 0 x2358, 0 xaa0a, 0 x30fa, 0 x0000, 0 x0000, 0 x0000,
0 xe480, 0 xe13b, 0 x30d9, 0 x0000, 0 x0000, 0 x0000, 0 x3024, 0 x90a1, 0 x30bd, 0 x0000,
0 x0000, 0 x0000, 0 x9620, 0 xda30, 0 x309d, 0 x0000, 0 x0000, 0 x0000, 0 x898a, 0 xb388,
0 x307f, 0 x0000, 0 x0000, 0 x0000, 0 xb24c, 0 xc891, 0 x3060, 0 x0000, 0 x0000, 0 x0000,
0 x8056, 0 xf98b, 0 x3041, 0 x0000, 0 x0000, 0 x0000, 0 x72a4, 0 xa1ea, 0 x3021, 0 x0000,
0 x0000, 0 x0000, 0 x6af8, 0 x9488, 0 x3001, 0 x0000, 0 x0000, 0 x0000, 0 xe00c, 0 xdfcb,
0 x2fe4, 0 x0000, 0 x0000, 0 x0000, 0 xeeec, 0 xc941, 0 x2fc4, 0 x0000, 0 x0000, 0 x0000,
0 x53e0, 0 xe70f, 0 x2fa4, 0 x0000, 0 x0000, 0 x0000, 0 x8f60, 0 x9c07, 0 x2f85, 0 x0000,
0 x0000, 0 x0000, 0 xb328, 0 xc3e7, 0 x2f68, 0 x0000, 0 x0000, 0 x0000, 0 x9404, 0 xf8c7,
0 x2f48, 0 x0000, 0 x0000, 0 x0000, 0 x38e0, 0 xc99f, 0 x2f29, 0 x0000, 0 x0000, 0 x0000,
0 x9778, 0 xd984, 0 x2f09, 0 x0000, 0 x0000, 0 x0000, 0 xe700, 0 xd142, 0 x2eea, 0 x0000,
0 x0000, 0 x0000, 0 xd904, 0 x9443, 0 x2ecd, 0 x0000, 0 x0000, 0 x0000, 0 xd4ba, 0 xae7e,
0 x2eae, 0 x0000, 0 x0000, 0 x0000, 0 x8e5e, 0 x8524, 0 x2e8f, 0 x0000, 0 x0000, 0 x0000,
0 xb550, 0 xc9ed, 0 x2e6e, 0 x0000, 0 x0000, 0 x0000, 0 x53b8, 0 x8648, 0 x2e51, 0 x0000,
0 x0000, 0 x0000, 0 xdae4, 0 x87f9, 0 x2e32, 0 x0000, 0 x0000, 0 x0000, 0 x2942, 0 xd966,
0 x2e13, 0 x0000, 0 x0000, 0 x0000, 0 x4f28, 0 xcf3c, 0 x2df3, 0 x0000, 0 x0000, 0 x0000,
0 xfa40, 0 xc4ef, 0 x2dd1, 0 x0000, 0 x0000, 0 x0000, 0 x4424, 0 xbca7, 0 x2db5, 0 x0000,
0 x0000, 0 x0000, 0 x2e62, 0 xcdc5, 0 x2d97, 0 x0000, 0 x0000, 0 x0000, 0 xed88, 0 x996b,
0 x2d78, 0 x0000, 0 x0000, 0 x0000, 0 x7c30, 0 xd97d, 0 x2d56, 0 x0000, 0 x0000, 0 x0000,
0 xed26, 0 xbf6e, 0 x2d3a, 0 x0000, 0 x0000, 0 x0000, 0 x2918, 0 x921b, 0 x2d1a, 0 x0000,
0 x0000, 0 x0000, 0 x4e24, 0 xe84e, 0 x2cfb, 0 x0000, 0 x0000, 0 x0000, 0 x6dc0, 0 x92ec,
0 x2cdd, 0 x0000, 0 x0000, 0 x0000, 0 x4f2c, 0 xacf8, 0 x2cbd, 0 x0000, 0 x0000, 0 x0000,
0 xc634, 0 xf094, 0 x2c9e, 0 x0000, 0 x0000, 0 x0000, 0 xdc70, 0 xe5d3, 0 x2c7e, 0 x0000,
0 x0000, 0 x0000, 0 x2180, 0 xa600, 0 x2c5b, 0 x0000, 0 x0000, 0 x0000, 0 x8480, 0 xd680,
0 x2c3c, 0 x0000, 0 x0000, 0 x0000, 0 x8b24, 0 xd63b, 0 x2c22, 0 x0000, 0 x0000, 0 x0000,
0 x02e0, 0 xaa47, 0 x2c00, 0 x0000, 0 x0000, 0 x0000, 0 x9ad0, 0 xee84, 0 x2be3, 0 x0000,
0 x0000, 0 x0000, 0 xf7dc, 0 xf699, 0 x2bc6, 0 x0000, 0 x0000, 0 x0000, 0 xddde, 0 xe490,
0 x2ba7, 0 x0000, 0 x0000, 0 x0000, 0 x34a0, 0 xb4fd, 0 x2b85, 0 x0000, 0 x0000, 0 x0000,
0 x91b4, 0 x8ef6, 0 x2b68, 0 x0000, 0 x0000, 0 x0000, 0 xa3e0, 0 xa2a7, 0 x2b47, 0 x0000,
0 x0000, 0 x0000, 0 xcce4, 0 x82b3, 0 x2b2a, 0 x0000, 0 x0000, 0 x0000, 0 xe4be, 0 x8207,
0 x2b0c, 0 x0000, 0 x0000, 0 x0000, 0 x1d92, 0 xab43, 0 x2aed, 0 x0000, 0 x0000, 0 x0000,
0 xe818, 0 xf9f6, 0 x2acd, 0 x0000, 0 x0000, 0 x0000, 0 xff12, 0 xba80, 0 x2aaf, 0 x0000,
0 x0000, 0 x0000, 0 x5254, 0 x8529, 0 x2a90, 0 x0000, 0 x0000, 0 x0000, 0 x1b88, 0 xe032,
0 x2a71, 0 x0000, 0 x0000, 0 x0000, 0 x3248, 0 xd86d, 0 x2a50, 0 x0000, 0 x0000, 0 x0000,
0 x3140, 0 xc9d5, 0 x2a2e, 0 x0000, 0 x0000, 0 x0000, 0 x14e6, 0 xbd47, 0 x2a14, 0 x0000,
0 x0000, 0 x0000, 0 x5c10, 0 xe544, 0 x29f4, 0 x0000, 0 x0000, 0 x0000, 0 x9f50, 0 x90b6,
0 x29d4, 0 x0000, 0 x0000, 0 x0000, 0 x9850, 0 xab55, 0 x29b6, 0 x0000, 0 x0000, 0 x0000,
0 x2750, 0 x9d07, 0 x2998, 0 x0000, 0 x0000, 0 x0000, 0 x6700, 0 x8bbb, 0 x2973, 0 x0000,
0 x0000, 0 x0000, 0 x5dba, 0 xed31, 0 x295a, 0 x0000, 0 x0000, 0 x0000, 0 x61dc, 0 x85fe,
0 x293a, 0 x0000, 0 x0000, 0 x0000, 0 x9ba2, 0 xd6b4, 0 x291c, 0 x0000, 0 x0000, 0 x0000,
0 x2d30, 0 xe3a5, 0 x28fb, 0 x0000, 0 x0000, 0 x0000, 0 x6630, 0 xb566, 0 x28dd, 0 x0000,
0 x0000, 0 x0000, 0 x5ad4, 0 xa829, 0 x28bf, 0 x0000, 0 x0000, 0 x0000, 0 x89d8, 0 xe290,
0 x28a0, 0 x0000, 0 x0000, 0 x0000, 0 x3916, 0 xc428, 0 x2881, 0 x0000, 0 x0000, 0 x0000,
0 x0490, 0 xbea4, 0 x2860, 0 x0000, 0 x0000, 0 x0000, 0 xee06, 0 x80ee, 0 x2843, 0 x0000,
0 x0000, 0 x0000, 0 xfc00, 0 xf327, 0 x2820, 0 x0000, 0 x0000, 0 x0000, 0 xea40, 0 xa871,
0 x2800, 0 x0000, 0 x0000, 0 x0000, 0 x63d8, 0 x9c26, 0 x27e4, 0 x0000, 0 x0000, 0 x0000,
0 x07ba, 0 xc0c9, 0 x27c7, 0 x0000, 0 x0000, 0 x0000, 0 x3fa2, 0 x9797, 0 x27a8, 0 x0000,
0 x0000, 0 x0000, 0 x21c6, 0 xfeca, 0 x2789, 0 x0000, 0 x0000, 0 x0000, 0 xde40, 0 x860d,
0 x2768, 0 x0000, 0 x0000, 0 x0000, 0 x9cc8, 0 x98ce, 0 x2749, 0 x0000, 0 x0000, 0 x0000,
0 x3778, 0 xa31c, 0 x272a, 0 x0000, 0 x0000, 0 x0000, 0 xe778, 0 xf6e2, 0 x270b, 0 x0000,
0 x0000, 0 x0000, 0 x59b8, 0 xf841, 0 x26ed, 0 x0000, 0 x0000, 0 x0000, 0 x02e0, 0 xad04,
0 x26cd, 0 x0000, 0 x0000, 0 x0000, 0 x5a92, 0 x9380, 0 x26b0, 0 x0000, 0 x0000, 0 x0000,
0 xc740, 0 x8886, 0 x268d, 0 x0000, 0 x0000, 0 x0000, 0 x0680, 0 xfaf8, 0 x266c, 0 x0000,
0 x0000, 0 x0000, 0 xfb60, 0 x897f, 0 x2653, 0 x0000, 0 x0000, 0 x0000, 0 x8760, 0 xf903,
0 x2634, 0 x0000, 0 x0000, 0 x0000, 0 xad2a, 0 xc2c8, 0 x2615, 0 x0000, 0 x0000, 0 x0000,
0 x2d86, 0 x8aef, 0 x25f6, 0 x0000, 0 x0000, 0 x0000, 0 x1ef4, 0 xe627, 0 x25d6, 0 x0000,
0 x0000, 0 x0000, 0 x09e4, 0 x8020, 0 x25b7, 0 x0000, 0 x0000, 0 x0000, 0 x7548, 0 xd227,
0 x2598, 0 x0000, 0 x0000, 0 x0000, 0 x75dc, 0 xfb5b, 0 x2579, 0 x0000, 0 x0000, 0 x0000,
0 xea84, 0 xc8b6, 0 x255a, 0 x0000, 0 x0000, 0 x0000, 0 xe4d0, 0 x8145, 0 x253b, 0 x0000,
0 x0000, 0 x0000, 0 x3640, 0 x9768, 0 x251c, 0 x0000, 0 x0000, 0 x0000, 0 x246a, 0 xccec,
0 x24fe, 0 x0000, 0 x0000, 0 x0000, 0 x51d0, 0 xa075, 0 x24dd, 0 x0000, 0 x0000, 0 x0000,
0 x4638, 0 xa385, 0 x24bf, 0 x0000, 0 x0000, 0 x0000, 0 xd788, 0 xd776, 0 x24a1, 0 x0000,
0 x0000, 0 x0000, 0 x1370, 0 x8997, 0 x2482, 0 x0000, 0 x0000, 0 x0000, 0 x1e88, 0 x9b67,
0 x2462, 0 x0000, 0 x0000, 0 x0000, 0 x6c08, 0 xd975, 0 x2444, 0 x0000, 0 x0000, 0 x0000,
0 xfdb0, 0 xcfc0, 0 x2422, 0 x0000, 0 x0000, 0 x0000, 0 x3100, 0 xc026, 0 x2406, 0 x0000,
0 x0000, 0 x0000, 0 xc5b4, 0 xae64, 0 x23e6, 0 x0000, 0 x0000, 0 x0000, 0 x2280, 0 xf687,
0 x23c3, 0 x0000, 0 x0000, 0 x0000, 0 x2de0, 0 x9006, 0 x23a9, 0 x0000, 0 x0000, 0 x0000,
0 x24bc, 0 xf631, 0 x238a, 0 x0000, 0 x0000, 0 x0000, 0 xb8d4, 0 xa975, 0 x236b, 0 x0000,
0 x0000, 0 x0000, 0 xd9a4, 0 xb949, 0 x234b, 0 x0000, 0 x0000, 0 x0000, 0 xb54e, 0 xbd39,
0 x232d, 0 x0000, 0 x0000, 0 x0000, 0 x4aac, 0 x9a52, 0 x230e, 0 x0000, 0 x0000, 0 x0000,
0 xbbbc, 0 xd085, 0 x22ef, 0 x0000, 0 x0000, 0 x0000, 0 xdf18, 0 xc633, 0 x22cf, 0 x0000,
0 x0000, 0 x0000, 0 x16d0, 0 xeca5, 0 x22af, 0 x0000, 0 x0000, 0 x0000, 0 xf2a0, 0 xdf6f,
0 x228e, 0 x0000, 0 x0000, 0 x0000, 0 x8c44, 0 xe86b, 0 x2272, 0 x0000, 0 x0000, 0 x0000,
0 x35c0, 0 xbbf4, 0 x2253, 0 x0000, 0 x0000, 0 x0000, 0 x0c40, 0 xdafb, 0 x2230, 0 x0000,
0 x0000, 0 x0000, 0 x92dc, 0 x9935, 0 x2216, 0 x0000, 0 x0000, 0 x0000, 0 x0ca0, 0 xbda6,
0 x21f3, 0 x0000, 0 x0000, 0 x0000, 0 x5958, 0 xa6fd, 0 x21d6, 0 x0000, 0 x0000, 0 x0000,
0 xa3dc, 0 x9d7f, 0 x21b9, 0 x0000, 0 x0000, 0 x0000, 0 x79dc, 0 xfcb5, 0 x2199, 0 x0000,
0 x0000, 0 x0000, 0 xf264, 0 xcebb, 0 x217b, 0 x0000, 0 x0000, 0 x0000, 0 x0abe, 0 x8308,
0 x215c, 0 x0000, 0 x0000, 0 x0000, 0 x30ae, 0 xb463, 0 x213d, 0 x0000, 0 x0000, 0 x0000,
0 x6228, 0 xb040, 0 x211c, 0 x0000, 0 x0000, 0 x0000, 0 xc9b2, 0 xf43b, 0 x20ff, 0 x0000,
0 x0000, 0 x0000, 0 x3d8e, 0 xa4b3, 0 x20e0, 0 x0000, 0 x0000, 0 x0000, 0 x84e6, 0 x8dab,
0 x20c1, 0 x0000, 0 x0000, 0 x0000, 0 xa124, 0 x9b74, 0 x20a1, 0 x0000, 0 x0000, 0 x0000,
0 xc276, 0 xd497, 0 x2083, 0 x0000, 0 x0000, 0 x0000, 0 x6354, 0 xa466, 0 x2063, 0 x0000,
0 x0000, 0 x0000, 0 x8654, 0 xaf0a, 0 x2044, 0 x0000, 0 x0000, 0 x0000, 0 x1d20, 0 xfa5c,
0 x2024, 0 x0000, 0 x0000, 0 x0000, 0 xbcd0, 0 xf3f0, 0 x2004, 0 x0000, 0 x0000, 0 x0000,
0 xedf0, 0 xf0b6, 0 x1fe7, 0 x0000, 0 x0000, 0 x0000, 0 x45bc, 0 x9182, 0 x1fc9, 0 x0000,
0 x0000, 0 x0000, 0 xe254, 0 xdc85, 0 x1faa, 0 x0000, 0 x0000, 0 x0000, 0 xb898, 0 xe9b1,
0 x1f8a, 0 x0000, 0 x0000, 0 x0000, 0 x0ebe, 0 xe6f0, 0 x1f6c, 0 x0000, 0 x0000, 0 x0000,
0 xa9b8, 0 xf584, 0 x1f4c, 0 x0000, 0 x0000, 0 x0000, 0 x12e8, 0 xdf6b, 0 x1f2e, 0 x0000,
0 x0000, 0 x0000, 0 x9f9e, 0 xcd55, 0 x1f0f, 0 x0000, 0 x0000, 0 x0000, 0 x05a0, 0 xec3a,
0 x1eef, 0 x0000, 0 x0000, 0 x0000, 0 xd8e0, 0 x96f8, 0 x1ed1, 0 x0000, 0 x0000, 0 x0000,
0 x3bd4, 0 xccc6, 0 x1eb1, 0 x0000, 0 x0000, 0 x0000, 0 x4910, 0 xb87b, 0 x1e93, 0 x0000,
0 x0000, 0 x0000, 0 xbefc, 0 xd40b, 0 x1e73, 0 x0000, 0 x0000, 0 x0000, 0 x317e, 0 xa406,
0 x1e55, 0 x0000, 0 x0000, 0 x0000, 0 x6bb2, 0 xc2b2, 0 x1e36, 0 x0000, 0 x0000, 0 x0000,
0 xb87e, 0 xbb78, 0 x1e17, 0 x0000, 0 x0000, 0 x0000, 0 xa03c, 0 xdbbd, 0 x1df7, 0 x0000,
0 x0000, 0 x0000, 0 x5b6c, 0 xe3c8, 0 x1dd9, 0 x0000, 0 x0000, 0 x0000, 0 x8968, 0 xca8e,
0 x1dba, 0 x0000, 0 x0000, 0 x0000, 0 xc024, 0 xe6ab, 0 x1d9a, 0 x0000, 0 x0000, 0 x0000,
0 x4110, 0 xd4eb, 0 x1d7a, 0 x0000, 0 x0000, 0 x0000, 0 xa168, 0 xbdb5, 0 x1d5d, 0 x0000,
0 x0000, 0 x0000, 0 x012e, 0 xa5fa, 0 x1d3e, 0 x0000, 0 x0000, 0 x0000, 0 x6838, 0 x9c1f,
0 x1d1e, 0 x0000, 0 x0000, 0 x0000, 0 xa158, 0 xaa76, 0 x1d00, 0 x0000, 0 x0000, 0 x0000,
0 x090a, 0 xbd95, 0 x1ce1, 0 x0000, 0 x0000, 0 x0000, 0 xf73e, 0 x8b6d, 0 x1cc2, 0 x0000,
0 x0000, 0 x0000, 0 x5fda, 0 xbcbf, 0 x1ca3, 0 x0000, 0 x0000, 0 x0000, 0 xdbe8, 0 xb89f,
0 x1c84, 0 x0000, 0 x0000, 0 x0000, 0 x6e4c, 0 x96c7, 0 x1c64, 0 x0000, 0 x0000, 0 x0000,
0 x19c2, 0 xf2a4, 0 x1c46, 0 x0000, 0 x0000, 0 x0000, 0 xb800, 0 xf855, 0 x1c1e, 0 x0000,
0 x0000, 0 x0000, 0 x87fc, 0 x85ff, 0 x1c08, 0 x0000, 0 x0000, 0 x0000, 0 x1418, 0 x839f,
0 x1be9, 0 x0000, 0 x0000, 0 x0000, 0 x6186, 0 xd9d8, 0 x1bca, 0 x0000, 0 x0000, 0 x0000,
0 xf500, 0 xabaa, 0 x1ba6, 0 x0000, 0 x0000, 0 x0000, 0 x7b36, 0 xdafe, 0 x1b8c, 0 x0000,
0 x0000, 0 x0000, 0 xf394, 0 xe6d8, 0 x1b6c, 0 x0000, 0 x0000, 0 x0000, 0 x6efc, 0 x9e55,
0 x1b4e, 0 x0000, 0 x0000, 0 x0000, 0 x5e10, 0 xc523, 0 x1b2e, 0 x0000, 0 x0000, 0 x0000,
0 x8210, 0 xb6f9, 0 x1b0d, 0 x0000, 0 x0000, 0 x0000, 0 x9ab0, 0 x96e3, 0 x1af1, 0 x0000,
0 x0000, 0 x0000, 0 x3864, 0 x92e7, 0 x1ad1, 0 x0000, 0 x0000, 0 x0000, 0 x9878, 0 xdc65,
0 x1ab1, 0 x0000, 0 x0000, 0 x0000, 0 xfa20, 0 xd6cb, 0 x1a94, 0 x0000, 0 x0000, 0 x0000,
0 x6c00, 0 xa4e4, 0 x1a70, 0 x0000, 0 x0000, 0 x0000, 0 xab40, 0 xb41b, 0 x1a53, 0 x0000,
0 x0000, 0 x0000, 0 x43a4, 0 x8ede, 0 x1a37, 0 x0000, 0 x0000, 0 x0000, 0 x22e0, 0 x9314,
0 x1a15, 0 x0000, 0 x0000, 0 x0000, 0 x6170, 0 xb949, 0 x19f8, 0 x0000, 0 x0000, 0 x0000,
0 x6b00, 0 xe056, 0 x19d8, 0 x0000, 0 x0000, 0 x0000, 0 x9ba8, 0 xa94c, 0 x19b9, 0 x0000,
0 x0000, 0 x0000, 0 xfaa0, 0 xaa16, 0 x199b, 0 x0000, 0 x0000, 0 x0000, 0 x899a, 0 xf627,
0 x197d, 0 x0000, 0 x0000, 0 x0000, 0 x9f20, 0 xfb70, 0 x195d, 0 x0000, 0 x0000, 0 x0000,
0 xa4b8, 0 xc176, 0 x193e, 0 x0000, 0 x0000, 0 x0000, 0 xb21c, 0 x85c3, 0 x1920, 0 x0000,
0 x0000, 0 x0000, 0 x50d2, 0 x9b19, 0 x1901, 0 x0000, 0 x0000, 0 x0000, 0 xd4b0, 0 xb708,
0 x18e0, 0 x0000, 0 x0000, 0 x0000, 0 xfb88, 0 xf510, 0 x18c1, 0 x0000, 0 x0000, 0 x0000,
0 x31ec, 0 xdc8d, 0 x18a3, 0 x0000, 0 x0000, 0 x0000, 0 x3c00, 0 xbff9, 0 x1885, 0 x0000,
0 x0000, 0 x0000, 0 x5020, 0 xc30b, 0 x1862, 0 x0000, 0 x0000, 0 x0000, 0 xd4f0, 0 xda0c,
0 x1844, 0 x0000, 0 x0000, 0 x0000, 0 x20d2, 0 x99a5, 0 x1828, 0 x0000, 0 x0000, 0 x0000,
0 x852e, 0 xd159, 0 x1809, 0 x0000, 0 x0000, 0 x0000, 0 x7cd8, 0 x97a1, 0 x17e9, 0 x0000,
0 x0000, 0 x0000, 0 x423a, 0 x997b, 0 x17cb, 0 x0000, 0 x0000, 0 x0000, 0 xc1c0, 0 xbe7d,
0 x17a8, 0 x0000, 0 x0000, 0 x0000, 0 xe8bc, 0 xdcdd, 0 x178d, 0 x0000, 0 x0000, 0 x0000,
0 x8b28, 0 xae06, 0 x176e, 0 x0000, 0 x0000, 0 x0000, 0 x102e, 0 xb8d4, 0 x174f, 0 x0000,
0 x0000, 0 x0000, 0 xaa00, 0 xaa5c, 0 x172f, 0 x0000, 0 x0000, 0 x0000, 0 x51f0, 0 x9fc0,
0 x170e, 0 x0000, 0 x0000, 0 x0000, 0 xf858, 0 xe181, 0 x16f2, 0 x0000, 0 x0000, 0 x0000,
0 x91a8, 0 x8162, 0 x16d3, 0 x0000, 0 x0000, 0 x0000, 0 x5f40, 0 xcb6f, 0 x16b1, 0 x0000,
0 x0000, 0 x0000, 0 xbb50, 0 xe55f, 0 x1693, 0 x0000, 0 x0000, 0 x0000, 0 xacd2, 0 xd895,
0 x1676, 0 x0000, 0 x0000, 0 x0000, 0 xef30, 0 x97bf, 0 x1654, 0 x0000, 0 x0000, 0 x0000,
0 xf700, 0 xb3d7, 0 x1633, 0 x0000, 0 x0000, 0 x0000, 0 x3454, 0 xa7b5, 0 x1619, 0 x0000,
0 x0000, 0 x0000, 0 x6b00, 0 xa929, 0 x15f6, 0 x0000, 0 x0000, 0 x0000, 0 x9f04, 0 x89f7,
0 x15db, 0 x0000, 0 x0000, 0 x0000, 0 xad78, 0 xd985, 0 x15bc, 0 x0000, 0 x0000, 0 x0000,
0 xa46a, 0 xae3f, 0 x159d, 0 x0000, 0 x0000, 0 x0000, 0 x63a0, 0 xd0da, 0 x157c, 0 x0000,
0 x0000, 0 x0000, 0 x5e90, 0 x817d, 0 x155e, 0 x0000, 0 x0000, 0 x0000, 0 x1494, 0 xb13f,
0 x1540, 0 x0000, 0 x0000, 0 x0000, 0 x0090, 0 x9c40, 0 x1521, 0 x0000, 0 x0000, 0 x0000,
0 xdd70, 0 xcc86, 0 x1500, 0 x0000, 0 x0000, 0 x0000, 0 x64f8, 0 xdb6f, 0 x14e1, 0 x0000,
0 x0000, 0 x0000, 0 xe22c, 0 xac17, 0 x14c3, 0 x0000, 0 x0000, 0 x0000, 0 x60e0, 0 xa9ad,
0 x14a3, 0 x0000, 0 x0000, 0 x0000, 0 x4640, 0 xd658, 0 x1481, 0 x0000, 0 x0000, 0 x0000,
0 x6490, 0 xa181, 0 x1467, 0 x0000, 0 x0000, 0 x0000, 0 x1df4, 0 xaaa2, 0 x1447, 0 x0000,
0 x0000, 0 x0000, 0 xb94a, 0 x8f61, 0 x1429, 0 x0000, 0 x0000, 0 x0000, 0 x5198, 0 x9d83,
0 x1409, 0 x0000, 0 x0000, 0 x0000, 0 x0f7a, 0 xa818, 0 x13eb, 0 x0000, 0 x0000, 0 x0000,
0 xc45e, 0 xc06c, 0 x13cc, 0 x0000, 0 x0000, 0 x0000, 0 x4ec0, 0 xfa29, 0 x13a8, 0 x0000,
0 x0000, 0 x0000, 0 x6418, 0 x8cad, 0 x138c, 0 x0000, 0 x0000, 0 x0000, 0 xbcc8, 0 xe7d1,
0 x136f, 0 x0000, 0 x0000, 0 x0000, 0 xc934, 0 xf9b0, 0 x134f, 0 x0000, 0 x0000, 0 x0000,
0 x6ce0, 0 x98df, 0 x1331, 0 x0000, 0 x0000, 0 x0000, 0 x3516, 0 xe5e9, 0 x1312, 0 x0000,
0 x0000, 0 x0000, 0 xc6c0, 0 xef8b, 0 x12ef, 0 x0000, 0 x0000, 0 x0000, 0 xaf02, 0 x913d,
0 x12d4, 0 x0000, 0 x0000, 0 x0000, 0 xd230, 0 xe1d5, 0 x12b5, 0 x0000, 0 x0000, 0 x0000,
0 xfba8, 0 xc232, 0 x1295, 0 x0000, 0 x0000, 0 x0000, 0 x7ba4, 0 xabeb, 0 x1277, 0 x0000,
0 x0000, 0 x0000, 0 x6e5c, 0 xc692, 0 x1258, 0 x0000, 0 x0000, 0 x0000, 0 x76a2, 0 x9756,
0 x1239, 0 x0000, 0 x0000, 0 x0000, 0 xe180, 0 xe423, 0 x1214, 0 x0000, 0 x0000, 0 x0000,
0 x8c3c, 0 x90f8, 0 x11fb, 0 x0000, 0 x0000, 0 x0000, 0 x9f3c, 0 x9fd2, 0 x11dc, 0 x0000,
0 x0000, 0 x0000, 0 x53e0, 0 xb73e, 0 x11bd, 0 x0000, 0 x0000, 0 x0000, 0 x45be, 0 x88d6,
0 x119e, 0 x0000, 0 x0000, 0 x0000, 0 x111a, 0 x8bc0, 0 x117f, 0 x0000, 0 x0000, 0 x0000,
0 xe26a, 0 xd7ff, 0 x1160, 0 x0000, 0 x0000, 0 x0000, 0 xfb60, 0 xdd8d, 0 x113f, 0 x0000,
0 x0000, 0 x0000, 0 x9370, 0 xc108, 0 x1120, 0 x0000, 0 x0000, 0 x0000, 0 x9654, 0 x8baf,
0 x1103, 0 x0000, 0 x0000, 0 x0000, 0 xd6ec, 0 xd6b9, 0 x10e4, 0 x0000, 0 x0000, 0 x0000,
0 x23e4, 0 xd7b7, 0 x10c4, 0 x0000, 0 x0000, 0 x0000, 0 x1aa6, 0 xa847, 0 x10a6, 0 x0000,
0 x0000, 0 x0000, 0 xbee6, 0 x9fef, 0 x1087, 0 x0000, 0 x0000, 0 x0000, 0 x26d0, 0 xa6eb,
0 x1066, 0 x0000, 0 x0000, 0 x0000, 0 x5b86, 0 xa880, 0 x1049, 0 x0000, 0 x0000, 0 x0000,
0 x125c, 0 xd971, 0 x1029, 0 x0000, 0 x0000, 0 x0000, 0 x1f78, 0 x9d18, 0 x100a, 0 x0000,
0 x0000, 0 x0000, 0 x0e84, 0 xb15b, 0 x0feb, 0 x0000, 0 x0000, 0 x0000, 0 xd0c0, 0 xc150,
0 x0fcc, 0 x0000, 0 x0000, 0 x0000, 0 xa330, 0 xc40c, 0 x0fad, 0 x0000, 0 x0000, 0 x0000,
0 x5202, 0 xfc2c, 0 x0f8f, 0 x0000, 0 x0000, 0 x0000, 0 x3f7c, 0 xecf5, 0 x0f6f, 0 x0000,
0 x0000, 0 x0000, 0 xef44, 0 xfdfd, 0 x0f50, 0 x0000, 0 x0000, 0 x0000, 0 x3f6c, 0 xab1b,
0 x0f31, 0 x0000, 0 x0000, 0 x0000, 0 xf658, 0 x89ec, 0 x0f11, 0 x0000, 0 x0000, 0 x0000,
0 xbfc8, 0 x9ba8, 0 x0ef4, 0 x0000, 0 x0000, 0 x0000, 0 x3d40, 0 xbe21, 0 x0ed5, 0 x0000,
0 x0000, 0 x0000, 0 xbbc4, 0 xc70d, 0 x0eb6, 0 x0000, 0 x0000, 0 x0000, 0 x5158, 0 xdb16,
0 x0e96, 0 x0000, 0 x0000, 0 x0000, 0 xb5a8, 0 xa8d8, 0 x0e78, 0 x0000, 0 x0000, 0 x0000,
0 xcccc, 0 xb40e, 0 x0e58, 0 x0000, 0 x0000, 0 x0000, 0 x448c, 0 xcb62, 0 x0e3a, 0 x0000,
0 x0000, 0 x0000, 0 xf12a, 0 x8aed, 0 x0e1b, 0 x0000, 0 x0000, 0 x0000, 0 x79d0, 0 xc59c,
0 x0dfb, 0 x0000, 0 x0000, 0 x0000, 0 x06b4, 0 xcdc9, 0 x0ddd, 0 x0000, 0 x0000, 0 x0000,
0 xae70, 0 xa979, 0 x0dbe, 0 x0000, 0 x0000, 0 x0000, 0 x317c, 0 xa8fb, 0 x0d9e, 0 x0000,
0 x0000, 0 x0000, 0 x5fe0, 0 x8a50, 0 x0d7d, 0 x0000, 0 x0000, 0 x0000, 0 x70b6, 0 xfdfa,
0 x0d61, 0 x0000, 0 x0000, 0 x0000, 0 x1640, 0 x9dc7, 0 x0d41, 0 x0000, 0 x0000, 0 x0000,
0 x9a9c, 0 xdc50, 0 x0d23, 0 x0000, 0 x0000, 0 x0000, 0 x4fcc, 0 x9a9b, 0 x0d04, 0 x0000,
0 x0000, 0 x0000, 0 x7e48, 0 x8f77, 0 x0ce5, 0 x0000, 0 x0000, 0 x0000, 0 x84e4, 0 xd4b9,
0 x0cc6, 0 x0000, 0 x0000, 0 x0000, 0 x84e0, 0 xbd10, 0 x0ca6, 0 x0000, 0 x0000, 0 x0000,
0 x1b0a, 0 xc8d9, 0 x0c88, 0 x0000, 0 x0000, 0 x0000, 0 x6a48, 0 xfc81, 0 x0c68, 0 x0000,
0 x0000, 0 x0000, 0 x070a, 0 xbef6, 0 x0c4a, 0 x0000, 0 x0000, 0 x0000, 0 x8a70, 0 xf096,
0 x0c2b, 0 x0000, 0 x0000, 0 x0000, 0 xecc2, 0 xc994, 0 x0c0c, 0 x0000, 0 x0000, 0 x0000,
0 x1540, 0 x9537, 0 x0bea, 0 x0000, 0 x0000, 0 x0000, 0 x1b02, 0 xab5b, 0 x0bce, 0 x0000,
0 x0000, 0 x0000, 0 x5dc0, 0 xb0c8, 0 x0bad, 0 x0000, 0 x0000, 0 x0000, 0 xc928, 0 xe034,
0 x0b8f, 0 x0000, 0 x0000, 0 x0000, 0 x2d12, 0 xb4b0, 0 x0b71, 0 x0000, 0 x0000, 0 x0000,
0 x8fc2, 0 xbb94, 0 x0b52, 0 x0000, 0 x0000, 0 x0000, 0 xe236, 0 xe22f, 0 x0b33, 0 x0000,
0 x0000, 0 x0000, 0 xb97c, 0 xbe9e, 0 x0b13, 0 x0000, 0 x0000, 0 x0000, 0 xe1a6, 0 xe16d,
0 x0af5, 0 x0000, 0 x0000, 0 x0000, 0 xd330, 0 xbaf0, 0 x0ad6, 0 x0000, 0 x0000, 0 x0000,
0 xc0bc, 0 xbbd0, 0 x0ab7, 0 x0000, 0 x0000, 0 x0000, 0 x8e66, 0 xdd9b, 0 x0a98, 0 x0000,
0 x0000, 0 x0000, 0 xc95c, 0 xf799, 0 x0a79, 0 x0000, 0 x0000, 0 x0000, 0 xdac0, 0 xbe4c,
0 x0a55, 0 x0000, 0 x0000, 0 x0000, 0 xafc0, 0 xc378, 0 x0a37, 0 x0000, 0 x0000, 0 x0000,
0 xa880, 0 xe341, 0 x0a19, 0 x0000, 0 x0000, 0 x0000, 0 xc242, 0 x81f6, 0 x09fd, 0 x0000,
0 x0000, 0 x0000, 0 x7470, 0 xc777, 0 x09de, 0 x0000, 0 x0000, 0 x0000, 0 x62bc, 0 xb684,
0 x09be, 0 x0000, 0 x0000, 0 x0000, 0 x43ac, 0 x8c58, 0 x099f, 0 x0000, 0 x0000, 0 x0000,
0 xcc3c, 0 xf9ac, 0 x0981, 0 x0000, 0 x0000, 0 x0000, 0 x1526, 0 xb670, 0 x0962, 0 x0000,
0 x0000, 0 x0000, 0 xc9fe, 0 xdf50, 0 x0943, 0 x0000, 0 x0000, 0 x0000, 0 x6ae6, 0 xc065,
0 x0924, 0 x0000, 0 x0000, 0 x0000, 0 xb114, 0 xcf29, 0 x0905, 0 x0000, 0 x0000, 0 x0000,
0 xd388, 0 x922a, 0 x08e4, 0 x0000, 0 x0000, 0 x0000, 0 xcf54, 0 xb926, 0 x08c7, 0 x0000,
0 x0000, 0 x0000, 0 x3826, 0 xe855, 0 x08a8, 0 x0000, 0 x0000, 0 x0000, 0 xe7c8, 0 x829b,
0 x0888, 0 x0000, 0 x0000, 0 x0000, 0 x546c, 0 xa903, 0 x086a, 0 x0000, 0 x0000, 0 x0000,
0 x8768, 0 x99cc, 0 x0849, 0 x0000, 0 x0000, 0 x0000, 0 x00ac, 0 xf529, 0 x082b, 0 x0000,
0 x0000, 0 x0000, 0 x2658, 0 x9f0b, 0 x080c, 0 x0000, 0 x0000, 0 x0000, 0 xfe5c, 0 x9e21,
0 x07ee, 0 x0000, 0 x0000, 0 x0000, 0 x6da2, 0 x9910, 0 x07cf, 0 x0000, 0 x0000, 0 x0000,
0 x9220, 0 xf9b3, 0 x07b0, 0 x0000, 0 x0000, 0 x0000, 0 x3d90, 0 xa541, 0 x0791, 0 x0000,
0 x0000, 0 x0000, 0 x6e4c, 0 xe7cc, 0 x0771, 0 x0000, 0 x0000, 0 x0000, 0 xa8fa, 0 xe80a,
0 x0753, 0 x0000, 0 x0000, 0 x0000, 0 x4e14, 0 xc3a7, 0 x0734, 0 x0000, 0 x0000, 0 x0000,
0 xf7e0, 0 xbad9, 0 x0712, 0 x0000, 0 x0000, 0 x0000, 0 xfea0, 0 xeff2, 0 x06f5, 0 x0000,
0 x0000, 0 x0000, 0 xcef6, 0 xbd48, 0 x06d7, 0 x0000, 0 x0000, 0 x0000, 0 x7544, 0 xf559,
0 x06b7, 0 x0000, 0 x0000, 0 x0000, 0 x2388, 0 xf655, 0 x0698, 0 x0000, 0 x0000, 0 x0000,
0 xe900, 0 xad56, 0 x0676, 0 x0000, 0 x0000, 0 x0000, 0 x2cc0, 0 x8437, 0 x0659, 0 x0000,
0 x0000, 0 x0000, 0 x3068, 0 xc544, 0 x063b, 0 x0000, 0 x0000, 0 x0000, 0 xdc70, 0 xe73c,
0 x061b, 0 x0000, 0 x0000, 0 x0000, 0 xee50, 0 x9d49, 0 x05fc, 0 x0000, 0 x0000, 0 x0000,
0 x93d2, 0 x81f6, 0 x05df, 0 x0000, 0 x0000, 0 x0000, 0 x941c, 0 xadff, 0 x05bf, 0 x0000,
0 x0000, 0 x0000, 0 x2ce2, 0 x8e45, 0 x05a1, 0 x0000, 0 x0000, 0 x0000, 0 x4a60, 0 x95fd,
0 x0581, 0 x0000, 0 x0000, 0 x0000, 0 x79f8, 0 xb83a, 0 x0563, 0 x0000, 0 x0000, 0 x0000,
0 xcb58, 0 xa1f5, 0 x0543, 0 x0000, 0 x0000, 0 x0000, 0 x2a3a, 0 xdc36, 0 x0525, 0 x0000,
0 x0000, 0 x0000, 0 x14ee, 0 x890e, 0 x0506, 0 x0000, 0 x0000, 0 x0000, 0 x8f20, 0 xc432,
0 x04e3, 0 x0000, 0 x0000, 0 x0000, 0 x8440, 0 xb21d, 0 x04c6, 0 x0000, 0 x0000, 0 x0000,
0 x5430, 0 xf698, 0 x04a7, 0 x0000, 0 x0000, 0 x0000, 0 x04ae, 0 x8b20, 0 x048a, 0 x0000,
0 x0000, 0 x0000, 0 x04d0, 0 xe872, 0 x046b, 0 x0000, 0 x0000, 0 x0000, 0 xc78e, 0 x8893,
0 x044c, 0 x0000, 0 x0000, 0 x0000, 0 x0f78, 0 x9895, 0 x042b, 0 x0000, 0 x0000, 0 x0000,
0 x11d4, 0 xdf2e, 0 x040d, 0 x0000, 0 x0000, 0 x0000, 0 xe84c, 0 x89d5, 0 x03ef, 0 x0000,
0 x0000, 0 x0000, 0 xf7be, 0 x8a67, 0 x03d0, 0 x0000, 0 x0000, 0 x0000, 0 x95d0, 0 xc906,
0 x03b1, 0 x0000, 0 x0000, 0 x0000, 0 x64ce, 0 xd96c, 0 x0392, 0 x0000, 0 x0000, 0 x0000,
0 x97ba, 0 xa16f, 0 x0373, 0 x0000, 0 x0000, 0 x0000, 0 x463c, 0 xc51a, 0 x0354, 0 x0000,
0 x0000, 0 x0000, 0 xef0a, 0 xe93e, 0 x0335, 0 x0000, 0 x0000, 0 x0000, 0 x526a, 0 xa466,
0 x0316, 0 x0000, 0 x0000, 0 x0000, 0 x4140, 0 xa94d, 0 x02f5, 0 x0000, 0 x0000, 0 x0000,
0 xb4ec, 0 xce68, 0 x02d8, 0 x0000, 0 x0000, 0 x0000, 0 x4fa2, 0 x8490, 0 x02b9, 0 x0000,
0 x0000, 0 x0000, 0 x4e60, 0 xca98, 0 x0298, 0 x0000, 0 x0000, 0 x0000, 0 x08dc, 0 xe09c,
0 x027a, 0 x0000, 0 x0000, 0 x0000, 0 x2b90, 0 xc7e3, 0 x025c, 0 x0000, 0 x0000, 0 x0000,
0 x5a7c, 0 xf8ef, 0 x023c, 0 x0000, 0 x0000, 0 x0000, 0 x5022, 0 x9d58, 0 x021e, 0 x0000,
0 x0000, 0 x0000, 0 x553a, 0 xe242, 0 x01ff, 0 x0000, 0 x0000, 0 x0000, 0 x7e6e, 0 xb54d,
0 x01e0, 0 x0000, 0 x0000, 0 x0000, 0 xd2d4, 0 xa88c, 0 x01c1, 0 x0000, 0 x0000, 0 x0000,
0 x75b6, 0 xfe6d, 0 x01a2, 0 x0000, 0 x0000, 0 x0000, 0 x3bb2, 0 xf04c, 0 x0183, 0 x0000,
0 x0000, 0 x0000, 0 xc2d0, 0 xc046, 0 x0163, 0 x0000, 0 x0000, 0 x0000, 0 x250c, 0 xf9d6,
0 x0145, 0 x0000, 0 x0000, 0 x0000, 0 xb7b4, 0 x8a0d, 0 x0126, 0 x0000, 0 x0000, 0 x0000,
0 x1a72, 0 xe4f5, 0 x0107, 0 x0000, 0 x0000, 0 x0000, 0 x825c, 0 xa9b8, 0 x00e8, 0 x0000,
0 x0000, 0 x0000, 0 x6c90, 0 xc9ad, 0 x00c6, 0 x0000, 0 x0000, 0 x0000, 0 x4d00, 0 xd1bb,
0 x00aa, 0 x0000, 0 x0000, 0 x0000, 0 xa4a0, 0 xee01, 0 x0087, 0 x0000, 0 x0000, 0 x0000,
0 x89a8, 0 xbe9f, 0 x006b, 0 x0000, 0 x0000, 0 x0000, 0 x038e, 0 xc80c, 0 x004d, 0 x0000,
0 x0000, 0 x0000, 0 xfe26, 0 x8384, 0 x002e, 0 x0000, 0 x0000, 0 x0000, 0 xcd90, 0 xca57,
0 x000e, 0 x0000
};
void MacroAssembler::libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
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;
Label B1_13, B1_14, B1_15;
assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
address zero_none = (address)_zero_none;
address _4 onpi_d = (address)__4 onpi_d;
address TWO_32H = (address)_TWO_32H;
address pi04_3d = (address)_pi04_3d;
address pi04_5d = (address)_pi04_5d;
address SCALE = (address)_SCALE;
address zeros = (address)_zeros;
address pi04_2d = (address)_pi04_2d;
address TWO_12H = (address)_TWO_12H;
address _4 onpi_31l = (address)__4 onpi_31l;
bind(B1_1);
push(ebp);
movl(ebp, esp);
andl(esp, -16 );
push(esi);
push(edi);
push(ebx);
subl(esp, 20 );
movzwl(ebx, Address(ebp, 16 ));
andl(ebx, 32767 );
movl(eax, Address(ebp, 20 ));
cmpl(ebx, 16413 );
movl(esi, Address(ebp, 24 ));
movl(Address(esp, 4 ), eax);
jcc(Assembler::greaterEqual, B1_8);
bind(B1_2);
fld_x(Address(ebp, 8 ));
fld_d(ExternalAddress(_4 onpi_d)); //0x6dc9c883UL, 0x3ff45f30UL
fmul(1 );
fstp_x(Address(esp, 8 ));
movzwl(ecx, Address(esp, 16 ));
negl(ecx);
addl(ecx, 30 );
movl(eax, Address(esp, 12 ));
shrl(eax);
cmpl(Address(esp, 4 ), 0 );
jcc(Assembler::notEqual, B1_4);
bind(B1_3);
lea(ecx, Address(eax, 1 ));
andl(ecx, -2 );
jmp(B1_5);
bind(B1_4);
movl(ecx, eax);
addl(eax, Address(esp, 4 ));
movl(edx, eax);
andl(edx, 1 );
addl(ecx, edx);
bind(B1_5);
fld_d(ExternalAddress(TWO_32H)); //0x00000000UL, 0x41f80000UL
cmpl(ebx, 16400 );
movl(Address(esp, 0 ), ecx);
fild_s(Address(esp, 0 ));
jcc(Assembler::greaterEqual, B1_7);
bind(B1_6);
fld_d(ExternalAddress(pi04_3d)); //0x54442d00UL, 0x3fe921fbUL
fmul(1 );
fsubp(3 );
fxch(1 );
fmul(2 );
fld_s(2 );
fadd(1 );
fsubrp(1 );
fld_s(0 );
fxch(1 );
fsuba(3 );
fld_d(ExternalAddress(8 + pi04_3d)); //0x98cc5180UL, 0x3ce84698UL
fmul(3 );
fsuba(2 );
fxch(1 );
fsub(2 );
fsubrp(1 );
faddp(3 );
fld_d(ExternalAddress(16 + pi04_3d)); //0xcbb5bf6cUL, 0xb9dfc8f8UL
fmulp(2 );
fld_s(1 );
fsubr(1 );
fsuba(1 );
fxch(2 );
fsubp(1 );
faddp(2 );
fxch(1 );
jmp(B1_15);
bind(B1_7);
fld_d(ExternalAddress(pi04_5d)); //0x54400000UL, 0x3fe921fbUL
fmul(1 );
fsubp(3 );
fxch(1 );
fmul(2 );
fld_s(2 );
fadd(1 );
fsubrp(1 );
fld_s(0 );
fxch(1 );
fsuba(3 );
fld_d(ExternalAddress(8 + pi04_5d)); //0x1a600000UL, 0x3dc0b461UL
fmul(3 );
fsuba(2 );
fxch(1 );
fsub(2 );
fsubrp(1 );
faddp(3 );
fld_d(ExternalAddress(16 + pi04_5d)); //0x2e000000UL, 0x3b93198aUL
fmul(2 );
fld_s(0 );
fsubr(2 );
fsuba(2 );
fxch(1 );
fsubp(2 );
fxch(1 );
faddp(3 );
fld_d(ExternalAddress(24 + pi04_5d)); //0x25200000UL, 0x396b839aUL
fmul(2 );
fld_s(0 );
fsubr(2 );
fsuba(2 );
fxch(1 );
fsubp(2 );
fxch(1 );
faddp(3 );
fld_d(ExternalAddress(32 + pi04_5d)); //0x533e63a0UL, 0x37027044UL
fmulp(2 );
fld_s(1 );
fsubr(1 );
fsuba(1 );
fxch(2 );
fsubp(1 );
faddp(2 );
fxch(1 );
jmp(B1_15);
bind(B1_8);
fld_x(Address(ebp, 8 ));
addl(ebx, -16417 );
fmul_d(as_Address(ExternalAddress(SCALE))); //0x00000000UL, 0x32600000UL
movl(eax, -2078209981 );
imull(ebx);
addl(edx, ebx);
movl(ecx, ebx);
sarl(edx, 4 );
sarl(ecx, 31 );
subl(edx, ecx);
movl(eax, edx);
shll(eax, 5 );
fstp_x(Address(ebp, 8 ));
fld_x(Address(ebp, 8 ));
subl(eax, edx);
movl(Address(ebp, 8 ), 0 );
subl(ebx, eax);
fld_x(Address(ebp, 8 ));
cmpl(ebx, 17 );
fsuba(1 );
jcc(Assembler::less, B1_10);
bind(B1_9);
lea(eax, Address(noreg, edx, Address::times_8));
lea(ecx, Address(eax, edx, Address::times_4));
incl(edx);
fld_x(Address(_4 onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
fmul(2 );
fld_x(Address(12 + _4 onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
fmul(2 );
fld_s(0 );
fadd(2 );
fsuba(2 );
fxch(1 );
faddp(2 );
fld_s(1 );
fadd(1 );
fstp_x(Address(esp, 8 ));
andl(Address(esp, 8 ), -16777216 );
fld_x(Address(esp, 8 ));
fsubp(1 );
jmp(B1_11);
bind(B1_10);
fld_d(ExternalAddress(zeros)); //0x00000000UL, 0x00000000UL
fld_s(0 );
bind(B1_11);
fld_s(0 );
lea(eax, Address(noreg, edx, Address::times_8));
fld_s(3 );
lea(edx, Address(eax, edx, Address::times_4));
fld_x(Address(_4 onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
fmul(6 );
movl(Address(esp, 0 ), edx);
fadda(2 );
fxch(2 );
fsuba(3 );
fxch(2 );
faddp(3 );
fxch(2 );
faddp(3 );
fld_x(Address(12 + _4 onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
fmula(2 );
fld_s(2 );
fadd(2 );
fld_s(0 );
fxch(1 );
fsubra(3 );
fxch(3 );
fchs();
faddp(4 );
fxch(3 );
faddp(4 );
fxch(2 );
fadd(3 );
fxch(2 );
fmul(5 );
fadda(2 );
fld_s(4 );
fld_x(Address(24 + _4 onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
fmula(1 );
fxch(1 );
fadda(4 );
fxch(4 );
fstp_x(Address(esp, 8 ));
movzwl(ebx, Address(esp, 16 ));
andl(ebx, 32767 );
cmpl(ebx, 16415 );
jcc(Assembler::greaterEqual, B1_13);
bind(B1_12);
negl(ebx);
addl(ebx, 30 );
movl(ecx, ebx);
movl(eax, Address(esp, 12 ));
shrl(eax);
shll(eax);
movl(Address(esp, 12 ), eax);
movl(Address(esp, 8 ), 0 );
shrl(eax);
jmp(B1_14);
bind(B1_13);
negl(ebx);
addl(ebx, 30 );
movl(ecx, ebx);
movl(edx, Address(esp, 8 ));
shrl(edx);
shll(edx);
negl(ecx);
movl(eax, Address(esp, 12 ));
shll(eax);
movl(ecx, ebx);
movl(Address(esp, 8 ), edx);
shrl(edx);
orl(eax, edx);
bind(B1_14);
fld_x(Address(esp, 8 ));
addl(eax, Address(esp, 4 ));
fsubp(3 );
fmul(6 );
fld_s(4 );
movl(edx, eax);
andl(edx, 1 );
fadd(3 );
movl(ecx, Address(esp, 0 ));
fsuba(3 );
fxch(3 );
faddp(5 );
fld_s(1 );
fxch(3 );
fadd_d(Address(zero_none, RelocationHolder::none).plus_disp(edx, Address::times_8));
fadda(3 );
fsub(3 );
faddp(2 );
fxch(1 );
faddp(4 );
fld_s(2 );
fadd(2 );
fsuba(2 );
fxch(3 );
faddp(2 );
fxch(1 );
faddp(3 );
fld_s(0 );
fadd(2 );
fsuba(2 );
fxch(1 );
faddp(2 );
fxch(1 );
faddp(2 );
fld_s(2 );
fld_x(Address(36 + _4 onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
fmula(1 );
fld_s(1 );
fadd(3 );
fsuba(3 );
fxch(2 );
faddp(3 );
fxch(2 );
faddp(3 );
fxch(1 );
fmul(4 );
fld_s(0 );
fadd(2 );
fsuba(2 );
fxch(1 );
faddp(2 );
fxch(1 );
faddp(2 );
fld_s(2 );
fld_x(Address(48 + _4 onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
fmula(1 );
fld_s(1 );
fadd(3 );
fsuba(3 );
fxch(2 );
faddp(3 );
fxch(2 );
faddp(3 );
fld_s(3 );
fxch(2 );
fmul(5 );
fld_x(Address(60 + _4 onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
fmula(3 );
fxch(3 );
faddp(1 );
fld_s(0 );
fadd(2 );
fsuba(2 );
fxch(1 );
faddp(2 );
fxch(1 );
faddp(3 );
fld_s(3 );
fxch(2 );
fmul(5 );
fld_x(Address(72 + _4 onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
fmula(3 );
fxch(3 );
faddp(1 );
fld_s(0 );
fadd(2 );
fsuba(2 );
fxch(1 );
faddp(2 );
fxch(1 );
faddp(3 );
fxch(1 );
fmulp(4 );
fld_x(Address(84 + _4 onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
fmulp(3 );
fxch(2 );
faddp(3 );
fld_s(2 );
fadd(2 );
fld_d(ExternalAddress(TWO_32H)); //0x00000000UL, 0x41f80000UL
fmul(1 );
fadda(1 );
fsubp(1 );
fsuba(2 );
fxch(3 );
faddp(2 );
faddp(1 );
fld_d(ExternalAddress(pi04_2d)); //0x54400000UL, 0x3fe921fbUL
fld_s(0 );
fmul(2 );
fxch(2 );
fadd(3 );
fxch(1 );
fmulp(3 );
fmul_d(as_Address(ExternalAddress(8 + pi04_2d))); //0x1a626331UL, 0x3dc0b461UL
faddp(1 );
bind(B1_15);
fld_d(ExternalAddress(TWO_12H)); //0x00000000UL, 0x40b80000UL
fld_s(2 );
fadd(2 );
fmula(1 );
fstp_x(Address(esp, 8 ));
fld_x(Address(esp, 8 ));
fadd(1 );
fsubrp(1 );
fst_d(Address(esi, 0 ));
fsubp(2 );
faddp(1 );
fstp_d(Address(esi, 8 ));
addl(esp, 20 );
pop(ebx);
pop(edi);
pop(esi);
movl(esp, ebp);
pop(ebp);
ret(0 );
}
ATTRIBUTE_ALIGNED(16 ) jushort _SP[] =
{
0 xaaab, 0 xaaaa, 0 xaaaa, 0 xaaaa, 0 xbffc, 0 x0000, 0 x8887, 0 x8888, 0 x8888, 0 x8888,
0 x3ff8, 0 x0000, 0 xc527, 0 x0d00, 0 x00d0, 0 xd00d, 0 xbff2, 0 x0000, 0 x45f6, 0 xb616,
0 x1d2a, 0 xb8ef, 0 x3fec, 0 x0000, 0 x825b, 0 x3997, 0 x2b3f, 0 xd732, 0 xbfe5, 0 x0000,
0 xbf33, 0 x8bb4, 0 x2fda, 0 xb092, 0 x3fde, 0 x0000, 0 x44a6, 0 xed1a, 0 x29ef, 0 xd73e,
0 xbfd6, 0 x0000, 0 x8610, 0 x307f, 0 x62a1, 0 xc921, 0 x3fce, 0 x0000
};
ATTRIBUTE_ALIGNED(16 ) jushort _CP[] =
{
0 x0000, 0 x0000, 0 x0000, 0 x8000, 0 xbffe, 0 x0000, 0 xaaa5, 0 xaaaa, 0 xaaaa, 0 xaaaa,
0 x3ffa, 0 x0000, 0 x9c2f, 0 x0b60, 0 x60b6, 0 xb60b, 0 xbff5, 0 x0000, 0 xf024, 0 x0cac,
0 x00d0, 0 xd00d, 0 x3fef, 0 x0000, 0 x03fe, 0 x3f65, 0 x7dbb, 0 x93f2, 0 xbfe9, 0 x0000,
0 xd84d, 0 xadee, 0 xc698, 0 x8f76, 0 x3fe2, 0 x0000, 0 xdaba, 0 xfe79, 0 xea36, 0 xc9c9,
0 xbfda, 0 x0000, 0 x3ac6, 0 x0ba0, 0 x07ce, 0 xd585, 0 x3fd2, 0 x0000
};
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) {
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;
Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_41, B1_42, B1_43, B1_46;
assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
address CP = (address)_CP;
address SP = (address)_SP;
bind(B1_1);
push(ebp);
movl(ebp, esp);
andl(esp, -64 );
push(esi);
push(edi);
push(ebx);
subl(esp, 52 );
movl(eax, Address(ebp, 16 ));
movl(edx, Address(ebp, 20 ));
movl(Address(esp, 32 ), eax);
movl(Address(esp, 36 ), edx);
bind(B1_2);
fnstcw(Address(esp, 30 ));
bind(B1_3);
movsd(xmm1, Address(ebp, 8 ));
movl(esi, Address(ebp, 12 ));
movl(eax, esi);
andl(eax, 2147483647 );
andps(xmm1, ExternalAddress(L_2IL0FLOATPACKET_0)); //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
shrl(esi, 31 );
movl(Address(esp, 40 ), eax);
cmpl(eax, 1104150528 );
movsd(Address(ebp, 8 ), xmm1);
jcc(Assembler::aboveEqual, B1_11);
bind(B1_4);
movsd(xmm0, ExternalAddress(PI4_INV)); //0x6dc9c883UL, 0x3ff45f30UL
mulsd(xmm0, xmm1);
movzwl(edx, Address(esp, 30 ));
movl(eax, edx);
andl(eax, 768 );
movsd(Address(esp, 0 ), xmm0);
cmpl(eax, 768 );
jcc(Assembler::equal, B1_42);
bind(B1_5);
orl(edx, -64768 );
movw(Address(esp, 28 ), edx);
bind(B1_6);
fldcw(Address(esp, 28 ));
bind(B1_7);
movsd(xmm1, Address(ebp, 8 ));
movl(ebx, 1 );
bind(B1_8);
movl(Address(esp, 12 ), ebx);
movl(ebx, Address(esp, 4 ));
movl(eax, ebx);
movl(Address(esp, 8 ), esi);
movl(esi, ebx);
shrl(esi, 20 );
andl(eax, 1048575 );
movl(ecx, esi);
orl(eax, 1048576 );
negl(ecx);
movl(edx, eax);
addl(ecx, 19 );
addl(esi, 13 );
movl(Address(esp, 24 ), ecx);
shrl(edx);
movl(ecx, esi);
shll(eax);
movl(ecx, Address(esp, 24 ));
movl(esi, Address(esp, 0 ));
shrl(esi);
orl(eax, esi);
cmpl(ebx, 1094713344 );
movsd(Address(esp, 16 ), xmm1);
fld_d(Address(esp, 16 ));
cmov32(Assembler::below, eax, edx);
movl(esi, Address(esp, 8 ));
lea(edx, Address(eax, 1 ));
movl(ebx, edx);
andl(ebx, -2 );
movl(Address(esp, 16 ), ebx);
fild_s(Address(esp, 16 ));
movl(ebx, Address(esp, 12 ));
cmpl(Address(esp, 40 ), 1094713344 );
jcc(Assembler::aboveEqual, B1_10);
bind(B1_9);
fld_d(ExternalAddress(PI4X3)); //0x54443000UL, 0xbfe921fbUL
fmul(1 );
faddp(2 );
fld_d(ExternalAddress(PI4X3 + 8 )); //0x3b39a000UL, 0x3d373dcbUL
fmul(1 );
faddp(2 );
fld_d(ExternalAddress(PI4X3 + 16 )); //0xe0e68948UL, 0xba845c06UL
fmulp(1 );
faddp(1 );
jmp(B1_17);
bind(B1_10);
fld_d(ExternalAddress(PI4X4)); //0x54400000UL, 0xbfe921fbUL
fmul(1 );
faddp(2 );
fld_d(ExternalAddress(PI4X4 + 8 )); //0x1a600000UL, 0xbdc0b461UL
fmul(1 );
faddp(2 );
fld_d(ExternalAddress(PI4X4 + 16 )); //0x2e000000UL, 0xbb93198aUL
fmul(1 );
faddp(2 );
fld_d(ExternalAddress(PI4X4 + 24 )); //0x252049c1UL, 0xb96b839aUL
fmulp(1 );
faddp(1 );
jmp(B1_17);
bind(B1_11);
movzwl(edx, Address(esp, 30 ));
movl(eax, edx);
andl(eax, 768 );
cmpl(eax, 768 );
jcc(Assembler::equal, B1_43);
bind(B1_12);
orl(edx, -64768 );
movw(Address(esp, 28 ), edx);
bind(B1_13);
fldcw(Address(esp, 28 ));
bind(B1_14);
movsd(xmm1, Address(ebp, 8 ));
movl(ebx, 1 );
bind(B1_15);
movsd(Address(esp, 16 ), xmm1);
fld_d(Address(esp, 16 ));
addl(esp, -32 );
lea(eax, Address(esp, 32 ));
fstp_x(Address(esp, 0 ));
movl(Address(esp, 12 ), 0 );
movl(Address(esp, 16 ), eax);
call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l())));
bind(B1_46);
addl(esp, 32 );
bind(B1_16);
fld_d(Address(esp, 0 ));
lea(edx, Address(eax, 1 ));
fld_d(Address(esp, 8 ));
faddp(1 );
bind(B1_17);
movl(ecx, edx);
addl(eax, 3 );
shrl(ecx, 2 );
andl(ecx, 1 );
shrl(eax, 2 );
xorl(esi, ecx);
movl(ecx, Address(esp, 36 ));
andl(eax, 1 );
andl(ecx, 3 );
cmpl(ecx, 3 );
jcc(Assembler::notEqual, B1_25);
bind(B1_18);
fld_x(ExternalAddress(84 + SP)); //0x8610, 0x307f, 0x62
fld_s(1 );
fmul((2 ));
testb(edx, 2 );
fmula((1 ));
fld_x(ExternalAddress(72 + SP)); //0x44a6, 0xed1a, 0x29
faddp(2 );
fmula(1 );
fld_x(ExternalAddress(60 + SP)); //0xbf33, 0x8bb4, 0x2f
faddp(2 );
fmula(1 );
fld_x(ExternalAddress(48 + SP)); //0x825b, 0x3997, 0x2b
faddp(2 );
fmula(1 );
fld_x(ExternalAddress(36 + SP)); //0x45f6, 0xb616, 0x1d
faddp(2 );
fmula(1 );
fld_x(ExternalAddress(24 + SP)); //0xc527, 0x0d00, 0x00
faddp(2 );
fmula(1 );
fld_x(ExternalAddress(12 + SP)); //0x8887, 0x8888, 0x88
faddp(2 );
fmula(1 );
fld_x(ExternalAddress(SP)); //0xaaab, 0xaaaa, 0xaa
faddp(2 );
fmula(1 );
fld_x(ExternalAddress(84 + CP)); //0x3ac6, 0x0ba0, 0x07
fmul(1 );
fld_x(ExternalAddress(72 + CP)); //0xdaba, 0xfe79, 0xea
faddp(1 );
fmul(1 );
fld_x(ExternalAddress(62 + CP)); //0xd84d, 0xadee, 0xc6
faddp(1 );
fmul(1 );
fld_x(ExternalAddress(48 + CP)); //0x03fe, 0x3f65, 0x7d
faddp(1 );
fmul(1 );
fld_x(ExternalAddress(36 + CP)); //0xf024, 0x0cac, 0x00
faddp(1 );
fmul(1 );
fld_x(ExternalAddress(24 + CP)); //0x9c2f, 0x0b60, 0x60
faddp(1 );
fmul(1 );
fld_x(ExternalAddress(12 + CP)); //0xaaa5, 0xaaaa, 0xaa
faddp(1 );
fmul(1 );
fld_x(ExternalAddress(CP)); //0x0000, 0x0000, 0x00
faddp(1 );
fmulp(1 );
fld_d(Address(ONES, RelocationHolder::none).plus_disp(esi, Address::times_8));
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
jcc(Assembler::equal, B1_22);
bind(B1_19);
fmulp(4 );
testl(ebx, ebx);
fxch(2 );
fmul(3 );
movl(eax, Address(esp, 2 ));
faddp(3 );
fxch(2 );
fstp_d(Address(eax, 0 ));
fmula(1 );
faddp(1 );
fstp_d(Address(eax, 8 ));
jcc(Assembler::equal, B1_21);
bind(B1_20);
fldcw(Address(esp, 30 ));
bind(B1_21);
addl(esp, 52 );
pop(ebx);
pop(edi);
pop(esi);
movl(esp, ebp);
pop(ebp);
ret(0 );
bind(B1_22);
fxch(1 );
fmulp(4 );
testl(ebx, ebx);
fxch(2 );
fmul(3 );
movl(eax, Address(esp, 32 ));
faddp(3 );
fxch(2 );
fstp_d(Address(eax, 8 ));
fmula(1 );
faddp(1 );
fstp_d(Address(eax, 0 ));
jcc(Assembler::equal, B1_24);
bind(B1_23);
fldcw(Address(esp, 30 ));
bind(B1_24);
addl(esp, 52 );
pop(ebx);
pop(edi);
pop(esi);
movl(esp, ebp);
pop(ebp);
ret(0 );
bind(B1_25);
testb(Address(esp, 36 ), 2 );
jcc(Assembler::equal, B1_33);
bind(B1_26);
fld_s(0 );
testb(edx, 2 );
fmul(1 );
fld_s(0 );
fmul(1 );
jcc(Assembler::equal, B1_30);
bind(B1_27);
fstp_d(2 );
fld_x(ExternalAddress(84 + CP)); //0x3ac6, 0x0ba0, 0x07
testl(ebx, ebx);
fmul(2 );
fld_x(ExternalAddress(72 + CP)); //0xdaba, 0xfe79, 0xea
fmul(3 );
fld_x(ExternalAddress(60 + CP)); //0xd84d, 0xadee, 0xc6
movl(eax, Address(rsp, 32 ));
faddp(2 );
fxch(1 );
fmul(3 );
fld_x(ExternalAddress(48 + CP)); //0x03fe, 0x3f65, 0x7d
faddp(2 );
fxch(1 );
fmul(3 );
fld_x(ExternalAddress(36 + CP)); //0xf024, 0x0cac, 0x00
faddp(2 );
fxch(1 );
fmul(3 );
fld_x(ExternalAddress(24 + CP)); //0x9c2f, 0x0b60, 0x60
faddp(2 );
fxch(1 );
fmul(3 );
fld_x(ExternalAddress(12 + CP)); //0xaaa5, 0xaaaa, 0xaa
faddp(2 );
fxch(1 );
fmulp(3 );
fld_x(ExternalAddress(CP)); //0x0000, 0x0000, 0x00
faddp(1 );
fmulp(1 );
faddp(1 );
fld_d(Address(ONES, RelocationHolder::none).plus_disp(rsi, Address::times_8));
fmula(1 );
faddp(1 );
fstp_d(Address(eax, 8 ));
jcc(Assembler::equal, B1_29);
bind(B1_28);
fldcw(Address(esp, 30 ));
bind(B1_29);
addl(esp, 52 );
pop(ebx);
pop(edi);
pop(esi);
movl(esp, ebp);
pop(ebp);
ret(0 );
bind(B1_30);
fld_x(ExternalAddress(84 + SP)); //0x8610, 0x307f, 0x62
testl(ebx, ebx);
fmul(1 );
fld_x(ExternalAddress(72 + SP)); //0x44a6, 0xed1a, 0x29
fmul(2 );
fld_x(ExternalAddress(60 + SP)); //0xbf33, 0x8bb4, 0x2f
movl(eax, Address(rsp, 32 ));
faddp(2 );
fxch(1 );
fmul(2 );
fld_x(ExternalAddress(48 + SP)); //0x825b, 0x3997, 0x2b
faddp(2 );
fxch(1 );
fmul(2 );
fld_x(ExternalAddress(36 + SP)); //0x45f6, 0xb616, 0x1d
faddp(2 );
fxch(1 );
fmul(2 );
fld_x(ExternalAddress(24 + SP)); //0xc527, 0x0d00, 0x00
faddp(2 );
fxch(1 );
fmul(2 );
fld_x(ExternalAddress(12 + SP)); //0x8887, 0x8888, 0x88
faddp(2 );
fxch(1 );
fmulp(2 );
fld_x(ExternalAddress(SP)); //0xaaab, 0xaaaa, 0xaa
faddp(1 );
fmulp(2 );
faddp(1 );
fld_d(Address(ONES, RelocationHolder::none).plus_disp(rsi, Address::times_8));
fmulp(2 );
fmul(1 );
faddp(1 );
fstp_d(Address(eax, 8 ));
jcc(Assembler::equal, B1_32);
bind(B1_31);
fldcw(Address(esp, 30 ));
bind(B1_32);
addl(esp, 52 );
pop(ebx);
pop(edi);
pop(esi);
movl(esp, ebp);
pop(ebp);
ret(0 );
bind(B1_33);
testb(Address(esp, 36 ), 1 );
jcc(Assembler::equal, B1_41);
bind(B1_34);
fld_s(0 );
testb(edx, 2 );
fmul(1 );
fld_s(0 );
fmul(1 );
jcc(Assembler::equal, B1_38);
bind(B1_35);
fld_x(ExternalAddress(84 + SP)); //0x8610, 0x307f, 0x62
testl(ebx, ebx);
fmul(1 );
fld_x(ExternalAddress(72 + SP)); //0x44a6, 0xed1a, 0x29
fmul(2 );
fld_x(ExternalAddress(60 + SP)); //0xbf33, 0x8bb4, 0x2f
faddp(2 );
fxch(1 );
fmul(2 );
fld_x(ExternalAddress(48 + SP)); //0x825b, 0x3997, 0x2b
faddp(2 );
fxch(1 );
fmul(2 );
fld_x(ExternalAddress(36 + SP)); //0x45f6, 0xb616, 0x1d
faddp(2 );
fxch(1 );
fmul(2 );
fld_x(ExternalAddress(24 + SP)); //0xc527, 0x0d00, 0x00
faddp(2 );
fxch(1 );
fmul(2 );
fld_x(ExternalAddress(12 + SP)); //0x8887, 0x8888, 0x88
faddp(2 );
fxch(1 );
fmulp(2 );
fld_x(ExternalAddress(SP)); //0xaaab, 0xaaaa, 0xaa
faddp(1 );
fmulp(2 );
faddp(1 );
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
fmulp(2 );
fmul(1 );
movl(eax, Address(esp, 32 ));
faddp(1 );
fstp_d(Address(eax, 0 ));
jcc(Assembler::equal, B1_37);
bind(B1_36);
fldcw(Address(esp, 30 ));
bind(B1_37);
addl(esp, 52 );
pop(ebx);
pop(edi);
pop(esi);
movl(esp, ebp);
pop(ebp);
ret(0 );
bind(B1_38);
fstp_d(2 );
fld_x(ExternalAddress(84 + CP)); //0x3ac6, 0x0ba0, 0x07
testl(ebx, ebx);
fmul(2 );
fld_x(ExternalAddress(72 + CP)); //0xdaba, 0xfe79, 0xea
fmul(3 );
fld_x(ExternalAddress(60 + CP)); //0xd84d, 0xadee, 0xc6
faddp(2 );
fxch(1 );
fmul(3 );
fld_x(ExternalAddress(48 + CP)); //0x03fe, 0x3f65, 0x7d
faddp(2 );
fxch(1 );
fmul(3 );
fld_x(ExternalAddress(36 + CP)); //0xf024, 0x0cac, 0x00
faddp(2 );
fxch(1 );
fmul(3 );
fld_x(ExternalAddress(24 + CP)); //0x9c2f, 0x0b60, 0x60
faddp(2 );
fxch(1 );
fmul(3 );
fld_x(ExternalAddress(12 + CP)); //0xaaa5, 0xaaaa, 0xaa
faddp(2 );
fxch(1 );
fmulp(3 );
fld_x(ExternalAddress(CP)); //0x0000, 0x0000, 0x00
faddp(1 );
fmulp(1 );
faddp(1 );
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
fmula(1 );
movl(eax, Address(esp, 32 ));
faddp(1 );
fstp_d(Address(eax, 0 ));
jcc(Assembler::equal, B1_40);
bind(B1_39);
fldcw(Address(esp, 30 ));
bind(B1_40);
addl(esp, 52 );
pop(ebx);
pop(edi);
pop(esi);
movl(esp, ebp);
pop(ebp);
ret(0 );
bind(B1_41);
fstp_d(0 );
addl(esp, 52 );
pop(ebx);
pop(edi);
pop(esi);
movl(esp, ebp);
pop(ebp);
ret(0 );
bind(B1_42);
xorl(ebx, ebx);
jmp(B1_8);
bind(B1_43);
xorl(ebx, ebx);
jmp(B1_15);
}
ATTRIBUTE_ALIGNED(16 ) juint _static_const_table_sin[] =
{
0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL,
0 x00000000UL, 0 x00000000UL, 0 x3ff00000UL, 0 x176d6d31UL, 0 xbf73b92eUL,
0 xbc29b42cUL, 0 x3fb917a6UL, 0 xe0000000UL, 0 xbc3e2718UL, 0 x00000000UL,
0 x3ff00000UL, 0 x011469fbUL, 0 xbf93ad06UL, 0 x3c69a60bUL, 0 x3fc8f8b8UL,
0 xc0000000UL, 0 xbc626d19UL, 0 x00000000UL, 0 x3ff00000UL, 0 x939d225aUL,
0 xbfa60beaUL, 0 x2ed59f06UL, 0 x3fd29406UL, 0 xa0000000UL, 0 xbc75d28dUL,
0 x00000000UL, 0 x3ff00000UL, 0 x866b95cfUL, 0 xbfb37ca1UL, 0 xa6aea963UL,
0 x3fd87de2UL, 0 xe0000000UL, 0 xbc672cedUL, 0 x00000000UL, 0 x3ff00000UL,
0 x73fa1279UL, 0 xbfbe3a68UL, 0 x3806f63bUL, 0 x3fde2b5dUL, 0 x20000000UL,
0 x3c5e0d89UL, 0 x00000000UL, 0 x3ff00000UL, 0 x5bc57974UL, 0 xbfc59267UL,
0 x39ae68c8UL, 0 x3fe1c73bUL, 0 x20000000UL, 0 x3c8b25ddUL, 0 x00000000UL,
0 x3ff00000UL, 0 x53aba2fdUL, 0 xbfcd0dfeUL, 0 x25091dd6UL, 0 x3fe44cf3UL,
0 x20000000UL, 0 x3c68076aUL, 0 x00000000UL, 0 x3ff00000UL, 0 x99fcef32UL,
0 x3fca8279UL, 0 x667f3bcdUL, 0 x3fe6a09eUL, 0 x20000000UL, 0 xbc8bdd34UL,
0 x00000000UL, 0 x3fe00000UL, 0 x94247758UL, 0 x3fc133ccUL, 0 x6b151741UL,
0 x3fe8bc80UL, 0 x20000000UL, 0 xbc82c5e1UL, 0 x00000000UL, 0 x3fe00000UL,
0 x9ae68c87UL, 0 x3fac73b3UL, 0 x290ea1a3UL, 0 x3fea9b66UL, 0 xe0000000UL,
0 x3c39f630UL, 0 x00000000UL, 0 x3fe00000UL, 0 x7f909c4eUL, 0 xbf9d4a2cUL,
0 xf180bdb1UL, 0 x3fec38b2UL, 0 x80000000UL, 0 xbc76e0b1UL, 0 x00000000UL,
0 x3fe00000UL, 0 x65455a75UL, 0 xbfbe0875UL, 0 xcf328d46UL, 0 x3fed906bUL,
0 x20000000UL, 0 x3c7457e6UL, 0 x00000000UL, 0 x3fe00000UL, 0 x76acf82dUL,
0 x3fa4a031UL, 0 x56c62ddaUL, 0 x3fee9f41UL, 0 xe0000000UL, 0 x3c8760b1UL,
0 x00000000UL, 0 x3fd00000UL, 0 x0e5967d5UL, 0 xbfac1d1fUL, 0 xcff75cb0UL,
0 x3fef6297UL, 0 x20000000UL, 0 x3c756217UL, 0 x00000000UL, 0 x3fd00000UL,
0 x0f592f50UL, 0 xbf9ba165UL, 0 xa3d12526UL, 0 x3fefd88dUL, 0 x40000000UL,
0 xbc887df6UL, 0 x00000000UL, 0 x3fc00000UL, 0 x00000000UL, 0 x00000000UL,
0 x00000000UL, 0 x3ff00000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL,
0 x00000000UL, 0 x0f592f50UL, 0 x3f9ba165UL, 0 xa3d12526UL, 0 x3fefd88dUL,
0 x40000000UL, 0 xbc887df6UL, 0 x00000000UL, 0 xbfc00000UL, 0 x0e5967d5UL,
0 x3fac1d1fUL, 0 xcff75cb0UL, 0 x3fef6297UL, 0 x20000000UL, 0 x3c756217UL,
0 x00000000UL, 0 xbfd00000UL, 0 x76acf82dUL, 0 xbfa4a031UL, 0 x56c62ddaUL,
0 x3fee9f41UL, 0 xe0000000UL, 0 x3c8760b1UL, 0 x00000000UL, 0 xbfd00000UL,
0 x65455a75UL, 0 x3fbe0875UL, 0 xcf328d46UL, 0 x3fed906bUL, 0 x20000000UL,
0 x3c7457e6UL, 0 x00000000UL, 0 xbfe00000UL, 0 x7f909c4eUL, 0 x3f9d4a2cUL,
0 xf180bdb1UL, 0 x3fec38b2UL, 0 x80000000UL, 0 xbc76e0b1UL, 0 x00000000UL,
0 xbfe00000UL, 0 x9ae68c87UL, 0 xbfac73b3UL, 0 x290ea1a3UL, 0 x3fea9b66UL,
0 xe0000000UL, 0 x3c39f630UL, 0 x00000000UL, 0 xbfe00000UL, 0 x94247758UL,
0 xbfc133ccUL, 0 x6b151741UL, 0 x3fe8bc80UL, 0 x20000000UL, 0 xbc82c5e1UL,
0 x00000000UL, 0 xbfe00000UL, 0 x99fcef32UL, 0 xbfca8279UL, 0 x667f3bcdUL,
0 x3fe6a09eUL, 0 x20000000UL, 0 xbc8bdd34UL, 0 x00000000UL, 0 xbfe00000UL,
0 x53aba2fdUL, 0 x3fcd0dfeUL, 0 x25091dd6UL, 0 x3fe44cf3UL, 0 x20000000UL,
0 x3c68076aUL, 0 x00000000UL, 0 xbff00000UL, 0 x5bc57974UL, 0 x3fc59267UL,
0 x39ae68c8UL, 0 x3fe1c73bUL, 0 x20000000UL, 0 x3c8b25ddUL, 0 x00000000UL,
0 xbff00000UL, 0 x73fa1279UL, 0 x3fbe3a68UL, 0 x3806f63bUL, 0 x3fde2b5dUL,
0 x20000000UL, 0 x3c5e0d89UL, 0 x00000000UL, 0 xbff00000UL, 0 x866b95cfUL,
0 x3fb37ca1UL, 0 xa6aea963UL, 0 x3fd87de2UL, 0 xe0000000UL, 0 xbc672cedUL,
0 x00000000UL, 0 xbff00000UL, 0 x939d225aUL, 0 x3fa60beaUL, 0 x2ed59f06UL,
0 x3fd29406UL, 0 xa0000000UL, 0 xbc75d28dUL, 0 x00000000UL, 0 xbff00000UL,
0 x011469fbUL, 0 x3f93ad06UL, 0 x3c69a60bUL, 0 x3fc8f8b8UL, 0 xc0000000UL,
0 xbc626d19UL, 0 x00000000UL, 0 xbff00000UL, 0 x176d6d31UL, 0 x3f73b92eUL,
0 xbc29b42cUL, 0 x3fb917a6UL, 0 xe0000000UL, 0 xbc3e2718UL, 0 x00000000UL,
0 xbff00000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL,
0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 xbff00000UL, 0 x176d6d31UL,
0 x3f73b92eUL, 0 xbc29b42cUL, 0 xbfb917a6UL, 0 xe0000000UL, 0 x3c3e2718UL,
0 x00000000UL, 0 xbff00000UL, 0 x011469fbUL, 0 x3f93ad06UL, 0 x3c69a60bUL,
0 xbfc8f8b8UL, 0 xc0000000UL, 0 x3c626d19UL, 0 x00000000UL, 0 xbff00000UL,
0 x939d225aUL, 0 x3fa60beaUL, 0 x2ed59f06UL, 0 xbfd29406UL, 0 xa0000000UL,
0 x3c75d28dUL, 0 x00000000UL, 0 xbff00000UL, 0 x866b95cfUL, 0 x3fb37ca1UL,
0 xa6aea963UL, 0 xbfd87de2UL, 0 xe0000000UL, 0 x3c672cedUL, 0 x00000000UL,
0 xbff00000UL, 0 x73fa1279UL, 0 x3fbe3a68UL, 0 x3806f63bUL, 0 xbfde2b5dUL,
0 x20000000UL, 0 xbc5e0d89UL, 0 x00000000UL, 0 xbff00000UL, 0 x5bc57974UL,
0 x3fc59267UL, 0 x39ae68c8UL, 0 xbfe1c73bUL, 0 x20000000UL, 0 xbc8b25ddUL,
0 x00000000UL, 0 xbff00000UL, 0 x53aba2fdUL, 0 x3fcd0dfeUL, 0 x25091dd6UL,
0 xbfe44cf3UL, 0 x20000000UL, 0 xbc68076aUL, 0 x00000000UL, 0 xbff00000UL,
0 x99fcef32UL, 0 xbfca8279UL, 0 x667f3bcdUL, 0 xbfe6a09eUL, 0 x20000000UL,
0 x3c8bdd34UL, 0 x00000000UL, 0 xbfe00000UL, 0 x94247758UL, 0 xbfc133ccUL,
0 x6b151741UL, 0 xbfe8bc80UL, 0 x20000000UL, 0 x3c82c5e1UL, 0 x00000000UL,
0 xbfe00000UL, 0 x9ae68c87UL, 0 xbfac73b3UL, 0 x290ea1a3UL, 0 xbfea9b66UL,
0 xe0000000UL, 0 xbc39f630UL, 0 x00000000UL, 0 xbfe00000UL, 0 x7f909c4eUL,
0 x3f9d4a2cUL, 0 xf180bdb1UL, 0 xbfec38b2UL, 0 x80000000UL, 0 x3c76e0b1UL,
0 x00000000UL, 0 xbfe00000UL, 0 x65455a75UL, 0 x3fbe0875UL, 0 xcf328d46UL,
0 xbfed906bUL, 0 x20000000UL, 0 xbc7457e6UL, 0 x00000000UL, 0 xbfe00000UL,
0 x76acf82dUL, 0 xbfa4a031UL, 0 x56c62ddaUL, 0 xbfee9f41UL, 0 xe0000000UL,
0 xbc8760b1UL, 0 x00000000UL, 0 xbfd00000UL, 0 x0e5967d5UL, 0 x3fac1d1fUL,
0 xcff75cb0UL, 0 xbfef6297UL, 0 x20000000UL, 0 xbc756217UL, 0 x00000000UL,
0 xbfd00000UL, 0 x0f592f50UL, 0 x3f9ba165UL, 0 xa3d12526UL, 0 xbfefd88dUL,
0 x40000000UL, 0 x3c887df6UL, 0 x00000000UL, 0 xbfc00000UL, 0 x00000000UL,
0 x00000000UL, 0 x00000000UL, 0 xbff00000UL, 0 x00000000UL, 0 x00000000UL,
0 x00000000UL, 0 x00000000UL, 0 x0f592f50UL, 0 xbf9ba165UL, 0 xa3d12526UL,
0 xbfefd88dUL, 0 x40000000UL, 0 x3c887df6UL, 0 x00000000UL, 0 x3fc00000UL,
0 x0e5967d5UL, 0 xbfac1d1fUL, 0 xcff75cb0UL, 0 xbfef6297UL, 0 x20000000UL,
0 xbc756217UL, 0 x00000000UL, 0 x3fd00000UL, 0 x76acf82dUL, 0 x3fa4a031UL,
0 x56c62ddaUL, 0 xbfee9f41UL, 0 xe0000000UL, 0 xbc8760b1UL, 0 x00000000UL,
0 x3fd00000UL, 0 x65455a75UL, 0 xbfbe0875UL, 0 xcf328d46UL, 0 xbfed906bUL,
0 x20000000UL, 0 xbc7457e6UL, 0 x00000000UL, 0 x3fe00000UL, 0 x7f909c4eUL,
0 xbf9d4a2cUL, 0 xf180bdb1UL, 0 xbfec38b2UL, 0 x80000000UL, 0 x3c76e0b1UL,
0 x00000000UL, 0 x3fe00000UL, 0 x9ae68c87UL, 0 x3fac73b3UL, 0 x290ea1a3UL,
0 xbfea9b66UL, 0 xe0000000UL, 0 xbc39f630UL, 0 x00000000UL, 0 x3fe00000UL,
0 x94247758UL, 0 x3fc133ccUL, 0 x6b151741UL, 0 xbfe8bc80UL, 0 x20000000UL,
0 x3c82c5e1UL, 0 x00000000UL, 0 x3fe00000UL, 0 x99fcef32UL, 0 x3fca8279UL,
0 x667f3bcdUL, 0 xbfe6a09eUL, 0 x20000000UL, 0 x3c8bdd34UL, 0 x00000000UL,
0 x3fe00000UL, 0 x53aba2fdUL, 0 xbfcd0dfeUL, 0 x25091dd6UL, 0 xbfe44cf3UL,
0 x20000000UL, 0 xbc68076aUL, 0 x00000000UL, 0 x3ff00000UL, 0 x5bc57974UL,
0 xbfc59267UL, 0 x39ae68c8UL, 0 xbfe1c73bUL, 0 x20000000UL, 0 xbc8b25ddUL,
0 x00000000UL, 0 x3ff00000UL, 0 x73fa1279UL, 0 xbfbe3a68UL, 0 x3806f63bUL,
0 xbfde2b5dUL, 0 x20000000UL, 0 xbc5e0d89UL, 0 x00000000UL, 0 x3ff00000UL,
0 x866b95cfUL, 0 xbfb37ca1UL, 0 xa6aea963UL, 0 xbfd87de2UL, 0 xe0000000UL,
0 x3c672cedUL, 0 x00000000UL, 0 x3ff00000UL, 0 x939d225aUL, 0 xbfa60beaUL,
0 x2ed59f06UL, 0 xbfd29406UL, 0 xa0000000UL, 0 x3c75d28dUL, 0 x00000000UL,
0 x3ff00000UL, 0 x011469fbUL, 0 xbf93ad06UL, 0 x3c69a60bUL, 0 xbfc8f8b8UL,
0 xc0000000UL, 0 x3c626d19UL, 0 x00000000UL, 0 x3ff00000UL, 0 x176d6d31UL,
0 xbf73b92eUL, 0 xbc29b42cUL, 0 xbfb917a6UL, 0 xe0000000UL, 0 x3c3e2718UL,
0 x00000000UL, 0 x3ff00000UL, 0 x55555555UL, 0 xbfc55555UL, 0 x00000000UL,
0 xbfe00000UL, 0 x11111111UL, 0 x3f811111UL, 0 x55555555UL, 0 x3fa55555UL,
0 x1a01a01aUL, 0 xbf2a01a0UL, 0 x16c16c17UL, 0 xbf56c16cUL, 0 xa556c734UL,
0 x3ec71de3UL, 0 x1a01a01aUL, 0 x3efa01a0UL, 0 x1a600000UL, 0 x3d90b461UL,
0 x1a600000UL, 0 x3d90b461UL, 0 x54400000UL, 0 x3fb921fbUL, 0 x00000000UL,
0 x00000000UL, 0 x2e037073UL, 0 x3b63198aUL, 0 x00000000UL, 0 x00000000UL,
0 x6dc9c883UL, 0 x40245f30UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL,
0 x43380000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 x43600000UL,
0 x00000000UL, 0 x00000000UL, 0 x00000000UL, 0 x3c800000UL, 0 x00000000UL,
0 x00000000UL, 0 xffffffffUL, 0 x3fefffffUL, 0 x00000000UL, 0 x00000000UL,
0 x00000000UL, 0 x80000000UL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL,
0 x80000000UL, 0 x00000000UL, 0 x80000000UL, 0 x00000000UL, 0 x3fe00000UL,
0 x00000000UL, 0 x3fe00000UL
};
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) {
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;
Label L_2TAG_PACKET_4_0_2;
assert_different_registers(eax, ebx, edx);
address static_const_table_sin = (address)_static_const_table_sin;
subl(rsp, 120 );
movl(Address(rsp, 56 ), ebx);
lea(ebx, ExternalAddress(static_const_table_sin));
movsd(xmm0, Address(rsp, 128 ));
pextrw(eax, xmm0, 3 );
andl(eax, 32767 );
subl(eax, 12336 );
cmpl(eax, 4293 );
jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
movsd(xmm1, Address(ebx, 2160 ));
mulsd(xmm1, xmm0);
movsd(xmm5, Address(ebx, 2272 ));
movdqu(xmm4, Address(ebx, 2256 ));
pand(xmm4, xmm0);
por(xmm5, xmm4);
movsd(xmm3, Address(ebx, 2128 ));
movdqu(xmm2, Address(ebx, 2112 ));
addpd(xmm1, xmm5);
cvttsd2sil(edx, xmm1);
cvtsi2sdl(xmm1, edx);
mulsd(xmm3, xmm1);
unpcklpd(xmm1, xmm1);
addl(edx, 1865216 );
movdqu(xmm4, xmm0);
andl(edx, 63 );
movdqu(xmm5, Address(ebx, 2096 ));
lea(eax, Address(ebx, 0 ));
shll(edx, 5 );
addl(eax, edx);
mulpd(xmm2, xmm1);
subsd(xmm0, xmm3);
mulsd(xmm1, Address(ebx, 2144 ));
subsd(xmm4, xmm3);
movsd(xmm7, Address(eax, 8 ));
unpcklpd(xmm0, xmm0);
movapd(xmm3, xmm4);
subsd(xmm4, xmm2);
mulpd(xmm5, xmm0);
subpd(xmm0, xmm2);
movdqu(xmm6, Address(ebx, 2064 ));
mulsd(xmm7, xmm4);
subsd(xmm3, xmm4);
mulpd(xmm5, xmm0);
mulpd(xmm0, xmm0);
subsd(xmm3, xmm2);
movdqu(xmm2, Address(eax, 0 ));
subsd(xmm1, xmm3);
movsd(xmm3, Address(eax, 24 ));
addsd(xmm2, xmm3);
subsd(xmm7, xmm2);
mulsd(xmm2, xmm4);
mulpd(xmm6, xmm0);
mulsd(xmm3, xmm4);
mulpd(xmm2, xmm0);
mulpd(xmm0, xmm0);
addpd(xmm5, Address(ebx, 2080 ));
mulsd(xmm4, Address(eax, 0 ));
addpd(xmm6, Address(ebx, 2048 ));
mulpd(xmm5, xmm0);
movapd(xmm0, xmm3);
addsd(xmm3, Address(eax, 8 ));
mulpd(xmm1, xmm7);
movapd(xmm7, xmm4);
addsd(xmm4, xmm3);
addpd(xmm6, xmm5);
movsd(xmm5, Address(eax, 8 ));
subsd(xmm5, xmm3);
subsd(xmm3, xmm4);
addsd(xmm1, Address(eax, 16 ));
mulpd(xmm6, xmm2);
addsd(xmm5, xmm0);
addsd(xmm3, xmm7);
addsd(xmm1, xmm5);
addsd(xmm1, xmm3);
addsd(xmm1, xmm6);
unpckhpd(xmm6, xmm6);
addsd(xmm1, xmm6);
addsd(xmm4, xmm1);
movsd(Address(rsp, 0 ), xmm4);
fld_d(Address(rsp, 0 ));
jmp(L_2TAG_PACKET_1_0_2);
bind(L_2TAG_PACKET_0_0_2);
jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
shrl(eax, 4 );
cmpl(eax, 268434685 );
jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
movsd(Address(rsp, 0 ), xmm0);
fld_d(Address(rsp, 0 ));
jmp(L_2TAG_PACKET_1_0_2);
bind(L_2TAG_PACKET_3_0_2);
movsd(xmm3, Address(ebx, 2192 ));
mulsd(xmm3, xmm0);
subsd(xmm3, xmm0);
mulsd(xmm3, Address(ebx, 2208 ));
movsd(Address(rsp, 0 ), xmm0);
fld_d(Address(rsp, 0 ));
jmp(L_2TAG_PACKET_1_0_2);
bind(L_2TAG_PACKET_2_0_2);
movl(eax, Address(rsp, 132 ));
andl(eax, 2146435072 );
cmpl(eax, 2146435072 );
jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
subl(rsp, 32 );
movsd(Address(rsp, 0 ), xmm0);
lea(eax, Address(rsp, 40 ));
movl(Address(rsp, 8 ), eax);
movl(eax, 2 );
movl(Address(rsp, 12 ), eax);
call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_sin_cos_huge())));
addl(rsp, 32 );
fld_d(Address(rsp, 16 ));
jmp(L_2TAG_PACKET_1_0_2);
bind(L_2TAG_PACKET_4_0_2);
fld_d(Address(rsp, 128 ));
fmul_d(Address(ebx, 2240 ));
bind(L_2TAG_PACKET_1_0_2);
movl(ebx, Address(rsp, 56 ));
}
Messung V0.5 in Prozent C=86 H=90 G=87