jdk

Форк
0
/
macroAssembler_x86_32_tan.cpp 
1173 строки · 43.1 Кб
1
/*
2
* Copyright (c) 2016, 2021, Intel Corporation. All rights reserved.
3
* Intel Math Library (LIBM) Source Code
4
*
5
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6
*
7
* This code is free software; you can redistribute it and/or modify it
8
* under the terms of the GNU General Public License version 2 only, as
9
* published by the Free Software Foundation.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*
25
*/
26

27
#include "precompiled.hpp"
28
#include "asm/assembler.hpp"
29
#include "asm/assembler.inline.hpp"
30
#include "macroAssembler_x86.hpp"
31
#include "runtime/stubRoutines.hpp"
32
#include "utilities/globalDefinitions.hpp"
33

34
/******************************************************************************/
35
//                     ALGORITHM DESCRIPTION - TAN()
36
//                     ---------------------
37
//
38
// Polynomials coefficients and other constants.
39
//
40
// Note that in this algorithm, there is a different polynomial for
41
// each breakpoint, so there are 32 sets of polynomial coefficients
42
// as well as 32 instances of the other constants.
43
//
44
// The polynomial coefficients and constants are offset from the start
45
// of the main block as follows:
46
//
47
//   0:  c8 | c0
48
//  16:  c9 | c1
49
//  32: c10 | c2
50
//  48: c11 | c3
51
//  64: c12 | c4
52
//  80: c13 | c5
53
//  96: c14 | c6
54
// 112: c15 | c7
55
// 128: T_hi
56
// 136: T_lo
57
// 144: Sigma
58
// 152: T_hl
59
// 160: Tau
60
// 168: Mask
61
// 176: (end of block)
62
//
63
// The total table size is therefore 5632 bytes.
64
//
65
// Note that c0 and c1 are always zero. We could try storing
66
// other constants here, and just loading the low part of the
67
// SIMD register in these cases, after ensuring the high part
68
// is zero.
69
//
70
// The higher terms of the polynomial are computed in the *low*
71
// part of the SIMD register. This is so we can overlap the
72
// multiplication by r^8 and the unpacking of the other part.
73
//
74
// The constants are:
75
// T_hi + T_lo = accurate constant term in power series
76
// Sigma + T_hl = accurate coefficient of r in power series (Sigma=1 bit)
77
// Tau = multiplier for the reciprocal, always -1 or 0
78
//
79
// The basic reconstruction formula using these constants is:
80
//
81
// High = tau * recip_hi + t_hi
82
// Med = (sgn * r + t_hl * r)_hi
83
// Low = (sgn * r + t_hl * r)_lo +
84
//       tau * recip_lo + T_lo + (T_hl + sigma) * c + pol
85
//
86
// where pol = c0 + c1 * r + c2 * r^2 + ... + c15 * r^15
87
//
88
// (c0 = c1 = 0, but using them keeps SIMD regularity)
89
//
90
// We then do a compensated sum High + Med, add the low parts together
91
// and then do the final sum.
92
//
93
// Here recip_hi + recip_lo is an accurate reciprocal of the remainder
94
// modulo pi/2
95
//
96
// Special cases:
97
//  tan(NaN) = quiet NaN, and raise invalid exception
98
//  tan(INF) = NaN and raise invalid exception
99
//  tan(+/-0) = +/-0
100
//
101
/******************************************************************************/
102

103
// The 32 bit code is at most SSE2 compliant
104

105
ATTRIBUTE_ALIGNED(16) static const jushort _TP[] =
106
{
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
110
};
111

112
ATTRIBUTE_ALIGNED(16) static const jushort _TQ[] =
113
{
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
117
};
118

119
ATTRIBUTE_ALIGNED(16) static const jushort _GP[] =
120
{
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,
128
    0xbfd8, 0x0000
129
};
130

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;
136

137
  assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
138

139
  address TP = (address)_TP;
140
  address TQ = (address)_TQ;
141
  address GP = (address)_GP;
142

143
  bind(B1_1);
144
  push(ebp);
145
  movl(ebp, esp);
146
  andl(esp, -64);
147
  push(esi);
148
  push(edi);
149
  push(ebx);
150
  subl(esp, 52);
151
  movl(eax, Address(ebp, 16));
152
  movl(ebx, Address(ebp, 20));
153
  movl(Address(esp, 40), eax);
154

155
  bind(B1_2);
156
  fnstcw(Address(esp, 38));
157

158
  bind(B1_3);
159
  movl(edx, Address(ebp, 12));
160
  movl(eax, edx);
161
  andl(eax, 2147483647);
162
  shrl(edx, 31);
163
  movl(Address(esp, 44), edx);
164
  cmpl(eax, 1104150528);
165
  jcc(Assembler::aboveEqual, B1_11);
166

167
  bind(B1_4);
168
  movsd(xmm1, Address(ebp, 8));
169
  movzwl(ecx, Address(esp, 38));
170
  movl(edx, ecx);
171
  andl(edx, 768);
172
  andps(xmm1, ExternalAddress(L_2IL0FLOATPACKET_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
173
  cmpl(edx, 768);
174
  movsd(xmm0, ExternalAddress(PI4_INV));    ////0x6dc9c883UL, 0x3ff45f30UL
175
  mulsd(xmm0, xmm1);
176
  movsd(Address(ebp, 8), xmm1);
177
  movsd(Address(esp, 0), xmm0);
178
  jcc(Assembler::equal, B1_39);
179

180
  bind(B1_5);
181
  orl(ecx, -64768);
182
  movw(Address(esp, 36), ecx);
183

184
  bind(B1_6);
185
  fldcw(Address(esp, 36));
186

187
  bind(B1_7);
188
  movsd(xmm1, Address(ebp, 8));
189
  movl(edi, 1);
190

191
  bind(B1_8);
192
  movl(Address(esp, 12), esi);
193
  movl(esi, Address(esp, 4));
194
  movl(edx, esi);
195
  movl(Address(esp, 24), edi);
196
  movl(edi, esi);
197
  shrl(edi, 20);
198
  andl(edx, 1048575);
199
  movl(ecx, edi);
200
  orl(edx, 1048576);
201
  negl(ecx);
202
  addl(edi, 13);
203
  movl(Address(esp, 8), ebx);
204
  addl(ecx, 19);
205
  movl(ebx, edx);
206
  movl(Address(esp, 28), ecx);
207
  shrl(ebx);
208
  movl(ecx, edi);
209
  shll(edx);
210
  movl(ecx, Address(esp, 28));
211
  movl(edi, Address(esp, 0));
212
  shrl(edi);
213
  orl(edx, edi);
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));
221
  andl(ebx, -2);
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);
227

228
  bind(B1_9);
229
  fld_d(ExternalAddress(PI4X3));    //0x54443000UL, 0xbfe921fbUL
230
  fmul(1);
231
  faddp(2);
232
  fld_d(ExternalAddress(PI4X3 + 8));    //0x3b39a000UL, 0x3d373dcbUL
233
  fmul(1);
234
  faddp(2);
235
  fld_d(ExternalAddress(PI4X3 + 16));    //0xe0e68948UL, 0xba845c06UL
236
  fmulp(1);
237
  faddp(1);
238
  jmp(B1_17);
239

240
  bind(B1_10);
241
  fld_d(ExternalAddress(PI4X4));    //0x54400000UL, 0xbfe921fbUL
242
  fmul(1);
243
  faddp(2);
244
  fld_d(ExternalAddress(PI4X4 + 8));    //0x1a600000UL, 0xbdc0b461UL
245
  fmul(1);
246
  faddp(2);
247
  fld_d(ExternalAddress(PI4X4 + 16));    //0x2e000000UL, 0xbb93198aUL
248
  fmul(1);
249
  faddp(2);
250
  fld_d(ExternalAddress(PI4X4 + 24));    //0x252049c1UL, 0xb96b839aUL
251
  fmulp(1);
252
  faddp(1);
253
  jmp(B1_17);
254

255
  bind(B1_11);
256
  movzwl(edx, Address(esp, 38));
257
  movl(eax, edx);
258
  andl(eax, 768);
259
  cmpl(eax, 768);
260
  jcc(Assembler::equal, B1_40);
261

262
  bind(B1_12);
263
  orl(edx, -64768);
264
  movw(Address(esp, 36), edx);
265

266
  bind(B1_13);
267
  fldcw(Address(esp, 36));
268

269
  bind(B1_14);
270
  movl(edi, 1);
271

272
  bind(B1_15);
273
  movsd(xmm0, Address(ebp, 8));
274
  addl(esp, -32);
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())));
283

284
  bind(B1_43);
285
  movl(edx, eax);
286
  addl(esp, 32);
287

288
  bind(B1_16);
289
  fld_d(Address(esp, 0));
290
  fld_d(Address(esp, 8));
291
  faddp(1);
292

293
  bind(B1_17);
294
  movl(eax, ebx);
295
  andl(eax, 3);
296
  cmpl(eax, 3);
297
  jcc(Assembler::notEqual, B1_24);
298

299
  bind(B1_18);
300
  fld_d(ExternalAddress(ONES));
301
  incl(edx);
302
  fdiv(1);
303
  testb(edx, 2);
304
  fstp_x(Address(esp, 24));
305
  fld_s(0);
306
  fmul(1);
307
  fld_s(0);
308
  fmul(1);
309
  fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
310
  fmul(2);
311
  fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
312
  faddp(1);
313
  fmul(2);
314
  fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
315
  faddp(1);
316
  fmul(2);
317
  fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
318
  fmul(3);
319
  fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
320
  faddp(1);
321
  fmul(3);
322
  fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
323
  faddp(1);
324
  fmul(3);
325
  fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
326
  faddp(1);
327
  fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
328
  faddp(2);
329
  fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
330
  fmul(3);
331
  fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
332
  fmul(4);
333
  fld_x(ExternalAddress(108 + GP));    //0x0871, 0x1a2f, 0x64
334
  faddp(2);
335
  fxch(1);
336
  fmul(4);
337
  fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
338
  faddp(2);
339
  fxch(1);
340
  fmul(4);
341
  fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
342
  faddp(2);
343
  fxch(1);
344
  fmul(4);
345
  fld_x(ExternalAddress(72 + GP));    //0x8c96, 0x8e0b, 0xeb
346
  faddp(2);
347
  fxch(1);
348
  fmul(4);
349
  fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
350
  faddp(2);
351
  fxch(1);
352
  fmul(4);
353
  fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
354
  faddp(2);
355
  fxch(1);
356
  fmul(4);
357
  fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
358
  faddp(2);
359
  fxch(1);
360
  fmul(4);
361
  fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
362
  faddp(2);
363
  fxch(1);
364
  fmulp(4);
365
  fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
366
  faddp(1);
367
  fmul(4);
368
  fmul(5);
369
  fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
370
  faddp(4);
371
  fxch(3);
372
  fmul(5);
373
  faddp(3);
374
  jcc(Assembler::equal, B1_20);
375

376
  bind(B1_19);
377
  fld_x(Address(esp, 24));
378
  fxch(1);
379
  fdivrp(2);
380
  fxch(1);
381
  fmulp(3);
382
  movl(eax, Address(esp, 44));
383
  xorl(eax, 1);
384
  fxch(2);
385
  fmul(3);
386
  fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
387
  fmula(2);
388
  fmula(3);
389
  fxch(3);
390
  faddp(2);
391
  fxch(1);
392
  fstp_d(Address(esp, 16));
393
  fmul(1);
394
  fxch(1);
395
  fmulp(2);
396
  movsd(xmm0, Address(esp, 16));
397
  faddp(1);
398
  fstp_d(Address(esp, 16));
399
  movsd(xmm1, Address(esp, 16));
400
  jmp(B1_21);
401

402
  bind(B1_20);
403
  fdivrp(1);
404
  fmulp(2);
405
  fxch(1);
406
  fmul(2);
407
  movl(eax, Address(esp, 44));
408
  fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
409
  fmula(1);
410
  fmula(3);
411
  fxch(3);
412
  faddp(1);
413
  fstp_d(Address(esp, 16));
414
  fmul(1);
415
  fld_x(Address(esp, 24));
416
  fmulp(2);
417
  movsd(xmm0, Address(esp, 16));
418
  faddp(1);
419
  fstp_d(Address(esp, 16));
420
  movsd(xmm1, Address(esp, 16));
421

422
  bind(B1_21);
423
  testl(edi, edi);
424
  jcc(Assembler::equal, B1_23);
425

426
  bind(B1_22);
427
  fldcw(Address(esp, 38));
428

429
  bind(B1_23);
430
  movl(eax, Address(esp, 40));
431
  movsd(Address(eax, 0), xmm0);
432
  movsd(Address(eax, 8), xmm1);
433
  addl(esp, 52);
434
  pop(ebx);
435
  pop(edi);
436
  pop(esi);
437
  movl(esp, ebp);
438
  pop(ebp);
439
  ret(0);
440

441
  bind(B1_24);
442
  testb(ebx, 2);
443
  jcc(Assembler::equal, B1_31);
444

445
  bind(B1_25);
446
  incl(edx);
447
  fld_s(0);
448
  fmul(1);
449
  testb(edx, 2);
450
  jcc(Assembler::equal, B1_27);
451

452
  bind(B1_26);
453
  fld_d(ExternalAddress(ONES));
454
  fdiv(2);
455
  fld_s(1);
456
  fmul(2);
457
  fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
458
  fmul(1);
459
  fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
460
  fmul(2);
461
  fld_x(ExternalAddress(108 + GP));    //0x67c9, 0xbed3, 0xbf
462
  movl(eax, Address(esp, 44));
463
  faddp(2);
464
  fxch(1);
465
  fmul(2);
466
  xorl(eax, 1);
467
  fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
468
  faddp(2);
469
  fxch(1);
470
  fmul(2);
471
  fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
472
  faddp(2);
473
  fxch(1);
474
  fmul(2);
475
  fld_x(ExternalAddress(72 + GP));    //0xf3ca, 0x8c96, 0x8e
476
  faddp(2);
477
  fxch(1);
478
  fmul(2);
479
  fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
480
  faddp(2);
481
  fxch(1);
482
  fmul(2);
483
  fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
484
  faddp(2);
485
  fxch(1);
486
  fmul(2);
487
  fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
488
  faddp(2);
489
  fxch(1);
490
  fmul(2);
491
  fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
492
  faddp(2);
493
  fxch(1);
494
  fmulp(2);
495
  fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
496
  faddp(1);
497
  fmulp(3);
498
  fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
499
  faddp(1);
500
  fmul(3);
501
  fxch(2);
502
  fmulp(3);
503
  fxch(1);
504
  faddp(2);
505
  fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
506
  fmula(2);
507
  fmulp(1);
508
  faddp(1);
509
  fstp_d(Address(esp, 16));
510
  movsd(xmm0, Address(esp, 16));
511
  jmp(B1_28);
512

513
  bind(B1_27);
514
  fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
515
  fmul(1);
516
  fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
517
  movl(eax, Address(esp, 44));
518
  faddp(1);
519
  fmul(1);
520
  fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
521
  fmul(2);
522
  fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
523
  faddp(1);
524
  fmul(2);
525
  fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
526
  faddp(1);
527
  fmul(2);
528
  fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
529
  faddp(1);
530
  fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
531
  faddp(2);
532
  fxch(1);
533
  fmul(2);
534
  fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
535
  faddp(1);
536
  fdivrp(1);
537
  fmulp(1);
538
  fmul(1);
539
  fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
540
  fmula(1);
541
  fmulp(2);
542
  faddp(1);
543
  fstp_d(Address(esp, 16));
544
  movsd(xmm0, Address(esp, 16));
545

546
  bind(B1_28);
547
  testl(edi, edi);
548
  jcc(Assembler::equal, B1_30);
549

550
  bind(B1_29);
551
  fldcw(Address(esp, 38));
552

553
  bind(B1_30);
554
  movl(eax, Address(esp, 40));
555
  movsd(Address(eax, 0), xmm0);
556
  addl(esp, 52);
557
  pop(ebx);
558
  pop(edi);
559
  pop(esi);
560
  movl(esp, ebp);
561
  pop(ebp);
562
  ret(0);
563

564
  bind(B1_31);
565
  testb(ebx, 1);
566
  jcc(Assembler::equal, B1_38);
567

568
  bind(B1_32);
569
  incl(edx);
570
  fld_s(0);
571
  fmul(1);
572
  testb(edx, 2);
573
  jcc(Assembler::equal, B1_34);
574

575
  bind(B1_33);
576
  fld_x(ExternalAddress(36 + TP));    //0x2ff0, 0x466d, 0x1a
577
  fmul(1);
578
  fld_x(ExternalAddress(24 + TP));    //0x00e3, 0xc850, 0xaa
579
  movl(eax, Address(esp, 44));
580
  faddp(1);
581
  fmul(1);
582
  xorl(eax, 1);
583
  fld_x(ExternalAddress(36 + TQ));    //0x820f, 0x51ce, 0x7d
584
  fmul(2);
585
  fld_x(ExternalAddress(24 + TQ));    //0xb70f, 0xd068, 0xa6
586
  faddp(1);
587
  fmul(2);
588
  fld_x(ExternalAddress(12 + TQ));    //0xb6a3, 0xc36a, 0x44
589
  faddp(1);
590
  fmul(2);
591
  fld_x(ExternalAddress(TQ));    //0x399c, 0x8391, 0x15
592
  faddp(1);
593
  fld_x(ExternalAddress(12 + TP));    //0x4b06, 0xb0ac, 0xd3
594
  faddp(2);
595
  fxch(1);
596
  fmul(2);
597
  fld_x(ExternalAddress(TP));    //0x4cd6, 0xaf6c, 0xc7
598
  faddp(1);
599
  fdivrp(1);
600
  fmulp(1);
601
  fmul(1);
602
  fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
603
  fmula(1);
604
  fmulp(2);
605
  faddp(1);
606
  fstp_d(Address(esp, 16));
607
  movsd(xmm0, Address(esp, 16));
608
  jmp(B1_35);
609

610
  bind(B1_34);
611
  fld_d(ExternalAddress(ONES));
612
  fdiv(2);
613
  fld_s(1);
614
  fmul(2);
615
  fld_x(ExternalAddress(132 + GP));    //0x00a3, 0x7fea, 0x9b
616
  fmul(1);
617
  fld_x(ExternalAddress(120 + GP));    //0xa559, 0x1da9, 0xae
618
  fmul(2);
619
  fld_x(ExternalAddress(108 + GP));    //0x67c9, 0xbed3, 0xbf
620
  movl(eax, Address(esp, 44));
621
  faddp(2);
622
  fxch(1);
623
  fmul(2);
624
  fld_x(ExternalAddress(96 + GP));    //0x286b, 0xb49e, 0xb8
625
  faddp(2);
626
  fxch(1);
627
  fmul(2);
628
  fld_x(ExternalAddress(84 + GP));    //0x355b, 0xd910, 0x67
629
  faddp(2);
630
  fxch(1);
631
  fmul(2);
632
  fld_x(ExternalAddress(72 + GP));    //0xf3ca, 0x8c96, 0x8e
633
  faddp(2);
634
  fxch(1);
635
  fmul(2);
636
  fld_x(ExternalAddress(60 + GP));    //0xa8f9, 0x83f1, 0x2e
637
  faddp(2);
638
  fxch(1);
639
  fmul(2);
640
  fld_x(ExternalAddress(48 + GP));    //0x7065, 0x6a37, 0x79
641
  faddp(2);
642
  fxch(1);
643
  fmul(2);
644
  fld_x(ExternalAddress(36 + GP));    //0x85a0, 0xa819, 0xbc
645
  faddp(2);
646
  fxch(1);
647
  fmul(2);
648
  fld_x(ExternalAddress(24 + GP));    //0xdfa7, 0x08aa, 0x55
649
  faddp(2);
650
  fxch(1);
651
  fmulp(2);
652
  fld_x(ExternalAddress(12 + GP));    //0xb62f, 0x0b60, 0x60
653
  faddp(1);
654
  fmulp(3);
655
  fld_x(ExternalAddress(GP));    //0xaaab, 0xaaaa, 0xaa
656
  faddp(1);
657
  fmul(3);
658
  fxch(2);
659
  fmulp(3);
660
  fxch(1);
661
  faddp(2);
662
  fld_d(Address(ONES, RelocationHolder::none).plus_disp(eax, Address::times_8));
663
  fmula(2);
664
  fmulp(1);
665
  faddp(1);
666
  fstp_d(Address(esp, 16));
667
  movsd(xmm0, Address(esp, 16));
668

669
  bind(B1_35);
670
  testl(edi, edi);
671
  jcc(Assembler::equal, B1_37);
672

673
  bind(B1_36);
674
  fldcw(Address(esp, 38));
675

676
  bind(B1_37);
677
  movl(eax, Address(esp, 40));
678
  movsd(Address(eax, 8), xmm0);
679
  addl(esp, 52);
680
  pop(ebx);
681
  pop(edi);
682
  pop(esi);
683
  mov(esp, ebp);
684
  pop(ebp);
685
  ret(0);
686

687
  bind(B1_38);
688
  fstp_d(0);
689
  addl(esp, 52);
690
  pop(ebx);
691
  pop(edi);
692
  pop(esi);
693
  mov(esp, ebp);
694
  pop(ebp);
695
  ret(0);
696

697
  bind(B1_39);
698
  xorl(edi, edi);
699
  jmp(B1_8);
700

701
  bind(B1_40);
702
  xorl(edi, edi);
703
  jmp(B1_15);
704
}
705

706
ATTRIBUTE_ALIGNED(16) static const juint _static_const_table_tan[] =
707
{
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
1002
};
1003

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) {
1005

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;
1008

1009
  assert_different_registers(tmp, eax, ecx, edx);
1010

1011
  address static_const_table_tan = (address)_static_const_table_tan;
1012

1013
  subl(rsp, 120);
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);
1018
  andl(eax, 32767);
1019
  subl(eax, 14368);
1020
  cmpl(eax, 2216);
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));
1026
  andpd(xmm4, xmm0);
1027
  movdqu(xmm1, Address(tmp, 5632));
1028
  mulpd(xmm1, xmm0);
1029
  por(xmm5, xmm4);
1030
  addpd(xmm1, xmm5);
1031
  movdqu(xmm7, xmm1);
1032
  unpckhpd(xmm7, xmm7);
1033
  cvttsd2sil(edx, xmm7);
1034
  cvttpd2dq(xmm1, xmm1);
1035
  cvtdq2pd(xmm1, xmm1);
1036
  mulpd(xmm1, xmm6);
1037
  movdqu(xmm3, Address(tmp, 5664));
1038
  movsd(xmm5, Address(tmp, 5728));
1039
  addl(edx, 469248);
1040
  movdqu(xmm4, Address(tmp, 5680));
1041
  mulpd(xmm3, xmm1);
1042
  andl(edx, 31);
1043
  mulsd(xmm5, xmm1);
1044
  movl(ecx, edx);
1045
  mulpd(xmm4, xmm1);
1046
  shll(ecx, 1);
1047
  subpd(xmm0, xmm3);
1048
  mulpd(xmm1, Address(tmp, 5696));
1049
  addl(edx, ecx);
1050
  shll(ecx, 2);
1051
  addl(edx, ecx);
1052
  addsd(xmm5, xmm0);
1053
  movdqu(xmm2, xmm0);
1054
  subpd(xmm0, xmm4);
1055
  movsd(xmm6, Address(tmp, 5744));
1056
  shll(edx, 4);
1057
  lea(eax, Address(tmp, 0));
1058
  andpd(xmm5, Address(tmp, 5776));
1059
  movdqu(xmm3, xmm0);
1060
  addl(eax, edx);
1061
  subpd(xmm2, xmm0);
1062
  unpckhpd(xmm0, xmm0);
1063
  divsd(xmm6, xmm5);
1064
  subpd(xmm2, xmm4);
1065
  movdqu(xmm7, Address(eax, 16));
1066
  subsd(xmm3, xmm5);
1067
  mulpd(xmm7, xmm0);
1068
  subpd(xmm2, xmm1);
1069
  movdqu(xmm1, Address(eax, 48));
1070
  mulpd(xmm1, xmm0);
1071
  movdqu(xmm4, Address(eax, 96));
1072
  mulpd(xmm4, xmm0);
1073
  addsd(xmm2, xmm3);
1074
  movdqu(xmm3, xmm0);
1075
  mulpd(xmm0, xmm0);
1076
  addpd(xmm7, Address(eax, 0));
1077
  addpd(xmm1, Address(eax, 32));
1078
  mulpd(xmm1, xmm0);
1079
  addpd(xmm4, Address(eax, 80));
1080
  addpd(xmm7, xmm1);
1081
  movdqu(xmm1, Address(eax, 112));
1082
  mulpd(xmm1, xmm0);
1083
  mulpd(xmm0, xmm0);
1084
  addpd(xmm4, xmm1);
1085
  movdqu(xmm1, Address(eax, 64));
1086
  mulpd(xmm1, xmm0);
1087
  addpd(xmm7, xmm1);
1088
  movdqu(xmm1, xmm3);
1089
  mulpd(xmm3, xmm0);
1090
  mulsd(xmm0, xmm0);
1091
  mulpd(xmm1, Address(eax, 144));
1092
  mulpd(xmm4, xmm3);
1093
  movdqu(xmm3, xmm1);
1094
  addpd(xmm7, xmm4);
1095
  movdqu(xmm4, xmm1);
1096
  mulsd(xmm0, xmm7);
1097
  unpckhpd(xmm7, xmm7);
1098
  addsd(xmm0, xmm7);
1099
  unpckhpd(xmm1, xmm1);
1100
  addsd(xmm3, xmm1);
1101
  subsd(xmm4, xmm3);
1102
  addsd(xmm1, xmm4);
1103
  movdqu(xmm4, xmm2);
1104
  movsd(xmm7, Address(eax, 144));
1105
  unpckhpd(xmm2, xmm2);
1106
  addsd(xmm7, Address(eax, 152));
1107
  mulsd(xmm7, xmm2);
1108
  addsd(xmm7, Address(eax, 136));
1109
  addsd(xmm7, xmm1);
1110
  addsd(xmm0, xmm7);
1111
  movsd(xmm7, Address(tmp, 5744));
1112
  mulsd(xmm4, xmm6);
1113
  movsd(xmm2, Address(eax, 168));
1114
  andpd(xmm2, xmm6);
1115
  mulsd(xmm5, xmm2);
1116
  mulsd(xmm6, Address(eax, 160));
1117
  subsd(xmm7, xmm5);
1118
  subsd(xmm2, Address(eax, 128));
1119
  subsd(xmm7, xmm4);
1120
  mulsd(xmm7, xmm6);
1121
  movdqu(xmm4, xmm3);
1122
  subsd(xmm3, xmm2);
1123
  addsd(xmm2, xmm3);
1124
  subsd(xmm4, xmm2);
1125
  addsd(xmm0, xmm4);
1126
  subsd(xmm0, xmm7);
1127
  addsd(xmm0, xmm3);
1128
  movsd(Address(rsp, 0), xmm0);
1129
  fld_d(Address(rsp, 0));
1130
  jmp(L_2TAG_PACKET_1_0_2);
1131

1132
  bind(L_2TAG_PACKET_0_0_2);
1133
  jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
1134
  shrl(eax, 4);
1135
  cmpl(eax, 268434558);
1136
  jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
1137
  movdqu(xmm3, xmm0);
1138
  mulsd(xmm3, Address(tmp, 5808));
1139

1140
  bind(L_2TAG_PACKET_3_0_2);
1141
  movsd(xmm3, Address(tmp, 5792));
1142
  mulsd(xmm3, xmm0);
1143
  addsd(xmm3, xmm0);
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);
1148

1149
  bind(L_2TAG_PACKET_2_0_2);
1150
  movq(xmm7, Address(tmp, 5712));
1151
  andpd(xmm7, xmm0);
1152
  xorpd(xmm7, xmm0);
1153
  ucomisd(xmm7, Address(tmp, 5760));
1154
  jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
1155
  subl(rsp, 32);
1156
  movsd(Address(rsp, 0), xmm0);
1157
  lea(eax, Address(rsp, 40));
1158
  movl(Address(rsp, 8), eax);
1159
  movl(eax, 2);
1160
  movl(Address(rsp, 12), eax);
1161
  call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_tan_cot_huge())));
1162
  addl(rsp, 32);
1163
  fld_d(Address(rsp, 8));
1164
  jmp(L_2TAG_PACKET_1_0_2);
1165

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));
1170

1171
  bind(L_2TAG_PACKET_1_0_2);
1172
  movl(tmp, Address(rsp, 56));
1173
}
1174

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.