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