2
* Copyright (c) 2016, 2021, Intel Corporation. All rights reserved.
3
* Intel Math Library (LIBM) Source Code
5
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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.
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).
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.
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
27
#include "precompiled.hpp"
28
#include "asm/assembler.hpp"
29
#include "asm/assembler.inline.hpp"
30
#include "macroAssembler_x86.hpp"
31
#include "runtime/stubRoutines.hpp"
32
#include "utilities/globalDefinitions.hpp"
34
/******************************************************************************/
35
// ALGORITHM DESCRIPTION - TAN()
36
// ---------------------
38
// Polynomials coefficients and other constants.
40
// Note that in this algorithm, there is a different polynomial for
41
// each breakpoint, so there are 32 sets of polynomial coefficients
42
// as well as 32 instances of the other constants.
44
// The polynomial coefficients and constants are offset from the start
45
// of the main block as follows:
63
// The total table size is therefore 5632 bytes.
65
// Note that c0 and c1 are always zero. We could try storing
66
// other constants here, and just loading the low part of the
67
// SIMD register in these cases, after ensuring the high part
70
// The higher terms of the polynomial are computed in the *low*
71
// part of the SIMD register. This is so we can overlap the
72
// multiplication by r^8 and the unpacking of the other part.
75
// T_hi + T_lo = accurate constant term in power series
76
// Sigma + T_hl = accurate coefficient of r in power series (Sigma=1 bit)
77
// Tau = multiplier for the reciprocal, always -1 or 0
79
// The basic reconstruction formula using these constants is:
81
// High = tau * recip_hi + t_hi
82
// Med = (sgn * r + t_hl * r)_hi
83
// Low = (sgn * r + t_hl * r)_lo +
84
// tau * recip_lo + T_lo + (T_hl + sigma) * c + pol
86
// where pol = c0 + c1 * r + c2 * r^2 + ... + c15 * r^15
88
// (c0 = c1 = 0, but using them keeps SIMD regularity)
90
// We then do a compensated sum High + Med, add the low parts together
91
// and then do the final sum.
93
// Here recip_hi + recip_lo is an accurate reciprocal of the remainder
97
// tan(NaN) = quiet NaN, and raise invalid exception
98
// tan(INF) = NaN and raise invalid exception
101
/******************************************************************************/
103
// The 32 bit code is at most SSE2 compliant
105
ATTRIBUTE_ALIGNED(16) static const jushort _TP[] =
107
0x4cd6, 0xaf6c, 0xc710, 0xc662, 0xbffd, 0x0000, 0x4b06, 0xb0ac, 0xd3b2, 0xcc2c,
108
0x3ff9, 0x0000, 0x00e3, 0xc850, 0xaa28, 0x9533, 0xbff3, 0x0000, 0x2ff0, 0x466d,
109
0x1a3b, 0xb266, 0x3fe5, 0x0000
112
ATTRIBUTE_ALIGNED(16) static const jushort _TQ[] =
114
0x399c, 0x8391, 0x154c, 0x94ca, 0xbfff, 0x0000, 0xb6a3, 0xc36a, 0x44e2, 0x8a2c,
115
0x3ffe, 0x0000, 0xb70f, 0xd068, 0xa6ce, 0xe9dd, 0xbff9, 0x0000, 0x820f, 0x51ce,
116
0x7d76, 0x9bff, 0x3ff3, 0x0000
119
ATTRIBUTE_ALIGNED(16) static const jushort _GP[] =
121
0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffd, 0x0000, 0xb62f, 0x0b60, 0x60b6, 0xb60b,
122
0xbff9, 0x0000, 0xdfa7, 0x08aa, 0x55e0, 0x8ab3, 0xbff6, 0x0000, 0x85a0, 0xa819,
123
0xbc99, 0xddeb, 0xbff2, 0x0000, 0x7065, 0x6a37, 0x795f, 0xb354, 0xbfef, 0x0000,
124
0xa8f9, 0x83f1, 0x2ec8, 0x9140, 0xbfec, 0x0000, 0xf3ca, 0x8c96, 0x8e0b, 0xeb6d,
125
0xbfe8, 0x0000, 0x355b, 0xd910, 0x67c9, 0xbed3, 0xbfe5, 0x0000, 0x286b, 0xb49e,
126
0xb854, 0x9a98, 0xbfe2, 0x0000, 0x0871, 0x1a2f, 0x6477, 0xfcc4, 0xbfde, 0x0000,
127
0xa559, 0x1da9, 0xaed2, 0xba76, 0xbfdb, 0x0000, 0x00a3, 0x7fea, 0x9bc3, 0xf205,
131
void MacroAssembler::libm_tancot_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
132
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;
133
Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
134
Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
135
Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_43;
137
assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
139
address TP = (address)_TP;
140
address TQ = (address)_TQ;
141
address GP = (address)_GP;
151
movl(eax, Address(ebp, 16));
152
movl(ebx, Address(ebp, 20));
153
movl(Address(esp, 40), eax);
156
fnstcw(Address(esp, 38));
159
movl(edx, Address(ebp, 12));
161
andl(eax, 2147483647);
163
movl(Address(esp, 44), edx);
164
cmpl(eax, 1104150528);
165
jcc(Assembler::aboveEqual, B1_11);
168
movsd(xmm1, Address(ebp, 8));
169
movzwl(ecx, Address(esp, 38));
172
andps(xmm1, ExternalAddress(L_2IL0FLOATPACKET_0)); //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
174
movsd(xmm0, ExternalAddress(PI4_INV)); ////0x6dc9c883UL, 0x3ff45f30UL
176
movsd(Address(ebp, 8), xmm1);
177
movsd(Address(esp, 0), xmm0);
178
jcc(Assembler::equal, B1_39);
182
movw(Address(esp, 36), ecx);
185
fldcw(Address(esp, 36));
188
movsd(xmm1, Address(ebp, 8));
192
movl(Address(esp, 12), esi);
193
movl(esi, Address(esp, 4));
195
movl(Address(esp, 24), edi);
203
movl(Address(esp, 8), ebx);
206
movl(Address(esp, 28), ecx);
210
movl(ecx, Address(esp, 28));
211
movl(edi, Address(esp, 0));
214
cmpl(esi, 1094713344);
215
movsd(Address(esp, 16), xmm1);
216
fld_d(Address(esp, 16));
217
cmov32(Assembler::below, edx, ebx);
218
movl(edi, Address(esp, 24));
219
movl(esi, Address(esp, 12));
220
lea(ebx, Address(edx, 1));
222
movl(Address(esp, 16), ebx);
223
cmpl(eax, 1094713344);
224
fild_s(Address(esp, 16));
225
movl(ebx, Address(esp, 8));
226
jcc(Assembler::aboveEqual, B1_10);
229
fld_d(ExternalAddress(PI4X3)); //0x54443000UL, 0xbfe921fbUL
232
fld_d(ExternalAddress(PI4X3 + 8)); //0x3b39a000UL, 0x3d373dcbUL
235
fld_d(ExternalAddress(PI4X3 + 16)); //0xe0e68948UL, 0xba845c06UL
241
fld_d(ExternalAddress(PI4X4)); //0x54400000UL, 0xbfe921fbUL
244
fld_d(ExternalAddress(PI4X4 + 8)); //0x1a600000UL, 0xbdc0b461UL
247
fld_d(ExternalAddress(PI4X4 + 16)); //0x2e000000UL, 0xbb93198aUL
250
fld_d(ExternalAddress(PI4X4 + 24)); //0x252049c1UL, 0xb96b839aUL
256
movzwl(edx, Address(esp, 38));
260
jcc(Assembler::equal, B1_40);
264
movw(Address(esp, 36), edx);
267
fldcw(Address(esp, 36));
273
movsd(xmm0, Address(ebp, 8));
275
andps(xmm0, ExternalAddress(L_2IL0FLOATPACKET_0)); //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
276
lea(eax, Address(esp, 32));
277
movsd(Address(eax, 16), xmm0);
278
fld_d(Address(eax, 16));
279
fstp_x(Address(esp, 0));
280
movl(Address(esp, 12), 0);
281
movl(Address(esp, 16), eax);
282
call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l())));
289
fld_d(Address(esp, 0));
290
fld_d(Address(esp, 8));
297
jcc(Assembler::notEqual, B1_24);
300
fld_d(ExternalAddress(ONES));
304
fstp_x(Address(esp, 24));
309
fld_x(ExternalAddress(36 + TP)); //0x2ff0, 0x466d, 0x1a
311
fld_x(ExternalAddress(24 + TP)); //0x00e3, 0xc850, 0xaa
314
fld_x(ExternalAddress(12 + TP)); //0x4b06, 0xb0ac, 0xd3
317
fld_x(ExternalAddress(36 + TQ)); //0x820f, 0x51ce, 0x7d
319
fld_x(ExternalAddress(24 + TQ)); //0xb70f, 0xd068, 0xa6
322
fld_x(ExternalAddress(12 + TQ)); //0xb6a3, 0xc36a, 0x44
325
fld_x(ExternalAddress(TQ)); //0x399c, 0x8391, 0x15
327
fld_x(ExternalAddress(TP)); //0x4cd6, 0xaf6c, 0xc7
329
fld_x(ExternalAddress(132 + GP)); //0x00a3, 0x7fea, 0x9b
331
fld_x(ExternalAddress(120 + GP)); //0xa559, 0x1da9, 0xae
333
fld_x(ExternalAddress(108 + GP)); //0x0871, 0x1a2f, 0x64
337
fld_x(ExternalAddress(96 + GP)); //0x286b, 0xb49e, 0xb8
341
fld_x(ExternalAddress(84 + GP)); //0x355b, 0xd910, 0x67
345
fld_x(ExternalAddress(72 + GP)); //0x8c96, 0x8e0b, 0xeb
349
fld_x(ExternalAddress(60 + GP)); //0xa8f9, 0x83f1, 0x2e
353
fld_x(ExternalAddress(48 + GP)); //0x7065, 0x6a37, 0x79
357
fld_x(ExternalAddress(36 + GP)); //0x85a0, 0xa819, 0xbc
361
fld_x(ExternalAddress(24 + GP)); //0xdfa7, 0x08aa, 0x55
365
fld_x(ExternalAddress(12 + GP)); //0xb62f, 0x0b60, 0x60
369
fld_x(ExternalAddress(GP)); //0xaaab, 0xaaaa, 0xaa
374
jcc(Assembler::equal, B1_20);
377
fld_x(Address(esp, 24));
382
movl(eax, Address(esp, 44));
386
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
392
fstp_d(Address(esp, 16));
396
movsd(xmm0, Address(esp, 16));
398
fstp_d(Address(esp, 16));
399
movsd(xmm1, Address(esp, 16));
407
movl(eax, Address(esp, 44));
408
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
413
fstp_d(Address(esp, 16));
415
fld_x(Address(esp, 24));
417
movsd(xmm0, Address(esp, 16));
419
fstp_d(Address(esp, 16));
420
movsd(xmm1, Address(esp, 16));
424
jcc(Assembler::equal, B1_23);
427
fldcw(Address(esp, 38));
430
movl(eax, Address(esp, 40));
431
movsd(Address(eax, 0), xmm0);
432
movsd(Address(eax, 8), xmm1);
443
jcc(Assembler::equal, B1_31);
450
jcc(Assembler::equal, B1_27);
453
fld_d(ExternalAddress(ONES));
457
fld_x(ExternalAddress(132 + GP)); //0x00a3, 0x7fea, 0x9b
459
fld_x(ExternalAddress(120 + GP)); //0xa559, 0x1da9, 0xae
461
fld_x(ExternalAddress(108 + GP)); //0x67c9, 0xbed3, 0xbf
462
movl(eax, Address(esp, 44));
467
fld_x(ExternalAddress(96 + GP)); //0x286b, 0xb49e, 0xb8
471
fld_x(ExternalAddress(84 + GP)); //0x355b, 0xd910, 0x67
475
fld_x(ExternalAddress(72 + GP)); //0xf3ca, 0x8c96, 0x8e
479
fld_x(ExternalAddress(60 + GP)); //0xa8f9, 0x83f1, 0x2e
483
fld_x(ExternalAddress(48 + GP)); //0x7065, 0x6a37, 0x79
487
fld_x(ExternalAddress(36 + GP)); //0x85a0, 0xa819, 0xbc
491
fld_x(ExternalAddress(24 + GP)); //0xdfa7, 0x08aa, 0x55
495
fld_x(ExternalAddress(12 + GP)); //0xb62f, 0x0b60, 0x60
498
fld_x(ExternalAddress(GP)); //0xaaab, 0xaaaa, 0xaa
505
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
509
fstp_d(Address(esp, 16));
510
movsd(xmm0, Address(esp, 16));
514
fld_x(ExternalAddress(36 + TP)); //0x2ff0, 0x466d, 0x1a
516
fld_x(ExternalAddress(24 + TP)); //0x00e3, 0xc850, 0xaa
517
movl(eax, Address(esp, 44));
520
fld_x(ExternalAddress(36 + TQ)); //0x820f, 0x51ce, 0x7d
522
fld_x(ExternalAddress(24 + TQ)); //0xb70f, 0xd068, 0xa6
525
fld_x(ExternalAddress(12 + TQ)); //0xb6a3, 0xc36a, 0x44
528
fld_x(ExternalAddress(TQ)); //0x399c, 0x8391, 0x15
530
fld_x(ExternalAddress(12 + TP)); //0x4b06, 0xb0ac, 0xd3
534
fld_x(ExternalAddress(TP)); //0x4cd6, 0xaf6c, 0xc7
539
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
543
fstp_d(Address(esp, 16));
544
movsd(xmm0, Address(esp, 16));
548
jcc(Assembler::equal, B1_30);
551
fldcw(Address(esp, 38));
554
movl(eax, Address(esp, 40));
555
movsd(Address(eax, 0), xmm0);
566
jcc(Assembler::equal, B1_38);
573
jcc(Assembler::equal, B1_34);
576
fld_x(ExternalAddress(36 + TP)); //0x2ff0, 0x466d, 0x1a
578
fld_x(ExternalAddress(24 + TP)); //0x00e3, 0xc850, 0xaa
579
movl(eax, Address(esp, 44));
583
fld_x(ExternalAddress(36 + TQ)); //0x820f, 0x51ce, 0x7d
585
fld_x(ExternalAddress(24 + TQ)); //0xb70f, 0xd068, 0xa6
588
fld_x(ExternalAddress(12 + TQ)); //0xb6a3, 0xc36a, 0x44
591
fld_x(ExternalAddress(TQ)); //0x399c, 0x8391, 0x15
593
fld_x(ExternalAddress(12 + TP)); //0x4b06, 0xb0ac, 0xd3
597
fld_x(ExternalAddress(TP)); //0x4cd6, 0xaf6c, 0xc7
602
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
606
fstp_d(Address(esp, 16));
607
movsd(xmm0, Address(esp, 16));
611
fld_d(ExternalAddress(ONES));
615
fld_x(ExternalAddress(132 + GP)); //0x00a3, 0x7fea, 0x9b
617
fld_x(ExternalAddress(120 + GP)); //0xa559, 0x1da9, 0xae
619
fld_x(ExternalAddress(108 + GP)); //0x67c9, 0xbed3, 0xbf
620
movl(eax, Address(esp, 44));
624
fld_x(ExternalAddress(96 + GP)); //0x286b, 0xb49e, 0xb8
628
fld_x(ExternalAddress(84 + GP)); //0x355b, 0xd910, 0x67
632
fld_x(ExternalAddress(72 + GP)); //0xf3ca, 0x8c96, 0x8e
636
fld_x(ExternalAddress(60 + GP)); //0xa8f9, 0x83f1, 0x2e
640
fld_x(ExternalAddress(48 + GP)); //0x7065, 0x6a37, 0x79
644
fld_x(ExternalAddress(36 + GP)); //0x85a0, 0xa819, 0xbc
648
fld_x(ExternalAddress(24 + GP)); //0xdfa7, 0x08aa, 0x55
652
fld_x(ExternalAddress(12 + GP)); //0xb62f, 0x0b60, 0x60
655
fld_x(ExternalAddress(GP)); //0xaaab, 0xaaaa, 0xaa
662
fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
666
fstp_d(Address(esp, 16));
667
movsd(xmm0, Address(esp, 16));
671
jcc(Assembler::equal, B1_37);
674
fldcw(Address(esp, 38));
677
movl(eax, Address(esp, 40));
678
movsd(Address(eax, 8), xmm0);
706
ATTRIBUTE_ALIGNED(16) static const juint _static_const_table_tan[] =
708
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x882c10faUL,
709
0x3f9664f4UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
710
0x00000000UL, 0x00000000UL, 0x55e6c23dUL, 0x3f8226e3UL, 0x55555555UL,
711
0x3fd55555UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
712
0x0e157de0UL, 0x3f6d6d3dUL, 0x11111111UL, 0x3fc11111UL, 0x00000000UL,
713
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x452b75e3UL, 0x3f57da36UL,
714
0x1ba1ba1cUL, 0x3faba1baUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
715
0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
716
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL,
717
0x3f953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL,
718
0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0x3f85ad63UL, 0xdc230b9bUL,
719
0x3fb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL,
720
0x77bb08baUL, 0x3f757c85UL, 0xb6247521UL, 0x3fb1381eUL, 0x5922170cUL,
721
0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0x3f64e391UL,
722
0x3e666320UL, 0x3fa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL,
723
0x3fafa8aeUL, 0x8c5b2da2UL, 0x3fb936bbUL, 0x4e88f7a5UL, 0x3c587d05UL,
724
0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
725
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x5a279ea3UL, 0x3faa3407UL,
726
0x00000000UL, 0x00000000UL, 0x432d65faUL, 0x3fa70153UL, 0x00000000UL,
727
0x00000000UL, 0x891a4602UL, 0x3f9d03efUL, 0xd62ca5f8UL, 0x3fca77d9UL,
728
0xb35f4628UL, 0x3f97a265UL, 0x433258faUL, 0x3fd8cf51UL, 0xb58fd909UL,
729
0x3f8f88e3UL, 0x01771ceaUL, 0x3fc2b154UL, 0xf3562f8eUL, 0x3f888f57UL,
730
0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL, 0x3f80f44cUL, 0x214368e9UL,
731
0x3fb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL, 0x172dbbf0UL, 0x3fb6cb8eUL,
732
0xe0553158UL, 0x3fc975f5UL, 0x593fe814UL, 0x3c2ef5d3UL, 0x00000000UL,
733
0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL, 0x00000000UL, 0x00000000UL,
734
0x00000000UL, 0x00000000UL, 0x9314533eUL, 0x3fbb8ec5UL, 0x00000000UL,
735
0x00000000UL, 0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL,
736
0xdcb427fdUL, 0x3fb13950UL, 0xd87ab0bbUL, 0x3fd5335eUL, 0xce0ae8a5UL,
737
0x3fabb382UL, 0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0x3fa552f1UL,
738
0x59f21a6dUL, 0x3fd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL,
739
0x3fd0576cUL, 0x8f2c2950UL, 0x3f9a4898UL, 0xc0b3f22cUL, 0x3fc59462UL,
740
0x1883a4b8UL, 0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL,
741
0x3fd36a08UL, 0x1dce993dUL, 0xbc6d704dUL, 0x00000000UL, 0x3ff00000UL,
742
0x2b82ab63UL, 0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
743
0x00000000UL, 0x56f37042UL, 0x3fccfc56UL, 0x00000000UL, 0x00000000UL,
744
0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL, 0x3d0e7c5dUL,
745
0x3fc50533UL, 0x9bed9b2eUL, 0x3fdf0ed9UL, 0x5fe7c47cUL, 0x3fc1f250UL,
746
0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0x3fbe5c71UL, 0x86362c20UL,
747
0x3fda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL, 0x3fd911bdUL,
748
0xb56658beUL, 0x3fb5e4c7UL, 0x93a2fd76UL, 0x3fd3c092UL, 0xda271794UL,
749
0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL, 0x3fda8279UL,
750
0xb68c1467UL, 0x3c708b2fUL, 0x00000000UL, 0x3ff00000UL, 0x980c4337UL,
751
0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
752
0xcc03e501UL, 0x3fdff10fUL, 0x00000000UL, 0x00000000UL, 0x44a4e845UL,
753
0x3fddb63bUL, 0x00000000UL, 0x00000000UL, 0x3768ad9fUL, 0x3fdb72a4UL,
754
0x3dd01ccaUL, 0x3fe5fdb9UL, 0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL,
755
0x3fe977f9UL, 0xd013b3abUL, 0x3fd78ca3UL, 0xbf0bf914UL, 0x3fe4f192UL,
756
0x4d53e730UL, 0x3fd5d060UL, 0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL,
757
0x3fd4322aUL, 0x5936a835UL, 0x3fe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL,
758
0xef478605UL, 0x3fe1659eUL, 0x190834ecUL, 0x3fe11ab7UL, 0xcdb625eaUL,
759
0xbc8e564bUL, 0x00000000UL, 0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL,
760
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL,
761
0x3ff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL,
762
0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0x3ff3972eUL, 0xe93463bdUL,
763
0x3feeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL,
764
0xa04e8ea3UL, 0x3ff4541aUL, 0x386accd3UL, 0x3ff1369eUL, 0x222a66ddUL,
765
0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0x3ff5178fUL,
766
0xddaa0031UL, 0x3ff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL,
767
0x3ff29311UL, 0x2ab7f990UL, 0x3fe561b8UL, 0x209c7df1UL, 0x3c87a8c5UL,
768
0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL,
769
0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc7ab4d5aUL, 0x40085e24UL,
770
0x00000000UL, 0x00000000UL, 0xe93ea75dUL, 0x400b963dUL, 0x00000000UL,
771
0x00000000UL, 0x94a7f25aUL, 0x400f37e2UL, 0x4b6261cbUL, 0x3ff5f984UL,
772
0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL, 0x3ffaf5a5UL, 0x7f2ce8e3UL,
773
0x4013fe8bUL, 0xfe8e54faUL, 0x3ffd7334UL, 0x670d618dUL, 0x4016a10cUL,
774
0x4db97058UL, 0x4000e012UL, 0x24df44ddUL, 0x40199c5fUL, 0x697d6eceUL,
775
0x4003006eUL, 0x83298b82UL, 0x401cfc4dUL, 0x19d490d6UL, 0x40058c19UL,
776
0x2ae42850UL, 0x3fea4300UL, 0x118e20e6UL, 0xbc7a6db8UL, 0x00000000UL,
777
0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL, 0x00000000UL, 0x00000000UL,
778
0x00000000UL, 0x00000000UL, 0x65965966UL, 0x40219659UL, 0x00000000UL,
779
0x00000000UL, 0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL,
780
0x83cd3723UL, 0x402c8342UL, 0x00000000UL, 0x40000000UL, 0x55e6c23dUL,
781
0x403226e3UL, 0x55555555UL, 0x40055555UL, 0x34451939UL, 0x40371c96UL,
782
0xaaaaaaabUL, 0x400aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL,
783
0x40111111UL, 0xa738201fUL, 0x4042bbceUL, 0x05b05b06UL, 0x4015b05bUL,
784
0x452b75e3UL, 0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL,
785
0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL,
786
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
787
0x00000000UL, 0x4f48b8d3UL, 0xbf33eaf9UL, 0x00000000UL, 0x00000000UL,
788
0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL, 0xd0258911UL,
789
0xbf0abaf3UL, 0x23e49fe9UL, 0xbfab5a8cUL, 0x2d53222eUL, 0x3ef60d15UL,
790
0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0xbee1d3b5UL, 0xdbf93b8eUL,
791
0xbf84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL, 0x3f743924UL,
792
0x794a8297UL, 0xbeb7b7b9UL, 0xe015f797UL, 0xbf5d41f5UL, 0xe41a4a56UL,
793
0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL, 0xbfce49ceUL,
794
0x8c743719UL, 0x3d1eb860UL, 0x00000000UL, 0x00000000UL, 0x1b4863cfUL,
795
0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
796
0x535ad890UL, 0xbf2b9320UL, 0x00000000UL, 0x00000000UL, 0x018fdf1fUL,
797
0x3f16d61dUL, 0x00000000UL, 0x00000000UL, 0x0359f1beUL, 0xbf0139e4UL,
798
0xa4317c6dUL, 0xbfa67e17UL, 0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL,
799
0x3f9f455bUL, 0x51ccf238UL, 0xbed55317UL, 0xf437b9acUL, 0xbf804beeUL,
800
0xc791a2b5UL, 0x3ec0e993UL, 0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL,
801
0xbeaa48a2UL, 0x0a268358UL, 0xbf55a443UL, 0xdfd978e4UL, 0x3e94b61fUL,
802
0xd7767a58UL, 0x3f431806UL, 0x2aea0000UL, 0xbfc9bbe8UL, 0x7723ea61UL,
803
0xbd3a2369UL, 0x00000000UL, 0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL,
804
0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL,
805
0xbf231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL,
806
0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0xbef66191UL, 0x848a46c6UL,
807
0xbfa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL,
808
0xfdd299efUL, 0xbec9dd1aUL, 0x3f8dbaafUL, 0xbf793363UL, 0x309fc6eaUL,
809
0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0xbe9dae11UL,
810
0x3e5c67b3UL, 0xbf4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL,
811
0x3f3d1eb1UL, 0x29cfc000UL, 0xbfc549ceUL, 0xbf159358UL, 0xbd397b33UL,
812
0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL,
813
0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x7d98a556UL, 0xbf1a3958UL,
814
0x00000000UL, 0x00000000UL, 0x9d88dc01UL, 0x3f0704c2UL, 0x00000000UL,
815
0x00000000UL, 0x73742a2bUL, 0xbeed054aUL, 0x58844587UL, 0xbf9c2a13UL,
816
0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL, 0x3f9a48f4UL, 0xa8dc9888UL,
817
0xbebf8939UL, 0xaad4b5b8UL, 0xbf72f746UL, 0x9102efa1UL, 0x3ea88f82UL,
818
0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL, 0xbe90f456UL, 0x741fb4edUL,
819
0xbf46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL, 0xca89ff3fUL, 0x3f36db70UL,
820
0xa8a2a000UL, 0xbfc0ee13UL, 0x3da24be1UL, 0xbd338b9fUL, 0x00000000UL,
821
0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL, 0x00000000UL, 0x3ff00000UL,
822
0x00000000UL, 0xfffffff8UL, 0x1a154b97UL, 0xbf116b01UL, 0x00000000UL,
823
0x00000000UL, 0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL,
824
0xb93820c8UL, 0xbee264d4UL, 0xbb6cbb18UL, 0xbf94ab8cUL, 0x888d4d92UL,
825
0x3ed0568bUL, 0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0xbeb2f950UL,
826
0x22cf9f74UL, 0xbf6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL,
827
0x3f64aad7UL, 0x637b73afUL, 0xbe83487cUL, 0xe522591aUL, 0xbf3fc092UL,
828
0xa158e8bcUL, 0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL,
829
0xbfb9477fUL, 0xc2c2d2bcUL, 0xbd135ef9UL, 0x00000000UL, 0x00000000UL,
830
0xf2fdb123UL, 0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
831
0xfffffff8UL, 0xc41acb64UL, 0xbf05448dUL, 0x00000000UL, 0x00000000UL,
832
0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL, 0x9e42962dUL,
833
0xbed5aea5UL, 0x2579f8efUL, 0xbf8b2398UL, 0x288a1ed9UL, 0x3ec81441UL,
834
0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0xbea57cd3UL, 0x5766336fUL,
835
0xbf617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL, 0x3f62c646UL,
836
0x6b8fb29cUL, 0xbe74e3a3UL, 0xdc4c0409UL, 0xbf33f952UL, 0x9bffe365UL,
837
0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL, 0xbfb0cc62UL,
838
0x016b907fUL, 0xbd119cbcUL, 0x00000000UL, 0x00000000UL, 0xe6b9d8faUL,
839
0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
840
0x5daf22a6UL, 0xbef429d7UL, 0x00000000UL, 0x00000000UL, 0x06bca545UL,
841
0x3ef7a27dUL, 0x00000000UL, 0x00000000UL, 0x7211c19aUL, 0xbec41c3eUL,
842
0x956ed53eUL, 0xbf7ae3f4UL, 0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL,
843
0x3f96f713UL, 0x36661e6cUL, 0xbe936e09UL, 0x506f9381UL, 0xbf5122e8UL,
844
0xcb6dd43fUL, 0x3e9041b9UL, 0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL,
845
0xbe625a8aUL, 0xe5a0e9dcUL, 0xbf23499dUL, 0x110384ddUL, 0x3e5b1c2cUL,
846
0x68d43db6UL, 0x3f2cb899UL, 0x6ecac000UL, 0xbfa0c414UL, 0xcd7dd58cUL,
847
0x3d13500fUL, 0x00000000UL, 0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL,
848
0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL,
849
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2bf70ebeUL, 0x3ef66a8fUL,
850
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
851
0x00000000UL, 0xd644267fUL, 0x3ec22805UL, 0x16c16c17UL, 0x3f96c16cUL,
852
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0xc4e09162UL,
853
0x3e8d6db2UL, 0xbc011567UL, 0x3f61566aUL, 0x00000000UL, 0x00000000UL,
854
0x00000000UL, 0x00000000UL, 0x1f79955cUL, 0x3e57da4eUL, 0x9334ef0bUL,
855
0x3f2bbd77UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
856
0x00000000UL, 0x00000000UL, 0x55555555UL, 0x3fd55555UL, 0x00000000UL,
857
0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x5daf22a6UL, 0x3ef429d7UL,
858
0x00000000UL, 0x00000000UL, 0x06bca545UL, 0x3ef7a27dUL, 0x00000000UL,
859
0x00000000UL, 0x7211c19aUL, 0x3ec41c3eUL, 0x956ed53eUL, 0x3f7ae3f4UL,
860
0xee750e72UL, 0x3ec3901bUL, 0x91d443f5UL, 0x3f96f713UL, 0x36661e6cUL,
861
0x3e936e09UL, 0x506f9381UL, 0x3f5122e8UL, 0xcb6dd43fUL, 0x3e9041b9UL,
862
0x6698b2ffUL, 0x3f61b0c7UL, 0x576bf12bUL, 0x3e625a8aUL, 0xe5a0e9dcUL,
863
0x3f23499dUL, 0x110384ddUL, 0x3e5b1c2cUL, 0x68d43db6UL, 0x3f2cb899UL,
864
0x6ecac000UL, 0x3fa0c414UL, 0xcd7dd58cUL, 0xbd13500fUL, 0x00000000UL,
865
0x00000000UL, 0x85a2c8fbUL, 0x3fd55fe0UL, 0x00000000UL, 0x3ff00000UL,
866
0x00000000UL, 0xfffffff8UL, 0xc41acb64UL, 0x3f05448dUL, 0x00000000UL,
867
0x00000000UL, 0xdbb03d6fUL, 0x3efb7ad2UL, 0x00000000UL, 0x00000000UL,
868
0x9e42962dUL, 0x3ed5aea5UL, 0x2579f8efUL, 0x3f8b2398UL, 0x288a1ed9UL,
869
0x3ec81441UL, 0xb0198dc5UL, 0x3f979a3aUL, 0x2fdfe253UL, 0x3ea57cd3UL,
870
0x5766336fUL, 0x3f617caaUL, 0x600944c3UL, 0x3e954ed6UL, 0xa4e0aaf8UL,
871
0x3f62c646UL, 0x6b8fb29cUL, 0x3e74e3a3UL, 0xdc4c0409UL, 0x3f33f952UL,
872
0x9bffe365UL, 0x3e6301ecUL, 0xb8869e44UL, 0x3f2fc566UL, 0xe1e04000UL,
873
0x3fb0cc62UL, 0x016b907fUL, 0x3d119cbcUL, 0x00000000UL, 0x00000000UL,
874
0xe6b9d8faUL, 0x3fd57fb3UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
875
0xfffffff8UL, 0x1a154b97UL, 0x3f116b01UL, 0x00000000UL, 0x00000000UL,
876
0x2d427630UL, 0x3f0147bfUL, 0x00000000UL, 0x00000000UL, 0xb93820c8UL,
877
0x3ee264d4UL, 0xbb6cbb18UL, 0x3f94ab8cUL, 0x888d4d92UL, 0x3ed0568bUL,
878
0x60730f7cUL, 0x3f98b19bUL, 0xe4b1fb11UL, 0x3eb2f950UL, 0x22cf9f74UL,
879
0x3f6b21cdUL, 0x4a3ff0a6UL, 0x3e9f499eUL, 0xfd2b83ceUL, 0x3f64aad7UL,
880
0x637b73afUL, 0x3e83487cUL, 0xe522591aUL, 0x3f3fc092UL, 0xa158e8bcUL,
881
0x3e6e3aaeUL, 0xe5e82ffaUL, 0x3f329d2fUL, 0xd636a000UL, 0x3fb9477fUL,
882
0xc2c2d2bcUL, 0x3d135ef9UL, 0x00000000UL, 0x00000000UL, 0xf2fdb123UL,
883
0x3fd5b566UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL,
884
0x7d98a556UL, 0x3f1a3958UL, 0x00000000UL, 0x00000000UL, 0x9d88dc01UL,
885
0x3f0704c2UL, 0x00000000UL, 0x00000000UL, 0x73742a2bUL, 0x3eed054aUL,
886
0x58844587UL, 0x3f9c2a13UL, 0x55688a79UL, 0x3ed7a326UL, 0xee33f1d6UL,
887
0x3f9a48f4UL, 0xa8dc9888UL, 0x3ebf8939UL, 0xaad4b5b8UL, 0x3f72f746UL,
888
0x9102efa1UL, 0x3ea88f82UL, 0xdabc29cfUL, 0x3f678228UL, 0x9289afb8UL,
889
0x3e90f456UL, 0x741fb4edUL, 0x3f46f3a3UL, 0xa97f6663UL, 0x3e79b4bfUL,
890
0xca89ff3fUL, 0x3f36db70UL, 0xa8a2a000UL, 0x3fc0ee13UL, 0x3da24be1UL,
891
0x3d338b9fUL, 0x00000000UL, 0x00000000UL, 0x11cd6c69UL, 0x3fd601fdUL,
892
0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0xb9ff07ceUL,
893
0x3f231c78UL, 0x00000000UL, 0x00000000UL, 0xa5517182UL, 0x3f0ff0e0UL,
894
0x00000000UL, 0x00000000UL, 0x790b4cbcUL, 0x3ef66191UL, 0x848a46c6UL,
895
0x3fa21ac0UL, 0xb16435faUL, 0x3ee1d3ecUL, 0x2a1aa832UL, 0x3f9c71eaUL,
896
0xfdd299efUL, 0x3ec9dd1aUL, 0x3f8dbaafUL, 0x3f793363UL, 0x309fc6eaUL,
897
0x3eb415d6UL, 0xbee60471UL, 0x3f6b83baUL, 0x94a0a697UL, 0x3e9dae11UL,
898
0x3e5c67b3UL, 0x3f4fd07bUL, 0x9a8f3e3eUL, 0x3e86bd75UL, 0xa4beb7a4UL,
899
0x3f3d1eb1UL, 0x29cfc000UL, 0x3fc549ceUL, 0xbf159358UL, 0x3d397b33UL,
900
0x00000000UL, 0x00000000UL, 0x871fee6cUL, 0x3fd666f0UL, 0x00000000UL,
901
0x3ff00000UL, 0x00000000UL, 0xfffffff8UL, 0x535ad890UL, 0x3f2b9320UL,
902
0x00000000UL, 0x00000000UL, 0x018fdf1fUL, 0x3f16d61dUL, 0x00000000UL,
903
0x00000000UL, 0x0359f1beUL, 0x3f0139e4UL, 0xa4317c6dUL, 0x3fa67e17UL,
904
0x82672d0fUL, 0x3eebb405UL, 0x2f1b621eUL, 0x3f9f455bUL, 0x51ccf238UL,
905
0x3ed55317UL, 0xf437b9acUL, 0x3f804beeUL, 0xc791a2b5UL, 0x3ec0e993UL,
906
0x919a1db2UL, 0x3f7080c2UL, 0x336a5b0eUL, 0x3eaa48a2UL, 0x0a268358UL,
907
0x3f55a443UL, 0xdfd978e4UL, 0x3e94b61fUL, 0xd7767a58UL, 0x3f431806UL,
908
0x2aea0000UL, 0x3fc9bbe8UL, 0x7723ea61UL, 0x3d3a2369UL, 0x00000000UL,
909
0x00000000UL, 0xdf7796ffUL, 0x3fd6e642UL, 0x00000000UL, 0x3ff00000UL,
910
0x00000000UL, 0xfffffff8UL, 0x4f48b8d3UL, 0x3f33eaf9UL, 0x00000000UL,
911
0x00000000UL, 0x0cf7586fUL, 0x3f20b8eaUL, 0x00000000UL, 0x00000000UL,
912
0xd0258911UL, 0x3f0abaf3UL, 0x23e49fe9UL, 0x3fab5a8cUL, 0x2d53222eUL,
913
0x3ef60d15UL, 0x21169451UL, 0x3fa172b2UL, 0xbb254dbcUL, 0x3ee1d3b5UL,
914
0xdbf93b8eUL, 0x3f84c7dbUL, 0x05b4630bUL, 0x3ecd3364UL, 0xee9aada7UL,
915
0x3f743924UL, 0x794a8297UL, 0x3eb7b7b9UL, 0xe015f797UL, 0x3f5d41f5UL,
916
0xe41a4a56UL, 0x3ea35dfbUL, 0xe4c2a251UL, 0x3f49a2abUL, 0x5af9e000UL,
917
0x3fce49ceUL, 0x8c743719UL, 0xbd1eb860UL, 0x00000000UL, 0x00000000UL,
918
0x1b4863cfUL, 0x3fd78294UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL,
919
0xfffffff8UL, 0x65965966UL, 0xc0219659UL, 0x00000000UL, 0x00000000UL,
920
0x882c10faUL, 0x402664f4UL, 0x00000000UL, 0x00000000UL, 0x83cd3723UL,
921
0xc02c8342UL, 0x00000000UL, 0xc0000000UL, 0x55e6c23dUL, 0x403226e3UL,
922
0x55555555UL, 0x40055555UL, 0x34451939UL, 0xc0371c96UL, 0xaaaaaaabUL,
923
0xc00aaaaaUL, 0x0e157de0UL, 0x403d6d3dUL, 0x11111111UL, 0x40111111UL,
924
0xa738201fUL, 0xc042bbceUL, 0x05b05b06UL, 0xc015b05bUL, 0x452b75e3UL,
925
0x4047da36UL, 0x1ba1ba1cUL, 0x401ba1baUL, 0x00000000UL, 0xbff00000UL,
926
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x40000000UL, 0x00000000UL,
927
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
928
0xc7ab4d5aUL, 0xc0085e24UL, 0x00000000UL, 0x00000000UL, 0xe93ea75dUL,
929
0x400b963dUL, 0x00000000UL, 0x00000000UL, 0x94a7f25aUL, 0xc00f37e2UL,
930
0x4b6261cbUL, 0xbff5f984UL, 0x5a9dd812UL, 0x4011aab0UL, 0x74c30018UL,
931
0x3ffaf5a5UL, 0x7f2ce8e3UL, 0xc013fe8bUL, 0xfe8e54faUL, 0xbffd7334UL,
932
0x670d618dUL, 0x4016a10cUL, 0x4db97058UL, 0x4000e012UL, 0x24df44ddUL,
933
0xc0199c5fUL, 0x697d6eceUL, 0xc003006eUL, 0x83298b82UL, 0x401cfc4dUL,
934
0x19d490d6UL, 0x40058c19UL, 0x2ae42850UL, 0xbfea4300UL, 0x118e20e6UL,
935
0x3c7a6db8UL, 0x00000000UL, 0x40000000UL, 0xe33345b8UL, 0xbfd4e526UL,
936
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x2b2c49d0UL,
937
0xbff2de9cUL, 0x00000000UL, 0x00000000UL, 0x2655bc98UL, 0x3ff33e58UL,
938
0x00000000UL, 0x00000000UL, 0xff691fa2UL, 0xbff3972eUL, 0xe93463bdUL,
939
0xbfeeed87UL, 0x070e10a0UL, 0x3ff3f5b2UL, 0xf4d790a4UL, 0x3ff20c10UL,
940
0xa04e8ea3UL, 0xbff4541aUL, 0x386accd3UL, 0xbff1369eUL, 0x222a66ddUL,
941
0x3ff4b521UL, 0x22a9777eUL, 0x3ff20817UL, 0x52a04a6eUL, 0xbff5178fUL,
942
0xddaa0031UL, 0xbff22137UL, 0x4447d47cUL, 0x3ff57c01UL, 0x1e9c7f1dUL,
943
0x3ff29311UL, 0x2ab7f990UL, 0xbfe561b8UL, 0x209c7df1UL, 0xbc87a8c5UL,
944
0x00000000UL, 0x3ff00000UL, 0x4170bcc6UL, 0x3fdc92d8UL, 0x00000000UL,
945
0x00000000UL, 0x00000000UL, 0x00000000UL, 0xcc03e501UL, 0xbfdff10fUL,
946
0x00000000UL, 0x00000000UL, 0x44a4e845UL, 0x3fddb63bUL, 0x00000000UL,
947
0x00000000UL, 0x3768ad9fUL, 0xbfdb72a4UL, 0x3dd01ccaUL, 0xbfe5fdb9UL,
948
0xa61d2811UL, 0x3fd972b2UL, 0x5645ad0bUL, 0x3fe977f9UL, 0xd013b3abUL,
949
0xbfd78ca3UL, 0xbf0bf914UL, 0xbfe4f192UL, 0x4d53e730UL, 0x3fd5d060UL,
950
0x3f8b9000UL, 0x3fe49933UL, 0xe2b82f08UL, 0xbfd4322aUL, 0x5936a835UL,
951
0xbfe27ae1UL, 0xb1c61c9bUL, 0x3fd2b3fbUL, 0xef478605UL, 0x3fe1659eUL,
952
0x190834ecUL, 0xbfe11ab7UL, 0xcdb625eaUL, 0x3c8e564bUL, 0x00000000UL,
953
0x3ff00000UL, 0xb07217e3UL, 0x3fd248f1UL, 0x00000000UL, 0x00000000UL,
954
0x00000000UL, 0x00000000UL, 0x56f37042UL, 0xbfccfc56UL, 0x00000000UL,
955
0x00000000UL, 0xaa563951UL, 0x3fc90125UL, 0x00000000UL, 0x00000000UL,
956
0x3d0e7c5dUL, 0xbfc50533UL, 0x9bed9b2eUL, 0xbfdf0ed9UL, 0x5fe7c47cUL,
957
0x3fc1f250UL, 0x96c125e5UL, 0x3fe2edd9UL, 0x5a02bbd8UL, 0xbfbe5c71UL,
958
0x86362c20UL, 0xbfda08b7UL, 0x4b4435edUL, 0x3fb9d342UL, 0x4b494091UL,
959
0x3fd911bdUL, 0xb56658beUL, 0xbfb5e4c7UL, 0x93a2fd76UL, 0xbfd3c092UL,
960
0xda271794UL, 0x3fb29910UL, 0x3303df2bUL, 0x3fd189beUL, 0x99fcef32UL,
961
0xbfda8279UL, 0xb68c1467UL, 0xbc708b2fUL, 0x00000000UL, 0x3ff00000UL,
962
0x980c4337UL, 0x3fc5f619UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
963
0x00000000UL, 0x9314533eUL, 0xbfbb8ec5UL, 0x00000000UL, 0x00000000UL,
964
0x09aa36d0UL, 0x3fb6d3f4UL, 0x00000000UL, 0x00000000UL, 0xdcb427fdUL,
965
0xbfb13950UL, 0xd87ab0bbUL, 0xbfd5335eUL, 0xce0ae8a5UL, 0x3fabb382UL,
966
0x79143126UL, 0x3fddba41UL, 0x5f2b28d4UL, 0xbfa552f1UL, 0x59f21a6dUL,
967
0xbfd015abUL, 0x22c27d95UL, 0x3fa0e984UL, 0xe19fc6aaUL, 0x3fd0576cUL,
968
0x8f2c2950UL, 0xbf9a4898UL, 0xc0b3f22cUL, 0xbfc59462UL, 0x1883a4b8UL,
969
0x3f94b61cUL, 0x3f838640UL, 0x3fc30eb8UL, 0x355c63dcUL, 0xbfd36a08UL,
970
0x1dce993dUL, 0x3c6d704dUL, 0x00000000UL, 0x3ff00000UL, 0x2b82ab63UL,
971
0x3fb78e92UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
972
0x5a279ea3UL, 0xbfaa3407UL, 0x00000000UL, 0x00000000UL, 0x432d65faUL,
973
0x3fa70153UL, 0x00000000UL, 0x00000000UL, 0x891a4602UL, 0xbf9d03efUL,
974
0xd62ca5f8UL, 0xbfca77d9UL, 0xb35f4628UL, 0x3f97a265UL, 0x433258faUL,
975
0x3fd8cf51UL, 0xb58fd909UL, 0xbf8f88e3UL, 0x01771ceaUL, 0xbfc2b154UL,
976
0xf3562f8eUL, 0x3f888f57UL, 0xc028a723UL, 0x3fc7370fUL, 0x20b7f9f0UL,
977
0xbf80f44cUL, 0x214368e9UL, 0xbfb6dfaaUL, 0x28891863UL, 0x3f79b4b6UL,
978
0x172dbbf0UL, 0x3fb6cb8eUL, 0xe0553158UL, 0xbfc975f5UL, 0x593fe814UL,
979
0xbc2ef5d3UL, 0x00000000UL, 0x3ff00000UL, 0x03dec550UL, 0x3fa44203UL,
980
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x4e435f9bUL,
981
0xbf953f83UL, 0x00000000UL, 0x00000000UL, 0x3c6e8e46UL, 0x3f9b74eaUL,
982
0x00000000UL, 0x00000000UL, 0xda5b7511UL, 0xbf85ad63UL, 0xdc230b9bUL,
983
0xbfb97558UL, 0x26cb3788UL, 0x3f881308UL, 0x76fc4985UL, 0x3fd62ac9UL,
984
0x77bb08baUL, 0xbf757c85UL, 0xb6247521UL, 0xbfb1381eUL, 0x5922170cUL,
985
0x3f754e95UL, 0x8746482dUL, 0x3fc27f83UL, 0x11055b30UL, 0xbf64e391UL,
986
0x3e666320UL, 0xbfa3e609UL, 0x0de9dae3UL, 0x3f6301dfUL, 0x1f1dca06UL,
987
0x3fafa8aeUL, 0x8c5b2da2UL, 0xbfb936bbUL, 0x4e88f7a5UL, 0xbc587d05UL,
988
0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
989
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x6dc9c883UL, 0x3fe45f30UL,
990
0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x43780000UL, 0x00000000UL,
991
0x43380000UL, 0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL,
992
0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL, 0x3707344aUL,
993
0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL, 0x00000000UL, 0x80000000UL,
994
0x00000000UL, 0x80000000UL, 0x676733afUL, 0x3d32e7b9UL, 0x00000000UL,
995
0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
996
0x00000000UL, 0x7ff00000UL, 0x00000000UL, 0x00000000UL, 0xfffc0000UL,
997
0xffffffffUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
998
0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
999
0x00000000UL, 0x00000000UL, 0x3ca00000UL, 0x00000000UL, 0x00000000UL,
1000
0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL, 0x00000000UL,
1001
0x40300000UL, 0x00000000UL, 0x3ff00000UL
1004
void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
1006
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;
1007
Label L_2TAG_PACKET_4_0_2;
1009
assert_different_registers(tmp, eax, ecx, edx);
1011
address static_const_table_tan = (address)_static_const_table_tan;
1014
movl(Address(rsp, 56), tmp);
1015
lea(tmp, ExternalAddress(static_const_table_tan));
1016
movsd(xmm0, Address(rsp, 128));
1017
pextrw(eax, xmm0, 3);
1021
jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
1022
movdqu(xmm5, Address(tmp, 5840));
1023
movdqu(xmm6, Address(tmp, 5856));
1024
unpcklpd(xmm0, xmm0);
1025
movdqu(xmm4, Address(tmp, 5712));
1027
movdqu(xmm1, Address(tmp, 5632));
1032
unpckhpd(xmm7, xmm7);
1033
cvttsd2sil(edx, xmm7);
1034
cvttpd2dq(xmm1, xmm1);
1035
cvtdq2pd(xmm1, xmm1);
1037
movdqu(xmm3, Address(tmp, 5664));
1038
movsd(xmm5, Address(tmp, 5728));
1040
movdqu(xmm4, Address(tmp, 5680));
1048
mulpd(xmm1, Address(tmp, 5696));
1055
movsd(xmm6, Address(tmp, 5744));
1057
lea(eax, Address(tmp, 0));
1058
andpd(xmm5, Address(tmp, 5776));
1062
unpckhpd(xmm0, xmm0);
1065
movdqu(xmm7, Address(eax, 16));
1069
movdqu(xmm1, Address(eax, 48));
1071
movdqu(xmm4, Address(eax, 96));
1076
addpd(xmm7, Address(eax, 0));
1077
addpd(xmm1, Address(eax, 32));
1079
addpd(xmm4, Address(eax, 80));
1081
movdqu(xmm1, Address(eax, 112));
1085
movdqu(xmm1, Address(eax, 64));
1091
mulpd(xmm1, Address(eax, 144));
1097
unpckhpd(xmm7, xmm7);
1099
unpckhpd(xmm1, xmm1);
1104
movsd(xmm7, Address(eax, 144));
1105
unpckhpd(xmm2, xmm2);
1106
addsd(xmm7, Address(eax, 152));
1108
addsd(xmm7, Address(eax, 136));
1111
movsd(xmm7, Address(tmp, 5744));
1113
movsd(xmm2, Address(eax, 168));
1116
mulsd(xmm6, Address(eax, 160));
1118
subsd(xmm2, Address(eax, 128));
1128
movsd(Address(rsp, 0), xmm0);
1129
fld_d(Address(rsp, 0));
1130
jmp(L_2TAG_PACKET_1_0_2);
1132
bind(L_2TAG_PACKET_0_0_2);
1133
jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
1135
cmpl(eax, 268434558);
1136
jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
1138
mulsd(xmm3, Address(tmp, 5808));
1140
bind(L_2TAG_PACKET_3_0_2);
1141
movsd(xmm3, Address(tmp, 5792));
1144
mulsd(xmm3, Address(tmp, 5808));
1145
movsd(Address(rsp, 0), xmm3);
1146
fld_d(Address(rsp, 0));
1147
jmp(L_2TAG_PACKET_1_0_2);
1149
bind(L_2TAG_PACKET_2_0_2);
1150
movq(xmm7, Address(tmp, 5712));
1153
ucomisd(xmm7, Address(tmp, 5760));
1154
jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
1156
movsd(Address(rsp, 0), xmm0);
1157
lea(eax, Address(rsp, 40));
1158
movl(Address(rsp, 8), eax);
1160
movl(Address(rsp, 12), eax);
1161
call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_tan_cot_huge())));
1163
fld_d(Address(rsp, 8));
1164
jmp(L_2TAG_PACKET_1_0_2);
1166
bind(L_2TAG_PACKET_4_0_2);
1167
movq(Address(rsp, 0), xmm0);
1168
fld_d(Address(rsp, 0));
1169
fsub_d(Address(rsp, 0));
1171
bind(L_2TAG_PACKET_1_0_2);
1172
movl(tmp, Address(rsp, 56));