jdk

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

28
#include "precompiled.hpp"
29
#include "macroAssembler_x86.hpp"
30
#include "stubGenerator_x86_64.hpp"
31

32
/******************************************************************************/
33
//                     ALGORITHM DESCRIPTION  - POW()
34
//                     ---------------------
35
//
36
//    Let x=2^k * mx, mx in [1,2)
37
//
38
//    log2(x) calculation:
39
//
40
//    Get B~1/mx based on the output of rcpps instruction (B0)
41
//    B = int((B0*LH*2^9+0.5))/2^9
42
//    LH is a short approximation for log2(e)
43
//
44
//    Reduced argument, scaled by LH:
45
//                r=B*mx-LH (computed accurately in high and low parts)
46
//
47
//    log2(x) result:  k - log2(B) + p(r)
48
//             p(r) is a degree 8 polynomial
49
//             -log2(B) read from data table (high, low parts)
50
//             log2(x) is formed from high and low parts
51
//    For |x| in [1-1/32, 1+1/16), a slower but more accurate computation
52
//    based om the same table design is performed.
53
//
54
//   Main path is taken if | floor(log2(|log2(|x|)|) + floor(log2|y|) | < 8,
55
//   to filter out all potential OF/UF cases.
56
//   exp2(y*log2(x)) is computed using an 8-bit index table and a degree 5
57
//   polynomial
58
//
59
// Special cases:
60
//  pow(-0,y) = -INF and raises the divide-by-zero exception for y an odd
61
//  integer < 0.
62
//  pow(-0,y) = +INF and raises the divide-by-zero exception for y < 0 and
63
//  not an odd integer.
64
//  pow(-0,y) = -0 for y an odd integer > 0.
65
//  pow(-0,y) = +0 for y > 0 and not an odd integer.
66
//  pow(-1,-INF) = NaN.
67
//  pow(+1,y) = NaN for any y, even a NaN.
68
//  pow(x,-0) = 1 for any x, even a NaN.
69
//  pow(x,y) = a NaN and raises the invalid exception for finite x < 0 and
70
//  finite non-integer y.
71
//  pow(x,-INF) = +INF for |x|<1.
72
//  pow(x,-INF) = +0 for |x|>1.
73
//  pow(x,+INF) = +0 for |x|<1.
74
//  pow(x,+INF) = +INF for |x|>1.
75
//  pow(-INF,y) = -0 for y an odd integer < 0.
76
//  pow(-INF,y) = +0 for y < 0 and not an odd integer.
77
//  pow(-INF,y) = -INF for y an odd integer > 0.
78
//  pow(-INF,y) = +INF for y > 0 and not an odd integer.
79
//  pow(+INF,y) = +0 for y <0.
80
//  pow(+INF,y) = +INF for y >0.
81
//
82
/******************************************************************************/
83

84
ATTRIBUTE_ALIGNED(16) static const juint _HIGHSIGMASK[] = {
85
    0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
86
};
87

88
ATTRIBUTE_ALIGNED(16) static const juint _LOG2_E[] = {
89
    0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
90
};
91

92
ATTRIBUTE_ALIGNED(16) static const juint _HIGHMASK_Y[] = {
93
    0x00000000UL, 0xfffffff8UL, 0x00000000UL, 0xffffffffUL
94
};
95

96
ATTRIBUTE_ALIGNED(16) static const juint _T_exp[] = {
97
    0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3b700000UL, 0xfa5abcbfUL,
98
    0x3ff00b1aUL, 0xa7609f71UL, 0xbc84f6b2UL, 0xa9fb3335UL, 0x3ff0163dUL,
99
    0x9ab8cdb7UL, 0x3c9b6129UL, 0x143b0281UL, 0x3ff02168UL, 0x0fc54eb6UL,
100
    0xbc82bf31UL, 0x3e778061UL, 0x3ff02c9aUL, 0x535b085dUL, 0xbc719083UL,
101
    0x2e11bbccUL, 0x3ff037d4UL, 0xeeade11aUL, 0x3c656811UL, 0xe86e7f85UL,
102
    0x3ff04315UL, 0x1977c96eUL, 0xbc90a31cUL, 0x72f654b1UL, 0x3ff04e5fUL,
103
    0x3aa0d08cUL, 0x3c84c379UL, 0xd3158574UL, 0x3ff059b0UL, 0xa475b465UL,
104
    0x3c8d73e2UL, 0x0e3c1f89UL, 0x3ff0650aUL, 0x5799c397UL, 0xbc95cb7bUL,
105
    0x29ddf6deUL, 0x3ff0706bUL, 0xe2b13c27UL, 0xbc8c91dfUL, 0x2b72a836UL,
106
    0x3ff07bd4UL, 0x54458700UL, 0x3c832334UL, 0x18759bc8UL, 0x3ff08745UL,
107
    0x4bb284ffUL, 0x3c6186beUL, 0xf66607e0UL, 0x3ff092bdUL, 0x800a3fd1UL,
108
    0xbc968063UL, 0xcac6f383UL, 0x3ff09e3eUL, 0x18316136UL, 0x3c914878UL,
109
    0x9b1f3919UL, 0x3ff0a9c7UL, 0x873d1d38UL, 0x3c85d16cUL, 0x6cf9890fUL,
110
    0x3ff0b558UL, 0x4adc610bUL, 0x3c98a62eUL, 0x45e46c85UL, 0x3ff0c0f1UL,
111
    0x06d21cefUL, 0x3c94f989UL, 0x2b7247f7UL, 0x3ff0cc92UL, 0x16e24f71UL,
112
    0x3c901edcUL, 0x23395decUL, 0x3ff0d83bUL, 0xe43f316aUL, 0xbc9bc14dUL,
113
    0x32d3d1a2UL, 0x3ff0e3ecUL, 0x27c57b52UL, 0x3c403a17UL, 0x5fdfa9c5UL,
114
    0x3ff0efa5UL, 0xbc54021bUL, 0xbc949db9UL, 0xaffed31bUL, 0x3ff0fb66UL,
115
    0xc44ebd7bUL, 0xbc6b9bedUL, 0x28d7233eUL, 0x3ff10730UL, 0x1692fdd5UL,
116
    0x3c8d46ebUL, 0xd0125b51UL, 0x3ff11301UL, 0x39449b3aUL, 0xbc96c510UL,
117
    0xab5e2ab6UL, 0x3ff11edbUL, 0xf703fb72UL, 0xbc9ca454UL, 0xc06c31ccUL,
118
    0x3ff12abdUL, 0xb36ca5c7UL, 0xbc51b514UL, 0x14f204abUL, 0x3ff136a8UL,
119
    0xba48dcf0UL, 0xbc67108fUL, 0xaea92de0UL, 0x3ff1429aUL, 0x9af1369eUL,
120
    0xbc932fbfUL, 0x934f312eUL, 0x3ff14e95UL, 0x39bf44abUL, 0xbc8b91e8UL,
121
    0xc8a58e51UL, 0x3ff15a98UL, 0xb9eeab0aUL, 0x3c82406aUL, 0x5471c3c2UL,
122
    0x3ff166a4UL, 0x82ea1a32UL, 0x3c58f23bUL, 0x3c7d517bUL, 0x3ff172b8UL,
123
    0xb9d78a76UL, 0xbc819041UL, 0x8695bbc0UL, 0x3ff17ed4UL, 0xe2ac5a64UL,
124
    0x3c709e3fUL, 0x388c8deaUL, 0x3ff18af9UL, 0xd1970f6cUL, 0xbc911023UL,
125
    0x58375d2fUL, 0x3ff19726UL, 0x85f17e08UL, 0x3c94aaddUL, 0xeb6fcb75UL,
126
    0x3ff1a35bUL, 0x7b4968e4UL, 0x3c8e5b4cUL, 0xf8138a1cUL, 0x3ff1af99UL,
127
    0xa4b69280UL, 0x3c97bf85UL, 0x84045cd4UL, 0x3ff1bbe0UL, 0x352ef607UL,
128
    0xbc995386UL, 0x95281c6bUL, 0x3ff1c82fUL, 0x8010f8c9UL, 0x3c900977UL,
129
    0x3168b9aaUL, 0x3ff1d487UL, 0x00a2643cUL, 0x3c9e016eUL, 0x5eb44027UL,
130
    0x3ff1e0e7UL, 0x088cb6deUL, 0xbc96fdd8UL, 0x22fcd91dUL, 0x3ff1ed50UL,
131
    0x027bb78cUL, 0xbc91df98UL, 0x8438ce4dUL, 0x3ff1f9c1UL, 0xa097af5cUL,
132
    0xbc9bf524UL, 0x88628cd6UL, 0x3ff2063bUL, 0x814a8495UL, 0x3c8dc775UL,
133
    0x3578a819UL, 0x3ff212beUL, 0x2cfcaac9UL, 0x3c93592dUL, 0x917ddc96UL,
134
    0x3ff21f49UL, 0x9494a5eeUL, 0x3c82a97eUL, 0xa27912d1UL, 0x3ff22bddUL,
135
    0x5577d69fUL, 0x3c8d34fbUL, 0x6e756238UL, 0x3ff2387aUL, 0xb6c70573UL,
136
    0x3c99b07eUL, 0xfb82140aUL, 0x3ff2451fUL, 0x911ca996UL, 0x3c8acfccUL,
137
    0x4fb2a63fUL, 0x3ff251ceUL, 0xbef4f4a4UL, 0x3c8ac155UL, 0x711ece75UL,
138
    0x3ff25e85UL, 0x4ac31b2cUL, 0x3c93e1a2UL, 0x65e27cddUL, 0x3ff26b45UL,
139
    0x9940e9d9UL, 0x3c82bd33UL, 0x341ddf29UL, 0x3ff2780eUL, 0x05f9e76cUL,
140
    0x3c9e067cUL, 0xe1f56381UL, 0x3ff284dfUL, 0x8c3f0d7eUL, 0xbc9a4c3aUL,
141
    0x7591bb70UL, 0x3ff291baUL, 0x28401cbdUL, 0xbc82cc72UL, 0xf51fdee1UL,
142
    0x3ff29e9dUL, 0xafad1255UL, 0x3c8612e8UL, 0x66d10f13UL, 0x3ff2ab8aUL,
143
    0x191690a7UL, 0xbc995743UL, 0xd0dad990UL, 0x3ff2b87fUL, 0xd6381aa4UL,
144
    0xbc410adcUL, 0x39771b2fUL, 0x3ff2c57eUL, 0xa6eb5124UL, 0xbc950145UL,
145
    0xa6e4030bUL, 0x3ff2d285UL, 0x54db41d5UL, 0x3c900247UL, 0x1f641589UL,
146
    0x3ff2df96UL, 0xfbbce198UL, 0x3c9d16cfUL, 0xa93e2f56UL, 0x3ff2ecafUL,
147
    0x45d52383UL, 0x3c71ca0fUL, 0x4abd886bUL, 0x3ff2f9d2UL, 0x532bda93UL,
148
    0xbc653c55UL, 0x0a31b715UL, 0x3ff306feUL, 0xd23182e4UL, 0x3c86f46aUL,
149
    0xedeeb2fdUL, 0x3ff31432UL, 0xf3f3fcd1UL, 0x3c8959a3UL, 0xfc4cd831UL,
150
    0x3ff32170UL, 0x8e18047cUL, 0x3c8a9ce7UL, 0x3ba8ea32UL, 0x3ff32eb8UL,
151
    0x3cb4f318UL, 0xbc9c45e8UL, 0xb26416ffUL, 0x3ff33c08UL, 0x843659a6UL,
152
    0x3c932721UL, 0x66e3fa2dUL, 0x3ff34962UL, 0x930881a4UL, 0xbc835a75UL,
153
    0x5f929ff1UL, 0x3ff356c5UL, 0x5c4e4628UL, 0xbc8b5ceeUL, 0xa2de883bUL,
154
    0x3ff36431UL, 0xa06cb85eUL, 0xbc8c3144UL, 0x373aa9cbUL, 0x3ff371a7UL,
155
    0xbf42eae2UL, 0xbc963aeaUL, 0x231e754aUL, 0x3ff37f26UL, 0x9eceb23cUL,
156
    0xbc99f5caUL, 0x6d05d866UL, 0x3ff38caeUL, 0x3c9904bdUL, 0xbc9e958dUL,
157
    0x1b7140efUL, 0x3ff39a40UL, 0xfc8e2934UL, 0xbc99a9a5UL, 0x34e59ff7UL,
158
    0x3ff3a7dbUL, 0xd661f5e3UL, 0xbc75e436UL, 0xbfec6cf4UL, 0x3ff3b57fUL,
159
    0xe26fff18UL, 0x3c954c66UL, 0xc313a8e5UL, 0x3ff3c32dUL, 0x375d29c3UL,
160
    0xbc9efff8UL, 0x44ede173UL, 0x3ff3d0e5UL, 0x8c284c71UL, 0x3c7fe8d0UL,
161
    0x4c123422UL, 0x3ff3dea6UL, 0x11f09ebcUL, 0x3c8ada09UL, 0xdf1c5175UL,
162
    0x3ff3ec70UL, 0x7b8c9bcaUL, 0xbc8af663UL, 0x04ac801cUL, 0x3ff3fa45UL,
163
    0xf956f9f3UL, 0xbc97d023UL, 0xc367a024UL, 0x3ff40822UL, 0xb6f4d048UL,
164
    0x3c8bddf8UL, 0x21f72e2aUL, 0x3ff4160aUL, 0x1c309278UL, 0xbc5ef369UL,
165
    0x2709468aUL, 0x3ff423fbUL, 0xc0b314ddUL, 0xbc98462dUL, 0xd950a897UL,
166
    0x3ff431f5UL, 0xe35f7999UL, 0xbc81c7ddUL, 0x3f84b9d4UL, 0x3ff43ffaUL,
167
    0x9704c003UL, 0x3c8880beUL, 0x6061892dUL, 0x3ff44e08UL, 0x04ef80d0UL,
168
    0x3c489b7aUL, 0x42a7d232UL, 0x3ff45c20UL, 0x82fb1f8eUL, 0xbc686419UL,
169
    0xed1d0057UL, 0x3ff46a41UL, 0xd1648a76UL, 0x3c9c944bUL, 0x668b3237UL,
170
    0x3ff4786dUL, 0xed445733UL, 0xbc9c20f0UL, 0xb5c13cd0UL, 0x3ff486a2UL,
171
    0xb69062f0UL, 0x3c73c1a3UL, 0xe192aed2UL, 0x3ff494e1UL, 0x5e499ea0UL,
172
    0xbc83b289UL, 0xf0d7d3deUL, 0x3ff4a32aUL, 0xf3d1be56UL, 0x3c99cb62UL,
173
    0xea6db7d7UL, 0x3ff4b17dUL, 0x7f2897f0UL, 0xbc8125b8UL, 0xd5362a27UL,
174
    0x3ff4bfdaUL, 0xafec42e2UL, 0x3c7d4397UL, 0xb817c114UL, 0x3ff4ce41UL,
175
    0x690abd5dUL, 0x3c905e29UL, 0x99fddd0dUL, 0x3ff4dcb2UL, 0xbc6a7833UL,
176
    0x3c98ecdbUL, 0x81d8abffUL, 0x3ff4eb2dUL, 0x2e5d7a52UL, 0xbc95257dUL,
177
    0x769d2ca7UL, 0x3ff4f9b2UL, 0xd25957e3UL, 0xbc94b309UL, 0x7f4531eeUL,
178
    0x3ff50841UL, 0x49b7465fUL, 0x3c7a249bUL, 0xa2cf6642UL, 0x3ff516daUL,
179
    0x69bd93efUL, 0xbc8f7685UL, 0xe83f4eefUL, 0x3ff5257dUL, 0x43efef71UL,
180
    0xbc7c998dUL, 0x569d4f82UL, 0x3ff5342bUL, 0x1db13cadUL, 0xbc807abeUL,
181
    0xf4f6ad27UL, 0x3ff542e2UL, 0x192d5f7eUL, 0x3c87926dUL, 0xca5d920fUL,
182
    0x3ff551a4UL, 0xefede59bUL, 0xbc8d689cUL, 0xdde910d2UL, 0x3ff56070UL,
183
    0x168eebf0UL, 0xbc90fb6eUL, 0x36b527daUL, 0x3ff56f47UL, 0x011d93adUL,
184
    0x3c99bb2cUL, 0xdbe2c4cfUL, 0x3ff57e27UL, 0x8a57b9c4UL, 0xbc90b98cUL,
185
    0xd497c7fdUL, 0x3ff58d12UL, 0x5b9a1de8UL, 0x3c8295e1UL, 0x27ff07ccUL,
186
    0x3ff59c08UL, 0xe467e60fUL, 0xbc97e2ceUL, 0xdd485429UL, 0x3ff5ab07UL,
187
    0x054647adUL, 0x3c96324cUL, 0xfba87a03UL, 0x3ff5ba11UL, 0x4c233e1aUL,
188
    0xbc9b77a1UL, 0x8a5946b7UL, 0x3ff5c926UL, 0x816986a2UL, 0x3c3c4b1bUL,
189
    0x90998b93UL, 0x3ff5d845UL, 0xa8b45643UL, 0xbc9cd6a7UL, 0x15ad2148UL,
190
    0x3ff5e76fUL, 0x3080e65eUL, 0x3c9ba6f9UL, 0x20dceb71UL, 0x3ff5f6a3UL,
191
    0xe3cdcf92UL, 0xbc89eaddUL, 0xb976dc09UL, 0x3ff605e1UL, 0x9b56de47UL,
192
    0xbc93e242UL, 0xe6cdf6f4UL, 0x3ff6152aUL, 0x4ab84c27UL, 0x3c9e4b3eUL,
193
    0xb03a5585UL, 0x3ff6247eUL, 0x7e40b497UL, 0xbc9383c1UL, 0x1d1929fdUL,
194
    0x3ff633ddUL, 0xbeb964e5UL, 0x3c984710UL, 0x34ccc320UL, 0x3ff64346UL,
195
    0x759d8933UL, 0xbc8c483cUL, 0xfebc8fb7UL, 0x3ff652b9UL, 0xc9a73e09UL,
196
    0xbc9ae3d5UL, 0x82552225UL, 0x3ff66238UL, 0x87591c34UL, 0xbc9bb609UL,
197
    0xc70833f6UL, 0x3ff671c1UL, 0x586c6134UL, 0xbc8e8732UL, 0xd44ca973UL,
198
    0x3ff68155UL, 0x44f73e65UL, 0x3c6038aeUL, 0xb19e9538UL, 0x3ff690f4UL,
199
    0x9aeb445dUL, 0x3c8804bdUL, 0x667f3bcdUL, 0x3ff6a09eUL, 0x13b26456UL,
200
    0xbc9bdd34UL, 0xfa75173eUL, 0x3ff6b052UL, 0x2c9a9d0eUL, 0x3c7a38f5UL,
201
    0x750bdabfUL, 0x3ff6c012UL, 0x67ff0b0dUL, 0xbc728956UL, 0xddd47645UL,
202
    0x3ff6cfdcUL, 0xb6f17309UL, 0x3c9c7aa9UL, 0x3c651a2fUL, 0x3ff6dfb2UL,
203
    0x683c88abUL, 0xbc6bbe3aUL, 0x98593ae5UL, 0x3ff6ef92UL, 0x9e1ac8b2UL,
204
    0xbc90b974UL, 0xf9519484UL, 0x3ff6ff7dUL, 0x25860ef6UL, 0xbc883c0fUL,
205
    0x66f42e87UL, 0x3ff70f74UL, 0xd45aa65fUL, 0x3c59d644UL, 0xe8ec5f74UL,
206
    0x3ff71f75UL, 0x86887a99UL, 0xbc816e47UL, 0x86ead08aUL, 0x3ff72f82UL,
207
    0x2cd62c72UL, 0xbc920aa0UL, 0x48a58174UL, 0x3ff73f9aUL, 0x6c65d53cUL,
208
    0xbc90a8d9UL, 0x35d7cbfdUL, 0x3ff74fbdUL, 0x618a6e1cUL, 0x3c9047fdUL,
209
    0x564267c9UL, 0x3ff75febUL, 0x57316dd3UL, 0xbc902459UL, 0xb1ab6e09UL,
210
    0x3ff77024UL, 0x169147f8UL, 0x3c9b7877UL, 0x4fde5d3fUL, 0x3ff78069UL,
211
    0x0a02162dUL, 0x3c9866b8UL, 0x38ac1cf6UL, 0x3ff790b9UL, 0x62aadd3eUL,
212
    0x3c9349a8UL, 0x73eb0187UL, 0x3ff7a114UL, 0xee04992fUL, 0xbc841577UL,
213
    0x0976cfdbUL, 0x3ff7b17bUL, 0x8468dc88UL, 0xbc9bebb5UL, 0x0130c132UL,
214
    0x3ff7c1edUL, 0xd1164dd6UL, 0x3c9f124cUL, 0x62ff86f0UL, 0x3ff7d26aUL,
215
    0xfb72b8b4UL, 0x3c91bddbUL, 0x36cf4e62UL, 0x3ff7e2f3UL, 0xba15797eUL,
216
    0x3c705d02UL, 0x8491c491UL, 0x3ff7f387UL, 0xcf9311aeUL, 0xbc807f11UL,
217
    0x543e1a12UL, 0x3ff80427UL, 0x626d972bUL, 0xbc927c86UL, 0xadd106d9UL,
218
    0x3ff814d2UL, 0x0d151d4dUL, 0x3c946437UL, 0x994cce13UL, 0x3ff82589UL,
219
    0xd41532d8UL, 0xbc9d4c1dUL, 0x1eb941f7UL, 0x3ff8364cUL, 0x31df2bd5UL,
220
    0x3c999b9aUL, 0x4623c7adUL, 0x3ff8471aUL, 0xa341cdfbUL, 0xbc88d684UL,
221
    0x179f5b21UL, 0x3ff857f4UL, 0xf8b216d0UL, 0xbc5ba748UL, 0x9b4492edUL,
222
    0x3ff868d9UL, 0x9bd4f6baUL, 0xbc9fc6f8UL, 0xd931a436UL, 0x3ff879caUL,
223
    0xd2db47bdUL, 0x3c85d2d7UL, 0xd98a6699UL, 0x3ff88ac7UL, 0xf37cb53aUL,
224
    0x3c9994c2UL, 0xa478580fUL, 0x3ff89bd0UL, 0x4475202aUL, 0x3c9d5395UL,
225
    0x422aa0dbUL, 0x3ff8ace5UL, 0x56864b27UL, 0x3c96e9f1UL, 0xbad61778UL,
226
    0x3ff8be05UL, 0xfc43446eUL, 0x3c9ecb5eUL, 0x16b5448cUL, 0x3ff8cf32UL,
227
    0x32e9e3aaUL, 0xbc70d55eUL, 0x5e0866d9UL, 0x3ff8e06aUL, 0x6fc9b2e6UL,
228
    0xbc97114aUL, 0x99157736UL, 0x3ff8f1aeUL, 0xa2e3976cUL, 0x3c85cc13UL,
229
    0xd0282c8aUL, 0x3ff902feUL, 0x85fe3fd2UL, 0x3c9592caUL, 0x0b91ffc6UL,
230
    0x3ff9145bUL, 0x2e582524UL, 0xbc9dd679UL, 0x53aa2fe2UL, 0x3ff925c3UL,
231
    0xa639db7fUL, 0xbc83455fUL, 0xb0cdc5e5UL, 0x3ff93737UL, 0x81b57ebcUL,
232
    0xbc675fc7UL, 0x2b5f98e5UL, 0x3ff948b8UL, 0x797d2d99UL, 0xbc8dc3d6UL,
233
    0xcbc8520fUL, 0x3ff95a44UL, 0x96a5f039UL, 0xbc764b7cUL, 0x9a7670b3UL,
234
    0x3ff96bddUL, 0x7f19c896UL, 0xbc5ba596UL, 0x9fde4e50UL, 0x3ff97d82UL,
235
    0x7c1b85d1UL, 0xbc9d185bUL, 0xe47a22a2UL, 0x3ff98f33UL, 0xa24c78ecUL,
236
    0x3c7cabdaUL, 0x70ca07baUL, 0x3ff9a0f1UL, 0x91cee632UL, 0xbc9173bdUL,
237
    0x4d53fe0dUL, 0x3ff9b2bbUL, 0x4df6d518UL, 0xbc9dd84eUL, 0x82a3f090UL,
238
    0x3ff9c491UL, 0xb071f2beUL, 0x3c7c7c46UL, 0x194bb8d5UL, 0x3ff9d674UL,
239
    0xa3dd8233UL, 0xbc9516beUL, 0x19e32323UL, 0x3ff9e863UL, 0x78e64c6eUL,
240
    0x3c7824caUL, 0x8d07f29eUL, 0x3ff9fa5eUL, 0xaaf1faceUL, 0xbc84a9ceUL,
241
    0x7b5de565UL, 0x3ffa0c66UL, 0x5d1cd533UL, 0xbc935949UL, 0xed8eb8bbUL,
242
    0x3ffa1e7aUL, 0xee8be70eUL, 0x3c9c6618UL, 0xec4a2d33UL, 0x3ffa309bUL,
243
    0x7ddc36abUL, 0x3c96305cUL, 0x80460ad8UL, 0x3ffa42c9UL, 0x589fb120UL,
244
    0xbc9aa780UL, 0xb23e255dUL, 0x3ffa5503UL, 0xdb8d41e1UL, 0xbc9d2f6eUL,
245
    0x8af46052UL, 0x3ffa674aUL, 0x30670366UL, 0x3c650f56UL, 0x1330b358UL,
246
    0x3ffa799eUL, 0xcac563c7UL, 0x3c9bcb7eUL, 0x53c12e59UL, 0x3ffa8bfeUL,
247
    0xb2ba15a9UL, 0xbc94f867UL, 0x5579fdbfUL, 0x3ffa9e6bUL, 0x0ef7fd31UL,
248
    0x3c90fac9UL, 0x21356ebaUL, 0x3ffab0e5UL, 0xdae94545UL, 0x3c889c31UL,
249
    0xbfd3f37aUL, 0x3ffac36bUL, 0xcae76cd0UL, 0xbc8f9234UL, 0x3a3c2774UL,
250
    0x3ffad5ffUL, 0xb6b1b8e5UL, 0x3c97ef3bUL, 0x995ad3adUL, 0x3ffae89fUL,
251
    0x345dcc81UL, 0x3c97a1cdUL, 0xe622f2ffUL, 0x3ffafb4cUL, 0x0f315ecdUL,
252
    0xbc94b2fcUL, 0x298db666UL, 0x3ffb0e07UL, 0x4c80e425UL, 0xbc9bdef5UL,
253
    0x6c9a8952UL, 0x3ffb20ceUL, 0x4a0756ccUL, 0x3c94dd02UL, 0xb84f15fbUL,
254
    0x3ffb33a2UL, 0x3084d708UL, 0xbc62805eUL, 0x15b749b1UL, 0x3ffb4684UL,
255
    0xe9df7c90UL, 0xbc7f763dUL, 0x8de5593aUL, 0x3ffb5972UL, 0xbbba6de3UL,
256
    0xbc9c71dfUL, 0x29f1c52aUL, 0x3ffb6c6eUL, 0x52883f6eUL, 0x3c92a8f3UL,
257
    0xf2fb5e47UL, 0x3ffb7f76UL, 0x7e54ac3bUL, 0xbc75584fUL, 0xf22749e4UL,
258
    0x3ffb928cUL, 0x54cb65c6UL, 0xbc9b7216UL, 0x30a1064aUL, 0x3ffba5b0UL,
259
    0x0e54292eUL, 0xbc9efcd3UL, 0xb79a6f1fUL, 0x3ffbb8e0UL, 0xc9696205UL,
260
    0xbc3f52d1UL, 0x904bc1d2UL, 0x3ffbcc1eUL, 0x7a2d9e84UL, 0x3c823dd0UL,
261
    0xc3f3a207UL, 0x3ffbdf69UL, 0x60ea5b53UL, 0xbc3c2623UL, 0x5bd71e09UL,
262
    0x3ffbf2c2UL, 0x3f6b9c73UL, 0xbc9efdcaUL, 0x6141b33dUL, 0x3ffc0628UL,
263
    0xa1fbca34UL, 0xbc8d8a5aUL, 0xdd85529cUL, 0x3ffc199bUL, 0x895048ddUL,
264
    0x3c811065UL, 0xd9fa652cUL, 0x3ffc2d1cUL, 0x17c8a5d7UL, 0xbc96e516UL,
265
    0x5fffd07aUL, 0x3ffc40abUL, 0xe083c60aUL, 0x3c9b4537UL, 0x78fafb22UL,
266
    0x3ffc5447UL, 0x2493b5afUL, 0x3c912f07UL, 0x2e57d14bUL, 0x3ffc67f1UL,
267
    0xff483cadUL, 0x3c92884dUL, 0x8988c933UL, 0x3ffc7ba8UL, 0xbe255559UL,
268
    0xbc8e76bbUL, 0x9406e7b5UL, 0x3ffc8f6dUL, 0x48805c44UL, 0x3c71acbcUL,
269
    0x5751c4dbUL, 0x3ffca340UL, 0xd10d08f5UL, 0xbc87f2beUL, 0xdcef9069UL,
270
    0x3ffcb720UL, 0xd1e949dbUL, 0x3c7503cbUL, 0x2e6d1675UL, 0x3ffccb0fUL,
271
    0x86009092UL, 0xbc7d220fUL, 0x555dc3faUL, 0x3ffcdf0bUL, 0x53829d72UL,
272
    0xbc8dd83bUL, 0x5b5bab74UL, 0x3ffcf315UL, 0xb86dff57UL, 0xbc9a08e9UL,
273
    0x4a07897cUL, 0x3ffd072dUL, 0x43797a9cUL, 0xbc9cbc37UL, 0x2b08c968UL,
274
    0x3ffd1b53UL, 0x219a36eeUL, 0x3c955636UL, 0x080d89f2UL, 0x3ffd2f87UL,
275
    0x719d8578UL, 0xbc9d487bUL, 0xeacaa1d6UL, 0x3ffd43c8UL, 0xbf5a1614UL,
276
    0x3c93db53UL, 0xdcfba487UL, 0x3ffd5818UL, 0xd75b3707UL, 0x3c82ed02UL,
277
    0xe862e6d3UL, 0x3ffd6c76UL, 0x4a8165a0UL, 0x3c5fe87aUL, 0x16c98398UL,
278
    0x3ffd80e3UL, 0x8beddfe8UL, 0xbc911ec1UL, 0x71ff6075UL, 0x3ffd955dUL,
279
    0xbb9af6beUL, 0x3c9a052dUL, 0x03db3285UL, 0x3ffda9e6UL, 0x696db532UL,
280
    0x3c9c2300UL, 0xd63a8315UL, 0x3ffdbe7cUL, 0x926b8be4UL, 0xbc9b76f1UL,
281
    0xf301b460UL, 0x3ffdd321UL, 0x78f018c3UL, 0x3c92da57UL, 0x641c0658UL,
282
    0x3ffde7d5UL, 0x8e79ba8fUL, 0xbc9ca552UL, 0x337b9b5fUL, 0x3ffdfc97UL,
283
    0x4f184b5cUL, 0xbc91a5cdUL, 0x6b197d17UL, 0x3ffe1167UL, 0xbd5c7f44UL,
284
    0xbc72b529UL, 0x14f5a129UL, 0x3ffe2646UL, 0x817a1496UL, 0xbc97b627UL,
285
    0x3b16ee12UL, 0x3ffe3b33UL, 0x31fdc68bUL, 0xbc99f4a4UL, 0xe78b3ff6UL,
286
    0x3ffe502eUL, 0x80a9cc8fUL, 0x3c839e89UL, 0x24676d76UL, 0x3ffe6539UL,
287
    0x7522b735UL, 0xbc863ff8UL, 0xfbc74c83UL, 0x3ffe7a51UL, 0xca0c8de2UL,
288
    0x3c92d522UL, 0x77cdb740UL, 0x3ffe8f79UL, 0x80b054b1UL, 0xbc910894UL,
289
    0xa2a490daUL, 0x3ffea4afUL, 0x179c2893UL, 0xbc9e9c23UL, 0x867cca6eUL,
290
    0x3ffeb9f4UL, 0x2293e4f2UL, 0x3c94832fUL, 0x2d8e67f1UL, 0x3ffecf48UL,
291
    0xb411ad8cUL, 0xbc9c93f3UL, 0xa2188510UL, 0x3ffee4aaUL, 0xa487568dUL,
292
    0x3c91c68dUL, 0xee615a27UL, 0x3ffefa1bUL, 0x86a4b6b0UL, 0x3c9dc7f4UL,
293
    0x1cb6412aUL, 0x3fff0f9cUL, 0x65181d45UL, 0xbc932200UL, 0x376bba97UL,
294
    0x3fff252bUL, 0xbf0d8e43UL, 0x3c93a1a5UL, 0x48dd7274UL, 0x3fff3ac9UL,
295
    0x3ed837deUL, 0xbc795a5aUL, 0x5b6e4540UL, 0x3fff5076UL, 0x2dd8a18bUL,
296
    0x3c99d3e1UL, 0x798844f8UL, 0x3fff6632UL, 0x3539343eUL, 0x3c9fa37bUL,
297
    0xad9cbe14UL, 0x3fff7bfdUL, 0xd006350aUL, 0xbc9dbb12UL, 0x02243c89UL,
298
    0x3fff91d8UL, 0xa779f689UL, 0xbc612ea8UL, 0x819e90d8UL, 0x3fffa7c1UL,
299
    0xf3a5931eUL, 0x3c874853UL, 0x3692d514UL, 0x3fffbdbaUL, 0x15098eb6UL,
300
    0xbc796773UL, 0x2b8f71f1UL, 0x3fffd3c2UL, 0x966579e7UL, 0x3c62eb74UL,
301
    0x6b2a23d9UL, 0x3fffe9d9UL, 0x7442fde3UL, 0x3c74a603UL
302
};
303

304
ATTRIBUTE_ALIGNED(16) static const juint _e_coeff[] = {
305
    0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL, 0x6fba4e77UL,
306
    0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL, 0xfefa39efUL, 0x3fe62e42UL,
307
    0x00000000UL, 0x00000000UL
308
};
309

310
ATTRIBUTE_ALIGNED(16) static const juint _coeff_h[] = {
311
    0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
312
};
313

314
ATTRIBUTE_ALIGNED(16) static const juint _HIGHMASK_LOG_X[] = {
315
    0xf8000000UL, 0xffffffffUL, 0x00000000UL, 0xfffff800UL
316
};
317

318
ATTRIBUTE_ALIGNED(8) static const juint _HALFMASK[] = {
319
    0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL
320
};
321

322
ATTRIBUTE_ALIGNED(16) static const juint _coeff_pow[] = {
323
    0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL, 0x9f95985aUL,
324
    0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL, 0x518775e3UL, 0x3f9004f2UL,
325
    0xac8349bbUL, 0x3fa76c9bUL, 0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL,
326
    0xbf5dabe1UL, 0x9f95985aUL, 0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL,
327
    0x486ececbUL, 0x3fc4635eUL, 0x412055ccUL, 0xbdd61bb2UL
328
};
329

330
ATTRIBUTE_ALIGNED(16) static const juint _L_tbl_pow[] = {
331
    0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x20000000UL,
332
    0x3feff00aUL, 0x96621f95UL, 0x3e5b1856UL, 0xe0000000UL, 0x3fefe019UL,
333
    0xe5916f9eUL, 0xbe325278UL, 0x00000000UL, 0x3fefd02fUL, 0x859a1062UL,
334
    0x3e595fb7UL, 0xc0000000UL, 0x3fefc049UL, 0xb245f18fUL, 0xbe529c38UL,
335
    0xe0000000UL, 0x3fefb069UL, 0xad2880a7UL, 0xbe501230UL, 0x60000000UL,
336
    0x3fefa08fUL, 0xc8e72420UL, 0x3e597bd1UL, 0x80000000UL, 0x3fef90baUL,
337
    0xc30c4500UL, 0xbe5d6c75UL, 0xe0000000UL, 0x3fef80eaUL, 0x02c63f43UL,
338
    0x3e2e1318UL, 0xc0000000UL, 0x3fef7120UL, 0xb3d4ccccUL, 0xbe44c52aUL,
339
    0x00000000UL, 0x3fef615cUL, 0xdbd91397UL, 0xbe4e7d6cUL, 0xa0000000UL,
340
    0x3fef519cUL, 0x65c5cd68UL, 0xbe522dc8UL, 0xa0000000UL, 0x3fef41e2UL,
341
    0x46d1306cUL, 0xbe5a840eUL, 0xe0000000UL, 0x3fef322dUL, 0xd2980e94UL,
342
    0x3e5071afUL, 0xa0000000UL, 0x3fef227eUL, 0x773abadeUL, 0xbe5891e5UL,
343
    0xa0000000UL, 0x3fef12d4UL, 0xdc6bf46bUL, 0xbe5cccbeUL, 0xe0000000UL,
344
    0x3fef032fUL, 0xbc7247faUL, 0xbe2bab83UL, 0x80000000UL, 0x3feef390UL,
345
    0xbcaa1e46UL, 0xbe53bb3bUL, 0x60000000UL, 0x3feee3f6UL, 0x5f6c682dUL,
346
    0xbe54c619UL, 0x80000000UL, 0x3feed461UL, 0x5141e368UL, 0xbe4b6d86UL,
347
    0xe0000000UL, 0x3feec4d1UL, 0xec678f76UL, 0xbe369af6UL, 0x80000000UL,
348
    0x3feeb547UL, 0x41301f55UL, 0xbe2d4312UL, 0x60000000UL, 0x3feea5c2UL,
349
    0x676da6bdUL, 0xbe4d8dd0UL, 0x60000000UL, 0x3fee9642UL, 0x57a891c4UL,
350
    0x3e51f991UL, 0xa0000000UL, 0x3fee86c7UL, 0xe4eb491eUL, 0x3e579bf9UL,
351
    0x20000000UL, 0x3fee7752UL, 0xfddc4a2cUL, 0xbe3356e6UL, 0xc0000000UL,
352
    0x3fee67e1UL, 0xd75b5bf1UL, 0xbe449531UL, 0x80000000UL, 0x3fee5876UL,
353
    0xbd423b8eUL, 0x3df54fe4UL, 0x60000000UL, 0x3fee4910UL, 0x330e51b9UL,
354
    0x3e54289cUL, 0x80000000UL, 0x3fee39afUL, 0x8651a95fUL, 0xbe55aad6UL,
355
    0xa0000000UL, 0x3fee2a53UL, 0x5e98c708UL, 0xbe2fc4a9UL, 0xe0000000UL,
356
    0x3fee1afcUL, 0x0989328dUL, 0x3e23958cUL, 0x40000000UL, 0x3fee0babUL,
357
    0xee642abdUL, 0xbe425dd8UL, 0xa0000000UL, 0x3fedfc5eUL, 0xc394d236UL,
358
    0x3e526362UL, 0x20000000UL, 0x3feded17UL, 0xe104aa8eUL, 0x3e4ce247UL,
359
    0xc0000000UL, 0x3fedddd4UL, 0x265a9be4UL, 0xbe5bb77aUL, 0x40000000UL,
360
    0x3fedce97UL, 0x0ecac52fUL, 0x3e4a7cb1UL, 0xe0000000UL, 0x3fedbf5eUL,
361
    0x124cb3b8UL, 0x3e257024UL, 0x80000000UL, 0x3fedb02bUL, 0xe6d4febeUL,
362
    0xbe2033eeUL, 0x20000000UL, 0x3feda0fdUL, 0x39cca00eUL, 0xbe3ddabcUL,
363
    0xc0000000UL, 0x3fed91d3UL, 0xef8a552aUL, 0xbe543390UL, 0x40000000UL,
364
    0x3fed82afUL, 0xb8e85204UL, 0x3e513850UL, 0xe0000000UL, 0x3fed738fUL,
365
    0x3d59fe08UL, 0xbe5db728UL, 0x40000000UL, 0x3fed6475UL, 0x3aa7ead1UL,
366
    0x3e58804bUL, 0xc0000000UL, 0x3fed555fUL, 0xf8a35ba9UL, 0xbe5298b0UL,
367
    0x00000000UL, 0x3fed464fUL, 0x9a88dd15UL, 0x3e5a8cdbUL, 0x40000000UL,
368
    0x3fed3743UL, 0xb0b0a190UL, 0x3e598635UL, 0x80000000UL, 0x3fed283cUL,
369
    0xe2113295UL, 0xbe5c1119UL, 0x80000000UL, 0x3fed193aUL, 0xafbf1728UL,
370
    0xbe492e9cUL, 0x60000000UL, 0x3fed0a3dUL, 0xe4a4ccf3UL, 0x3e19b90eUL,
371
    0x20000000UL, 0x3fecfb45UL, 0xba3cbeb8UL, 0x3e406b50UL, 0xc0000000UL,
372
    0x3fecec51UL, 0x110f7dddUL, 0x3e0d6806UL, 0x40000000UL, 0x3fecdd63UL,
373
    0x7dd7d508UL, 0xbe5a8943UL, 0x80000000UL, 0x3fecce79UL, 0x9b60f271UL,
374
    0xbe50676aUL, 0x80000000UL, 0x3fecbf94UL, 0x0b9ad660UL, 0x3e59174fUL,
375
    0x60000000UL, 0x3fecb0b4UL, 0x00823d9cUL, 0x3e5bbf72UL, 0x20000000UL,
376
    0x3feca1d9UL, 0x38a6ec89UL, 0xbe4d38f9UL, 0x80000000UL, 0x3fec9302UL,
377
    0x3a0b7d8eUL, 0x3e53dbfdUL, 0xc0000000UL, 0x3fec8430UL, 0xc6826b34UL,
378
    0xbe27c5c9UL, 0xc0000000UL, 0x3fec7563UL, 0x0c706381UL, 0xbe593653UL,
379
    0x60000000UL, 0x3fec669bUL, 0x7df34ec7UL, 0x3e461ab5UL, 0xe0000000UL,
380
    0x3fec57d7UL, 0x40e5e7e8UL, 0xbe5c3daeUL, 0x00000000UL, 0x3fec4919UL,
381
    0x5602770fUL, 0xbe55219dUL, 0xc0000000UL, 0x3fec3a5eUL, 0xec7911ebUL,
382
    0x3e5a5d25UL, 0x60000000UL, 0x3fec2ba9UL, 0xb39ea225UL, 0xbe53c00bUL,
383
    0x80000000UL, 0x3fec1cf8UL, 0x967a212eUL, 0x3e5a8ddfUL, 0x60000000UL,
384
    0x3fec0e4cUL, 0x580798bdUL, 0x3e5f53abUL, 0x00000000UL, 0x3febffa5UL,
385
    0xb8282df6UL, 0xbe46b874UL, 0x20000000UL, 0x3febf102UL, 0xe33a6729UL,
386
    0x3e54963fUL, 0x00000000UL, 0x3febe264UL, 0x3b53e88aUL, 0xbe3adce1UL,
387
    0x60000000UL, 0x3febd3caUL, 0xc2585084UL, 0x3e5cde9fUL, 0x80000000UL,
388
    0x3febc535UL, 0xa335c5eeUL, 0xbe39fd9cUL, 0x20000000UL, 0x3febb6a5UL,
389
    0x7325b04dUL, 0x3e42ba15UL, 0x60000000UL, 0x3feba819UL, 0x1564540fUL,
390
    0x3e3a9f35UL, 0x40000000UL, 0x3feb9992UL, 0x83fff592UL, 0xbe5465ceUL,
391
    0xa0000000UL, 0x3feb8b0fUL, 0xb9da63d3UL, 0xbe4b1a0aUL, 0x80000000UL,
392
    0x3feb7c91UL, 0x6d6f1ea4UL, 0x3e557657UL, 0x00000000UL, 0x3feb6e18UL,
393
    0x5e80a1bfUL, 0x3e4ddbb6UL, 0x00000000UL, 0x3feb5fa3UL, 0x1c9eacb5UL,
394
    0x3e592877UL, 0xa0000000UL, 0x3feb5132UL, 0x6d40beb3UL, 0xbe51858cUL,
395
    0xa0000000UL, 0x3feb42c6UL, 0xd740c67bUL, 0x3e427ad2UL, 0x40000000UL,
396
    0x3feb345fUL, 0xa3e0cceeUL, 0xbe5c2fc4UL, 0x40000000UL, 0x3feb25fcUL,
397
    0x8e752b50UL, 0xbe3da3c2UL, 0xc0000000UL, 0x3feb179dUL, 0xa892e7deUL,
398
    0x3e1fb481UL, 0xc0000000UL, 0x3feb0943UL, 0x21ed71e9UL, 0xbe365206UL,
399
    0x20000000UL, 0x3feafaeeUL, 0x0e1380a3UL, 0x3e5c5b7bUL, 0x20000000UL,
400
    0x3feaec9dUL, 0x3c3d640eUL, 0xbe5dbbd0UL, 0x60000000UL, 0x3feade50UL,
401
    0x8f97a715UL, 0x3e3a8ec5UL, 0x20000000UL, 0x3fead008UL, 0x23ab2839UL,
402
    0x3e2fe98aUL, 0x40000000UL, 0x3feac1c4UL, 0xf4bbd50fUL, 0x3e54d8f6UL,
403
    0xe0000000UL, 0x3feab384UL, 0x14757c4dUL, 0xbe48774cUL, 0xc0000000UL,
404
    0x3feaa549UL, 0x7c7b0eeaUL, 0x3e5b51bbUL, 0x20000000UL, 0x3fea9713UL,
405
    0xf56f7013UL, 0x3e386200UL, 0xe0000000UL, 0x3fea88e0UL, 0xbe428ebeUL,
406
    0xbe514af5UL, 0xe0000000UL, 0x3fea7ab2UL, 0x8d0e4496UL, 0x3e4f9165UL,
407
    0x60000000UL, 0x3fea6c89UL, 0xdbacc5d5UL, 0xbe5c063bUL, 0x20000000UL,
408
    0x3fea5e64UL, 0x3f19d970UL, 0xbe5a0c8cUL, 0x20000000UL, 0x3fea5043UL,
409
    0x09ea3e6bUL, 0x3e5065dcUL, 0x80000000UL, 0x3fea4226UL, 0x78df246cUL,
410
    0x3e5e05f6UL, 0x40000000UL, 0x3fea340eUL, 0x4057d4a0UL, 0x3e431b2bUL,
411
    0x40000000UL, 0x3fea25faUL, 0x82867bb5UL, 0x3e4b76beUL, 0xa0000000UL,
412
    0x3fea17eaUL, 0x9436f40aUL, 0xbe5aad39UL, 0x20000000UL, 0x3fea09dfUL,
413
    0x4b5253b3UL, 0x3e46380bUL, 0x00000000UL, 0x3fe9fbd8UL, 0x8fc52466UL,
414
    0xbe386f9bUL, 0x20000000UL, 0x3fe9edd5UL, 0x22d3f344UL, 0xbe538347UL,
415
    0x60000000UL, 0x3fe9dfd6UL, 0x1ac33522UL, 0x3e5dbc53UL, 0x00000000UL,
416
    0x3fe9d1dcUL, 0xeabdff1dUL, 0x3e40fc0cUL, 0xe0000000UL, 0x3fe9c3e5UL,
417
    0xafd30e73UL, 0xbe585e63UL, 0xe0000000UL, 0x3fe9b5f3UL, 0xa52f226aUL,
418
    0xbe43e8f9UL, 0x20000000UL, 0x3fe9a806UL, 0xecb8698dUL, 0xbe515b36UL,
419
    0x80000000UL, 0x3fe99a1cUL, 0xf2b4e89dUL, 0x3e48b62bUL, 0x20000000UL,
420
    0x3fe98c37UL, 0x7c9a88fbUL, 0x3e44414cUL, 0x00000000UL, 0x3fe97e56UL,
421
    0xda015741UL, 0xbe5d13baUL, 0xe0000000UL, 0x3fe97078UL, 0x5fdace06UL,
422
    0x3e51b947UL, 0x00000000UL, 0x3fe962a0UL, 0x956ca094UL, 0x3e518785UL,
423
    0x40000000UL, 0x3fe954cbUL, 0x01164c1dUL, 0x3e5d5b57UL, 0xc0000000UL,
424
    0x3fe946faUL, 0xe63b3767UL, 0xbe4f84e7UL, 0x40000000UL, 0x3fe9392eUL,
425
    0xe57cc2a9UL, 0x3e34eda3UL, 0xe0000000UL, 0x3fe92b65UL, 0x8c75b544UL,
426
    0x3e5766a0UL, 0xc0000000UL, 0x3fe91da1UL, 0x37d1d087UL, 0xbe5e2ab1UL,
427
    0x80000000UL, 0x3fe90fe1UL, 0xa953dc20UL, 0x3e5fa1f3UL, 0x80000000UL,
428
    0x3fe90225UL, 0xdbd3f369UL, 0x3e47d6dbUL, 0xa0000000UL, 0x3fe8f46dUL,
429
    0x1c9be989UL, 0xbe5e2b0aUL, 0xa0000000UL, 0x3fe8e6b9UL, 0x3c93d76aUL,
430
    0x3e5c8618UL, 0xe0000000UL, 0x3fe8d909UL, 0x2182fc9aUL, 0xbe41aa9eUL,
431
    0x20000000UL, 0x3fe8cb5eUL, 0xe6b3539dUL, 0xbe530d19UL, 0x60000000UL,
432
    0x3fe8bdb6UL, 0x49e58cc3UL, 0xbe3bb374UL, 0xa0000000UL, 0x3fe8b012UL,
433
    0xa7cfeb8fUL, 0x3e56c412UL, 0x00000000UL, 0x3fe8a273UL, 0x8d52bc19UL,
434
    0x3e1429b8UL, 0x60000000UL, 0x3fe894d7UL, 0x4dc32c6cUL, 0xbe48604cUL,
435
    0xc0000000UL, 0x3fe8873fUL, 0x0c868e56UL, 0xbe564ee5UL, 0x00000000UL,
436
    0x3fe879acUL, 0x56aee828UL, 0x3e5e2fd8UL, 0x60000000UL, 0x3fe86c1cUL,
437
    0x7ceab8ecUL, 0x3e493365UL, 0xc0000000UL, 0x3fe85e90UL, 0x78d4dadcUL,
438
    0xbe4f7f25UL, 0x00000000UL, 0x3fe85109UL, 0x0ccd8280UL, 0x3e31e7a2UL,
439
    0x40000000UL, 0x3fe84385UL, 0x34ba4e15UL, 0x3e328077UL, 0x80000000UL,
440
    0x3fe83605UL, 0xa670975aUL, 0xbe53eee5UL, 0xa0000000UL, 0x3fe82889UL,
441
    0xf61b77b2UL, 0xbe43a20aUL, 0xa0000000UL, 0x3fe81b11UL, 0x13e6643bUL,
442
    0x3e5e5fe5UL, 0xc0000000UL, 0x3fe80d9dUL, 0x82cc94e8UL, 0xbe5ff1f9UL,
443
    0xa0000000UL, 0x3fe8002dUL, 0x8a0c9c5dUL, 0xbe42b0e7UL, 0x60000000UL,
444
    0x3fe7f2c1UL, 0x22a16f01UL, 0x3e5d9ea0UL, 0x20000000UL, 0x3fe7e559UL,
445
    0xc38cd451UL, 0x3e506963UL, 0xc0000000UL, 0x3fe7d7f4UL, 0x9902bc71UL,
446
    0x3e4503d7UL, 0x40000000UL, 0x3fe7ca94UL, 0xdef2a3c0UL, 0x3e3d98edUL,
447
    0xa0000000UL, 0x3fe7bd37UL, 0xed49abb0UL, 0x3e24c1ffUL, 0xe0000000UL,
448
    0x3fe7afdeUL, 0xe3b0be70UL, 0xbe40c467UL, 0x00000000UL, 0x3fe7a28aUL,
449
    0xaf9f193cUL, 0xbe5dff6cUL, 0xe0000000UL, 0x3fe79538UL, 0xb74cf6b6UL,
450
    0xbe258ed0UL, 0xa0000000UL, 0x3fe787ebUL, 0x1d9127c7UL, 0x3e345fb0UL,
451
    0x40000000UL, 0x3fe77aa2UL, 0x1028c21dUL, 0xbe4619bdUL, 0xa0000000UL,
452
    0x3fe76d5cUL, 0x7cb0b5e4UL, 0x3e40f1a2UL, 0xe0000000UL, 0x3fe7601aUL,
453
    0x2b1bc4adUL, 0xbe32e8bbUL, 0xe0000000UL, 0x3fe752dcUL, 0x6839f64eUL,
454
    0x3e41f57bUL, 0xc0000000UL, 0x3fe745a2UL, 0xc4121f7eUL, 0xbe52c40aUL,
455
    0x60000000UL, 0x3fe7386cUL, 0xd6852d72UL, 0xbe5c4e6bUL, 0xc0000000UL,
456
    0x3fe72b39UL, 0x91d690f7UL, 0xbe57f88fUL, 0xe0000000UL, 0x3fe71e0aUL,
457
    0x627a2159UL, 0xbe4425d5UL, 0xc0000000UL, 0x3fe710dfUL, 0x50a54033UL,
458
    0x3e422b7eUL, 0x60000000UL, 0x3fe703b8UL, 0x3b0b5f91UL, 0x3e5d3857UL,
459
    0xe0000000UL, 0x3fe6f694UL, 0x84d628a2UL, 0xbe51f090UL, 0x00000000UL,
460
    0x3fe6e975UL, 0x306d8894UL, 0xbe414d83UL, 0xe0000000UL, 0x3fe6dc58UL,
461
    0x30bf24aaUL, 0xbe4650caUL, 0x80000000UL, 0x3fe6cf40UL, 0xd4628d69UL,
462
    0xbe5db007UL, 0xc0000000UL, 0x3fe6c22bUL, 0xa2aae57bUL, 0xbe31d279UL,
463
    0xc0000000UL, 0x3fe6b51aUL, 0x860edf7eUL, 0xbe2d4c4aUL, 0x80000000UL,
464
    0x3fe6a80dUL, 0xf3559341UL, 0xbe5f7e98UL, 0xe0000000UL, 0x3fe69b03UL,
465
    0xa885899eUL, 0xbe5c2011UL, 0xe0000000UL, 0x3fe68dfdUL, 0x2bdc6d37UL,
466
    0x3e224a82UL, 0xa0000000UL, 0x3fe680fbUL, 0xc12ad1b9UL, 0xbe40cf56UL,
467
    0x00000000UL, 0x3fe673fdUL, 0x1bcdf659UL, 0xbdf52f2dUL, 0x00000000UL,
468
    0x3fe66702UL, 0x5df10408UL, 0x3e5663e0UL, 0xc0000000UL, 0x3fe65a0aUL,
469
    0xa4070568UL, 0xbe40b12fUL, 0x00000000UL, 0x3fe64d17UL, 0x71c54c47UL,
470
    0x3e5f5e8bUL, 0x00000000UL, 0x3fe64027UL, 0xbd4b7e83UL, 0x3e42ead6UL,
471
    0xa0000000UL, 0x3fe6333aUL, 0x61598bd2UL, 0xbe4c48d4UL, 0xc0000000UL,
472
    0x3fe62651UL, 0x6f538d61UL, 0x3e548401UL, 0xa0000000UL, 0x3fe6196cUL,
473
    0x14344120UL, 0xbe529af6UL, 0x00000000UL, 0x3fe60c8bUL, 0x5982c587UL,
474
    0xbe3e1e4fUL, 0x00000000UL, 0x3fe5ffadUL, 0xfe51d4eaUL, 0xbe4c897aUL,
475
    0x80000000UL, 0x3fe5f2d2UL, 0xfd46ebe1UL, 0x3e552e00UL, 0xa0000000UL,
476
    0x3fe5e5fbUL, 0xa4695699UL, 0x3e5ed471UL, 0x60000000UL, 0x3fe5d928UL,
477
    0x80d118aeUL, 0x3e456b61UL, 0xa0000000UL, 0x3fe5cc58UL, 0x304c330bUL,
478
    0x3e54dc29UL, 0x80000000UL, 0x3fe5bf8cUL, 0x0af2dedfUL, 0xbe3aa9bdUL,
479
    0xe0000000UL, 0x3fe5b2c3UL, 0x15fc9258UL, 0xbe479a37UL, 0xc0000000UL,
480
    0x3fe5a5feUL, 0x9292c7eaUL, 0x3e188650UL, 0x20000000UL, 0x3fe5993dUL,
481
    0x33b4d380UL, 0x3e5d6d93UL, 0x20000000UL, 0x3fe58c7fUL, 0x02fd16c7UL,
482
    0x3e2fe961UL, 0xa0000000UL, 0x3fe57fc4UL, 0x4a05edb6UL, 0xbe4d55b4UL,
483
    0xa0000000UL, 0x3fe5730dUL, 0x3d443abbUL, 0xbe5e6954UL, 0x00000000UL,
484
    0x3fe5665aUL, 0x024acfeaUL, 0x3e50e61bUL, 0x00000000UL, 0x3fe559aaUL,
485
    0xcc9edd09UL, 0xbe325403UL, 0x60000000UL, 0x3fe54cfdUL, 0x1fe26950UL,
486
    0x3e5d500eUL, 0x60000000UL, 0x3fe54054UL, 0x6c5ae164UL, 0xbe4a79b4UL,
487
    0xc0000000UL, 0x3fe533aeUL, 0x154b0287UL, 0xbe401571UL, 0xa0000000UL,
488
    0x3fe5270cUL, 0x0673f401UL, 0xbe56e56bUL, 0xe0000000UL, 0x3fe51a6dUL,
489
    0x751b639cUL, 0x3e235269UL, 0xa0000000UL, 0x3fe50dd2UL, 0x7c7b2bedUL,
490
    0x3ddec887UL, 0xc0000000UL, 0x3fe5013aUL, 0xafab4e17UL, 0x3e5e7575UL,
491
    0x60000000UL, 0x3fe4f4a6UL, 0x2e308668UL, 0x3e59aed6UL, 0x80000000UL,
492
    0x3fe4e815UL, 0xf33e2a76UL, 0xbe51f184UL, 0xe0000000UL, 0x3fe4db87UL,
493
    0x839f3e3eUL, 0x3e57db01UL, 0xc0000000UL, 0x3fe4cefdUL, 0xa9eda7bbUL,
494
    0x3e535e0fUL, 0x00000000UL, 0x3fe4c277UL, 0x2a8f66a5UL, 0x3e5ce451UL,
495
    0xc0000000UL, 0x3fe4b5f3UL, 0x05192456UL, 0xbe4e8518UL, 0xc0000000UL,
496
    0x3fe4a973UL, 0x4aa7cd1dUL, 0x3e46784aUL, 0x40000000UL, 0x3fe49cf7UL,
497
    0x8e23025eUL, 0xbe5749f2UL, 0x00000000UL, 0x3fe4907eUL, 0x18d30215UL,
498
    0x3e360f39UL, 0x20000000UL, 0x3fe48408UL, 0x63dcf2f3UL, 0x3e5e00feUL,
499
    0xc0000000UL, 0x3fe47795UL, 0x46182d09UL, 0xbe5173d9UL, 0xa0000000UL,
500
    0x3fe46b26UL, 0x8f0e62aaUL, 0xbe48f281UL, 0xe0000000UL, 0x3fe45ebaUL,
501
    0x5775c40cUL, 0xbe56aad4UL, 0x60000000UL, 0x3fe45252UL, 0x0fe25f69UL,
502
    0x3e48bd71UL, 0x40000000UL, 0x3fe445edUL, 0xe9989ec5UL, 0x3e590d97UL,
503
    0x80000000UL, 0x3fe4398bUL, 0xb3d9ffe3UL, 0x3e479dbcUL, 0x20000000UL,
504
    0x3fe42d2dUL, 0x388e4d2eUL, 0xbe5eed80UL, 0xe0000000UL, 0x3fe420d1UL,
505
    0x6f797c18UL, 0x3e554b4cUL, 0x20000000UL, 0x3fe4147aUL, 0x31048bb4UL,
506
    0xbe5b1112UL, 0x80000000UL, 0x3fe40825UL, 0x2efba4f9UL, 0x3e48ebc7UL,
507
    0x40000000UL, 0x3fe3fbd4UL, 0x50201119UL, 0x3e40b701UL, 0x40000000UL,
508
    0x3fe3ef86UL, 0x0a4db32cUL, 0x3e551de8UL, 0xa0000000UL, 0x3fe3e33bUL,
509
    0x0c9c148bUL, 0xbe50c1f6UL, 0x20000000UL, 0x3fe3d6f4UL, 0xc9129447UL,
510
    0x3e533fa0UL, 0x00000000UL, 0x3fe3cab0UL, 0xaae5b5a0UL, 0xbe22b68eUL,
511
    0x20000000UL, 0x3fe3be6fUL, 0x02305e8aUL, 0xbe54fc08UL, 0x60000000UL,
512
    0x3fe3b231UL, 0x7f908258UL, 0x3e57dc05UL, 0x00000000UL, 0x3fe3a5f7UL,
513
    0x1a09af78UL, 0x3e08038bUL, 0xe0000000UL, 0x3fe399bfUL, 0x490643c1UL,
514
    0xbe5dbe42UL, 0xe0000000UL, 0x3fe38d8bUL, 0x5e8ad724UL, 0xbe3c2b72UL,
515
    0x20000000UL, 0x3fe3815bUL, 0xc67196b6UL, 0x3e1713cfUL, 0xa0000000UL,
516
    0x3fe3752dUL, 0x6182e429UL, 0xbe3ec14cUL, 0x40000000UL, 0x3fe36903UL,
517
    0xab6eb1aeUL, 0x3e5a2cc5UL, 0x40000000UL, 0x3fe35cdcUL, 0xfe5dc064UL,
518
    0xbe5c5878UL, 0x40000000UL, 0x3fe350b8UL, 0x0ba6b9e4UL, 0x3e51619bUL,
519
    0x80000000UL, 0x3fe34497UL, 0x857761aaUL, 0x3e5fff53UL, 0x00000000UL,
520
    0x3fe3387aUL, 0xf872d68cUL, 0x3e484f4dUL, 0xa0000000UL, 0x3fe32c5fUL,
521
    0x087e97c2UL, 0x3e52842eUL, 0x80000000UL, 0x3fe32048UL, 0x73d6d0c0UL,
522
    0xbe503edfUL, 0x80000000UL, 0x3fe31434UL, 0x0c1456a1UL, 0xbe5f72adUL,
523
    0xa0000000UL, 0x3fe30823UL, 0x83a1a4d5UL, 0xbe5e65ccUL, 0xe0000000UL,
524
    0x3fe2fc15UL, 0x855a7390UL, 0xbe506438UL, 0x40000000UL, 0x3fe2f00bUL,
525
    0xa2898287UL, 0x3e3d22a2UL, 0xe0000000UL, 0x3fe2e403UL, 0x8b56f66fUL,
526
    0xbe5aa5fdUL, 0x80000000UL, 0x3fe2d7ffUL, 0x52db119aUL, 0x3e3a2e3dUL,
527
    0x60000000UL, 0x3fe2cbfeUL, 0xe2ddd4c0UL, 0xbe586469UL, 0x40000000UL,
528
    0x3fe2c000UL, 0x6b01bf10UL, 0x3e352b9dUL, 0x40000000UL, 0x3fe2b405UL,
529
    0xb07a1cdfUL, 0x3e5c5cdaUL, 0x80000000UL, 0x3fe2a80dUL, 0xc7b5f868UL,
530
    0xbe5668b3UL, 0xc0000000UL, 0x3fe29c18UL, 0x185edf62UL, 0xbe563d66UL,
531
    0x00000000UL, 0x3fe29027UL, 0xf729e1ccUL, 0x3e59a9a0UL, 0x80000000UL,
532
    0x3fe28438UL, 0x6433c727UL, 0xbe43cc89UL, 0x00000000UL, 0x3fe2784dUL,
533
    0x41782631UL, 0xbe30750cUL, 0xa0000000UL, 0x3fe26c64UL, 0x914911b7UL,
534
    0xbe58290eUL, 0x40000000UL, 0x3fe2607fUL, 0x3dcc73e1UL, 0xbe4269cdUL,
535
    0x00000000UL, 0x3fe2549dUL, 0x2751bf70UL, 0xbe5a6998UL, 0xc0000000UL,
536
    0x3fe248bdUL, 0x4248b9fbUL, 0xbe4ddb00UL, 0x80000000UL, 0x3fe23ce1UL,
537
    0xf35cf82fUL, 0x3e561b71UL, 0x60000000UL, 0x3fe23108UL, 0x8e481a2dUL,
538
    0x3e518fb9UL, 0x60000000UL, 0x3fe22532UL, 0x5ab96edcUL, 0xbe5fafc5UL,
539
    0x40000000UL, 0x3fe2195fUL, 0x80943911UL, 0xbe07f819UL, 0x40000000UL,
540
    0x3fe20d8fUL, 0x386f2d6cUL, 0xbe54ba8bUL, 0x40000000UL, 0x3fe201c2UL,
541
    0xf29664acUL, 0xbe5eb815UL, 0x20000000UL, 0x3fe1f5f8UL, 0x64f03390UL,
542
    0x3e5e320cUL, 0x20000000UL, 0x3fe1ea31UL, 0x747ff696UL, 0x3e5ef0a5UL,
543
    0x40000000UL, 0x3fe1de6dUL, 0x3e9ceb51UL, 0xbe5f8d27UL, 0x20000000UL,
544
    0x3fe1d2acUL, 0x4ae0b55eUL, 0x3e5faa21UL, 0x20000000UL, 0x3fe1c6eeUL,
545
    0x28569a5eUL, 0x3e598a4fUL, 0x20000000UL, 0x3fe1bb33UL, 0x54b33e07UL,
546
    0x3e46130aUL, 0x20000000UL, 0x3fe1af7bUL, 0x024f1078UL, 0xbe4dbf93UL,
547
    0x00000000UL, 0x3fe1a3c6UL, 0xb0783bfaUL, 0x3e419248UL, 0xe0000000UL,
548
    0x3fe19813UL, 0x2f02b836UL, 0x3e4e02b7UL, 0xc0000000UL, 0x3fe18c64UL,
549
    0x28dec9d4UL, 0x3e09064fUL, 0x80000000UL, 0x3fe180b8UL, 0x45cbf406UL,
550
    0x3e5b1f46UL, 0x40000000UL, 0x3fe1750fUL, 0x03d9964cUL, 0x3e5b0a79UL,
551
    0x00000000UL, 0x3fe16969UL, 0x8b5b882bUL, 0xbe238086UL, 0xa0000000UL,
552
    0x3fe15dc5UL, 0x73bad6f8UL, 0xbdf1fca4UL, 0x20000000UL, 0x3fe15225UL,
553
    0x5385769cUL, 0x3e5e8d76UL, 0xa0000000UL, 0x3fe14687UL, 0x1676dc6bUL,
554
    0x3e571d08UL, 0x20000000UL, 0x3fe13aedUL, 0xa8c41c7fUL, 0xbe598a25UL,
555
    0x60000000UL, 0x3fe12f55UL, 0xc4e1aaf0UL, 0x3e435277UL, 0xa0000000UL,
556
    0x3fe123c0UL, 0x403638e1UL, 0xbe21aa7cUL, 0xc0000000UL, 0x3fe1182eUL,
557
    0x557a092bUL, 0xbdd0116bUL, 0xc0000000UL, 0x3fe10c9fUL, 0x7d779f66UL,
558
    0x3e4a61baUL, 0xc0000000UL, 0x3fe10113UL, 0x2b09c645UL, 0xbe5d586eUL,
559
    0x20000000UL, 0x3fe0ea04UL, 0xea2cad46UL, 0x3e5aa97cUL, 0x20000000UL,
560
    0x3fe0d300UL, 0x23190e54UL, 0x3e50f1a7UL, 0xa0000000UL, 0x3fe0bc07UL,
561
    0x1379a5a6UL, 0xbe51619dUL, 0x60000000UL, 0x3fe0a51aUL, 0x926a3d4aUL,
562
    0x3e5cf019UL, 0xa0000000UL, 0x3fe08e38UL, 0xa8c24358UL, 0x3e35241eUL,
563
    0x20000000UL, 0x3fe07762UL, 0x24317e7aUL, 0x3e512cfaUL, 0x00000000UL,
564
    0x3fe06097UL, 0xfd9cf274UL, 0xbe55bef3UL, 0x00000000UL, 0x3fe049d7UL,
565
    0x3689b49dUL, 0xbe36d26dUL, 0x40000000UL, 0x3fe03322UL, 0xf72ef6c4UL,
566
    0xbe54cd08UL, 0xa0000000UL, 0x3fe01c78UL, 0x23702d2dUL, 0xbe5900bfUL,
567
    0x00000000UL, 0x3fe005daUL, 0x3f59c14cUL, 0x3e57d80bUL, 0x40000000UL,
568
    0x3fdfde8dUL, 0xad67766dUL, 0xbe57fad4UL, 0x40000000UL, 0x3fdfb17cUL,
569
    0x644f4ae7UL, 0x3e1ee43bUL, 0x40000000UL, 0x3fdf8481UL, 0x903234d2UL,
570
    0x3e501a86UL, 0x40000000UL, 0x3fdf579cUL, 0xafe9e509UL, 0xbe267c3eUL,
571
    0x00000000UL, 0x3fdf2acdUL, 0xb7dfda0bUL, 0xbe48149bUL, 0x40000000UL,
572
    0x3fdefe13UL, 0x3b94305eUL, 0x3e5f4ea7UL, 0x80000000UL, 0x3fded16fUL,
573
    0x5d95da61UL, 0xbe55c198UL, 0x00000000UL, 0x3fdea4e1UL, 0x406960c9UL,
574
    0xbdd99a19UL, 0x00000000UL, 0x3fde7868UL, 0xd22f3539UL, 0x3e470c78UL,
575
    0x80000000UL, 0x3fde4c04UL, 0x83eec535UL, 0xbe3e1232UL, 0x40000000UL,
576
    0x3fde1fb6UL, 0x3dfbffcbUL, 0xbe4b7d71UL, 0x40000000UL, 0x3fddf37dUL,
577
    0x7e1be4e0UL, 0xbe5b8f8fUL, 0x40000000UL, 0x3fddc759UL, 0x46dae887UL,
578
    0xbe350458UL, 0x80000000UL, 0x3fdd9b4aUL, 0xed6ecc49UL, 0xbe5f0045UL,
579
    0x80000000UL, 0x3fdd6f50UL, 0x2e9e883cUL, 0x3e2915daUL, 0x80000000UL,
580
    0x3fdd436bUL, 0xf0bccb32UL, 0x3e4a68c9UL, 0x80000000UL, 0x3fdd179bUL,
581
    0x9bbfc779UL, 0xbe54a26aUL, 0x00000000UL, 0x3fdcebe0UL, 0x7cea33abUL,
582
    0x3e43c6b7UL, 0x40000000UL, 0x3fdcc039UL, 0xe740fd06UL, 0x3e5526c2UL,
583
    0x40000000UL, 0x3fdc94a7UL, 0x9eadeb1aUL, 0xbe396d8dUL, 0xc0000000UL,
584
    0x3fdc6929UL, 0xf0a8f95aUL, 0xbe5c0ab2UL, 0x80000000UL, 0x3fdc3dc0UL,
585
    0x6ee2693bUL, 0x3e0992e6UL, 0xc0000000UL, 0x3fdc126bUL, 0x5ac6b581UL,
586
    0xbe2834b6UL, 0x40000000UL, 0x3fdbe72bUL, 0x8cc226ffUL, 0x3e3596a6UL,
587
    0x00000000UL, 0x3fdbbbffUL, 0xf92a74bbUL, 0x3e3c5813UL, 0x00000000UL,
588
    0x3fdb90e7UL, 0x479664c0UL, 0xbe50d644UL, 0x00000000UL, 0x3fdb65e3UL,
589
    0x5004975bUL, 0xbe55258fUL, 0x00000000UL, 0x3fdb3af3UL, 0xe4b23194UL,
590
    0xbe588407UL, 0xc0000000UL, 0x3fdb1016UL, 0xe65d4d0aUL, 0x3e527c26UL,
591
    0x80000000UL, 0x3fdae54eUL, 0x814fddd6UL, 0x3e5962a2UL, 0x40000000UL,
592
    0x3fdaba9aUL, 0xe19d0913UL, 0xbe562f4eUL, 0x80000000UL, 0x3fda8ff9UL,
593
    0x43cfd006UL, 0xbe4cfdebUL, 0x40000000UL, 0x3fda656cUL, 0x686f0a4eUL,
594
    0x3e5e47a8UL, 0xc0000000UL, 0x3fda3af2UL, 0x7200d410UL, 0x3e5e1199UL,
595
    0xc0000000UL, 0x3fda108cUL, 0xabd2266eUL, 0x3e5ee4d1UL, 0x40000000UL,
596
    0x3fd9e63aUL, 0x396f8f2cUL, 0x3e4dbffbUL, 0x00000000UL, 0x3fd9bbfbUL,
597
    0xe32b25ddUL, 0x3e5c3a54UL, 0x40000000UL, 0x3fd991cfUL, 0x431e4035UL,
598
    0xbe457925UL, 0x80000000UL, 0x3fd967b6UL, 0x7bed3dd3UL, 0x3e40c61dUL,
599
    0x00000000UL, 0x3fd93db1UL, 0xd7449365UL, 0x3e306419UL, 0x80000000UL,
600
    0x3fd913beUL, 0x1746e791UL, 0x3e56fcfcUL, 0x40000000UL, 0x3fd8e9dfUL,
601
    0xf3a9028bUL, 0xbe5041b9UL, 0xc0000000UL, 0x3fd8c012UL, 0x56840c50UL,
602
    0xbe26e20aUL, 0x40000000UL, 0x3fd89659UL, 0x19763102UL, 0xbe51f466UL,
603
    0x80000000UL, 0x3fd86cb2UL, 0x7032de7cUL, 0xbe4d298aUL, 0x80000000UL,
604
    0x3fd8431eUL, 0xdeb39fabUL, 0xbe4361ebUL, 0x40000000UL, 0x3fd8199dUL,
605
    0x5d01cbe0UL, 0xbe5425b3UL, 0x80000000UL, 0x3fd7f02eUL, 0x3ce99aa9UL,
606
    0x3e146fa8UL, 0x80000000UL, 0x3fd7c6d2UL, 0xd1a262b9UL, 0xbe5a1a69UL,
607
    0xc0000000UL, 0x3fd79d88UL, 0x8606c236UL, 0x3e423a08UL, 0x80000000UL,
608
    0x3fd77451UL, 0x8fd1e1b7UL, 0x3e5a6a63UL, 0xc0000000UL, 0x3fd74b2cUL,
609
    0xe491456aUL, 0x3e42c1caUL, 0x40000000UL, 0x3fd7221aUL, 0x4499a6d7UL,
610
    0x3e36a69aUL, 0x00000000UL, 0x3fd6f91aUL, 0x5237df94UL, 0xbe0f8f02UL,
611
    0x00000000UL, 0x3fd6d02cUL, 0xb6482c6eUL, 0xbe5abcf7UL, 0x00000000UL,
612
    0x3fd6a750UL, 0x1919fd61UL, 0xbe57ade2UL, 0x00000000UL, 0x3fd67e86UL,
613
    0xaa7a994dUL, 0xbe3f3fbdUL, 0x00000000UL, 0x3fd655ceUL, 0x67db014cUL,
614
    0x3e33c550UL, 0x00000000UL, 0x3fd62d28UL, 0xa82856b7UL, 0xbe1409d1UL,
615
    0xc0000000UL, 0x3fd60493UL, 0x1e6a300dUL, 0x3e55d899UL, 0x80000000UL,
616
    0x3fd5dc11UL, 0x1222bd5cUL, 0xbe35bfc0UL, 0xc0000000UL, 0x3fd5b3a0UL,
617
    0x6e8dc2d3UL, 0x3e5d4d79UL, 0x00000000UL, 0x3fd58b42UL, 0xe0e4ace6UL,
618
    0xbe517303UL, 0x80000000UL, 0x3fd562f4UL, 0xb306e0a8UL, 0x3e5edf0fUL,
619
    0xc0000000UL, 0x3fd53ab8UL, 0x6574bc54UL, 0x3e5ee859UL, 0x80000000UL,
620
    0x3fd5128eUL, 0xea902207UL, 0x3e5f6188UL, 0xc0000000UL, 0x3fd4ea75UL,
621
    0x9f911d79UL, 0x3e511735UL, 0x80000000UL, 0x3fd4c26eUL, 0xf9c77397UL,
622
    0xbe5b1643UL, 0x40000000UL, 0x3fd49a78UL, 0x15fc9258UL, 0x3e479a37UL,
623
    0x80000000UL, 0x3fd47293UL, 0xd5a04dd9UL, 0xbe426e56UL, 0xc0000000UL,
624
    0x3fd44abfUL, 0xe04042f5UL, 0x3e56f7c6UL, 0x40000000UL, 0x3fd422fdUL,
625
    0x1d8bf2c8UL, 0x3e5d8810UL, 0x00000000UL, 0x3fd3fb4cUL, 0x88a8ddeeUL,
626
    0xbe311454UL, 0xc0000000UL, 0x3fd3d3abUL, 0x3e3b5e47UL, 0xbe5d1b72UL,
627
    0x40000000UL, 0x3fd3ac1cUL, 0xc2ab5d59UL, 0x3e31b02bUL, 0xc0000000UL,
628
    0x3fd3849dUL, 0xd4e34b9eUL, 0x3e51cb2fUL, 0x40000000UL, 0x3fd35d30UL,
629
    0x177204fbUL, 0xbe2b8cd7UL, 0x80000000UL, 0x3fd335d3UL, 0xfcd38c82UL,
630
    0xbe4356e1UL, 0x80000000UL, 0x3fd30e87UL, 0x64f54accUL, 0xbe4e6224UL,
631
    0x00000000UL, 0x3fd2e74cUL, 0xaa7975d9UL, 0x3e5dc0feUL, 0x80000000UL,
632
    0x3fd2c021UL, 0x516dab3fUL, 0xbe50ffa3UL, 0x40000000UL, 0x3fd29907UL,
633
    0x2bfb7313UL, 0x3e5674a2UL, 0xc0000000UL, 0x3fd271fdUL, 0x0549fc99UL,
634
    0x3e385d29UL, 0xc0000000UL, 0x3fd24b04UL, 0x55b63073UL, 0xbe500c6dUL,
635
    0x00000000UL, 0x3fd2241cUL, 0x3f91953aUL, 0x3e389977UL, 0xc0000000UL,
636
    0x3fd1fd43UL, 0xa1543f71UL, 0xbe3487abUL, 0xc0000000UL, 0x3fd1d67bUL,
637
    0x4ec8867cUL, 0x3df6a2dcUL, 0x00000000UL, 0x3fd1afc4UL, 0x4328e3bbUL,
638
    0x3e41d9c0UL, 0x80000000UL, 0x3fd1891cUL, 0x2e1cda84UL, 0x3e3bdd87UL,
639
    0x40000000UL, 0x3fd16285UL, 0x4b5331aeUL, 0xbe53128eUL, 0x00000000UL,
640
    0x3fd13bfeUL, 0xb9aec164UL, 0xbe52ac98UL, 0xc0000000UL, 0x3fd11586UL,
641
    0xd91e1316UL, 0xbe350630UL, 0x80000000UL, 0x3fd0ef1fUL, 0x7cacc12cUL,
642
    0x3e3f5219UL, 0x40000000UL, 0x3fd0c8c8UL, 0xbce277b7UL, 0x3e3d30c0UL,
643
    0x00000000UL, 0x3fd0a281UL, 0x2a63447dUL, 0xbe541377UL, 0x80000000UL,
644
    0x3fd07c49UL, 0xfac483b5UL, 0xbe5772ecUL, 0xc0000000UL, 0x3fd05621UL,
645
    0x36b8a570UL, 0xbe4fd4bdUL, 0xc0000000UL, 0x3fd03009UL, 0xbae505f7UL,
646
    0xbe450388UL, 0x80000000UL, 0x3fd00a01UL, 0x3e35aeadUL, 0xbe5430fcUL,
647
    0x80000000UL, 0x3fcfc811UL, 0x707475acUL, 0x3e38806eUL, 0x80000000UL,
648
    0x3fcf7c3fUL, 0xc91817fcUL, 0xbe40cceaUL, 0x80000000UL, 0x3fcf308cUL,
649
    0xae05d5e9UL, 0xbe4919b8UL, 0x80000000UL, 0x3fcee4f8UL, 0xae6cc9e6UL,
650
    0xbe530b94UL, 0x00000000UL, 0x3fce9983UL, 0x1efe3e8eUL, 0x3e57747eUL,
651
    0x00000000UL, 0x3fce4e2dUL, 0xda78d9bfUL, 0xbe59a608UL, 0x00000000UL,
652
    0x3fce02f5UL, 0x8abe2c2eUL, 0x3e4a35adUL, 0x00000000UL, 0x3fcdb7dcUL,
653
    0x1495450dUL, 0xbe0872ccUL, 0x80000000UL, 0x3fcd6ce1UL, 0x86ee0ba0UL,
654
    0xbe4f59a0UL, 0x00000000UL, 0x3fcd2205UL, 0xe81ca888UL, 0x3e5402c3UL,
655
    0x00000000UL, 0x3fccd747UL, 0x3b4424b9UL, 0x3e5dfdc3UL, 0x80000000UL,
656
    0x3fcc8ca7UL, 0xd305b56cUL, 0x3e202da6UL, 0x00000000UL, 0x3fcc4226UL,
657
    0x399a6910UL, 0xbe482a1cUL, 0x80000000UL, 0x3fcbf7c2UL, 0x747f7938UL,
658
    0xbe587372UL, 0x80000000UL, 0x3fcbad7cUL, 0x6fc246a0UL, 0x3e50d83dUL,
659
    0x00000000UL, 0x3fcb6355UL, 0xee9e9be5UL, 0xbe5c35bdUL, 0x80000000UL,
660
    0x3fcb194aUL, 0x8416c0bcUL, 0x3e546d4fUL, 0x00000000UL, 0x3fcacf5eUL,
661
    0x49f7f08fUL, 0x3e56da76UL, 0x00000000UL, 0x3fca858fUL, 0x5dc30de2UL,
662
    0x3e5f390cUL, 0x00000000UL, 0x3fca3bdeUL, 0x950583b6UL, 0xbe5e4169UL,
663
    0x80000000UL, 0x3fc9f249UL, 0x33631553UL, 0x3e52aeb1UL, 0x00000000UL,
664
    0x3fc9a8d3UL, 0xde8795a6UL, 0xbe59a504UL, 0x00000000UL, 0x3fc95f79UL,
665
    0x076bf41eUL, 0x3e5122feUL, 0x80000000UL, 0x3fc9163cUL, 0x2914c8e7UL,
666
    0x3e3dd064UL, 0x00000000UL, 0x3fc8cd1dUL, 0x3a30eca3UL, 0xbe21b4aaUL,
667
    0x80000000UL, 0x3fc8841aUL, 0xb2a96650UL, 0xbe575444UL, 0x80000000UL,
668
    0x3fc83b34UL, 0x2376c0cbUL, 0xbe2a74c7UL, 0x80000000UL, 0x3fc7f26bUL,
669
    0xd8a0b653UL, 0xbe5181b6UL, 0x00000000UL, 0x3fc7a9bfUL, 0x32257882UL,
670
    0xbe4a78b4UL, 0x00000000UL, 0x3fc7612fUL, 0x1eee8bd9UL, 0xbe1bfe9dUL,
671
    0x80000000UL, 0x3fc718bbUL, 0x0c603cc4UL, 0x3e36fdc9UL, 0x80000000UL,
672
    0x3fc6d064UL, 0x3728b8cfUL, 0xbe1e542eUL, 0x80000000UL, 0x3fc68829UL,
673
    0xc79a4067UL, 0x3e5c380fUL, 0x00000000UL, 0x3fc6400bUL, 0xf69eac69UL,
674
    0x3e550a84UL, 0x80000000UL, 0x3fc5f808UL, 0xb7a780a4UL, 0x3e5d9224UL,
675
    0x80000000UL, 0x3fc5b022UL, 0xad9dfb1eUL, 0xbe55242fUL, 0x00000000UL,
676
    0x3fc56858UL, 0x659b18beUL, 0xbe4bfda3UL, 0x80000000UL, 0x3fc520a9UL,
677
    0x66ee3631UL, 0xbe57d769UL, 0x80000000UL, 0x3fc4d916UL, 0x1ec62819UL,
678
    0x3e2427f7UL, 0x80000000UL, 0x3fc4919fUL, 0xdec25369UL, 0xbe435431UL,
679
    0x00000000UL, 0x3fc44a44UL, 0xa8acfc4bUL, 0xbe3c62e8UL, 0x00000000UL,
680
    0x3fc40304UL, 0xcf1d3eabUL, 0xbdfba29fUL, 0x80000000UL, 0x3fc3bbdfUL,
681
    0x79aba3eaUL, 0xbdf1b7c8UL, 0x80000000UL, 0x3fc374d6UL, 0xb8d186daUL,
682
    0xbe5130cfUL, 0x80000000UL, 0x3fc32de8UL, 0x9d74f152UL, 0x3e2285b6UL,
683
    0x00000000UL, 0x3fc2e716UL, 0x50ae7ca9UL, 0xbe503920UL, 0x80000000UL,
684
    0x3fc2a05eUL, 0x6caed92eUL, 0xbe533924UL, 0x00000000UL, 0x3fc259c2UL,
685
    0x9cb5034eUL, 0xbe510e31UL, 0x80000000UL, 0x3fc21340UL, 0x12c4d378UL,
686
    0xbe540b43UL, 0x80000000UL, 0x3fc1ccd9UL, 0xcc418706UL, 0x3e59887aUL,
687
    0x00000000UL, 0x3fc1868eUL, 0x921f4106UL, 0xbe528e67UL, 0x80000000UL,
688
    0x3fc1405cUL, 0x3969441eUL, 0x3e5d8051UL, 0x00000000UL, 0x3fc0fa46UL,
689
    0xd941ef5bUL, 0x3e5f9079UL, 0x80000000UL, 0x3fc0b44aUL, 0x5a3e81b2UL,
690
    0xbe567691UL, 0x00000000UL, 0x3fc06e69UL, 0x9d66afe7UL, 0xbe4d43fbUL,
691
    0x00000000UL, 0x3fc028a2UL, 0x0a92a162UL, 0xbe52f394UL, 0x00000000UL,
692
    0x3fbfc5eaUL, 0x209897e5UL, 0x3e529e37UL, 0x00000000UL, 0x3fbf3ac5UL,
693
    0x8458bd7bUL, 0x3e582831UL, 0x00000000UL, 0x3fbeafd5UL, 0xb8d8b4b8UL,
694
    0xbe486b4aUL, 0x00000000UL, 0x3fbe2518UL, 0xe0a3b7b6UL, 0x3e5bafd2UL,
695
    0x00000000UL, 0x3fbd9a90UL, 0x2bf2710eUL, 0x3e383b2bUL, 0x00000000UL,
696
    0x3fbd103cUL, 0x73eb6ab7UL, 0xbe56d78dUL, 0x00000000UL, 0x3fbc861bUL,
697
    0x32ceaff5UL, 0xbe32dc5aUL, 0x00000000UL, 0x3fbbfc2eUL, 0xbee04cb7UL,
698
    0xbe4a71a4UL, 0x00000000UL, 0x3fbb7274UL, 0x35ae9577UL, 0x3e38142fUL,
699
    0x00000000UL, 0x3fbae8eeUL, 0xcbaddab4UL, 0xbe5490f0UL, 0x00000000UL,
700
    0x3fba5f9aUL, 0x95ce1114UL, 0x3e597c71UL, 0x00000000UL, 0x3fb9d67aUL,
701
    0x6d7c0f78UL, 0x3e3abc2dUL, 0x00000000UL, 0x3fb94d8dUL, 0x2841a782UL,
702
    0xbe566cbcUL, 0x00000000UL, 0x3fb8c4d2UL, 0x6ed429c6UL, 0xbe3cfff9UL,
703
    0x00000000UL, 0x3fb83c4aUL, 0xe4a49fbbUL, 0xbe552964UL, 0x00000000UL,
704
    0x3fb7b3f4UL, 0x2193d81eUL, 0xbe42fa72UL, 0x00000000UL, 0x3fb72bd0UL,
705
    0xdd70c122UL, 0x3e527a8cUL, 0x00000000UL, 0x3fb6a3dfUL, 0x03108a54UL,
706
    0xbe450393UL, 0x00000000UL, 0x3fb61c1fUL, 0x30ff7954UL, 0x3e565840UL,
707
    0x00000000UL, 0x3fb59492UL, 0xdedd460cUL, 0xbe5422b5UL, 0x00000000UL,
708
    0x3fb50d36UL, 0x950f9f45UL, 0xbe5313f6UL, 0x00000000UL, 0x3fb4860bUL,
709
    0x582cdcb1UL, 0x3e506d39UL, 0x00000000UL, 0x3fb3ff12UL, 0x7216d3a6UL,
710
    0x3e4aa719UL, 0x00000000UL, 0x3fb3784aUL, 0x57a423fdUL, 0x3e5a9b9fUL,
711
    0x00000000UL, 0x3fb2f1b4UL, 0x7a138b41UL, 0xbe50b418UL, 0x00000000UL,
712
    0x3fb26b4eUL, 0x2fbfd7eaUL, 0x3e23a53eUL, 0x00000000UL, 0x3fb1e519UL,
713
    0x18913ccbUL, 0x3e465fc1UL, 0x00000000UL, 0x3fb15f15UL, 0x7ea24e21UL,
714
    0x3e042843UL, 0x00000000UL, 0x3fb0d941UL, 0x7c6d9c77UL, 0x3e59f61eUL,
715
    0x00000000UL, 0x3fb0539eUL, 0x114efd44UL, 0x3e4ccab7UL, 0x00000000UL,
716
    0x3faf9c56UL, 0x1777f657UL, 0x3e552f65UL, 0x00000000UL, 0x3fae91d2UL,
717
    0xc317b86aUL, 0xbe5a61e0UL, 0x00000000UL, 0x3fad87acUL, 0xb7664efbUL,
718
    0xbe41f64eUL, 0x00000000UL, 0x3fac7de6UL, 0x5d3d03a9UL, 0x3e0807a0UL,
719
    0x00000000UL, 0x3fab7480UL, 0x743c38ebUL, 0xbe3726e1UL, 0x00000000UL,
720
    0x3faa6b78UL, 0x06a253f1UL, 0x3e5ad636UL, 0x00000000UL, 0x3fa962d0UL,
721
    0xa35f541bUL, 0x3e5a187aUL, 0x00000000UL, 0x3fa85a88UL, 0x4b86e446UL,
722
    0xbe508150UL, 0x00000000UL, 0x3fa7529cUL, 0x2589cacfUL, 0x3e52938aUL,
723
    0x00000000UL, 0x3fa64b10UL, 0xaf6b11f2UL, 0xbe3454cdUL, 0x00000000UL,
724
    0x3fa543e2UL, 0x97506fefUL, 0xbe5fdec5UL, 0x00000000UL, 0x3fa43d10UL,
725
    0xe75f7dd9UL, 0xbe388dd3UL, 0x00000000UL, 0x3fa3369cUL, 0xa4139632UL,
726
    0xbdea5177UL, 0x00000000UL, 0x3fa23086UL, 0x352d6f1eUL, 0xbe565ad6UL,
727
    0x00000000UL, 0x3fa12accUL, 0x77449eb7UL, 0xbe50d5c7UL, 0x00000000UL,
728
    0x3fa0256eUL, 0x7478da78UL, 0x3e404724UL, 0x00000000UL, 0x3f9e40dcUL,
729
    0xf59cef7fUL, 0xbe539d0aUL, 0x00000000UL, 0x3f9c3790UL, 0x1511d43cUL,
730
    0x3e53c2c8UL, 0x00000000UL, 0x3f9a2f00UL, 0x9b8bff3cUL, 0xbe43b3e1UL,
731
    0x00000000UL, 0x3f982724UL, 0xad1e22a5UL, 0x3e46f0bdUL, 0x00000000UL,
732
    0x3f962000UL, 0x130d9356UL, 0x3e475ba0UL, 0x00000000UL, 0x3f941994UL,
733
    0x8f86f883UL, 0xbe513d0bUL, 0x00000000UL, 0x3f9213dcUL, 0x914d0dc8UL,
734
    0xbe534335UL, 0x00000000UL, 0x3f900ed8UL, 0x2d73e5e7UL, 0xbe22ba75UL,
735
    0x00000000UL, 0x3f8c1510UL, 0xc5b7d70eUL, 0x3e599c5dUL, 0x00000000UL,
736
    0x3f880de0UL, 0x8a27857eUL, 0xbe3d28c8UL, 0x00000000UL, 0x3f840810UL,
737
    0xda767328UL, 0x3e531b3dUL, 0x00000000UL, 0x3f8003b0UL, 0x77bacaf3UL,
738
    0xbe5f04e3UL, 0x00000000UL, 0x3f780150UL, 0xdf4b0720UL, 0x3e5a8bffUL,
739
    0x00000000UL, 0x3f6ffc40UL, 0x34c48e71UL, 0xbe3fcd99UL, 0x00000000UL,
740
    0x3f5ff6c0UL, 0x1ad218afUL, 0xbe4c78a7UL, 0x00000000UL, 0x00000000UL,
741
    0x00000000UL, 0x80000000UL
742
};
743

744
ATTRIBUTE_ALIGNED(8) static const juint _log2_pow[] = {
745
    0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL, 0xbfe62e42UL
746
};
747

748
ATTRIBUTE_ALIGNED(8) static const juint _DOUBLE2[] = {
749
    0x00000000UL, 0x40000000UL
750
};
751

752
ATTRIBUTE_ALIGNED(8) static const juint _DOUBLE0[] = {
753
    0x00000000UL, 0x00000000UL
754
};
755

756
ATTRIBUTE_ALIGNED(8) static const juint _DOUBLE0DOT5[] = {
757
    0x00000000UL, 0x3fe00000UL
758
};
759

760
#define __ _masm->
761

762
address StubGenerator::generate_libmPow() {
763
  StubCodeMark mark(this, "StubRoutines", "libmPow");
764
  address start = __ pc();
765

766
  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;
767
  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
768
  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
769
  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, L_2TAG_PACKET_14_0_2, L_2TAG_PACKET_15_0_2;
770
  Label L_2TAG_PACKET_16_0_2, L_2TAG_PACKET_17_0_2, L_2TAG_PACKET_18_0_2, L_2TAG_PACKET_19_0_2;
771
  Label L_2TAG_PACKET_20_0_2, L_2TAG_PACKET_21_0_2, L_2TAG_PACKET_22_0_2, L_2TAG_PACKET_23_0_2;
772
  Label L_2TAG_PACKET_24_0_2, L_2TAG_PACKET_25_0_2, L_2TAG_PACKET_26_0_2, L_2TAG_PACKET_27_0_2;
773
  Label L_2TAG_PACKET_28_0_2, L_2TAG_PACKET_29_0_2, L_2TAG_PACKET_30_0_2, L_2TAG_PACKET_31_0_2;
774
  Label L_2TAG_PACKET_32_0_2, L_2TAG_PACKET_33_0_2, L_2TAG_PACKET_34_0_2, L_2TAG_PACKET_35_0_2;
775
  Label L_2TAG_PACKET_36_0_2, L_2TAG_PACKET_37_0_2, L_2TAG_PACKET_38_0_2, L_2TAG_PACKET_39_0_2;
776
  Label L_2TAG_PACKET_40_0_2, L_2TAG_PACKET_41_0_2, L_2TAG_PACKET_42_0_2, L_2TAG_PACKET_43_0_2;
777
  Label L_2TAG_PACKET_44_0_2, L_2TAG_PACKET_45_0_2, L_2TAG_PACKET_46_0_2, L_2TAG_PACKET_47_0_2;
778
  Label L_2TAG_PACKET_48_0_2, L_2TAG_PACKET_49_0_2, L_2TAG_PACKET_50_0_2, L_2TAG_PACKET_51_0_2;
779
  Label L_2TAG_PACKET_52_0_2, L_2TAG_PACKET_53_0_2, L_2TAG_PACKET_54_0_2, L_2TAG_PACKET_55_0_2;
780
  Label L_2TAG_PACKET_56_0_2;
781
  Label B1_2, B1_3, B1_5;
782
  Label L_POW;
783

784
  address HIGHSIGMASK    = (address)_HIGHSIGMASK;
785
  address LOG2_E         = (address)_LOG2_E;
786
  address coeff          = (address)_coeff_pow;
787
  address L_tbl          = (address)_L_tbl_pow;
788
  address HIGHMASK_Y     = (address)_HIGHMASK_Y;
789
  address T_exp          = (address)_T_exp;
790
  address e_coeff        = (address)_e_coeff;
791
  address coeff_h        = (address)_coeff_h;
792
  address HIGHMASK_LOG_X = (address)_HIGHMASK_LOG_X;
793
  address HALFMASK       = (address)_HALFMASK;
794
  address log2           = (address)_log2_pow;
795
  address DOUBLE2        = (address)_DOUBLE2;
796
  address DOUBLE0        = (address)_DOUBLE0;
797
  address DOUBLE0DOT5    = (address)_DOUBLE0DOT5;
798

799
  __ enter(); // required for proper stackwalking of RuntimeStub frame
800

801
  __ subq(rsp, 40);
802
  __ movsd(Address(rsp, 8), xmm0);
803
  __ movsd(Address(rsp, 16), xmm1);
804

805
  // Special case: pow(x, 2.0) => x * x
806
  __ movdq(r8, xmm1);
807
  __ cmp64(r8, ExternalAddress(DOUBLE2), r9 /*rscratch*/);
808
  __ jccb(Assembler::notEqual, B1_2);
809
  __ mulsd(xmm0, xmm0);
810
  __ jmp(B1_5);
811

812
  // Special case: pow(x, 0.5) => sqrt(x)
813
  __ bind(B1_2);
814
  __ cmp64(r8, ExternalAddress(DOUBLE0DOT5), r9 /*rscratch*/);
815
  __ jccb(Assembler::notEqual, L_POW); // For pow(x, y), check whether y == 0.5
816
  __ movdq(r9, xmm0);
817
  __ cmp64(r9, ExternalAddress(DOUBLE0), r10 /*rscratch*/);
818
  __ jccb(Assembler::less, L_POW); // pow(x, 0.5) => sqrt(x) only for x >= 0.0 or x is +inf/NaN
819
  __ sqrtsd(xmm0, xmm0);
820
  __ jmp(B1_5);
821

822
  __ bind(L_POW);
823
  __ pextrw(rax, xmm0, 3);
824
  __ xorpd(xmm2, xmm2);
825
  __ mov64(r9, 0x3ff0000000000000);
826
  __ movdq(xmm2, r9);
827
  __ movl(r8, 1069088768);
828
  __ movdq(xmm7, r8);
829
  __ xorpd(xmm1, xmm1);
830
  __ mov64(r10, 0x77f0000000000000);
831
  __ movdq(xmm1, r10);
832
  __ movdqu(xmm3, xmm0);
833
  __ movl(rdx, 32752);
834
  __ andl(rdx, rax);
835
  __ subl(rdx, 16368);
836
  __ movl(rcx, rdx);
837
  __ sarl(rdx, 31);
838
  __ addl(rcx, rdx);
839
  __ xorl(rcx, rdx);
840
  __ por(xmm0, xmm2);
841
  __ movdqu(xmm6, ExternalAddress(HIGHSIGMASK), r9 /*rscratch*/);    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
842
  __ psrlq(xmm0, 27);
843
  __ movq(xmm2, ExternalAddress(LOG2_E), r9 /*rscratch*/);    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
844
  __ psrld(xmm0, 2);
845
  __ addl(rcx, 16);
846
  __ bsrl(rcx, rcx);
847
  __ rcpps(xmm0, xmm0);
848
  __ psllq(xmm3, 12);
849
  __ movl(r11, 8192);
850
  __ movdq(xmm4, r11);
851
  __ psrlq(xmm3, 12);
852
  __ subl(rax, 16);
853
  __ cmpl(rax, 32736);
854
  __ jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
855
  __ movl(r8, 0);
856

857
  __ bind(L_2TAG_PACKET_1_0_2);
858
  __ mulss(xmm0, xmm7);
859
  __ movl(rdx, -1);
860
  __ subl(rcx, 4);
861
  __ shll(rdx);
862
  __ shlq(rdx, 32);
863
  __ movdq(xmm5, rdx);
864
  __ por(xmm3, xmm1);
865
  __ subl(rax, 16351);
866
  __ cmpl(rax, 1);
867
  __ jcc(Assembler::belowEqual, L_2TAG_PACKET_2_0_2);
868
  __ paddd(xmm0, xmm4);
869
  __ pand(xmm5, xmm3);
870
  __ movdl(rdx, xmm0);
871
  __ psllq(xmm0, 29);
872

873
  __ bind(L_2TAG_PACKET_3_0_2);
874
  __ subsd(xmm3, xmm5);
875
  __ pand(xmm0, xmm6);
876
  __ subl(rax, 1);
877
  __ sarl(rax, 4);
878
  __ cvtsi2sdl(xmm7, rax);
879
  __ mulpd(xmm5, xmm0);
880

881
  __ bind(L_2TAG_PACKET_4_0_2);
882
  __ mulsd(xmm3, xmm0);
883
  __ movdqu(xmm1, ExternalAddress(coeff), r9 /*rscratch*/);    //0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL
884
  __ lea(r11, ExternalAddress(L_tbl));
885
  __ subsd(xmm5, xmm2);
886
  __ movdqu(xmm4, ExternalAddress(coeff + 16), r9 /*rscratch*/);    //0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL
887
  __ movl(rcx, rax);
888
  __ sarl(rax, 31);
889
  __ addl(rcx, rax);
890
  __ xorl(rax, rcx);
891
  __ addl(rax, 1);
892
  __ bsrl(rax, rax);
893
  __ unpcklpd(xmm5, xmm3);
894
  __ movdqu(xmm6, ExternalAddress(coeff + 32), r9 /*rscratch*/);    //0x518775e3UL, 0x3f9004f2UL, 0xac8349bbUL, 0x3fa76c9bUL
895
  __ addsd(xmm3, xmm5);
896
  __ andl(rdx, 16760832);
897
  __ shrl(rdx, 10);
898
  __ addpd(xmm5, Address(r11, rdx, Address::times_1, -3648));
899
  __ movdqu(xmm0, ExternalAddress(coeff + 48), r9 /*rscratch*/);    //0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL
900
  __ pshufd(xmm2, xmm3, 68);
901
  __ mulsd(xmm3, xmm3);
902
  __ mulpd(xmm1, xmm2);
903
  __ mulpd(xmm4, xmm2);
904
  __ addsd(xmm5, xmm7);
905
  __ mulsd(xmm2, xmm3);
906
  __ addpd(xmm6, xmm1);
907
  __ mulsd(xmm3, xmm3);
908
  __ addpd(xmm0, xmm4);
909
  __ movq(xmm1, Address(rsp, 16));
910
  __ movw(rcx, Address(rsp, 22));
911
  __ pshufd(xmm7, xmm5, 238);
912
  __ movq(xmm4, ExternalAddress(HIGHMASK_Y), r9 /*rscratch*/);    //0x00000000UL, 0xfffffff8UL, 0x00000000UL, 0xffffffffUL
913
  __ mulpd(xmm6, xmm2);
914
  __ pshufd(xmm3, xmm3, 68);
915
  __ mulpd(xmm0, xmm2);
916
  __ shll(rax, 4);
917
  __ subl(rax, 15872);
918
  __ andl(rcx, 32752);
919
  __ addl(rax, rcx);
920
  __ mulpd(xmm3, xmm6);
921
  __ cmpl(rax, 624);
922
  __ jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
923
  __ xorpd(xmm6, xmm6);
924
  __ movl(rdx, 17080);
925
  __ pinsrw(xmm6, rdx, 3);
926
  __ movdqu(xmm2, xmm1);
927
  __ pand(xmm4, xmm1);
928
  __ subsd(xmm1, xmm4);
929
  __ mulsd(xmm4, xmm5);
930
  __ addsd(xmm0, xmm7);
931
  __ mulsd(xmm1, xmm5);
932
  __ movdqu(xmm7, xmm6);
933
  __ addsd(xmm6, xmm4);
934
  __ lea(r11, ExternalAddress(T_exp));
935
  __ addpd(xmm3, xmm0);
936
  __ movdl(rdx, xmm6);
937
  __ subsd(xmm6, xmm7);
938
  __ pshufd(xmm0, xmm3, 238);
939
  __ subsd(xmm4, xmm6);
940
  __ addsd(xmm0, xmm3);
941
  __ movl(rcx, rdx);
942
  __ andl(rdx, 255);
943
  __ addl(rdx, rdx);
944
  __ movdqu(xmm5, Address(r11, rdx, Address::times_8, 0));
945
  __ addsd(xmm4, xmm1);
946
  __ mulsd(xmm2, xmm0);
947
  __ movdqu(xmm7, ExternalAddress(e_coeff),      r9 /*rscratch*/);    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
948
  __ movdqu(xmm3, ExternalAddress(e_coeff + 16), r9 /*rscratch*/);    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
949
  __ shll(rcx, 12);
950
  __ xorl(rcx, r8);
951
  __ andl(rcx, -1048576);
952
  __ movdq(xmm6, rcx);
953
  __ addsd(xmm2, xmm4);
954
  __ mov64(r9, 0x3fe62e42fefa39ef);
955
  __ movdq(xmm1, r9);
956
  __ pshufd(xmm0, xmm2, 68);
957
  __ pshufd(xmm4, xmm2, 68);
958
  __ mulsd(xmm1, xmm2);
959
  __ pshufd(xmm6, xmm6, 17);
960
  __ mulpd(xmm0, xmm0);
961
  __ mulpd(xmm7, xmm4);
962
  __ paddd(xmm5, xmm6);
963
  __ mulsd(xmm1, xmm5);
964
  __ pshufd(xmm6, xmm5, 238);
965
  __ mulsd(xmm0, xmm0);
966
  __ addpd(xmm3, xmm7);
967
  __ addsd(xmm1, xmm6);
968
  __ mulpd(xmm0, xmm3);
969
  __ pshufd(xmm3, xmm0, 238);
970
  __ mulsd(xmm0, xmm5);
971
  __ mulsd(xmm3, xmm5);
972
  __ addsd(xmm0, xmm1);
973
  __ addsd(xmm0, xmm3);
974
  __ addsd(xmm0, xmm5);
975
  __ jmp(B1_5);
976

977
  __ bind(L_2TAG_PACKET_0_0_2);
978
  __ addl(rax, 16);
979
  __ movl(rdx, 32752);
980
  __ andl(rdx, rax);
981
  __ cmpl(rdx, 32752);
982
  __ jcc(Assembler::equal, L_2TAG_PACKET_6_0_2);
983
  __ testl(rax, 32768);
984
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_7_0_2);
985

986
  __ bind(L_2TAG_PACKET_8_0_2);
987
  __ movq(xmm0, Address(rsp, 8));
988
  __ movq(xmm3, Address(rsp, 8));
989
  __ movdl(rdx, xmm3);
990
  __ psrlq(xmm3, 32);
991
  __ movdl(rcx, xmm3);
992
  __ orl(rdx, rcx);
993
  __ cmpl(rdx, 0);
994
  __ jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
995
  __ xorpd(xmm3, xmm3);
996
  __ movl(rax, 18416);
997
  __ pinsrw(xmm3, rax, 3);
998
  __ mulsd(xmm0, xmm3);
999
  __ xorpd(xmm2, xmm2);
1000
  __ movl(rax, 16368);
1001
  __ pinsrw(xmm2, rax, 3);
1002
  __ movdqu(xmm3, xmm0);
1003
  __ pextrw(rax, xmm0, 3);
1004
  __ por(xmm0, xmm2);
1005
  __ movl(rcx, 18416);
1006
  __ psrlq(xmm0, 27);
1007
  __ movq(xmm2, ExternalAddress(LOG2_E), r9 /*rscratch*/);    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
1008
  __ psrld(xmm0, 2);
1009
  __ rcpps(xmm0, xmm0);
1010
  __ psllq(xmm3, 12);
1011
  __ movdqu(xmm6, ExternalAddress(HIGHSIGMASK), r9 /*rscratch*/);    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
1012
  __ psrlq(xmm3, 12);
1013
  __ mulss(xmm0, xmm7);
1014
  __ movl(rdx, -1024);
1015
  __ movdl(xmm5, rdx);
1016
  __ por(xmm3, xmm1);
1017
  __ paddd(xmm0, xmm4);
1018
  __ psllq(xmm5, 32);
1019
  __ movdl(rdx, xmm0);
1020
  __ psllq(xmm0, 29);
1021
  __ pand(xmm5, xmm3);
1022
  __ movl(r8, 0);
1023
  __ pand(xmm0, xmm6);
1024
  __ subsd(xmm3, xmm5);
1025
  __ andl(rax, 32752);
1026
  __ subl(rax, 18416);
1027
  __ sarl(rax, 4);
1028
  __ cvtsi2sdl(xmm7, rax);
1029
  __ mulpd(xmm5, xmm0);
1030
  __ jmp(L_2TAG_PACKET_4_0_2);
1031

1032
  __ bind(L_2TAG_PACKET_10_0_2);
1033
  __ movq(xmm0, Address(rsp, 8));
1034
  __ movq(xmm3, Address(rsp, 8));
1035
  __ movdl(rdx, xmm3);
1036
  __ psrlq(xmm3, 32);
1037
  __ movdl(rcx, xmm3);
1038
  __ orl(rdx, rcx);
1039
  __ cmpl(rdx, 0);
1040
  __ jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
1041
  __ xorpd(xmm3, xmm3);
1042
  __ movl(rax, 18416);
1043
  __ pinsrw(xmm3, rax, 3);
1044
  __ mulsd(xmm0, xmm3);
1045
  __ xorpd(xmm2, xmm2);
1046
  __ movl(rax, 16368);
1047
  __ pinsrw(xmm2, rax, 3);
1048
  __ movdqu(xmm3, xmm0);
1049
  __ pextrw(rax, xmm0, 3);
1050
  __ por(xmm0, xmm2);
1051
  __ movl(rcx, 18416);
1052
  __ psrlq(xmm0, 27);
1053
  __ movq(xmm2, ExternalAddress(LOG2_E), r9 /*rscratch*/);    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
1054
  __ psrld(xmm0, 2);
1055
  __ rcpps(xmm0, xmm0);
1056
  __ psllq(xmm3, 12);
1057
  __ movdqu(xmm6, ExternalAddress(HIGHSIGMASK), r9 /*rscratch*/);    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
1058
  __ psrlq(xmm3, 12);
1059
  __ mulss(xmm0, xmm7);
1060
  __ movl(rdx, -1024);
1061
  __ movdl(xmm5, rdx);
1062
  __ por(xmm3, xmm1);
1063
  __ paddd(xmm0, xmm4);
1064
  __ psllq(xmm5, 32);
1065
  __ movdl(rdx, xmm0);
1066
  __ psllq(xmm0, 29);
1067
  __ pand(xmm5, xmm3);
1068
  __ movl(r8, INT_MIN);
1069
  __ pand(xmm0, xmm6);
1070
  __ subsd(xmm3, xmm5);
1071
  __ andl(rax, 32752);
1072
  __ subl(rax, 18416);
1073
  __ sarl(rax, 4);
1074
  __ cvtsi2sdl(xmm7, rax);
1075
  __ mulpd(xmm5, xmm0);
1076
  __ jmp(L_2TAG_PACKET_4_0_2);
1077

1078
  __ bind(L_2TAG_PACKET_5_0_2);
1079
  __ cmpl(rax, 0);
1080
  __ jcc(Assembler::less, L_2TAG_PACKET_11_0_2);
1081
  __ cmpl(rax, 752);
1082
  __ jcc(Assembler::aboveEqual, L_2TAG_PACKET_12_0_2);
1083
  __ addsd(xmm0, xmm7);
1084
  __ movq(xmm2, ExternalAddress(HALFMASK), r9 /*rscratch*/);    //0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL
1085
  __ addpd(xmm3, xmm0);
1086
  __ xorpd(xmm6, xmm6);
1087
  __ movl(rax, 17080);
1088
  __ pinsrw(xmm6, rax, 3);
1089
  __ pshufd(xmm0, xmm3, 238);
1090
  __ addsd(xmm0, xmm3);
1091
  __ movdqu(xmm3, xmm5);
1092
  __ addsd(xmm5, xmm0);
1093
  __ movdqu(xmm4, xmm2);
1094
  __ subsd(xmm3, xmm5);
1095
  __ movdqu(xmm7, xmm5);
1096
  __ pand(xmm5, xmm2);
1097
  __ movdqu(xmm2, xmm1);
1098
  __ pand(xmm4, xmm1);
1099
  __ subsd(xmm7, xmm5);
1100
  __ addsd(xmm0, xmm3);
1101
  __ subsd(xmm1, xmm4);
1102
  __ mulsd(xmm4, xmm5);
1103
  __ addsd(xmm0, xmm7);
1104
  __ mulsd(xmm2, xmm0);
1105
  __ movdqu(xmm7, xmm6);
1106
  __ mulsd(xmm1, xmm5);
1107
  __ addsd(xmm6, xmm4);
1108
  __ movdl(rax, xmm6);
1109
  __ subsd(xmm6, xmm7);
1110
  __ lea(r11, ExternalAddress(T_exp));
1111
  __ addsd(xmm2, xmm1);
1112
  __ movdqu(xmm7, ExternalAddress(e_coeff +  0), r9 /*rscratch*/);    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
1113
  __ movdqu(xmm3, ExternalAddress(e_coeff + 16), r9 /*rscratch*/);    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
1114
  __ subsd(xmm4, xmm6);
1115
  __ pextrw(rdx, xmm6, 3);
1116
  __ movl(rcx, rax);
1117
  __ andl(rax, 255);
1118
  __ addl(rax, rax);
1119
  __ movdqu(xmm5, Address(r11, rax, Address::times_8, 0));
1120
  __ addsd(xmm2, xmm4);
1121
  __ sarl(rcx, 8);
1122
  __ movl(rax, rcx);
1123
  __ sarl(rcx, 1);
1124
  __ subl(rax, rcx);
1125
  __ shll(rcx, 20);
1126
  __ xorl(rcx, r8);
1127
  __ movdl(xmm6, rcx);
1128
  __ movq(xmm1, ExternalAddress(e_coeff + 32), r9 /*rscratch*/);    //0xfefa39efUL, 0x3fe62e42UL, 0x00000000UL, 0x00000000UL
1129
  __ andl(rdx, 32767);
1130
  __ cmpl(rdx, 16529);
1131
  __ jcc(Assembler::above, L_2TAG_PACKET_12_0_2);
1132
  __ pshufd(xmm0, xmm2, 68);
1133
  __ pshufd(xmm4, xmm2, 68);
1134
  __ mulpd(xmm0, xmm0);
1135
  __ mulpd(xmm7, xmm4);
1136
  __ pshufd(xmm6, xmm6, 17);
1137
  __ mulsd(xmm1, xmm2);
1138
  __ mulsd(xmm0, xmm0);
1139
  __ paddd(xmm5, xmm6);
1140
  __ addpd(xmm3, xmm7);
1141
  __ mulsd(xmm1, xmm5);
1142
  __ pshufd(xmm6, xmm5, 238);
1143
  __ mulpd(xmm0, xmm3);
1144
  __ addsd(xmm1, xmm6);
1145
  __ pshufd(xmm3, xmm0, 238);
1146
  __ mulsd(xmm0, xmm5);
1147
  __ mulsd(xmm3, xmm5);
1148
  __ shll(rax, 4);
1149
  __ xorpd(xmm4, xmm4);
1150
  __ addl(rax, 16368);
1151
  __ pinsrw(xmm4, rax, 3);
1152
  __ addsd(xmm0, xmm1);
1153
  __ addsd(xmm0, xmm3);
1154
  __ movdqu(xmm1, xmm0);
1155
  __ addsd(xmm0, xmm5);
1156
  __ mulsd(xmm0, xmm4);
1157
  __ pextrw(rax, xmm0, 3);
1158
  __ andl(rax, 32752);
1159
  __ jcc(Assembler::equal, L_2TAG_PACKET_13_0_2);
1160
  __ cmpl(rax, 32752);
1161
  __ jcc(Assembler::equal, L_2TAG_PACKET_14_0_2);
1162
  __ jmp(B1_5);
1163

1164
  __ bind(L_2TAG_PACKET_6_0_2);
1165
  __ movq(xmm1, Address(rsp, 16));
1166
  __ movq(xmm0, Address(rsp, 8));
1167
  __ movdqu(xmm2, xmm0);
1168
  __ movdl(rax, xmm2);
1169
  __ psrlq(xmm2, 20);
1170
  __ movdl(rdx, xmm2);
1171
  __ orl(rax, rdx);
1172
  __ jcc(Assembler::equal, L_2TAG_PACKET_15_0_2);
1173
  __ movdl(rax, xmm1);
1174
  __ psrlq(xmm1, 32);
1175
  __ movdl(rdx, xmm1);
1176
  __ movl(rcx, rdx);
1177
  __ addl(rdx, rdx);
1178
  __ orl(rax, rdx);
1179
  __ jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
1180
  __ addsd(xmm0, xmm0);
1181
  __ jmp(B1_5);
1182

1183
  __ bind(L_2TAG_PACKET_16_0_2);
1184
  __ xorpd(xmm0, xmm0);
1185
  __ movl(rax, 16368);
1186
  __ pinsrw(xmm0, rax, 3);
1187
  __ movl(Address(rsp, 0), 29);
1188
  __ jmp(L_2TAG_PACKET_17_0_2);
1189

1190
  __ bind(L_2TAG_PACKET_18_0_2);
1191
  __ movq(xmm0, Address(rsp, 16));
1192
  __ addpd(xmm0, xmm0);
1193
  __ jmp(B1_5);
1194

1195
  __ bind(L_2TAG_PACKET_15_0_2);
1196
  __ movdl(rax, xmm1);
1197
  __ movdqu(xmm2, xmm1);
1198
  __ psrlq(xmm1, 32);
1199
  __ movdl(rdx, xmm1);
1200
  __ movl(rcx, rdx);
1201
  __ addl(rdx, rdx);
1202
  __ orl(rax, rdx);
1203
  __ jcc(Assembler::equal, L_2TAG_PACKET_19_0_2);
1204
  __ pextrw(rax, xmm2, 3);
1205
  __ andl(rax, 32752);
1206
  __ cmpl(rax, 32752);
1207
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_20_0_2);
1208
  __ movdl(rax, xmm2);
1209
  __ psrlq(xmm2, 20);
1210
  __ movdl(rdx, xmm2);
1211
  __ orl(rax, rdx);
1212
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
1213

1214
  __ bind(L_2TAG_PACKET_20_0_2);
1215
  __ pextrw(rax, xmm0, 3);
1216
  __ testl(rax, 32768);
1217
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_21_0_2);
1218
  __ testl(rcx, INT_MIN);
1219
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
1220
  __ jmp(B1_5);
1221

1222
  __ bind(L_2TAG_PACKET_23_0_2);
1223
  __ movq(xmm1, Address(rsp, 16));
1224
  __ movdl(rax, xmm1);
1225
  __ testl(rax, 1);
1226
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
1227
  __ testl(rax, 2);
1228
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_25_0_2);
1229
  __ jmp(L_2TAG_PACKET_24_0_2);
1230

1231
  __ bind(L_2TAG_PACKET_21_0_2);
1232
  __ shrl(rcx, 20);
1233
  __ andl(rcx, 2047);
1234
  __ cmpl(rcx, 1075);
1235
  __ jcc(Assembler::above, L_2TAG_PACKET_24_0_2);
1236
  __ jcc(Assembler::equal, L_2TAG_PACKET_26_0_2);
1237
  __ cmpl(rcx, 1074);
1238
  __ jcc(Assembler::above, L_2TAG_PACKET_23_0_2);
1239
  __ cmpl(rcx, 1023);
1240
  __ jcc(Assembler::below, L_2TAG_PACKET_24_0_2);
1241
  __ movq(xmm1, Address(rsp, 16));
1242
  __ movl(rax, 17208);
1243
  __ xorpd(xmm3, xmm3);
1244
  __ pinsrw(xmm3, rax, 3);
1245
  __ movdqu(xmm4, xmm3);
1246
  __ addsd(xmm3, xmm1);
1247
  __ subsd(xmm4, xmm3);
1248
  __ addsd(xmm1, xmm4);
1249
  __ pextrw(rax, xmm1, 3);
1250
  __ andl(rax, 32752);
1251
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
1252
  __ movdl(rax, xmm3);
1253
  __ andl(rax, 1);
1254
  __ jcc(Assembler::equal, L_2TAG_PACKET_24_0_2);
1255

1256
  __ bind(L_2TAG_PACKET_25_0_2);
1257
  __ movq(xmm1, Address(rsp, 16));
1258
  __ pextrw(rax, xmm1, 3);
1259
  __ andl(rax, 32768);
1260
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_27_0_2);
1261
  __ jmp(B1_5);
1262

1263
  __ bind(L_2TAG_PACKET_27_0_2);
1264
  __ xorpd(xmm0, xmm0);
1265
  __ movl(rax, 32768);
1266
  __ pinsrw(xmm0, rax, 3);
1267
  __ jmp(B1_5);
1268

1269
  __ bind(L_2TAG_PACKET_24_0_2);
1270
  __ movq(xmm1, Address(rsp, 16));
1271
  __ pextrw(rax, xmm1, 3);
1272
  __ andl(rax, 32768);
1273
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
1274
  __ xorpd(xmm0, xmm0);
1275
  __ movl(rax, 32752);
1276
  __ pinsrw(xmm0, rax, 3);
1277
  __ jmp(B1_5);
1278

1279
  __ bind(L_2TAG_PACKET_26_0_2);
1280
  __ movq(xmm1, Address(rsp, 16));
1281
  __ movdl(rax, xmm1);
1282
  __ andl(rax, 1);
1283
  __ jcc(Assembler::equal, L_2TAG_PACKET_24_0_2);
1284
  __ jmp(L_2TAG_PACKET_25_0_2);
1285

1286
  __ bind(L_2TAG_PACKET_28_0_2);
1287
  __ movdl(rax, xmm1);
1288
  __ psrlq(xmm1, 20);
1289
  __ movdl(rdx, xmm1);
1290
  __ orl(rax, rdx);
1291
  __ jcc(Assembler::equal, L_2TAG_PACKET_29_0_2);
1292
  __ movq(xmm0, Address(rsp, 16));
1293
  __ addsd(xmm0, xmm0);
1294
  __ jmp(B1_5);
1295

1296
  __ bind(L_2TAG_PACKET_29_0_2);
1297
  __ movq(xmm0, Address(rsp, 8));
1298
  __ pextrw(rax, xmm0, 3);
1299
  __ cmpl(rax, 49136);
1300
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_30_0_2);
1301
  __ movdl(rcx, xmm0);
1302
  __ psrlq(xmm0, 20);
1303
  __ movdl(rdx, xmm0);
1304
  __ orl(rcx, rdx);
1305
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_30_0_2);
1306
  __ xorpd(xmm0, xmm0);
1307
  __ movl(rax, 32760);
1308
  __ pinsrw(xmm0, rax, 3);
1309
  __ jmp(B1_5);
1310

1311
  __ bind(L_2TAG_PACKET_30_0_2);
1312
  __ movq(xmm1, Address(rsp, 16));
1313
  __ andl(rax, 32752);
1314
  __ subl(rax, 16368);
1315
  __ pextrw(rdx, xmm1, 3);
1316
  __ xorpd(xmm0, xmm0);
1317
  __ xorl(rax, rdx);
1318
  __ andl(rax, 32768);
1319
  __ jcc(Assembler::equal, L_2TAG_PACKET_31_0_2);
1320
  __ jmp(B1_5);
1321

1322
  __ bind(L_2TAG_PACKET_31_0_2);
1323
  __ movl(rcx, 32752);
1324
  __ pinsrw(xmm0, rcx, 3);
1325
  __ jmp(B1_5);
1326

1327
  __ bind(L_2TAG_PACKET_32_0_2);
1328
  __ movdl(rax, xmm1);
1329
  __ cmpl(rdx, 17184);
1330
  __ jcc(Assembler::above, L_2TAG_PACKET_33_0_2);
1331
  __ testl(rax, 1);
1332
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
1333
  __ testl(rax, 2);
1334
  __ jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
1335
  __ jmp(L_2TAG_PACKET_36_0_2);
1336

1337
  __ bind(L_2TAG_PACKET_33_0_2);
1338
  __ testl(rax, 1);
1339
  __ jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
1340
  __ jmp(L_2TAG_PACKET_36_0_2);
1341

1342
  __ bind(L_2TAG_PACKET_7_0_2);
1343
  __ movq(xmm2, Address(rsp, 8));
1344
  __ movdl(rax, xmm2);
1345
  __ psrlq(xmm2, 31);
1346
  __ movdl(rcx, xmm2);
1347
  __ orl(rax, rcx);
1348
  __ jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
1349
  __ movq(xmm1, Address(rsp, 16));
1350
  __ pextrw(rdx, xmm1, 3);
1351
  __ movdl(rax, xmm1);
1352
  __ movdqu(xmm2, xmm1);
1353
  __ psrlq(xmm2, 32);
1354
  __ movdl(rcx, xmm2);
1355
  __ addl(rcx, rcx);
1356
  __ orl(rcx, rax);
1357
  __ jcc(Assembler::equal, L_2TAG_PACKET_37_0_2);
1358
  __ andl(rdx, 32752);
1359
  __ cmpl(rdx, 32752);
1360
  __ jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
1361
  __ cmpl(rdx, 17200);
1362
  __ jcc(Assembler::above, L_2TAG_PACKET_35_0_2);
1363
  __ cmpl(rdx, 17184);
1364
  __ jcc(Assembler::aboveEqual, L_2TAG_PACKET_32_0_2);
1365
  __ cmpl(rdx, 16368);
1366
  __ jcc(Assembler::below, L_2TAG_PACKET_34_0_2);
1367
  __ movl(rax, 17208);
1368
  __ xorpd(xmm2, xmm2);
1369
  __ pinsrw(xmm2, rax, 3);
1370
  __ movdqu(xmm4, xmm2);
1371
  __ addsd(xmm2, xmm1);
1372
  __ subsd(xmm4, xmm2);
1373
  __ addsd(xmm1, xmm4);
1374
  __ pextrw(rax, xmm1, 3);
1375
  __ andl(rax, 32767);
1376
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
1377
  __ movdl(rax, xmm2);
1378
  __ andl(rax, 1);
1379
  __ jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
1380

1381
  __ bind(L_2TAG_PACKET_36_0_2);
1382
  __ xorpd(xmm1, xmm1);
1383
  __ movl(rdx, 30704);
1384
  __ pinsrw(xmm1, rdx, 3);
1385
  __ movq(xmm2, ExternalAddress(LOG2_E), r9 /*rscratch*/);    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
1386
  __ movq(xmm4, Address(rsp, 8));
1387
  __ pextrw(rax, xmm4, 3);
1388
  __ movl(rdx, 8192);
1389
  __ movdl(xmm4, rdx);
1390
  __ andl(rax, 32767);
1391
  __ subl(rax, 16);
1392
  __ jcc(Assembler::less, L_2TAG_PACKET_10_0_2);
1393
  __ movl(rdx, rax);
1394
  __ andl(rdx, 32752);
1395
  __ subl(rdx, 16368);
1396
  __ movl(rcx, rdx);
1397
  __ sarl(rdx, 31);
1398
  __ addl(rcx, rdx);
1399
  __ xorl(rcx, rdx);
1400
  __ addl(rcx, 16);
1401
  __ bsrl(rcx, rcx);
1402
  __ movl(r8, INT_MIN);
1403
  __ jmp(L_2TAG_PACKET_1_0_2);
1404

1405
  __ bind(L_2TAG_PACKET_34_0_2);
1406
  __ xorpd(xmm1, xmm1);
1407
  __ movl(rax, 32752);
1408
  __ pinsrw(xmm1, rax, 3);
1409
  __ xorpd(xmm0, xmm0);
1410
  __ mulsd(xmm0, xmm1);
1411
  __ movl(Address(rsp, 0), 28);
1412
  __ jmp(L_2TAG_PACKET_17_0_2);
1413

1414
  __ bind(L_2TAG_PACKET_35_0_2);
1415
  __ xorpd(xmm1, xmm1);
1416
  __ movl(rdx, 30704);
1417
  __ pinsrw(xmm1, rdx, 3);
1418
  __ movq(xmm2, ExternalAddress(LOG2_E), r9 /*rscratch*/);    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
1419
  __ movq(xmm4, Address(rsp, 8));
1420
  __ pextrw(rax, xmm4, 3);
1421
  __ movl(rdx, 8192);
1422
  __ movdl(xmm4, rdx);
1423
  __ andl(rax, 32767);
1424
  __ subl(rax, 16);
1425
  __ jcc(Assembler::less, L_2TAG_PACKET_8_0_2);
1426
  __ movl(rdx, rax);
1427
  __ andl(rdx, 32752);
1428
  __ subl(rdx, 16368);
1429
  __ movl(rcx, rdx);
1430
  __ sarl(rdx, 31);
1431
  __ addl(rcx, rdx);
1432
  __ xorl(rcx, rdx);
1433
  __ addl(rcx, 16);
1434
  __ bsrl(rcx, rcx);
1435
  __ movl(r8, 0);
1436
  __ jmp(L_2TAG_PACKET_1_0_2);
1437

1438
  __ bind(L_2TAG_PACKET_19_0_2);
1439
  __ xorpd(xmm0, xmm0);
1440
  __ movl(rax, 16368);
1441
  __ pinsrw(xmm0, rax, 3);
1442
  __ jmp(B1_5);
1443

1444
  __ bind(L_2TAG_PACKET_22_0_2);
1445
  __ xorpd(xmm0, xmm0);
1446
  __ jmp(B1_5);
1447

1448
  __ bind(L_2TAG_PACKET_11_0_2);
1449
  __ addl(rax, 384);
1450
  __ cmpl(rax, 0);
1451
  __ jcc(Assembler::less, L_2TAG_PACKET_38_0_2);
1452
  __ mulsd(xmm5, xmm1);
1453
  __ addsd(xmm0, xmm7);
1454
  __ shrl(r8, 31);
1455
  __ addpd(xmm3, xmm0);
1456
  __ pshufd(xmm0, xmm3, 238);
1457
  __ addsd(xmm3, xmm0);
1458
  __ lea(r11, ExternalAddress(log2));    //0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL, 0xbfe62e42UL
1459
  __ movq(xmm4, Address(r11, r8, Address::times_8, 0));
1460
  __ mulsd(xmm1, xmm3);
1461
  __ xorpd(xmm0, xmm0);
1462
  __ movl(rax, 16368);
1463
  __ shll(r8, 15);
1464
  __ orl(rax, r8);
1465
  __ pinsrw(xmm0, rax, 3);
1466
  __ addsd(xmm5, xmm1);
1467
  __ mulsd(xmm5, xmm4);
1468
  __ addsd(xmm0, xmm5);
1469
  __ jmp(B1_5);
1470

1471
  __ bind(L_2TAG_PACKET_38_0_2);
1472

1473
  __ bind(L_2TAG_PACKET_37_0_2);
1474
  __ xorpd(xmm0, xmm0);
1475
  __ movl(rax, 16368);
1476
  __ pinsrw(xmm0, rax, 3);
1477
  __ jmp(B1_5);
1478

1479
  __ bind(L_2TAG_PACKET_39_0_2);
1480
  __ xorpd(xmm0, xmm0);
1481
  __ movl(rax, 16368);
1482
  __ pinsrw(xmm0, rax, 3);
1483
  __ movl(Address(rsp, 0), 26);
1484
  __ jmp(L_2TAG_PACKET_17_0_2);
1485

1486
  __ bind(L_2TAG_PACKET_9_0_2);
1487
  __ movq(xmm1, Address(rsp, 16));
1488
  __ movdqu(xmm2, xmm1);
1489
  __ pextrw(rax, xmm1, 3);
1490
  __ andl(rax, 32752);
1491
  __ cmpl(rax, 32752);
1492
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_40_0_2);
1493
  __ movdl(rax, xmm2);
1494
  __ psrlq(xmm2, 20);
1495
  __ movdl(rdx, xmm2);
1496
  __ orl(rax, rdx);
1497
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
1498

1499
  __ bind(L_2TAG_PACKET_40_0_2);
1500
  __ movdl(rax, xmm1);
1501
  __ psrlq(xmm1, 32);
1502
  __ movdl(rdx, xmm1);
1503
  __ movl(rcx, rdx);
1504
  __ addl(rdx, rdx);
1505
  __ orl(rax, rdx);
1506
  __ jcc(Assembler::equal, L_2TAG_PACKET_39_0_2);
1507
  __ shrl(rdx, 21);
1508
  __ cmpl(rdx, 1075);
1509
  __ jcc(Assembler::above, L_2TAG_PACKET_41_0_2);
1510
  __ jcc(Assembler::equal, L_2TAG_PACKET_42_0_2);
1511
  __ cmpl(rdx, 1023);
1512
  __ jcc(Assembler::below, L_2TAG_PACKET_41_0_2);
1513
  __ movq(xmm1, Address(rsp, 16));
1514
  __ movl(rax, 17208);
1515
  __ xorpd(xmm3, xmm3);
1516
  __ pinsrw(xmm3, rax, 3);
1517
  __ movdqu(xmm4, xmm3);
1518
  __ addsd(xmm3, xmm1);
1519
  __ subsd(xmm4, xmm3);
1520
  __ addsd(xmm1, xmm4);
1521
  __ pextrw(rax, xmm1, 3);
1522
  __ andl(rax, 32752);
1523
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_41_0_2);
1524
  __ movdl(rax, xmm3);
1525
  __ andl(rax, 1);
1526
  __ jcc(Assembler::equal, L_2TAG_PACKET_41_0_2);
1527

1528
  __ bind(L_2TAG_PACKET_43_0_2);
1529
  __ movq(xmm0, Address(rsp, 8));
1530
  __ testl(rcx, INT_MIN);
1531
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_44_0_2);
1532
  __ jmp(B1_5);
1533

1534
  __ bind(L_2TAG_PACKET_42_0_2);
1535
  __ movq(xmm1, Address(rsp, 16));
1536
  __ movdl(rax, xmm1);
1537
  __ testl(rax, 1);
1538
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_43_0_2);
1539

1540
  __ bind(L_2TAG_PACKET_41_0_2);
1541
  __ testl(rcx, INT_MIN);
1542
  __ jcc(Assembler::equal, L_2TAG_PACKET_22_0_2);
1543
  __ xorpd(xmm0, xmm0);
1544

1545
  __ bind(L_2TAG_PACKET_44_0_2);
1546
  __ movl(rax, 16368);
1547
  __ xorpd(xmm1, xmm1);
1548
  __ pinsrw(xmm1, rax, 3);
1549
  __ divsd(xmm1, xmm0);
1550
  __ movdqu(xmm0, xmm1);
1551
  __ movl(Address(rsp, 0), 27);
1552
  __ jmp(L_2TAG_PACKET_17_0_2);
1553

1554
  __ bind(L_2TAG_PACKET_12_0_2);
1555
  __ movq(xmm2, Address(rsp, 8));
1556
  __ movq(xmm6, Address(rsp, 16));
1557
  __ pextrw(rax, xmm2, 3);
1558
  __ pextrw(rdx, xmm6, 3);
1559
  __ movl(rcx, 32752);
1560
  __ andl(rcx, rdx);
1561
  __ cmpl(rcx, 32752);
1562
  __ jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
1563
  __ andl(rax, 32752);
1564
  __ subl(rax, 16368);
1565
  __ xorl(rdx, rax);
1566
  __ testl(rdx, 32768);
1567
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_46_0_2);
1568

1569
  __ bind(L_2TAG_PACKET_47_0_2);
1570
  __ movl(rax, 32736);
1571
  __ pinsrw(xmm0, rax, 3);
1572
  __ shrl(r8, 16);
1573
  __ orl(rax, r8);
1574
  __ pinsrw(xmm1, rax, 3);
1575
  __ mulsd(xmm0, xmm1);
1576

1577
  __ bind(L_2TAG_PACKET_14_0_2);
1578
  __ movl(Address(rsp, 0), 24);
1579
  __ jmp(L_2TAG_PACKET_17_0_2);
1580

1581
  __ bind(L_2TAG_PACKET_46_0_2);
1582
  __ movl(rax, 16);
1583
  __ pinsrw(xmm0, rax, 3);
1584
  __ mulsd(xmm0, xmm0);
1585
  __ testl(r8, INT_MIN);
1586
  __ jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
1587
  __ mov64(r9, 0x8000000000000000);
1588
  __ movdq(xmm2, r9);
1589
  __ xorpd(xmm0, xmm2);
1590

1591
  __ bind(L_2TAG_PACKET_48_0_2);
1592
  __ movl(Address(rsp, 0), 25);
1593
  __ jmp(L_2TAG_PACKET_17_0_2);
1594

1595
  __ bind(L_2TAG_PACKET_13_0_2);
1596
  __ pextrw(rcx, xmm5, 3);
1597
  __ pextrw(rdx, xmm4, 3);
1598
  __ movl(rax, -1);
1599
  __ andl(rcx, 32752);
1600
  __ subl(rcx, 16368);
1601
  __ andl(rdx, 32752);
1602
  __ addl(rdx, rcx);
1603
  __ movl(rcx, -31);
1604
  __ sarl(rdx, 4);
1605
  __ subl(rcx, rdx);
1606
  __ jcc(Assembler::lessEqual, L_2TAG_PACKET_49_0_2);
1607
  __ cmpl(rcx, 20);
1608
  __ jcc(Assembler::above, L_2TAG_PACKET_50_0_2);
1609
  __ shll(rax);
1610

1611
  __ bind(L_2TAG_PACKET_49_0_2);
1612
  __ movdl(xmm0, rax);
1613
  __ psllq(xmm0, 32);
1614
  __ pand(xmm0, xmm5);
1615
  __ subsd(xmm5, xmm0);
1616
  __ addsd(xmm5, xmm1);
1617
  __ mulsd(xmm0, xmm4);
1618
  __ mulsd(xmm5, xmm4);
1619
  __ addsd(xmm0, xmm5);
1620

1621
  __ bind(L_2TAG_PACKET_50_0_2);
1622
  __ jmp(L_2TAG_PACKET_48_0_2);
1623

1624
  __ bind(L_2TAG_PACKET_2_0_2);
1625
  __ movw(rcx, Address(rsp, 22));
1626
  __ movl(rdx, INT_MIN);
1627
  __ movdl(xmm1, rdx);
1628
  __ xorpd(xmm7, xmm7);
1629
  __ paddd(xmm0, xmm4);
1630
  __ movdl(rdx, xmm0);
1631
  __ psllq(xmm0, 29);
1632
  __ paddq(xmm1, xmm3);
1633
  __ pand(xmm5, xmm1);
1634
  __ andl(rcx, 32752);
1635
  __ cmpl(rcx, 16560);
1636
  __ jcc(Assembler::less, L_2TAG_PACKET_3_0_2);
1637
  __ pand(xmm0, xmm6);
1638
  __ subsd(xmm3, xmm5);
1639
  __ addl(rax, 16351);
1640
  __ shrl(rax, 4);
1641
  __ subl(rax, 1022);
1642
  __ cvtsi2sdl(xmm7, rax);
1643
  __ mulpd(xmm5, xmm0);
1644
  __ lea(r11, ExternalAddress(L_tbl));
1645
  __ movq(xmm4, ExternalAddress(coeff_h), r9 /*rscratch*/);    //0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
1646
  __ mulsd(xmm3, xmm0);
1647
  __ movq(xmm6, ExternalAddress(coeff_h), r9 /*rscratch*/);    //0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
1648
  __ subsd(xmm5, xmm2);
1649
  __ movq(xmm1, ExternalAddress(coeff_h + 8), r9 /*rscratch*/);    //0x00000000UL, 0xbf5dabe1UL
1650
  __ pshufd(xmm2, xmm3, 68);
1651
  __ unpcklpd(xmm5, xmm3);
1652
  __ addsd(xmm3, xmm5);
1653
  __ movq(xmm0, ExternalAddress(coeff_h + 8), r9 /*rscratch*/);    //0x00000000UL, 0xbf5dabe1UL
1654
  __ andl(rdx, 16760832);
1655
  __ shrl(rdx, 10);
1656
  __ addpd(xmm7, Address(r11, rdx, Address::times_1, -3648));
1657
  __ mulsd(xmm4, xmm5);
1658
  __ mulsd(xmm0, xmm5);
1659
  __ mulsd(xmm6, xmm2);
1660
  __ mulsd(xmm1, xmm2);
1661
  __ movdqu(xmm2, xmm5);
1662
  __ mulsd(xmm4, xmm5);
1663
  __ addsd(xmm5, xmm0);
1664
  __ movdqu(xmm0, xmm7);
1665
  __ addsd(xmm2, xmm3);
1666
  __ addsd(xmm7, xmm5);
1667
  __ mulsd(xmm6, xmm2);
1668
  __ subsd(xmm0, xmm7);
1669
  __ movdqu(xmm2, xmm7);
1670
  __ addsd(xmm7, xmm4);
1671
  __ addsd(xmm0, xmm5);
1672
  __ subsd(xmm2, xmm7);
1673
  __ addsd(xmm4, xmm2);
1674
  __ pshufd(xmm2, xmm5, 238);
1675
  __ movdqu(xmm5, xmm7);
1676
  __ addsd(xmm7, xmm2);
1677
  __ addsd(xmm4, xmm0);
1678
  __ movdqu(xmm0, ExternalAddress(coeff), r9 /*rscratch*/);    //0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL
1679
  __ subsd(xmm5, xmm7);
1680
  __ addsd(xmm6, xmm4);
1681
  __ movdqu(xmm4, xmm7);
1682
  __ addsd(xmm5, xmm2);
1683
  __ addsd(xmm7, xmm1);
1684
  __ movdqu(xmm2, ExternalAddress(coeff + 64), r9 /*rscratch*/);    //0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL
1685
  __ subsd(xmm4, xmm7);
1686
  __ addsd(xmm6, xmm5);
1687
  __ addsd(xmm4, xmm1);
1688
  __ pshufd(xmm5, xmm7, 238);
1689
  __ movapd(xmm1, xmm7);
1690
  __ addsd(xmm7, xmm5);
1691
  __ subsd(xmm1, xmm7);
1692
  __ addsd(xmm1, xmm5);
1693
  __ movdqu(xmm5, ExternalAddress(coeff + 80), r9 /*rscratch*/);    //0x9f95985aUL, 0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL
1694
  __ pshufd(xmm3, xmm3, 68);
1695
  __ addsd(xmm6, xmm4);
1696
  __ addsd(xmm6, xmm1);
1697
  __ movdqu(xmm1, ExternalAddress(coeff + 32), r9 /*rscratch*/);    //0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL
1698
  __ mulpd(xmm0, xmm3);
1699
  __ mulpd(xmm2, xmm3);
1700
  __ pshufd(xmm4, xmm3, 68);
1701
  __ mulpd(xmm3, xmm3);
1702
  __ addpd(xmm0, xmm1);
1703
  __ addpd(xmm5, xmm2);
1704
  __ mulsd(xmm4, xmm3);
1705
  __ movq(xmm2, ExternalAddress(HIGHMASK_LOG_X), r9 /*rscratch*/);    //0xf8000000UL, 0xffffffffUL, 0x00000000UL, 0xfffff800UL
1706
  __ mulpd(xmm3, xmm3);
1707
  __ movq(xmm1, Address(rsp, 16));
1708
  __ movw(rcx, Address(rsp, 22));
1709
  __ mulpd(xmm0, xmm4);
1710
  __ pextrw(rax, xmm7, 3);
1711
  __ mulpd(xmm5, xmm4);
1712
  __ mulpd(xmm0, xmm3);
1713
  __ movq(xmm4, ExternalAddress(HIGHMASK_Y + 8), r9 /*rscratch*/);    //0x00000000UL, 0xffffffffUL
1714
  __ pand(xmm2, xmm7);
1715
  __ addsd(xmm5, xmm6);
1716
  __ subsd(xmm7, xmm2);
1717
  __ addpd(xmm5, xmm0);
1718
  __ andl(rax, 32752);
1719
  __ subl(rax, 16368);
1720
  __ andl(rcx, 32752);
1721
  __ cmpl(rcx, 32752);
1722
  __ jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
1723
  __ addl(rcx, rax);
1724
  __ cmpl(rcx, 16576);
1725
  __ jcc(Assembler::aboveEqual, L_2TAG_PACKET_51_0_2);
1726
  __ pshufd(xmm0, xmm5, 238);
1727
  __ pand(xmm4, xmm1);
1728
  __ movdqu(xmm3, xmm1);
1729
  __ addsd(xmm5, xmm0);
1730
  __ subsd(xmm1, xmm4);
1731
  __ xorpd(xmm6, xmm6);
1732
  __ movl(rdx, 17080);
1733
  __ pinsrw(xmm6, rdx, 3);
1734
  __ addsd(xmm7, xmm5);
1735
  __ mulsd(xmm4, xmm2);
1736
  __ mulsd(xmm1, xmm2);
1737
  __ movdqu(xmm5, xmm6);
1738
  __ mulsd(xmm3, xmm7);
1739
  __ addsd(xmm6, xmm4);
1740
  __ addsd(xmm1, xmm3);
1741
  __ movdqu(xmm7, ExternalAddress(e_coeff), r9 /*rscratch*/);    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
1742
  __ movdl(rdx, xmm6);
1743
  __ subsd(xmm6, xmm5);
1744
  __ lea(r11, ExternalAddress(T_exp));
1745
  __ movdqu(xmm3, ExternalAddress(e_coeff + 16), r9 /*rscratch*/);    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
1746
  __ movq(xmm2, ExternalAddress(e_coeff + 32), r9 /*rscratch*/);    //0xfefa39efUL, 0x3fe62e42UL, 0x00000000UL, 0x00000000UL
1747
  __ subsd(xmm4, xmm6);
1748
  __ movl(rcx, rdx);
1749
  __ andl(rdx, 255);
1750
  __ addl(rdx, rdx);
1751
  __ movdqu(xmm5, Address(r11, rdx, Address::times_8, 0));
1752
  __ addsd(xmm4, xmm1);
1753
  __ pextrw(rdx, xmm6, 3);
1754
  __ shrl(rcx, 8);
1755
  __ movl(rax, rcx);
1756
  __ shrl(rcx, 1);
1757
  __ subl(rax, rcx);
1758
  __ shll(rcx, 20);
1759
  __ movdl(xmm6, rcx);
1760
  __ pshufd(xmm0, xmm4, 68);
1761
  __ pshufd(xmm1, xmm4, 68);
1762
  __ mulpd(xmm0, xmm0);
1763
  __ mulpd(xmm7, xmm1);
1764
  __ pshufd(xmm6, xmm6, 17);
1765
  __ mulsd(xmm2, xmm4);
1766
  __ andl(rdx, 32767);
1767
  __ cmpl(rdx, 16529);
1768
  __ jcc(Assembler::above, L_2TAG_PACKET_12_0_2);
1769
  __ mulsd(xmm0, xmm0);
1770
  __ paddd(xmm5, xmm6);
1771
  __ addpd(xmm3, xmm7);
1772
  __ mulsd(xmm2, xmm5);
1773
  __ pshufd(xmm6, xmm5, 238);
1774
  __ mulpd(xmm0, xmm3);
1775
  __ addsd(xmm2, xmm6);
1776
  __ pshufd(xmm3, xmm0, 238);
1777
  __ addl(rax, 1023);
1778
  __ shll(rax, 20);
1779
  __ orl(rax, r8);
1780
  __ movdl(xmm4, rax);
1781
  __ mulsd(xmm0, xmm5);
1782
  __ mulsd(xmm3, xmm5);
1783
  __ addsd(xmm0, xmm2);
1784
  __ psllq(xmm4, 32);
1785
  __ addsd(xmm0, xmm3);
1786
  __ movdqu(xmm1, xmm0);
1787
  __ addsd(xmm0, xmm5);
1788
  __ mulsd(xmm0, xmm4);
1789
  __ pextrw(rax, xmm0, 3);
1790
  __ andl(rax, 32752);
1791
  __ jcc(Assembler::equal, L_2TAG_PACKET_13_0_2);
1792
  __ cmpl(rax, 32752);
1793
  __ jcc(Assembler::equal, L_2TAG_PACKET_14_0_2);
1794

1795
  __ bind(L_2TAG_PACKET_52_0_2);
1796
  __ jmp(B1_5);
1797

1798
  __ bind(L_2TAG_PACKET_45_0_2);
1799
  __ movq(xmm0, Address(rsp, 8));
1800
  __ xorpd(xmm2, xmm2);
1801
  __ movl(rax, 49136);
1802
  __ pinsrw(xmm2, rax, 3);
1803
  __ addsd(xmm2, xmm0);
1804
  __ pextrw(rax, xmm2, 3);
1805
  __ cmpl(rax, 0);
1806
  __ jcc(Assembler::notEqual, L_2TAG_PACKET_53_0_2);
1807
  __ xorpd(xmm0, xmm0);
1808
  __ movl(rax, 32760);
1809
  __ pinsrw(xmm0, rax, 3);
1810
  __ jmp(B1_5);
1811

1812
  __ bind(L_2TAG_PACKET_53_0_2);
1813
  __ movq(xmm1, Address(rsp, 16));
1814
  __ movdl(rdx, xmm1);
1815
  __ movdqu(xmm3, xmm1);
1816
  __ psrlq(xmm3, 20);
1817
  __ movdl(rcx, xmm3);
1818
  __ orl(rcx, rdx);
1819
  __ jcc(Assembler::equal, L_2TAG_PACKET_54_0_2);
1820
  __ addsd(xmm1, xmm1);
1821
  __ movdqu(xmm0, xmm1);
1822
  __ jmp(B1_5);
1823

1824
  __ bind(L_2TAG_PACKET_51_0_2);
1825
  __ pextrw(rax, xmm1, 3);
1826
  __ pextrw(rcx, xmm2, 3);
1827
  __ xorl(rax, rcx);
1828
  __ testl(rax, 32768);
1829
  __ jcc(Assembler::equal, L_2TAG_PACKET_47_0_2);
1830
  __ jmp(L_2TAG_PACKET_46_0_2);
1831

1832
  __ bind(L_2TAG_PACKET_54_0_2);
1833
  __ pextrw(rax, xmm0, 3);
1834
  __ andl(rax, 32752);
1835
  __ pextrw(rdx, xmm1, 3);
1836
  __ xorpd(xmm0, xmm0);
1837
  __ subl(rax, 16368);
1838
  __ xorl(rax, rdx);
1839
  __ testl(rax, 32768);
1840
  __ jcc(Assembler::equal, L_2TAG_PACKET_55_0_2);
1841
  __ jmp(B1_5);
1842

1843
  __ bind(L_2TAG_PACKET_55_0_2);
1844
  __ movl(rdx, 32752);
1845
  __ pinsrw(xmm0, rdx, 3);
1846
  __ jmp(B1_5);
1847

1848
  __ bind(L_2TAG_PACKET_17_0_2);
1849
  __ movq(Address(rsp, 24), xmm0);
1850

1851
  __ bind(B1_3);
1852
  __ movq(xmm0, Address(rsp, 24));
1853

1854
  __ bind(L_2TAG_PACKET_56_0_2);
1855

1856
  __ bind(B1_5);
1857
  __ addq(rsp, 40);
1858

1859
  __ leave(); // required for proper stackwalking of RuntimeStub frame
1860
  __ ret(0);
1861

1862
  return start;
1863
}
1864

1865
#undef __
1866

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

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

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

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