1.file "cbrtl.s"
2
3
4// Copyright (c) 2000 - 2004, Intel Corporation
5// All rights reserved.
6//
7//
8// Redistribution and use in source and binary forms, with or without
9// modification, are permitted provided that the following conditions are
10// met:
11//
12// * Redistributions of source code must retain the above copyright
13// notice, this list of conditions and the following disclaimer.
14//
15// * Redistributions in binary form must reproduce the above copyright
16// notice, this list of conditions and the following disclaimer in the
17// documentation and/or other materials provided with the distribution.
18//
19// * The name of Intel Corporation may not be used to endorse or promote
20// products derived from this software without specific prior written
21// permission.
22
23// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS
27// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
31// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING
32// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34//
35// Intel Corporation is the author of this code, and requests that all
36// problem reports or change requests be submitted to it directly at
37// http://www.intel.com/software/products/opensource/libraries/num.htm.
38//
39// History
40//==============================================================
41// 04/28/00 Initial version
42// 05/20/02 Cleaned up namespace and sf0 syntax
43// 02/06/03 Reordered header:.section,.global,.proc,.align
44// 11/23/04 Reformatted routine and improved speed
45//
46// API
47//==============================================================
48// long double cbrtl(long double)
49//
50// Overview of operation
51//==============================================================
52// Background
53//
54// Implementation
55//
56// The result is computed as
57// cbrt(x)= cbrt(1 - (1 - x*y)) * (1/cbrt(y))
58// where y = frcpa(x) = (-1)^sgn_y * 2^(3*k+j) * m_y,
59//       m_y in [1,2),  j in {0,1,2}
60//
61//  cbrt(1 - (1 - x*y)) is approximated by a degree-6 polynomial
62//  in r= 1 - x*y :
63// P = 1 - c_1 r - c_2 * r^2 - c_3 * r^3 - c_4 * r^4 - c_5 * r^5 - c_6 * r^6
64//
65//
66// The values (1/cbrt(y)) are stored as two tables of constants T_hi
67// (double-extended precision) and D (single precision) as follows:
68// T_hi (1 + D)= 1/cbrt(y) to about 80 bits of accuracy
69//
70// The tables are only stored for three exponent values (i.e.
71// only for 2^j * m_y, where j in {0,1,2} and m_y covers the 256
72// possible mantissas for an frcpa result); the index is formed
73// by the 8 leading mantissa bits of x, which is the same index used
74// by the hardware to get frcpa(x).
75//
76// The table values are multiplied by 2^k where e is the exponent of
77// the input number.  This multiplication is carried out in parallel with
78// the polynomial evaluation:
79// T= 2^(k) * T_hi
80//
81//=======================================================================
82
83//===============
84// Special values
85//==============================================================
86
87// Registers used
88//==============================================================
89// p6, p7, p12
90           FR_R       =  f6
91           FR_C1      =  f7
92           FR_C2      =  f9
93           FR_C3      =  f10
94           FR_C4      =  f11
95           FR_C5      =  f12
96           FR_C6      =  f13
97           FR_XNORM   =  f14
98           FR_D       =  f15
99           FR_SPECIAL =  f32
100           FR_RCP     =  f33
101           FR_R2      =  f34
102           FR_P1      =  f35
103           FR_P2      =  f36
104           FR_P3      =  f37
105           FR_P4      =  f38
106           FR_P5      =  f39
107           FR_R3      =  f40
108           FR_T       =  f41
109           FR_TF      =  f42
110           FR_P       =  f43
111           FR_SGNEXP  =  f44
112
113           GR_ADDR       = r2
114           GR_C_START    = r2
115           GR_ARGSIG     = r3
116           GR_NORMSIG    = r15
117           GR_D_ADDR     = r16
118           GR_D_START    = r16
119           GR_INDEX2     = r17
120           GR_IX2        = r17
121           GR_NORMEXP    = r18
122           GR_EXP5       = r19
123           GR_EXP3       = r20
124           GR_EXP6       = r20
125           GR_EXP17      = r21
126           GR_TMP1       = r21
127           GR_SGNMASK    = r22
128           GR_T_INDEX    = r23
129           GR_IX_T       = r23
130           GR_IX_D       = r24
131           GR_D_INDEX    = r24
132           GR_TMP2       = r25
133           GR_TMP3       = r25
134           GR_TMP4       = r25
135           GR_EXP_RES    = r26
136           GR_BIAS23     = r27
137           GR_EXPBIAS    = r27
138           GR_EXP_MOD_3  = r28
139           GR_SIGN       = r29
140           GR_EXPSIGNRES = r29
141           GR_REMTMP     = r30
142           GR_NORMEXPSGN = r31
143
144
145// Data tables
146//==============================================================
147
148RODATA
149
150.align 16
151
152LOCAL_OBJECT_START(poly_coeffs)
153
154       data8 0xaaaaaaaaaaaaaab1, 0x00003ffd // C_1
155       data8 0xe38e38e38e38e3e0, 0x00003ffb // C_2
156       data8 0x3faf9add3c0be9a6, 0x3fa511e8d2b1f749 // C_3, C_4
157       data8 0x3f9ee71b2c6ebe99, 0x3f9809180fd0340c // C_5, C_6
158LOCAL_OBJECT_END(poly_coeffs)
159
160
161LOCAL_OBJECT_START(T_table)
162
163       data8 0x80155c748c374836, 0x8040404b0879f7f9
164       data8 0x806b5dce4b405c10, 0x8096b586974669b1
165       data8 0x80bcd273d952a028, 0x80e898c52813f2f3
166       data8 0x81149add67c2d208, 0x813b4e2c856b6e9a
167       data8 0x8167c1dde03de7aa, 0x818ed973b811135e
168       data8 0x81bbc0c33e13ec98, 0x81e33e69fbe7504a
169       data8 0x820aec524e3c23e9, 0x823880f78e70b805
170       data8 0x826097a62a8e5200, 0x8288dfe00e9b5eaf
171       data8 0x82b15a10c5371624, 0x82da06a527b18937
172       data8 0x8302e60b635ab394, 0x832bf8b2feec2f0e
173       data8 0x83553f0ce00e276b, 0x837eb98b50f8322a
174       data8 0x83a270f44c84f699, 0x83cc4d7cfcfac5ca
175       data8 0x83f65f78a8872b4c, 0x8420a75f2f7b53c8
176       data8 0x844510461ff14209, 0x846fbd91b930bed2
177       data8 0x84947e18234f3294, 0x84bf92755825045a
178       data8 0x84e4ac0ee112ba51, 0x8509ef44b86f20be
179       data8 0x85359d5d91768427, 0x855b3bd5b7384357
180       data8 0x858104f0c415f79a, 0x85a6f90390d29864
181       data8 0x85d3772fcd56a1dd, 0x85f9c982fcc002f3
182       data8 0x862047e0e7ea554b, 0x8646f2a26f7f5852
183       data8 0x866dca21754096b5, 0x8694ceb8dfd17a37
184       data8 0x86bc00c49e9307e8, 0x86dccd74fce79610
185       data8 0x870453c845acf90f, 0x872c089a1e90342c
186       data8 0x8753ec4a92d16c5e, 0x877bff3aca19f6b4
187       data8 0x879d88b6fe1c324c, 0x87c5f346dbf98c3a
188       data8 0x87e7c653efacef2c, 0x881089d4e73ffefc
189       data8 0x88397e6a366f2a8a, 0x885bc559e5e1c081
190       data8 0x887e2ee392bb7a93, 0x88a7a8587e404257
191       data8 0x88ca5eda67594784, 0x88f4356166bd590e
192       data8 0x89173a0acf5ce026, 0x893a62a098b6a57b
193       data8 0x895daf637236ae2c, 0x89883b9d1c2fa9c5
194       data8 0x89abd8dd374a5d7b, 0x89cf9b1dcd197fa0
195       data8 0x89f382a258ea79de, 0x8a178faf06648f29
196       data8 0x8a3bc288b3e1d18a, 0x8a601b74f4d1f835
197       data8 0x8a849aba14274764, 0x8aa9409f16cdbc9b
198       data8 0x8ace0d6bbe2cb316, 0x8af301688ab33558
199       data8 0x8b181cdebe6f3206, 0x8b3d60185fafcb7c
200       data8 0x8b62cb603bb2fad0, 0x8b80d7d6bc4104de
201       data8 0x8ba68bf73ac74f39, 0x8bcc68fb9f9f7335
202       data8 0x8bf26f31c534fca2, 0x8c10f86e13a1a1f9
203       data8 0x8c3749916cc6abb5, 0x8c5dc4c4f7706032
204       data8 0x8c7cac3a8c42e3e0, 0x8ca373f1b7bf2716
205       data8 0x8cc29907fb951294, 0x8ce9ae4e9492aac8
206       data8 0x8d0911dddbfdad0e, 0x8d3075c4f20f04ee
207       data8 0x8d5018a9d4de77d5, 0x8d77cc47dd143515
208       data8 0x8d97af6352739cb7, 0x8db7af523167800f
209       data8 0x8ddfd80bc68c32ff, 0x8e00197e1e7c88fe
210       data8 0x8e207859f77e20e7, 0x8e40f4ce60c9f8e2
211       data8 0x8e69ba46cf2fde4d, 0x8e8a7a00bd7ae63e
212       data8 0x8eab57ef1cf2f529, 0x8ecc5442cffb1dad
213       data8 0x8eed6f2d2a4acbfe, 0x8f0ea8dff24441ff
214       data8 0x8f385c95d696b817, 0x8f59dc43edd930f3
215       data8 0x8f7b7b5f5ffad1c4, 0x8f9d3a1bea165f38
216       data8 0x8fbf18adc34b66da, 0x8fe117499e356095
217       data8 0x90033624aa685f8d, 0x9025757495f36b86
218       data8 0x903f3a5dcc091203, 0x9061b2fceb2bdbab
219       data8 0x90844ca7211032a7, 0x90a7079403e6a15d
220       data8 0x90c9e3fbafd63799, 0x90ece216c8a16ee4
221       data8 0x9110021e7b516f0a, 0x912a708a39be9075
222       data8 0x914dcc7b31146370, 0x91714af8cfe984d5
223       data8 0x918c00a6f3795e97, 0x91afbc299ed0295d
224       data8 0x91d39add3e958db0, 0x91ee9920a8974d92
225       data8 0x9212b5fcac537c19, 0x9236f6b256923fcf
226       data8 0x92523ee6f90dcfc3, 0x9276bef031e6eb79
227       data8 0x929236ec237a24ad, 0x92b6f70b7efe9dc3
228       data8 0x92d29f61eec7dc2b, 0x92f7a05d5b8ba92f
229       data8 0x931379a403be5c16, 0x9338bc44de2e3f34
230       data8 0x9354c71412c69486, 0x937a4c273907e262
231       data8 0x93968919f6e7975d, 0x93bc516fdd4680c9
232       data8 0x93d8c123d9be59b2, 0x93f546c955e60076
233       data8 0x941b70a65879079f, 0x943829f337410591
234       data8 0x9454f995765bc4d2, 0x947b86b57f5842ed
235       data8 0x94988aeb23470f86, 0x94b5a5dc9695f42a
236       data8 0x94d2d7a9170d8b42, 0x94f9e87dd78bf019
237       data8 0x95175019a503d89e, 0x9534cefa625fcb3a
238       data8 0x955265405c491a25, 0x9570130c1f9bb857
239       data8 0x9597ca4119525184, 0x95b5af6fb5aa4d3c
240       data8 0x95d3ac9273aafd7a, 0x95f1c1cafdfd3684
241       data8 0x960fef3b430b8d5f, 0x962e350575b409c5
242       data8 0x964c934c0dfc1708, 0x966b0a31c9c6bc7d
243       data8 0x968999d9ad8d264e, 0x96a8426705198795
244       data8 0x96c703fd64445ee5, 0x96e5dec0a7b4268d
245       data8 0x9704d2d4f59f79f3, 0x9723e05ebe91b9b0
246       data8 0x97430782be323831, 0x97624865fc0df8bf
247       data8 0x9781a32dcc640b2a, 0x97a117ffd0f48e46
248       data8 0x97c0a701f9d263c9, 0x97e0505a8637a036
249       data8 0x97f57a9fb0b08c6e, 0x9815503365914a9d
250       data8 0x98354085054fd204, 0x98554bbbf8a77902
251       data8 0x987571fffb7f94f6, 0x9895b3791dd03c23
252       data8 0x98ab43a5fc65d0c8, 0x98cbb2d196bd713d
253       data8 0x98ec3d9ec7b6f21a, 0x990ce436db5e8344
254       data8 0x9922b8218160967a, 0x99438d686f75779d
255       data8 0x99647eea131fa20b, 0x997a85045a47c6d0
256       data8 0x999ba5f14f8add02, 0x99bce38b5465ecae
257       data8 0x99d31ca0887f30f9, 0x99f48a669c74c09e
258       data8 0x9a16154eb445c873, 0x9a2c822ec198d667
259       data8 0x9a4e3e080cd91b78, 0x9a70177afe52322e
260       data8 0x9a86b8fa94eebe10, 0x9aa8c42866ae2958
261       data8 0x9abf86f9e12fc45e, 0x9ae1c462fc05f49d
262       data8 0x9af8a8dc936b84d0, 0x9b1b19033be35730
263       data8 0x9b3da7daf04c2892, 0x9b54c2e4c8a9012b
264       data8 0x9b77854e6c661200, 0x9b8ec2e678d56d2f
265       data8 0x9ba60e6a5ca133b6, 0x9bc919ea66a151a4
266       data8 0x9be0887c09ef82bb, 0x9c03c8d5fffc3503
267       data8 0x9c1b5ad21a81cbb9, 0x9c3ed09216e9ca02
268       data8 0x9c568656c0423def, 0x9c7a320af242ce60
269       data8 0x9c920bf7a8c01dc2, 0x9ca9f475d98b159c
270       data8 0x9ccdeca60e80b5f8, 0x9ce5f9d4653d4902
271       data8 0x9cfe15cb38bfdd8e, 0x9d225b983f6c1f96
272       data8 0x9d3a9cca32261ed7, 0x9d52ecfccebe1768
273       data8 0x9d77818d95b82f86, 0x9d8ff7893fa4706c
274       data8 0x9da87cbef36f2a5e, 0x9dcd6140b4a35aeb
275       data8 0x9de60cd06dc6e2d4, 0x9dfec7d4cc43b76f
276       data8 0x9e17925ec9fccc4a, 0x9e3cdf6db57dc075
277       data8 0x9e55d110b63637a8, 0x9e6ed27594550d2e
278       data8 0x9e87e3adc385d393, 0x9ead9b54b37a1055
279       data8 0x9ec6d46a3d7de215, 0x9ee01d9108be3154
280       data8 0x9ef976db07288d04, 0x9f12e05a4759ec25
281       data8 0x9f2c5a20f4da6668, 0x9f52af78ed1733ca
282       data8 0x9f6c52426a39d003, 0x9f860593d42fd7f3
283       data8 0x9f9fc97fdb96bd51, 0x9fb99e194f4a7037
284       data8 0x9fd383731ca51db9, 0x9fed79a04fbf9423
285       data8 0xa00780b413b24ee8, 0xa02eab2c4474b0cd
286       data8 0xa048dcd51ccfd142, 0xa0631fa894b11b8d
287       data8 0xa07d73ba65e680af, 0xa097d91e6aaf71b0
288       data8 0xa0b24fe89e02602f, 0xa0ccd82d1bd2f68b
289       data8 0xa0e77200215909e6, 0xa1021d760d584855
290       data8 0xa11cdaa36068a57d, 0xa137a99cbd3f880b
291       data8 0xa160019ed37fb4ae, 0xa1960b5966da4608
292       data8 0xa1cc5dbe6dc2aab4, 0xa202f97995b69c0d
293       data8 0xa232fe6eb0c0577d, 0xa26a2582012f6e17
294       data8 0xa2a197e5d10465cb, 0xa2d25a532efefbc8
295       data8 0xa30a5bd6e49e4ab8, 0xa33b9c9b59879e24
296       data8 0xa3742fca6a3c1f21, 0xa3a5f1273887bf22
297       data8 0xa3d7ef508ff11574, 0xa4115ce30548bc15
298       data8 0xa443df0e53df577a, 0xa4769fa5913c0ec3
299       data8 0xa4a99f303bc7def5, 0xa4dcde37779adf4b
300       data8 0xa5105d46152c938a, 0xa5441ce89825cb8d
301       data8 0xa5781dad3e54d899, 0xa5ac602406c4e68c
302       data8 0xa5d9601d95c2c0bc, 0xa60e1e1a2de14745
303       data8 0xa6431f6e3fbd9658, 0xa67864b0d432fda4
304       data8 0xa6a6444aa0243c0b, 0xa6dc094d10f25792
305       data8 0xa70a574cc02bba69, 0xa7409e2af9549084
306       data8 0xa76f5c64ca2cf13b, 0xa79e4f0babab5dc0
307       data8 0xa7d5579ae5164b85, 0xa804bd3c6fe61cc8
308       data8 0xa8345895e5250a5a, 0xa8642a122b44ef0b
309       data8 0xa89c38ca18f6108b, 0xa8cc81063b6e87ca
310       data8 0xa8fd00bfa409285e, 0xa92db8664d5516da
311       data8 0xa95ea86b75cc2c20, 0xa98fd141a4992deb
312       data8 0xa9c1335cae7446ba, 0xa9ea8686f556f645
313       data8 0xaa1c52d17906bb19, 0xaa4e59b046dab887
314       data8 0xaa809b9c60d1890b, 0xaab319102f3f9b33
315       data8 0xaadd5a18c1e21274, 0xab1045f2ac31bdf5
316       data8 0xab3ae3ab2df7231e, 0xab6e3f945d1e96fc
317       data8 0xaba1d953a08fa94e, 0xabcd090db7ef4c3f
318       data8 0xabf864602d7c323d, 0xac2ca5886ccf9b57
319       data8 0xac5861d4aa441f0f, 0xac8d183fe3a2fbed
320       data8 0xacb93703ff51571e, 0xace5830ad0c3f14b
321       data8 0xad11fca5d78b3ff2, 0xad4797fddf91a798
322       data8 0xad747701e559ebcb, 0xada184a47e9c7613
323       data8 0xadcec13ab0dda8ff, 0xadfc2d1a5fd21ba8
324       data8 0xae29c89a5053c33a, 0xae5794122b638df9
325       data8 0xae858fda8137ae0a, 0xaeb3bc4ccc56d3d1
326       data8 0xaee219c374c09920, 0xaf10a899d3235fe7
327       data8 0xaf3f692c341fe8b4, 0xaf6e5bd7db9ae6c2
328       data8 0xaf9d80fb081cd91b, 0xafc35ce063eb3787
329       data8 0xaff2ddcb5f28f03d, 0xb022923b148e05c5
330       data8 0xb0527a919adbf58b, 0xb078f3ab1d701c65
331       data8 0xb0a93a6870649f31, 0xb0d9b624d62ec856
332       data8 0xb100a5f53fb3c8e1, 0xb131821882f5540a
333       data8 0xb158bf8e4cb04055, 0xb189fd69d56b238f
334       data8 0xb1b189958e8108e4, 0xb1e32a8165b09832
335       data8 0xb20b0678fc271eec, 0xb23d0bd3f7592b6e
336       data8 0xb26538b2db8420dc, 0xb28d89e339ceca14
337       data8 0xb2c022ca12e55a16, 0xb2e8c6852c6b03f1
338       data8 0xb3118f4eda9fe40f, 0xb33a7d6268109ebe
339       data8 0xb36ddbc5ea70ec55, 0xb3971e9b39264023
340       data8 0xb3c0877ecc18e24a, 0xb3ea16ae3a6c905f
341       data8 0xb413cc67aa0e4d2d, 0xb43da8e9d163e1af
342       data8 0xb47233773b84d425, 0xb49c6825430fe730
343       data8 0xb4c6c46bcdb27dcf, 0xb4f1488c0b35d26f
344       data8 0xb51bf4c7c51f0168, 0xb546c9616087ab9c
345       data8 0xb571c69bdffd9a70, 0xb59cecbae56984c3
346       data8 0xb5bd64512bb14bb7, 0xb5e8d2a4bf5ba416
347       data8 0xb6146a9a1bc47819, 0xb6402c7749d621c0
348       data8 0xb66c1882fb435ea2, 0xb6982f048c999a56
349       data8 0xb6c47044075b4142, 0xb6e5bd6bfd02bafd
350       data8 0xb7124a2736ff8ef2, 0xb73f026a01e94177
351       data8 0xb760a959f1d0a7a7, 0xb78dae7e06868ab0
352       data8 0xb7badff8ad9e4e02, 0xb7dce25b8e17ae9f
353       data8 0xb80a6226904045e2, 0xb8380f1cafd73c1c
354       data8 0xb85a6ea8e321b4d8, 0xb8886b684ae7d2fa
355       data8 0xb8ab0726fa00cf5d, 0xb8d954a4d13b7cb1
356       data8 0xb8fc2d4f6cd9f04a, 0xb92acc851476b1ab
357       data8 0xb94de2d841a184c2, 0xb97cd4c36c92693c
358       data8 0xb9a0297f172665e3, 0xb9cf6f21e36c3924
359       data8 0xb9f3030951267208, 0xba229d6a618e7c59
360       data8 0xba467144459f9855, 0xba6a60c3c48f1a4b
361       data8 0xba9a76056b67ee7a, 0xbabea699563ada6e
362       data8 0xbae2f350b262cc4b, 0xbb1385a23be24e57
363       data8 0xbb3814975e17c680, 0xbb5cc031009bf467
364       data8 0xbb81889680024764, 0xbbb2c0d8703ae95d
365       data8 0xbbd7cd09ba3c5463, 0xbbfcf68c4977718f
366       data8 0xbc223d88cfc88eee, 0xbc47a2284fee4ff8
367       data8 0xbc79ac0916ed7b8a, 0xbc9f5670d1a13030
368       data8 0xbcc51f068cb95c1d, 0xbceb05f4b30a9bc0
369       data8 0xbd110b6604c7d306, 0xbd372f8598620f19
370       data8 0xbd5d727edb6b3c7e, 0xbd83d47d937bbc6d
371       data8 0xbdaa55addf1ae47d, 0xbdd0f63c36aa73f0
372       data8 0xbdf7b6556d550a15, 0xbe1e9626b1ffa96b
373       data8 0xbe4595dd903e5371, 0xbe6cb5a7f14bc935
374       data8 0xbe93f5b41d047cf7, 0xbebb5630bae4c15f
375       data8 0xbee2d74cd30a430c, 0xbf0a7937cf38d981
376       data8 0xbf323c217be2bc8c, 0xbf5a203a09342bbb
377       data8 0xbf74cad1c14ebfc4, 0xbf9ce6a497a89f78
378       data8 0xbfc52428bec6e72f, 0xbfed838fddab024b
379       data8 0xc016050c0420981a, 0xc03ea8cfabddc330
380       data8 0xc059d3cbd65ddbce, 0xc082b122a3c78c9d
381       data8 0xc0abb1499ae736c4, 0xc0d4d474c3aedaaf
382       data8 0xc0f054ca33eb3437, 0xc119b2c67e600ed0
383       data8 0xc1433453de2033ff, 0xc15ef3e44e10032d
384       data8 0xc188b130431d80e6, 0xc1b2929d6067730e
385       data8 0xc1ce9268f31cc734, 0xc1f8b0877c1b0c08
386       data8 0xc222f35a87b415ba, 0xc23f3467349e5c88
387       data8 0xc269b4e40e088c01, 0xc2945aac24daaf6e
388       data8 0xc2b0de05e43c1d66, 0xc2dbc275e1229d09
389       data8 0xc2f86fca9d80eeff, 0xc323938449a2587e
390       data8 0xc3406b40a538ed20, 0xc36bcee8211d15e0
391       data8 0xc397593adf2ba366, 0xc3b475b6206155d5
392       data8 0xc3e0410243b97383, 0xc3fd890709833d37
393       data8 0xc41ae295f7e7fa06, 0xc44709f7bb8a4dd2
394       data8 0xc4648fb0e0bec4c1, 0xc490f9a94695ba14
395       data8 0xc4aeac0173b7d390, 0xc4db5941007aa853
396       data8 0xc4f938aec206291a, 0xc52629e899dfd622
397       data8 0xc54436e44043b965, 0xc562563abf9ea07f
398       data8 0xc58fa7d1dc42921c, 0xc5adf561b91e110a
399       data8 0xc5cc5591bdbd82fa, 0xc5fa08f1ff20593c
400       data8 0xc618980a79ce6862, 0xc6373a09e34b50fa
401       data8 0xc66550a6e0baaf35, 0xc6842241926342c9
402       data8 0xc6a3070b7c93bb9e, 0xc6d18260bb84081b
403       data8 0xc6f0977c9416828b, 0xc70fc0117c641630
404       data8 0xc72efc34d7e615be, 0xc75dfb441594141e
405       data8 0xc77d68aa019bda4c, 0xc79ce9ea478dbc4f
406       data8 0xc7bc7f1ae453219d, 0xc7ec0476e15e141a
407       data8 0xc80bcbe16f1d540f, 0xc82ba78a5d349735
408       data8 0xc84b978847a06b87, 0xc86b9bf1ee817bc6
409       data8 0xc88bb4de3667cdf4, 0xc8bc00e7fe9e23a3
410       data8 0xc8dc4d7ff2d25232, 0xc8fcaeebcb40eb47
411       data8 0xc91d25431426a663, 0xc93db09d7fdb2949
412       data8 0xc95e5112e721582a, 0xc97f06bb49787677
413       data8 0xc99fd1aecd6e1b06, 0xc9d12a3e27bb1625
414       data8 0xc9f22ad82ba3d5f0, 0xca134113105e67b2
415       data8 0xca346d07b045a876, 0xca55aecf0e94bb88
416       data8 0xca77068257be9bab, 0xca98743ae1c693a8
417       data8 0xcab9f8122c99a101, 0xcadb9221e268c3b5
418       data8 0xcafd4283d8043dfd, 0xcb1f09520d37c6fb
419       data8 0xcb51ddcb9e93095e, 0xcb95f333968ad59b
420       data8 0xcbda64292d3ffd97, 0xcc1f3184af961596
421       data8 0xcc5bb1ac954d33e2, 0xcca12e9831fc6402
422       data8 0xcce70a67b64f24ad, 0xcd24794726477ea5
423       data8 0xcd6b096a0b70ee87, 0xcda9177738b15a90
424       data8 0xcdf05f2247dffab9, 0xce2f0f347f96f906
425       data8 0xce6e0be0cd551a61, 0xceb666b2c347d1de
426       data8 0xcef609b0cb874f00, 0xcf35fb5447e5c765
427       data8 0xcf763c47ee869f00, 0xcfb6cd3888d71785
428       data8 0xcff7aed4fbfbb447, 0xd038e1ce5167e3c6
429       data8 0xd07a66d7bfa0ebba, 0xd0bc3ea6b32d1b21
430       data8 0xd0f4f0e8f36c1bf8, 0xd1376458e34b037e
431       data8 0xd17a2ca133f78572, 0xd1bd4a80301c5715
432       data8 0xd1f71682b2fa4575, 0xd23ad555f773f059
433       data8 0xd2752c7039a5bf73, 0xd2b98ee008c06b59
434       data8 0xd2f4735ffd700280, 0xd32f99ed6d9ac0e1
435       data8 0xd374f0666c75d51c, 0xd3b0a7d13618e4a1
436       data8 0xd3eca2ea53bcec0c, 0xd428e23874f13a17
437       data8 0xd46f82fe293bc6d3, 0xd4ac57e9b7186420
438       data8 0xd4e972becb04e8b8, 0xd526d40a7a9b43a3
439       data8 0xd5647c5b73917370, 0xd5a26c4201bd6d13
440       data8 0xd5e0a45015350a7e, 0xd614b539c6194104
441       data8 0xd6537310e224283f, 0xd6927ab62244c917
442       data8 0xd6d1ccc1fc4ef4b7, 0xd71169cea98fdded
443       data8 0xd746a66a5bc9f6d9, 0xd786ce8f0fae5317
444       data8 0xd7bc7ff214c4e75a, 0xd7fd35467a517ed1
445       data8 0xd83e38838648d815, 0xd874a1db598b8951
446       data8 0xd8ab42205b80edaf, 0xd8ed1849d202f965
447       data8 0xd92432bd5a173685, 0xd9669ca45b03c23e
448       data8 0xd99e3327cf89574e, 0xd9d602b19b100466
449       data8 0xda0e0ba86c096841, 0xda5195fcdb1c3dce
450       data8 0xda8a1eb87a491f6c, 0xdac2e230b91c3f84
451       data8 0xdafbe0d0b66aea30, 0xdb351b04a8fafced
452       data8 0xdb6e9139e33cdd8e, 0xdba843ded7151ea1
453       data8 0xdbe2336319b61fc8, 0xdc1c60376789fa68
454       data8 0xdc56cacda82d0cd5, 0xdc917398f2797814
455       data8 0xdccc5b0d90a3e628, 0xdd0781a10469f0f2
456       data8 0xdd42e7ca0b52838f, 0xdd729ad01c69114d
457       data8 0xddae749c001fbf5e, 0xddea8f50a51c69b1
458       data8 0xde26eb69a0f0f111, 0xde576480262399bc
459       data8 0xde943789645933c8, 0xded14d58139a28af
460       data8 0xdf025c00bbf2b5c7, 0xdf3feb44d723a713
461       data8 0xdf715bc16c159be0, 0xdfaf66240e29cda8
462       data8 0xdfe139cbf6e19bdc, 0xe01fc0fe94d9fc52
463       data8 0xe051f92ffcc0bd60, 0xe090feec9c9a06ac
464       data8 0xe0c39d0c9ff862d6, 0xe0f668eeb99f188d
465       data8 0xe1362890eb663139, 0xe1695c7212aecbaa
466       data8 0xe19cbf0391bbbbe9, 0xe1d050901c531e85
467       data8 0xe2110903b4f4047a, 0xe2450559b4d80b6d
468       data8 0xe27931a231554ef3, 0xe2ad8e2ac3c5b04b
469       data8 0xe2e21b41b9694cce, 0xe316d93615862714
470       data8 0xe3590bd86a0d30f9, 0xe38e38e38e38e38e
471       data8 0xe3c397d1e6db7839, 0xe3f928f5953feb9e
472       data8 0xe42eeca17c62886c, 0xe464e32943446305
473       data8 0xe49b0ce15747a8a2, 0xe4d16a1eee94e9d4
474       data8 0xe4fa52107353f67d, 0xe5310a471f4d2dc3
475       data8 0xe567f6f1c2b9c224, 0xe59f18689a9e4c9a
476       data8 0xe5d66f04b8a68ecf, 0xe60dfb2005c192e9
477       data8 0xe645bd1544c7ea51, 0xe66fb21b505b20a0
478       data8 0xe6a7d32af4a7c59a, 0xe6e02b129c6a5ae4
479       data8 0xe70a9136a7403039, 0xe74349fb2d92a589
480       data8 0xe77c3a9c86ed7d42, 0xe7a713f88151518a
481       data8 0xe7e067453317ed2b, 0xe819f37a81871bb5
482       data8 0xe8454236bfaeca14, 0xe87f32f24c3fc90e
483       data8 0xe8aacd8688892ba6, 0xe8e523fd32f606f7
484       data8 0xe9110b5311407927, 0xe94bc8bf0c108fa3
485       data8 0xe977fdc439c2ca3c, 0xe9b3236528fc349e
486       data8 0xe9dfa70b745ac1b4, 0xea1b36268d0eaa38
487       data8 0xea480963fd394197, 0xea84034425f27484
488       data8 0xeab12713138dd1cc, 0xeade6db73a5e503b
489       data8 0xeb1b0268343b121b, 0xeb489b0b2bdb5f14
490       data8 0xeb765721e85f03d0, 0xebb389645f222f62
491       data8 0xebe198f090607e0c, 0xec0fcc9321024509
492       data8 0xec3e247da8b82f61, 0xec7c27d21321c9f7
493       data8 0xecaad5278824e453, 0xecd9a76d097d4e77
494       data8 0xed089ed5dcd99446, 0xed37bb95add09a1c
495       data8 0xed76c70508f904b6, 0xeda63bb05e7f93c6
496       data8 0xedd5d661daed2dc4, 0xee05974eef86b903
497       data8 0xee357ead791fc670, 0xee658cb3c134a463
498       data8 0xee95c1987f080211, 0xeec61d92d8c4314f
499       data8 0xeef6a0da64a014ac, 0xef274ba72a07c811
500       data8 0xef581e31a2c91260, 0xef8918b2bc43aec6
501       data8 0xefba3b63d89d7cbf, 0xefeb867ecffaa607
502       data8 0xf01cfa3df1b9c9fa, 0xf04e96dc05b43e2d
503       data8 0xf0805c944d827454, 0xf0b24ba285c495cb
504       data8 0xf0e46442e76f6569, 0xf116a6b2291d7896
505       data8 0xf1383fa9e9b5b381, 0xf16ac84f90083b9b
506       data8 0xf19d7b686dcb03d7, 0xf1d0593311db1757
507       data8 0xf20361ee8f1c711e, 0xf23695da7de51d3f
508       data8 0xf258d095e465cc35, 0xf28c4d0bfc982b34
509       data8 0xf2bff55eb3f0ea71, 0xf2f3c9cf9884636e
510       data8 0xf31670135ab9cc0f, 0xf34a8e9f0b54cdfb
511       data8 0xf37ed9fa6b8add3f, 0xf3a1cfe884ef6bb6
512       data8 0xf3d66689dcc8e8d3, 0xf40b2ab069d5c96a
513       data8 0xf42e718b90c8bc16, 0xf463822a0a3b4b00
514       data8 0xf498c1076015faf8, 0xf4bc5a19a33990b5
515       data8 0xf4f1e6a7d6f5425f, 0xf527a232cf6be334
516       data8 0xf54b8ecdcda90851, 0xf5819949c7ad87b4
517       data8 0xf5a5bac9213b48a9, 0xf5dc1501f324a812
518       data8 0xf6006bee86b5589e, 0xf63716b2fa067fa4
519       data8 0xf66df22fb6132b9c, 0xf6929fb98225deb1
520       data8 0xf6c9cd13021e3fea, 0xf6eeb177472cedae
521       data8 0xf713abf4cb0b3afb, 0xf74b4d5333684ef1
522       data8 0xf7707f75a72f8e94, 0xf7a874b97927af44
523       data8 0xf7cddf140aedf1d8, 0xf806291bacb7f7a9
524       data8 0xf82bcc43b92eafef, 0xf8646bf0defb759e
525       data8 0xf88a487dfc3ff5f7, 0xf8b03c2b46cdc17f
526       data8 0xf8e95541c152ae7a, 0xf90f832c2700c160
527       data8 0xf935c88e0c7f419b, 0xf96f5cd84fd86873
528       data8 0xf995dd53ebdd9d6d, 0xf9bc75a034436a41
529       data8 0xf9f686f26d5518de, 0xfa1d5b39b910a8c5
530       data8 0xfa4447acc4ecbfd2, 0xfa7ed7e51e6fdfb4
531       data8 0xfaa601394d49a1a0, 0xfacd431644ce0e40
532       data8 0xfaf49d96f7a75909, 0xfb2fd3c65e562fd5
533       data8 0xfb576c5762024805, 0xfb7f1debc22c4040
534       data8 0xfba6e89f32d0190a, 0xfbe2c803a0894893
535       data8 0xfc0ad1ff0ed9ecf0, 0xfc32f57bdfbcbe7f
536       data8 0xfc5b32968f99b21c, 0xfc83896bc861ab08
537       data8 0xfcabfa1861ed4815, 0xfce8d3cea7d3163e
538       data8 0xfd118595143ee273, 0xfd3a519943d4865a
539       data8 0xfd6337f8e1ae5a4b, 0xfd8c38d1c8e927eb
540       data8 0xfdb5544205095a53, 0xfdde8a67d2613531
541       data8 0xfe07db619e781611, 0xfe460768d80bf758
542       data8 0xfe6f9bfb06cd32f6, 0xfe994bcd3d14fcc2
543       data8 0xfec316fecaf3f2ab, 0xfeecfdaf33fadb80
544       data8 0xff16fffe2fa8fad6, 0xff411e0ba9db886d
545       data8 0xff6b57f7c33e4e9a, 0xff95ade2d1bd7358
546       data8 0xffc01fed60f86fb5, 0xffeaae3832b63956
547LOCAL_OBJECT_END(T_table)
548
549
550LOCAL_OBJECT_START(D_table)
551
552       data4 0x1e50f488, 0x1ebdc559, 0x1e649ec1, 0x9eed9b2c
553       data4 0x9e511c44, 0x9ec6d551, 0x9eefe248, 0x9e313854
554       data4 0x9f54ff18, 0x9d231411, 0x1ee5d63c, 0x9edf6b95
555       data4 0x9f332aaa, 0x1dc92a84, 0x1f73fb7b, 0x1e32f100
556       data4 0x9ea636f5, 0x9f6c3353, 0x9f405552, 0x1f33fd97
557       data4 0x1e975291, 0x9e59a11e, 0x1e47b0ba, 0x9d8ad33e
558       data4 0x1ea51bf6, 0x1f25d782, 0x9ecf534d, 0x1f55436f
559       data4 0x1d0975e4, 0x9f0633a1, 0x1f3e840a, 0x1f523a4c
560       data4 0x9f53cbbc, 0x9c8b5661, 0x9f6bc8eb, 0x1f4f6c7b
561       data4 0x9ed9b376, 0x9f5b30b6, 0x1f64fa5e, 0x1cbcc3e0
562       data4 0x1f343548, 0x1f62a6a2, 0x9f336abb, 0x9f1d15af
563       data4 0x1f476c83, 0x1ea86421, 0x1f33b2cf, 0x9e8f1348
564       data4 0x1f6fa829, 0x9f30ee3a, 0x9ebd6146, 0x1f2db598
565       data4 0x1ef9600d, 0x1f5b1427, 0x9edd741b, 0x1f51ef4e
566       data4 0x9f1aa57d, 0x9ee9b5e0, 0x9f17ecd7, 0x1ead71ff
567       data4 0x1f6c910e, 0x9e1837df, 0x9f0f17d9, 0x9e8350dd
568       data4 0x9d292f1b, 0x9e33b3ab, 0x9d6f0fe8, 0x9ed8c7cc
569       data4 0x9ec598c8, 0x9d56758c, 0x1e090c1e, 0x9ed4b941
570       data4 0x9f1fc4cf, 0x1f63513a, 0x9edd0abc, 0x1e3924dd
571       data4 0x1f60d56f, 0x1ea84424, 0x9e88f4fb, 0x1f205c09
572       data4 0x1ec9ae4e, 0x1d2d5738, 0x9f2c9f6d, 0x1e0765c2
573       data4 0x1e8bbdd7, 0x9f16d9f1, 0x9ea62627, 0x1f13904c
574       data4 0x1e566ab8, 0x9dca3d1a, 0x9e91f2a1, 0x9f14641c
575       data4 0x9f278946, 0x1f490c1e, 0x1f575eb6, 0x1f50b3fd
576       data4 0x9da32efb, 0x1ea95e59, 0x9e41e058, 0x9eada15f
577       data4 0x9e4fe66c, 0x1f3abc98, 0x1f1b8d1e, 0x9ece97e4
578       data4 0x1d188aed, 0x9e89b6ee, 0x1f287478, 0x9e8a161a
579       data4 0x1e4749f7, 0x9e68084a, 0x1e867f33, 0x9f462b63
580       data4 0x1db30792, 0x1f59a767, 0x9d1da4ae, 0x9f472a33
581       data4 0x1d1e91cd, 0x9f414824, 0x9f473d4f, 0x1f4b5783
582       data4 0x9f5b04b8, 0x9f5c205b, 0x1f309617, 0x9f0d6852
583       data4 0x9d96a609, 0x9f0965c2, 0x9e23f467, 0x9f089884
584       data4 0x9ec71458, 0x9ed6e955, 0x1e5e8691, 0x1f5b2bbc
585       data4 0x9f128268, 0x1ed40f5b, 0x1dc430ce, 0x1f345986
586       data4 0x1d778f72, 0x1e9b11d6, 0x9f5a40be, 0x9e07f61a
587       data4 0x9ed641a7, 0x9f334787, 0x1e952fd0, 0x1edeb5e2
588       data4 0x9e9f3eb1, 0x9e379fd9, 0x1f13102a, 0x9e5e80e1
589       data4 0x1c757944, 0x1dae2260, 0x1f183ab7, 0x1e55d576
590       data4 0x9e6bb99f, 0x9f52d7cb, 0x9e73a0f5, 0x1d4e1d14
591       data4 0x9dd05b53, 0x1f2261e4, 0x9d4ee73d, 0x1ede515e
592       data4 0x1f22a573, 0x9ecac348, 0x1e6a2ac0, 0x1e2787d2
593       data4 0x9eb64b87, 0x1f0c69c6, 0x9f470a01, 0x9d7c1686
594       data4 0x1e468ebe, 0x9f21ee2f, 0x9ee52116, 0x9e20f715
595       data4 0x1ed18533, 0x9f005b38, 0x9f20cb95, 0x1da72967
596       data4 0x1f1ba5d7, 0x1e2f8b16, 0x9c794f96, 0x9ca74ea3
597       data4 0x1f410555, 0x9eff2b96, 0x1ce8f0b1, 0x1f0cee77
598       data4 0x1f191edd, 0x9ed5fcbc, 0x1f30f242, 0x9e0ad369
599       data4 0x1ed8f3c8, 0x1f52bb0e, 0x9e9ce408, 0x1f18907f
600       data4 0x9ecdad40, 0x9e8af91d, 0x1d46698a, 0x9f4b93d6
601       data4 0x9f3f5d33, 0x1e2e52f7, 0x9f13aeec, 0x9f3b1969
602       data4 0x1f0996f4, 0x9f2a03df, 0x1e264767, 0x1f3ab1fb
603       data4 0x9f3193c9, 0x9f21ce22, 0x9eab624c, 0x9ecd8fb1
604       data4 0x1eaf9a85, 0x1f0c6a2c, 0x1eecbe61, 0x1f3fead9
605       data4 0x1f1d3a29, 0x1e9099ce, 0x1eadd875, 0x1e4dbfb8
606       data4 0x9dc640d2, 0x1f413680, 0x9f3f57b3, 0x1dfa1553
607       data4 0x1ec71c6b, 0x1e00cc00, 0x9f271e55, 0x1e5a88bb
608       data4 0x1f46cc2b, 0x1ee80ff9, 0x9e29c6f3, 0x1f15e229
609       data4 0x9ea83d66, 0x1f37408e, 0x9dacb66e, 0x1e6f6259
610       data4 0x9f106973, 0x1dd4e5ac, 0x1cbfdcc8, 0x9f231c9f
611       data4 0x9e8677e4, 0x9e9e695a, 0x1efd782b, 0x9dd26959
612       data4 0x9e80af69, 0x1f386fb3, 0x1f022e8c, 0x9e839967
613       data4 0x1ce6796f, 0x1e4c22c2, 0x1e57ef24, 0x1e919804
614       data4 0x9d7ea090, 0x1e40140a, 0x1f261b46, 0x1db75be2
615       data4 0x1f145019, 0x9e3102b9, 0x9e22507b, 0x1eae813c
616       data4 0x1f117e97, 0x1f282296, 0x1f3814b3, 0x1e17977b
617       data4 0x1f39d6ff, 0x9f1c81b9, 0x9eb5bcad, 0x1f0f596e
618       data4 0x1e757fd5, 0x9f090daa, 0x9f2532fc, 0x9eebafbb
619       data4 0x1f086556, 0x9eeedde8, 0x9f32e174, 0x1e33c030
620       data4 0x1f1f145a, 0x1e6e556c, 0x1e419ffb, 0x9eb6019a
621       data4 0x9e872a2e, 0x1e113136, 0x1e93096f, 0x1f39be40
622       data4 0x1f1665ad, 0x9db81d7d, 0x9cd29091, 0x1e3f4af7
623       data4 0x9f23176c, 0x9eccf9b3, 0x1f34fc6c, 0x9ed36894
624       data4 0x1ef08e06, 0x9f3b46bb, 0x9f2c850b, 0x1f1565a4
625       data4 0x1e887bc3, 0x1e92629c, 0x9f11ac9e, 0x9e5579f3
626       data4 0x1e4d5790, 0x9ee1c3d1, 0x9e916aec, 0x9eb8d9b8
627       data4 0x1db46105, 0x1e168663, 0x1f26a942, 0x9f0f0383
628       data4 0x9f079032, 0x9ecae1d8, 0x1ed3b34c, 0x9edc5ee6
629       data4 0x9e8a75a7, 0x1f3c3de2, 0x9ee5041e, 0x1f08c727
630       data4 0x1d02d7ae, 0x9f36adda, 0x9ef9a857, 0x9ef5cb3a
631       data4 0x9eee73da, 0x9da5d629, 0x1e0e99be, 0x1e5159b9
632       data4 0x1f2eac89, 0x9e8eedc5, 0x1dd0ec90, 0x1f229aff
633       data4 0x1ed9c3e6, 0x1e95c55a, 0x9f0c24e4, 0x1e8afed6
634       data4 0x1e599a96, 0x1e881b21, 0x1eab84b9, 0x9ba2bb0e
635       data4 0x9e33ab10, 0x1f1710b5, 0x1ebfa271, 0x9e90bbc5
636       data4 0x9f32515b, 0x9b32aae8, 0x1eda455c, 0x1da8186e
637       data4 0x9e8917ff, 0x1ec4d08e, 0x1c90069d, 0x9f2f1d29
638       data4 0x9ecee86d, 0x9f234d1f, 0x1f370724, 0x1da87496
639       data4 0x1e7959f0, 0x9e8ada34, 0x1f1c7f6f, 0x1edd576b
640       data4 0x9de91e8b, 0x1ec4ef89, 0x1f32078a, 0x1e9925e2
641       data4 0x9d8eeccb, 0x9ea3d011, 0x1f231fdf, 0x9f1dbdfa
642       data4 0x1e7507a3, 0x1ec42614, 0x9e8693cb, 0x9ec68398
643       data4 0x1d5b05fb, 0x1de32119, 0x9f003429, 0x9ec16d92
644       data4 0x9f095315, 0x9f119d2c, 0x9ed0c984, 0x9f090662
645       data4 0x9e59aa1f, 0x9ed4e64a, 0x9f2798a7, 0x9f23624d
646       data4 0x1e0467d9, 0x1f22e7e7, 0x1e915256, 0x9cb4df70
647       data4 0x9e6f687c, 0x9e3c35e5, 0x9e5757ab, 0x9f031fa1
648       data4 0x1f25bff7, 0x1f0e58c2, 0x1ef3ce04, 0x1f002ecb
649       data4 0x9ebdc836, 0x9ed657dd, 0x9f149441, 0x9e8544b2
650       data4 0x1cd8ff1e, 0x1e9bb463, 0x1eaa1c5c, 0x1f200c1a
651       data4 0x1edbfbaf, 0x1f18724d, 0x9ed63c22, 0x9f08e045
652       data4 0x1f13ad07, 0x9e949311, 0x9f0c50d4, 0x1e824516
653       data4 0x1d5e52ba, 0x1d583fbd, 0x1e3b60a9, 0x9effe6d3
654       data4 0x1f0d0508, 0x1f00be77, 0x9e404bfa, 0x9e1ca381
655       data4 0x9f084dd8, 0x9e6db85d, 0x1db698e4, 0x9ebd1871
656       data4 0x9ecc2679, 0x1ee68442, 0x1edb1050, 0x9dbc96a4
657       data4 0x9f27c1f4, 0x1c99b756, 0x1eb4400a, 0x9f24390a
658       data4 0x1d927875, 0x9f074faa, 0x1e9dc2c3, 0x1f13c0d2
659       data4 0x1e3c9685, 0x9e6b6f75, 0x9db9cb31, 0x1ea5f3aa
660       data4 0x9d992c61, 0x1f1015e4, 0x1f194f70, 0x9e19d2b3
661       data4 0x9d89116c, 0x1f23cd35, 0x1e33d3a2, 0x1ee331b8
662       data4 0x1d5ba7ec, 0x9f273788, 0x9e6907f4, 0x9ed5f912
663       data4 0x9edd458d, 0x1e2ca7b2, 0x1ef81fe4, 0x1dc7ade6
664       data4 0x1e876e51, 0x9f04ec89, 0x1f1da63a, 0x1ec02bd0
665       data4 0x9e71326f, 0x1e7847b4, 0x1f0de618, 0x9e036cb6
666       data4 0x1eec61e2, 0x1ef1758b, 0x9ee880a3, 0x1ed269d7
667       data4 0x1e27edd3, 0x9e8a81a1, 0x1eacb84d, 0x9e1aad37
668       data4 0x1f1aa8f7, 0x1e9bbd90, 0x1ea1b61f, 0x9ed41c2f
669       data4 0x1dbb5dd6, 0x1f0ec733, 0x9df06b1b, 0x1e06fef1
670       data4 0x9edede3a, 0x1edeb5e2, 0x1f0e63ee, 0x9db316bb
671       data4 0x9efc1ad3, 0x1f01fbb5, 0x9cc0d078, 0x1ea28b36
672       data4 0x9e9dd205, 0x9e791534, 0x1da1c8d5, 0x9e8195cc
673       data4 0x1f0681a4, 0x1eeaf1e2, 0x9ef83b37, 0x9f22a92b
674       data4 0x1eabc4ce, 0x1f10eefb, 0x1e06d9aa, 0x1e7cacd5
675       data4 0x1f1ea087, 0x1eb21983, 0x9f100c78, 0x1e840abe
676       data4 0x9efab66c, 0x1f183fa8, 0x9e84ee68, 0x9eea083d
677       data4 0x9ee23a74, 0x1f1351d7, 0x9ec5d42a, 0x9f071f57
678       data4 0x9ef578d9, 0x9f1aa7e7, 0x1eb02044, 0x1f151a2e
679       data4 0x9c0dc8b2, 0x9ef4087a, 0x1ec12b93, 0x1c1a946b
680       data4 0x1e89946f, 0x9dafe8c3, 0x1d295288, 0x9e8497ab
681       data4 0x1ec000c6, 0x1e102f29, 0x1e542256, 0x1e67d44d
682       data4 0x1ef688d8, 0x1f0e0f29, 0x1e67861f, 0x1e869748
683       data4 0x1ee6aa6e, 0x9e4d228b, 0x9e50be5b, 0x1e9fe225
684       data4 0x9ea34102, 0x9e628a3b, 0x9ed9fd83, 0x1ecd7109
685       data4 0x1f1864ff, 0x1ea19b76, 0x1db0d1c9, 0x9dff519b
686       data4 0x1e8fea71, 0x9ee82e9a, 0x9f08919b, 0x9ef5c8ae
687       data4 0x9ee446a4, 0x1ea59444, 0x1eb74230, 0x1ea13fbf
688       data4 0x9ea6a3ea, 0x1e5f2797, 0x9e0adb07, 0x9d3adadd
689       data4 0x1ebf2ee2, 0x1da19bfa, 0x1e8dea6d, 0x1ec4fea9
690       data4 0x1e669f22, 0x1dc5f919, 0x9ed25caa, 0x1ee475b1
691       data4 0x1ed0603e, 0x9eacb35c, 0x1dc00b27, 0x1e2f9991
692       data4 0x1e7b0406, 0x1eaa3387, 0x9d865bde, 0x1eb78a48
693       data4 0x1c40ae2e, 0x1ee9838b, 0x9f0f0d7f, 0x1e3e5d26
694       data4 0x1e99e7a6, 0x9e681ccf, 0x9e93ed65, 0x9eeb6a66
695       data4 0x1e29e9af, 0x9e96f923, 0x9e74f11d, 0x9f1474da
696       data4 0x1eec2ea7, 0x1ebf7aa3, 0x9c25dcca, 0x9f0553c2
697       data4 0x9e599efd, 0x1d2ab490, 0x1e95d7cd, 0x9ee4b20e
698       data4 0x9d988ce5, 0x9ef9787e, 0x9dbbba5b, 0x9f12c304
699       data4 0x1e3b9d70, 0x1e7bcae8, 0x9d98bb6e, 0x9e8e6b01
700       data4 0x9f07d03b, 0x9d67c822, 0x9f0ef69e, 0x1c7c0fe3
701       data4 0x9e9bfbb9, 0x9e83b84b, 0x1efbf15e, 0x9ecfa6a6
702       data4 0x9c91158e, 0x9ecf6770, 0x1ee1e3a8, 0x9dc95ec0
703       data4 0x1ef603f7, 0x1d5e52ba, 0x1c477d1b, 0x9e955cd8
704       data4 0x1ed665b0, 0x9e8376c4, 0x9c0ee88e, 0x1e8c989e
705       data4 0x1ea2df29, 0x9d961e5c, 0x1e101813, 0x1e7fffff
706       data4 0x9e5abff4, 0x1dbddd71, 0x1eb69100, 0x1e71f114
707       data4 0x1e9ca798, 0x1ef62c8d, 0x9db4e55a, 0x1dbe69ce
708       data4 0x9ef1c01f, 0x1f044a2a, 0x9eb9e0d7, 0x9ee59745
709       data4 0x9e874803, 0x1ea0b418, 0x9e13572a, 0x1ddbb3a2
710       data4 0x9ec0e391, 0x1e89fba1, 0x1ee8b261, 0x9e5d25f0
711       data4 0x9ef222cb, 0x9ef135ec, 0x1ea04b9a, 0x9f04291f
712       data4 0x9e969254, 0x9ee32f08, 0x9ed909d3, 0x9e362640
713       data4 0x9ec20735, 0x1e50131b, 0x9ed4e049, 0x1ee8e817
714       data4 0x1e1e09c0, 0x9ea643c5, 0x9e5a1ab6, 0x9e389059
715       data4 0x1e560947, 0x1d02b877, 0x1e4475ab, 0x9ea9aaf6
716       data4 0x1e95bc5e, 0x1eaf6afd, 0x1d43067d, 0x9d043821
717       data4 0x9e97baa9, 0x1de5c4f9, 0x9e9a0069, 0x9e1b9944
718       data4 0x1eb13686, 0x9eb907eb, 0x1e059589, 0x1cbd0f93
719       data4 0x9eb7e6ae, 0x1e9fa175, 0x1ee5bdf4, 0x1e8052f7
720       data4 0x9c80d1e3, 0x1bfbe28e, 0x9e672b3b, 0x9ecacf19
721       data4 0x9e3c04be, 0x1dfe8c5c, 0x1e1ba9cb, 0x1eb40b1e
722       data4 0x1ec7e7f6, 0x9d0d45b3, 0x1ef0113b, 0x9a155fa3
723       data4 0x1e28ec3b, 0x1e7ca8df, 0x9d2f91b4, 0x1eccd9ed
724       data4 0x9ed943bc, 0x9ccaab19, 0x9e8a5c58, 0x1ec3bca8
725       data4 0x1ed78dc7, 0x9ed391a8, 0x9e938f6e, 0x9ec4a030
726       data4 0x9e80346e, 0x1e7a4686, 0x9e284315, 0x9e39584c
727       data4 0x1ebdc9b4, 0x9e9cfce5, 0x9ef55c65, 0x1e2941e7
728       data4 0x9efbe59f, 0x1d87c41b, 0x1e40befc, 0x1e3d05b5
729       data4 0x1de9ea67, 0x1ec9a21c, 0x1decb69a, 0x1df6e75a
730       data4 0x9e8030ab, 0x9db20540, 0x9ef1e977, 0x1e3cdc43
731       data4 0x1e0492b0, 0x9e91d872, 0x1e775346, 0x9e939978
732       data4 0x1eb2714e, 0x1e49a203, 0x9e10195a, 0x1ef1ffc3
733       data4 0x9ea8b709, 0x9e832e27, 0x1ed5ac3b, 0x1edb20a6
734       data4 0x1e4dbd4e, 0x1efbb932, 0x1d8170ec, 0x1e6c4849
735       data4 0x1f008e17, 0x1e8000c4, 0x1d855ecf, 0x9e37cb85
736       data4 0x1ecffdf5, 0x1eba6519, 0x9edbe600, 0x1ea3e5e7
737       data4 0x1ed4fb39, 0x1f00be77, 0x1e6f4484, 0x9e9e7107
738       data4 0x9e30b29d, 0x9ee6e174, 0x1e3a2656, 0x9dd72f3f
739       data4 0x9ee12138, 0x1ed16fed, 0x9ece8a02, 0x9ca5b249
740       data4 0x9eafd508, 0x9ef0e9fc, 0x1d1307ac, 0x1eecee20
741       data4 0x1cf60c6f, 0x9d556216, 0x9eaed175, 0x9ec919f4
742       data4 0x1ec2c988, 0x1cd82772, 0x9dc99456, 0x1eab0467
743       data4 0x1e89b36f, 0x1c757944, 0x1eef9abd, 0x9e98664d
744LOCAL_OBJECT_END(D_table)
745
746
747.section .text
748GLOBAL_LIBM_ENTRY(cbrtl)
749
750{ .mfi
751       getf.sig GR_ARGSIG = f8
752       // will continue on main path only for normal/denormal numbers
753       // all other values will be filtered out and will exit early
754       fclass.nm.unc p12, p7 = f8, 0x1b
755       // GR_ADDR = pointer to C_1...C_6 followed by T_table
756       addl GR_ADDR = @ltoff(poly_coeffs), gp
757}
758{ .mfi
759       // GR_BIAS23 = 2/3*bias -63 = 0xaaaa-0x3f = 0xaa6b
760       mov GR_BIAS23 = 0xaa6b
761       // normalize a
762       fma.s1 FR_XNORM = f8, f1, f0
763       // GR_D_ADDR = pointer to D table
764       addl GR_D_ADDR = @ltoff(D_table), gp
765}
766;;
767
768{ .mmf
769       // load start address for C_1...C_6 followed by T_table
770       ld8 GR_C_START = [ GR_ADDR ]
771       // load start address of D table
772       ld8 GR_D_START = [ GR_D_ADDR ]
773       // y = frcpa(a)
774       frcpa.s1 FR_RCP, p6 = f1, f8
775}
776;;
777
778{ .mmi
779        // get normalized significand
780       getf.sig GR_NORMSIG = FR_XNORM
781        // get exponent
782       getf.exp GR_NORMEXPSGN = FR_XNORM
783 (p7)  cmp.eq p12, p0 = GR_ARGSIG, r0
784}
785;;
786
787{ .mii
788       // load C_1
789       ldfe FR_C1 = [ GR_C_START ], 16
790       mov GR_SGNMASK = 0x20000
791       nop.i 0
792}
793;;
794
795{ .mfb
796       // load C_2
797       ldfe FR_C2 = [ GR_C_START ], 16
798 (p12) fma.s0 f8 = f8, f1, f0
799       // NaN/Infinities exit early
800 (p12) br.ret.spnt b0
801}
802;;
803
804{ .mfi
805       // load C_3, C_4
806       ldfpd FR_C3, FR_C4 = [ GR_C_START ], 16
807       // y = frcpa(a), set flags and result when argument is 0
808       // only used when p6=0
809       frcpa.s0 f8, p0 = f1, f8
810       nop.i 0
811}
812;;
813
814{ .mii
815       // get GR_SIGN = sign
816       and GR_SIGN = GR_NORMEXPSGN, GR_SGNMASK
817       // eliminate leading 1 from GR_NORMSIG = 2nd table index
818       shl GR_INDEX2 = GR_NORMSIG, 1
819       // eliminate sign from exponent
820       andcm GR_NORMEXP = GR_NORMEXPSGN, GR_SGNMASK
821}
822;;
823
824{ .mfi
825       // load C_5, C_6
826 (p6)  ldfpd FR_C5, FR_C6 = [ GR_C_START ], 16
827       // r = 1-a*y
828 (p6)  fnma.s1 FR_R = FR_RCP, FR_XNORM, f1
829       // Start computation of floor(exponent/3) by
830       // computing (2^20+2)/3*exponent = exponent*0x55556
831       // 1: exponent* = 5;
832       // (2^{16}-1)/3 = 0x5555:
833       // will form 0x5555*exponent by using shladd's
834       shladd GR_EXP5 = GR_NORMEXP, 2, GR_NORMEXP
835}
836;;
837
838{ .mib
839       // Next several integer steps compute floor(exponent/3)
840       // GR_TMP1 = (5*expon)*16
841       shladd GR_TMP1 = GR_EXP5, 4, r0
842       // GR_EXP3 = 3*exponent
843       shladd GR_EXP3 = GR_NORMEXP, 1, GR_NORMEXP
844       nop.b 0
845}
846;;
847
848{ .mmi
849       // GR_EXP6 = 6*exponent
850       shladd GR_EXP6 = GR_EXP3, 1, r0
851       // GR_EXP17 = 17*expon
852       add GR_EXP17 = GR_EXP5, GR_TMP1
853       // GR_IX2 = 2nd table index (8 bits)
854       shr.u GR_IX2 = GR_INDEX2, 56
855}
856;;
857
858{ .mmi
859       // adjust T_table pointer by 2nd index
860       shladd GR_T_INDEX = GR_IX2, 3, GR_C_START
861       // adjust D_table pointer by 2nd index
862       shladd GR_D_INDEX = GR_IX2, 2, GR_D_START
863       // GR_TMP2 = (17*expon)*16^2
864       shl GR_TMP2 = GR_EXP17, 8
865}
866;;
867
868{ .mmi
869       // GR_TMP3 = expon*(2^16-1)/3
870       add GR_TMP3 = GR_EXP17, GR_TMP2
871;;
872       // GR_TMP4 = expon*(2^20+2)/3 = expon*0x55556
873       shladd GR_TMP4 = GR_TMP3, 4, GR_EXP6
874       nop.i 0
875}
876;;
877
878{ .mii
879       nop.m 0
880       // GR_EXP_RES = floor(expon/3)
881       shr.u GR_EXP_RES = GR_TMP4, 20
882       nop.i 0
883}
884;;
885
886{ .mmi
887       nop.m 0
888       // r16 = 3*exponent
889       shladd r16 = GR_EXP_RES, 1, GR_EXP_RES
890       // bias exponent
891       add GR_EXPBIAS = GR_BIAS23, GR_EXP_RES
892}
893;;
894
895{ .mmi
896       // get remainder of exponent/3
897       sub GR_EXP_MOD_3 = GR_NORMEXP, r16
898;;
899       // add sign to exponent
900       or GR_EXPSIGNRES = GR_EXPBIAS, GR_SIGN
901       // remainder << = 8
902       shl GR_REMTMP = GR_EXP_MOD_3, 8
903}
904;;
905
906{ .mfi
907       // adjust D_table pointer by 1st index
908       shladd GR_IX_D = GR_REMTMP, 2, GR_D_INDEX
909       // P_1 = C_1+C_2*r
910 (p6)  fma.s1 FR_P1 = FR_C2, FR_R, FR_C1
911       // adjust T_table pointer by 1st index
912       shladd GR_IX_T = GR_REMTMP, 3, GR_T_INDEX
913}
914{ .mfi
915       // FR_SGNEXP = sign*2^{exponent/3}
916 (p6)  setf.exp FR_SGNEXP = GR_EXPSIGNRES
917       // r^2 = r*r
918 (p6)  fma.s1 FR_R2 = FR_R, FR_R, f0
919       nop.i 0
920}
921;;
922
923{ .mfi
924       // load D
925 (p6)  ldfs FR_D = [ GR_IX_D ]
926       // P_2 = C_3+C_4*r
927 (p6)  fma.s1 FR_P2 = FR_C4, FR_R, FR_C3
928       nop.i 0
929}
930{ .mfi
931       // load T
932 (p6)  ldf8 FR_T = [ GR_IX_T ]
933       // P_3 = C_5+C_6*r
934 (p6)  fma.s1 FR_P3 = FR_C6, FR_R, FR_C5
935       nop.i 0
936}
937;;
938
939{ .mfi
940       nop.m 0
941       // P_4 = D-r*P_1
942 (p6)  fnma.s1 FR_P4 = FR_R, FR_P1, FR_D
943       nop.i 0
944}
945{ .mfi
946       nop.m 0
947       // r^3 = r*r^2
948 (p6)  fma.s1 FR_R3 = FR_R, FR_R2, f0
949       nop.i 0
950}
951;;
952
953{ .mfi
954       nop.m 0
955       // P_5 = P_2+r2*P_3
956 (p6)  fma.s1 FR_P5 = FR_R2, FR_P3, FR_P2
957       nop.i 0
958}
959;;
960
961{ .mfi
962       nop.m 0
963       // T = T*(sign*2^{exponent/3})
964 (p6)  fma.s1 FR_TF = FR_T, FR_SGNEXP, f0
965       nop.i 0
966}
967{ .mfi
968       nop.m 0
969       // P = P_4-r3*P_5
970 (p6)  fnma.s1 FR_P = FR_R3, FR_P5, FR_P4
971       nop.i 0
972}
973;;
974
975{ .mfb
976       nop.m 0
977       // result = T+T*p
978 (p6)  fma.s0 f8 = FR_TF, FR_P, FR_TF
979       br.ret.sptk b0
980}
981;;
982
983GLOBAL_LIBM_END(cbrtl)
984libm_alias_ldouble_other (cbrt, cbrt)
985