1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
23 */
24/*
25 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
26 * Use is subject to license terms.
27 */
28
29	.file	"__vpow.S"
30
31#include "libm.h"
32
33	RO_DATA
34	.align	64
35
36.CONST_TBL:
37
38! __mt_constlog2[2*i] = high order rounded 32 bits log2(1+i/256)*256, i = [0, 255]
39! __mt_constlog2[2*i+1] = low order least bits log2(1+i/256)*256, i = [0, 255]
40
41	.word	0x00000000,	0x00000000,	0x00000000,	0x00000000,
42	.word	0x3ff709c4,	0x00000000,	0x3e9b5eab,	0x1dd2b66f,
43	.word	0x4006fe51,	0x00000000,	0xbea2443d,	0xeba01c72,
44	.word	0x40113631,	0x00000000,	0x3e97a97b,	0x0c4bb41a,
45	.word	0x4016e797,	0x00000000,	0xbebe8f4b,	0x759d6476,
46	.word	0x401c9364,	0x00000000,	0xbeb15ebc,	0x1e666460,
47	.word	0x40211cd2,	0x00000000,	0xbeb57665,	0xf6893f5d,
48	.word	0x4023ed31,	0x00000000,	0xbecae5e9,	0x7677f62d,
49	.word	0x4026bad3,	0x00000000,	0x3ecd63bf,	0x61cc4d82,
50	.word	0x402985c0,	0x00000000,	0xbebe5b57,	0x35cfaf8e,
51	.word	0x402c4dfb,	0x00000000,	0xbec1bd55,	0x2842c1c2,
52	.word	0x402f138a,	0x00000000,	0xbecf336b,	0x18178cbe,
53	.word	0x4030eb39,	0x00000000,	0xbed81758,	0x19530c23,
54	.word	0x40324b5b,	0x00000000,	0x3edf84d6,	0x8f2268b4,
55	.word	0x4033aa30,	0x00000000,	0xbec16c07,	0x1e93fd97,
56	.word	0x403507b8,	0x00000000,	0x3ecb019d,	0xdb6a796a,
57	.word	0x403663f7,	0x00000000,	0xbe94dbb3,	0xa60cceb2,
58	.word	0x4037beef,	0x00000000,	0xbeda51d7,	0x5fb0ef94,
59	.word	0x403918a1,	0x00000000,	0x3edb918c,	0xd6ab9c8d,
60	.word	0x403a7112,	0x00000000,	0xbec065bd,	0xb60a5dd4,
61	.word	0x403bc842,	0x00000000,	0x3ed02b6a,	0xee98ecb1,
62	.word	0x403d1e35,	0x00000000,	0xbebca47d,	0x25b2f4c7,
63	.word	0x403e72ec,	0x00000000,	0x3eb17fa5,	0xb21cbdb6,
64	.word	0x403fc66a,	0x00000000,	0x3eae1601,	0x49209a69,
65	.word	0x40408c59,	0x00000000,	0xbeecc961,	0x871a7611,
66	.word	0x404134e2,	0x00000000,	0xbee2ddbe,	0x74803297,
67	.word	0x4041dcd2,	0x00000000,	0xbeea2ab5,	0x212856eb,
68	.word	0x40428429,	0x00000000,	0x3ee2c1e9,	0x8fe35da3,
69	.word	0x40432aea,	0x00000000,	0xbecd8751,	0xe5e0ae0d,
70	.word	0x4043d114,	0x00000000,	0x3eeb66a2,	0x98fc02ce,
71	.word	0x404476aa,	0x00000000,	0xbea9f022,	0xcb3b1c5b,
72	.word	0x40451bac,	0x00000000,	0xbeebe168,	0xdd6dd3fe,
73	.word	0x4045c01a,	0x00000000,	0x3edcfdeb,	0x43cfd006,
74	.word	0x404663f7,	0x00000000,	0xbea4dbb3,	0xa60cceb2,
75	.word	0x40470743,	0x00000000,	0xbed5887e,	0xc06b1ff2,
76	.word	0x4047a9ff,	0x00000000,	0xbedc17d1,	0x108740d9,
77	.word	0x40484c2c,	0x00000000,	0xbed7e87e,	0x268116ee,
78	.word	0x4048edcb,	0x00000000,	0xbec7cad4,	0x944a32be,
79	.word	0x40498edd,	0x00000000,	0x3eadf9c3,	0x7c0beb3a,
80	.word	0x404a2f63,	0x00000000,	0x3ed1905c,	0x35651c43,
81	.word	0x404acf5e,	0x00000000,	0x3ed6da76,	0x49f7f08f,
82	.word	0x404b6ecf,	0x00000000,	0x3ec75f95,	0xe96bed8d,
83	.word	0x404c0db7,	0x00000000,	0xbed91359,	0x08df8ec9,
84	.word	0x404cac16,	0x00000000,	0x3ede3b86,	0xe44b6265,
85	.word	0x404d49ee,	0x00000000,	0x3ee30c96,	0x5bf23d2d,
86	.word	0x404de740,	0x00000000,	0xbecc4eb7,	0xf11e41be,
87	.word	0x404e840c,	0x00000000,	0xbec8b195,	0xb338360c,
88	.word	0x404f2053,	0x00000000,	0x3edc9047,	0x93a3ba95,
89	.word	0x404fbc17,	0x00000000,	0xbee1bf65,	0xfd7715ca,
90	.word	0x40502bac,	0x00000000,	0xbef76cbe,	0x67113a18,
91	.word	0x4050790b,	0x00000000,	0xbee227e7,	0xfb487e73,
92	.word	0x4050c629,	0x00000000,	0x3efd550a,	0xa3a93ec8,
93	.word	0x40511308,	0x00000000,	0xbee2967a,	0x451a7b48,
94	.word	0x40515fa6,	0x00000000,	0x3efdaec2,	0x3fd65f8e,
95	.word	0x4051ac06,	0x00000000,	0xbef35b83,	0xe3eb5ce3,
96	.word	0x4051f826,	0x00000000,	0xbec24ee3,	0xd9a82f2e,
97	.word	0x40524408,	0x00000000,	0xbef53c7e,	0x319f6e92,
98	.word	0x40528fab,	0x00000000,	0x3eead993,	0x41b181d1,
99	.word	0x4052db11,	0x00000000,	0xbead932a,	0x8487642e,
100	.word	0x40532639,	0x00000000,	0x3ef8daca,	0x0d66b8f9,
101	.word	0x40537125,	0x00000000,	0xbee8ad99,	0x09933766,
102	.word	0x4053bbd4,	0x00000000,	0xbef7d788,	0xc15a9f3d,
103	.word	0x40540646,	0x00000000,	0x3eed8d82,	0x24bad97a,
104	.word	0x4054507d,	0x00000000,	0xbe922b03,	0xc6b2a5f6,
105	.word	0x40549a78,	0x00000000,	0x3ef2f346,	0xe2bf924b,
106	.word	0x4054e439,	0x00000000,	0xbeffc5c1,	0x258110a4,
107	.word	0x40552dbe,	0x00000000,	0xbead9b4a,	0x641184f9,
108	.word	0x40557709,	0x00000000,	0x3edb3378,	0xcab10782,
109	.word	0x4055c01a,	0x00000000,	0x3eecfdeb,	0x43cfd006,
110	.word	0x405608f2,	0x00000000,	0xbef2f5ad,	0xd49a43fc,
111	.word	0x40565190,	0x00000000,	0xbedb9884,	0x591add87,
112	.word	0x405699f5,	0x00000000,	0x3ee2466a,	0x5c3462a4,
113	.word	0x4056e222,	0x00000000,	0xbee93179,	0x90d43957,
114	.word	0x40572a16,	0x00000000,	0x3eebe5e0,	0xc14a1a6d,
115	.word	0x405771d3,	0x00000000,	0xbef16041,	0x3106e405,
116	.word	0x4057b958,	0x00000000,	0xbef4eb95,	0x4eea2724,
117	.word	0x405800a5,	0x00000000,	0x3ef8c587,	0x150cabae,
118	.word	0x405847bc,	0x00000000,	0x3ee9ec30,	0xc6e3e04a,
119	.word	0x40588e9c,	0x00000000,	0x3efcb82c,	0x89692d99,
120	.word	0x4058d546,	0x00000000,	0x3efced70,	0xdc6acf42,
121	.word	0x40591bbb,	0x00000000,	0xbefdb83a,	0x3dd2d353,
122	.word	0x405961f9,	0x00000000,	0x3eb49d02,	0x6e33d676,
123	.word	0x4059a802,	0x00000000,	0x3eec8f11,	0x979a5db7,
124	.word	0x4059edd6,	0x00000000,	0x3efd66c9,	0x77e236c7,
125	.word	0x405a3376,	0x00000000,	0x3ec4fec0,	0xa13af882,
126	.word	0x405a78e1,	0x00000000,	0x3ef1bdef,	0xbd14a081,
127	.word	0x405abe18,	0x00000000,	0x3efe5fc7,	0xd238691d,
128	.word	0x405b031c,	0x00000000,	0xbed01f9b,	0xcb999fe9,
129	.word	0x405b47ec,	0x00000000,	0xbec18efa,	0xbeb7d722,
130	.word	0x405b8c89,	0x00000000,	0xbee203bc,	0xc3346511,
131	.word	0x405bd0f3,	0x00000000,	0xbed6186f,	0xcf54bbd3,
132	.word	0x405c152a,	0x00000000,	0x3efb0932,	0xb9700973,
133	.word	0x405c5930,	0x00000000,	0xbef4b5a9,	0x2a606047,
134	.word	0x405c9d03,	0x00000000,	0xbec26b70,	0x98590071,
135	.word	0x405ce0a5,	0x00000000,	0xbefb7169,	0xe0cda8bd,
136	.word	0x405d2415,	0x00000000,	0xbeebfa06,	0xc156f521,
137	.word	0x405d6754,	0x00000000,	0xbedfcd15,	0xf101c142,
138	.word	0x405daa62,	0x00000000,	0x3ee10327,	0xdc8093a5,
139	.word	0x405ded40,	0x00000000,	0xbee5dee4,	0xd9d8a273,
140	.word	0x405e2fed,	0x00000000,	0x3eee84b9,	0x4c06f913,
141	.word	0x405e726b,	0x00000000,	0xbef7862a,	0xcb7ceb98,
142	.word	0x405eb4b8,	0x00000000,	0x3ef1f456,	0xf394f972,
143	.word	0x405ef6d6,	0x00000000,	0x3efcca38,	0x881f4780,
144	.word	0x405f38c5,	0x00000000,	0x3ef9ef31,	0x50343f8e,
145	.word	0x405f7a85,	0x00000000,	0x3efa32c1,	0xb3b3864c,
146	.word	0x405fbc17,	0x00000000,	0xbef1bf65,	0xfd7715ca,
147	.word	0x405ffd7a,	0x00000000,	0xbef95f00,	0x19518ce0,
148	.word	0x40601f57,	0x00000000,	0x3ef3b932,	0x6ff91960,
149	.word	0x40603fdb,	0x00000000,	0xbf0d1a19,	0xa0331af3,
150	.word	0x40606047,	0x00000000,	0x3ee9f24e,	0xb23e991f,
151	.word	0x4060809d,	0x00000000,	0xbedb011f,	0x855b4988,
152	.word	0x4060a0dc,	0x00000000,	0x3efa7c70,	0xfde006c7,
153	.word	0x4060c105,	0x00000000,	0x3e9ac754,	0xcb104aea,
154	.word	0x4060e117,	0x00000000,	0x3f0d535f,	0x0444ebab,
155	.word	0x40610114,	0x00000000,	0xbf03ab0d,	0xc56138c9,
156	.word	0x406120fa,	0x00000000,	0xbef630f3,	0xfc695a97,
157	.word	0x406140ca,	0x00000000,	0xbec5786a,	0xf187a96b,
158	.word	0x40616084,	0x00000000,	0x3f012578,	0x0181e2b3,
159	.word	0x40618029,	0x00000000,	0xbef846b4,	0x4ad8a38b,
160	.word	0x40619fb8,	0x00000000,	0xbf01c336,	0xf7a3a78f,
161	.word	0x4061bf31,	0x00000000,	0x3eee95d0,	0x0de3b514,
162	.word	0x4061de95,	0x00000000,	0x3eed9cbb,	0xa6187a4d,
163	.word	0x4061fde4,	0x00000000,	0xbef678bf,	0x6cdedf51,
164	.word	0x40621d1d,	0x00000000,	0x3f06edb5,	0x668c543d,
165	.word	0x40623c42,	0x00000000,	0xbef5ec6c,	0x1bfbf89a,
166	.word	0x40625b51,	0x00000000,	0x3f062dcf,	0x4115a1a3,
167	.word	0x40627a4c,	0x00000000,	0x3ec6172f,	0xe015e13c,
168	.word	0x40629932,	0x00000000,	0xbed30dd5,	0x3f5c184c,
169	.word	0x4062b803,	0x00000000,	0x3f01cfde,	0xb43cfd00,
170	.word	0x4062d6c0,	0x00000000,	0x3ee35013,	0x8064a94e,
171	.word	0x4062f568,	0x00000000,	0x3f0d7acf,	0xc98509e3,
172	.word	0x406313fd,	0x00000000,	0xbf0d7932,	0x43718371,
173	.word	0x4063327c,	0x00000000,	0x3f0aad27,	0x29b21ae5,
174	.word	0x406350e8,	0x00000000,	0x3ef92b83,	0xec743665,
175	.word	0x40636f40,	0x00000000,	0xbec249ba,	0x76fee235,
176	.word	0x40638d84,	0x00000000,	0xbeefd0a2,	0xf6d7e41e,
177	.word	0x4063abb4,	0x00000000,	0xbec57f7a,	0x64ccd537,
178	.word	0x4063c9d0,	0x00000000,	0x3f09242b,	0x8488b305,
179	.word	0x4063e7d9,	0x00000000,	0x3efbcfb8,	0x0b357154,
180	.word	0x406405cf,	0x00000000,	0xbf0cb1c2,	0xd10504b4,
181	.word	0x406423b0,	0x00000000,	0x3f0fa61a,	0xaa59c1d8,
182	.word	0x4064417f,	0x00000000,	0x3ef26410,	0xb256d8d7,
183	.word	0x40645f3b,	0x00000000,	0xbf09d77e,	0x31d6ca00,
184	.word	0x40647ce3,	0x00000000,	0xbeda5fb4,	0xf23978de,
185	.word	0x40649a78,	0x00000000,	0x3f02f346,	0xe2bf924b,
186	.word	0x4064b7fb,	0x00000000,	0xbf0106da,	0x1aa0e9e7,
187	.word	0x4064d56a,	0x00000000,	0x3f06ccf3,	0xb1129b7c,
188	.word	0x4064f2c7,	0x00000000,	0x3f006a7c,	0xcf9dd420,
189	.word	0x40651012,	0x00000000,	0xbf0e3dd5,	0xc1c885ae,
190	.word	0x40652d49,	0x00000000,	0x3f00b91e,	0x4253bd27,
191	.word	0x40654a6f,	0x00000000,	0xbf0cd6af,	0x1c9393cd,
192	.word	0x40656781,	0x00000000,	0x3f0ee1ac,	0x0b1ec5ea,
193	.word	0x40658482,	0x00000000,	0x3ef34c4e,	0x99e1c6c6,
194	.word	0x4065a171,	0x00000000,	0xbf06d01c,	0xa8f50e5f,
195	.word	0x4065be4d,	0x00000000,	0x3ed96a28,	0x6955d67e,
196	.word	0x4065db17,	0x00000000,	0x3f0d4210,	0x4f127092,
197	.word	0x4065f7d0,	0x00000000,	0xbed7c3ec,	0xa28e69ca,
198	.word	0x40661477,	0x00000000,	0xbf07f393,	0xbdd98c47,
199	.word	0x4066310c,	0x00000000,	0xbf0c2ab3,	0xedefe569,
200	.word	0x40664d8f,	0x00000000,	0xbef44732,	0x0833c207,
201	.word	0x40666a01,	0x00000000,	0xbf0c6e1d,	0xcd0cb449,
202	.word	0x40668661,	0x00000000,	0xbefb4848,	0x3c643a24,
203	.word	0x4066a2b0,	0x00000000,	0xbf08697c,	0x3d7dfd9b,
204	.word	0x4066beed,	0x00000000,	0x3ef12866,	0xd705c554,
205	.word	0x4066db19,	0x00000000,	0x3f0a9d86,	0x52765f7c,
206	.word	0x4066f735,	0x00000000,	0xbf0d0e8e,	0x7a165e04,
207	.word	0x4067133f,	0x00000000,	0xbf093aa4,	0xe106ba60,
208	.word	0x40672f38,	0x00000000,	0xbf04bace,	0x940d18ba,
209	.word	0x40674b20,	0x00000000,	0xbef4d8fc,	0x561c8d44,
210	.word	0x406766f7,	0x00000000,	0x3ef5931e,	0xf6e6f15b,
211	.word	0x406782be,	0x00000000,	0xbf000896,	0x6a210de0,
212	.word	0x40679e74,	0x00000000,	0xbf05dbfe,	0x780eccdb,
213	.word	0x4067ba19,	0x00000000,	0xbecb2bf4,	0x6fd85522,
214	.word	0x4067d5ae,	0x00000000,	0xbefd2fc3,	0xaddfdee2,
215	.word	0x4067f132,	0x00000000,	0x3ef0c167,	0x8ae89767,
216	.word	0x40680ca6,	0x00000000,	0x3ef034a6,	0xfc6488d1,
217	.word	0x4068280a,	0x00000000,	0xbef520c7,	0xc69211fe,
218	.word	0x4068435d,	0x00000000,	0x3f05328d,	0xdcedf39e,
219	.word	0x40685ea1,	0x00000000,	0xbf03d361,	0x367bde41,
220	.word	0x406879d4,	0x00000000,	0xbebc2624,	0x7a0cdfbb,
221	.word	0x406894f7,	0x00000000,	0x3f02c1bb,	0xe2d01ba9,
222	.word	0x4068b00b,	0x00000000,	0xbf043a4a,	0xd5c7a4dd,
223	.word	0x4068cb0e,	0x00000000,	0x3efda59d,	0xded9b445,
224	.word	0x4068e602,	0x00000000,	0x3eb11eb3,	0x043f5602,
225	.word	0x406900e6,	0x00000000,	0x3ee60002,	0xccfe43f5,
226	.word	0x40691bbb,	0x00000000,	0xbf0db83a,	0x3dd2d353,
227	.word	0x4069367f,	0x00000000,	0x3f0b682a,	0xcba73219,
228	.word	0x40695135,	0x00000000,	0xbef53d8e,	0x8e4c59c3,
229	.word	0x40696bdb,	0x00000000,	0xbef6a9a5,	0x050809db,
230	.word	0x40698671,	0x00000000,	0x3f0db68e,	0x0ba15359,
231	.word	0x4069a0f9,	0x00000000,	0xbef6278f,	0xd810b546,
232	.word	0x4069bb71,	0x00000000,	0xbec528c6,	0xcdef4d8d,
233	.word	0x4069d5da,	0x00000000,	0xbeb57f7a,	0x64ccd537,
234	.word	0x4069f034,	0x00000000,	0xbee33716,	0xa9ae332f,
235	.word	0x406a0a7f,	0x00000000,	0xbef2d9f7,	0x698ce769,
236	.word	0x406a24bb,	0x00000000,	0xbef48c02,	0x44aa8cfc,
237	.word	0x406a3ee8,	0x00000000,	0xbed8e3cf,	0xc25f0ce6,
238	.word	0x406a5906,	0x00000000,	0x3f0044c5,	0x590979a0,
239	.word	0x406a7316,	0x00000000,	0xbef7e86f,	0x9c2154fb,
240	.word	0x406a8d17,	0x00000000,	0xbf03a076,	0x2ed351cd,
241	.word	0x406aa709,	0x00000000,	0xbed4ffd6,	0x59064390,
242	.word	0x406ac0ed,	0x00000000,	0xbf04d9bb,	0x3135f0b1,
243	.word	0x406adac2,	0x00000000,	0xbee8ee37,	0xcd2ea9d3,
244	.word	0x406af489,	0x00000000,	0xbf02ba1b,	0x4a95229c,
245	.word	0x406b0e41,	0x00000000,	0x3ef35e64,	0x35ebd377,
246	.word	0x406b27eb,	0x00000000,	0x3f02fe3c,	0x2291b5ad,
247	.word	0x406b4187,	0x00000000,	0x3efa5480,	0x45ecbc5d,
248	.word	0x406b5b15,	0x00000000,	0xbedee0d3,	0x3432f2c3,
249	.word	0x406b7495,	0x00000000,	0xbf0c2ab3,	0x496d2d24,
250	.word	0x406b8e06,	0x00000000,	0x3ef04439,	0x848e9d1e,
251	.word	0x406ba76a,	0x00000000,	0xbf03186d,	0xa6fc41e0,
252	.word	0x406bc0bf,	0x00000000,	0x3f05fc8d,	0x8164754e,
253	.word	0x406bda07,	0x00000000,	0x3eecc67e,	0x6db516de,
254	.word	0x406bf341,	0x00000000,	0x3ee14464,	0xa6bcdf48,
255	.word	0x406c0c6d,	0x00000000,	0x3f011f17,	0x74d8b66a,
256	.word	0x406c258c,	0x00000000,	0xbefd4cdb,	0xebaa4121,
257	.word	0x406c3e9d,	0x00000000,	0xbf074797,	0xeab3259d,
258	.word	0x406c57a0,	0x00000000,	0xbee44a49,	0xa82ed669,
259	.word	0x406c7096,	0x00000000,	0xbf045b87,	0x8e27d0d9,
260	.word	0x406c897e,	0x00000000,	0xbec7c929,	0xc9e33277,
261	.word	0x406ca259,	0x00000000,	0xbef1ab66,	0x74e5008e,
262	.word	0x406cbb26,	0x00000000,	0x3f09333f,	0x3d6bb35f,
263	.word	0x406cd3e7,	0x00000000,	0xbf07cd5d,	0xbe4f6f23,
264	.word	0x406cec9a,	0x00000000,	0xbf0848eb,	0x7f40a752,
265	.word	0x406d053f,	0x00000000,	0x3f0b4982,	0x259cc626,
266	.word	0x406d1dd8,	0x00000000,	0x3ee9b4c3,	0xf0c92723,
267	.word	0x406d3664,	0x00000000,	0xbf036033,	0x8ab5a1f2,
268	.word	0x406d4ee2,	0x00000000,	0x3f015971,	0x8aacb6ec,
269	.word	0x406d6754,	0x00000000,	0xbeefcd15,	0xf101c142,
270	.word	0x406d7fb9,	0x00000000,	0xbf0bd935,	0x64ee1bf6,
271	.word	0x406d9810,	0x00000000,	0x3f090f59,	0x8530f102,
272	.word	0x406db05b,	0x00000000,	0x3f0a28be,	0xd929effb,
273	.word	0x406dc89a,	0x00000000,	0xbf053002,	0xa4e86631,
274	.word	0x406de0cb,	0x00000000,	0x3efcb99c,	0x5233429f,
275	.word	0x406df8f0,	0x00000000,	0x3ef04357,	0x9625f7a4,
276	.word	0x406e1108,	0x00000000,	0x3f0b6bdd,	0x258a7b23,
277	.word	0x406e2914,	0x00000000,	0x3ef70700,	0xa00fdd55,
278	.word	0x406e4113,	0x00000000,	0x3f0bab95,	0x4f46b93f,
279	.word	0x406e5906,	0x00000000,	0x3efe4411,	0x672b0c89,
280	.word	0x406e70ed,	0x00000000,	0xbf06e041,	0xe4467502,
281	.word	0x406e88c7,	0x00000000,	0xbf032765,	0x63557797,
282	.word	0x406ea094,	0x00000000,	0x3f0d7b8f,	0x0e7b8e75,
283	.word	0x406eb856,	0x00000000,	0xbeccd5dc,	0x13cad28e,
284	.word	0x406ed00b,	0x00000000,	0x3f0222fb,	0x08d5c3f2,
285	.word	0x406ee7b4,	0x00000000,	0x3f0c6cea,	0x541f5b70,
286	.word	0x406eff52,	0x00000000,	0xbf0fd40b,	0x070e6c33,
287	.word	0x406f16e3,	0x00000000,	0xbf0f8922,	0x73f1379b,
288	.word	0x406f2e68,	0x00000000,	0xbf0fa051,	0xeebd4f74,
289	.word	0x406f45e1,	0x00000000,	0xbf0d0c3e,	0x6aac6ca9,
290	.word	0x406f5d4e,	0x00000000,	0xbf04c432,	0x5068bc88,
291	.word	0x406f74af,	0x00000000,	0xbede20a0,	0xa450bc93,
292	.word	0x406f8c04,	0x00000000,	0x3f08f3a3,	0x1a23946e,
293	.word	0x406fa34e,	0x00000000,	0x3ee177c2,	0x3362928c,
294	.word	0x406fba8c,	0x00000000,	0x3ec71513,	0x7cfebaa0,
295	.word	0x406fd1be,	0x00000000,	0x3f031fca,	0xbe50ac88,
296	.word	0x406fe8e5,	0x00000000,	0xbedd485c,	0xbfb44c3b,
297!
298	.word	0x01a56e1f,	0xc2f8f359,	! _TINY = 1.0e-300
299	.word	0x7e37e43c,	0x8800759c,	! _HUGE = 1.0e+300
300	.word	0x3f6d94ae,	0x0bf85de6,	! KA1_LO  = (1.41052154268147309568e-05*256)
301	.word	0x40871540,	0x00000000,	! KA1_HI  = (2.8853759765625e+00*256)
302	.word	0x3cd5d528,	0x93bc7fec,	! KB5     = 1.21195555854068860923e-15
303	.word	0x3e2c6b08,	0xd71f5d1e,	! KB3     = 3.30830268126604677436e-09
304	.word	0x3ecebfbd,	0xff82c4ed,	! KB2     = 3.66556559691003767877e-06
305	.word	0x3f662e42,	0xfefa39ef,	! KB1     = 2.70760617406228636578e-03
306!
307! __mt_constexp2[2*i] = high order bits 2^(i/256), i = [0, 255]
308! __mt_constexp2[2*i+1] = least bits 2^(i/256), i = [0, 255]
309
310	.word	0x3ff00000,	0x00000000,	0x00000000,	0x00000000,
311	.word	0x3ff00b1a,	0xfa5abcbf,	0xbc84f6b2,	0xa7609f71,
312	.word	0x3ff0163d,	0xa9fb3335,	0x3c9b6129,	0x9ab8cdb7,
313	.word	0x3ff02168,	0x143b0281,	0xbc82bf31,	0x0fc54eb6,
314	.word	0x3ff02c9a,	0x3e778061,	0xbc719083,	0x535b085d,
315	.word	0x3ff037d4,	0x2e11bbcc,	0x3c656811,	0xeeade11a,
316	.word	0x3ff04315,	0xe86e7f85,	0xbc90a31c,	0x1977c96e,
317	.word	0x3ff04e5f,	0x72f654b1,	0x3c84c379,	0x3aa0d08c,
318	.word	0x3ff059b0,	0xd3158574,	0x3c8d73e2,	0xa475b465,
319	.word	0x3ff0650a,	0x0e3c1f89,	0xbc95cb7b,	0x5799c397,
320	.word	0x3ff0706b,	0x29ddf6de,	0xbc8c91df,	0xe2b13c27,
321	.word	0x3ff07bd4,	0x2b72a836,	0x3c832334,	0x54458700,
322	.word	0x3ff08745,	0x18759bc8,	0x3c6186be,	0x4bb284ff,
323	.word	0x3ff092bd,	0xf66607e0,	0xbc968063,	0x800a3fd1,
324	.word	0x3ff09e3e,	0xcac6f383,	0x3c914878,	0x18316136,
325	.word	0x3ff0a9c7,	0x9b1f3919,	0x3c85d16c,	0x873d1d38,
326	.word	0x3ff0b558,	0x6cf9890f,	0x3c98a62e,	0x4adc610b,
327	.word	0x3ff0c0f1,	0x45e46c85,	0x3c94f989,	0x06d21cef,
328	.word	0x3ff0cc92,	0x2b7247f7,	0x3c901edc,	0x16e24f71,
329	.word	0x3ff0d83b,	0x23395dec,	0xbc9bc14d,	0xe43f316a,
330	.word	0x3ff0e3ec,	0x32d3d1a2,	0x3c403a17,	0x27c57b52,
331	.word	0x3ff0efa5,	0x5fdfa9c5,	0xbc949db9,	0xbc54021b,
332	.word	0x3ff0fb66,	0xaffed31b,	0xbc6b9bed,	0xc44ebd7b,
333	.word	0x3ff10730,	0x28d7233e,	0x3c8d46eb,	0x1692fdd5,
334	.word	0x3ff11301,	0xd0125b51,	0xbc96c510,	0x39449b3a,
335	.word	0x3ff11edb,	0xab5e2ab6,	0xbc9ca454,	0xf703fb72,
336	.word	0x3ff12abd,	0xc06c31cc,	0xbc51b514,	0xb36ca5c7,
337	.word	0x3ff136a8,	0x14f204ab,	0xbc67108f,	0xba48dcf0,
338	.word	0x3ff1429a,	0xaea92de0,	0xbc932fbf,	0x9af1369e,
339	.word	0x3ff14e95,	0x934f312e,	0xbc8b91e8,	0x39bf44ab,
340	.word	0x3ff15a98,	0xc8a58e51,	0x3c82406a,	0xb9eeab0a,
341	.word	0x3ff166a4,	0x5471c3c2,	0x3c58f23b,	0x82ea1a32,
342	.word	0x3ff172b8,	0x3c7d517b,	0xbc819041,	0xb9d78a76,
343	.word	0x3ff17ed4,	0x8695bbc0,	0x3c709e3f,	0xe2ac5a64,
344	.word	0x3ff18af9,	0x388c8dea,	0xbc911023,	0xd1970f6c,
345	.word	0x3ff19726,	0x58375d2f,	0x3c94aadd,	0x85f17e08,
346	.word	0x3ff1a35b,	0xeb6fcb75,	0x3c8e5b4c,	0x7b4968e4,
347	.word	0x3ff1af99,	0xf8138a1c,	0x3c97bf85,	0xa4b69280,
348	.word	0x3ff1bbe0,	0x84045cd4,	0xbc995386,	0x352ef607,
349	.word	0x3ff1c82f,	0x95281c6b,	0x3c900977,	0x8010f8c9,
350	.word	0x3ff1d487,	0x3168b9aa,	0x3c9e016e,	0x00a2643c,
351	.word	0x3ff1e0e7,	0x5eb44027,	0xbc96fdd8,	0x088cb6de,
352	.word	0x3ff1ed50,	0x22fcd91d,	0xbc91df98,	0x027bb78c,
353	.word	0x3ff1f9c1,	0x8438ce4d,	0xbc9bf524,	0xa097af5c,
354	.word	0x3ff2063b,	0x88628cd6,	0x3c8dc775,	0x814a8495,
355	.word	0x3ff212be,	0x3578a819,	0x3c93592d,	0x2cfcaac9,
356	.word	0x3ff21f49,	0x917ddc96,	0x3c82a97e,	0x9494a5ee,
357	.word	0x3ff22bdd,	0xa27912d1,	0x3c8d34fb,	0x5577d69f,
358	.word	0x3ff2387a,	0x6e756238,	0x3c99b07e,	0xb6c70573,
359	.word	0x3ff2451f,	0xfb82140a,	0x3c8acfcc,	0x911ca996,
360	.word	0x3ff251ce,	0x4fb2a63f,	0x3c8ac155,	0xbef4f4a4,
361	.word	0x3ff25e85,	0x711ece75,	0x3c93e1a2,	0x4ac31b2c,
362	.word	0x3ff26b45,	0x65e27cdd,	0x3c82bd33,	0x9940e9d9,
363	.word	0x3ff2780e,	0x341ddf29,	0x3c9e067c,	0x05f9e76c,
364	.word	0x3ff284df,	0xe1f56381,	0xbc9a4c3a,	0x8c3f0d7e,
365	.word	0x3ff291ba,	0x7591bb70,	0xbc82cc72,	0x28401cbd,
366	.word	0x3ff29e9d,	0xf51fdee1,	0x3c8612e8,	0xafad1255,
367	.word	0x3ff2ab8a,	0x66d10f13,	0xbc995743,	0x191690a7,
368	.word	0x3ff2b87f,	0xd0dad990,	0xbc410adc,	0xd6381aa4,
369	.word	0x3ff2c57e,	0x39771b2f,	0xbc950145,	0xa6eb5124,
370	.word	0x3ff2d285,	0xa6e4030b,	0x3c900247,	0x54db41d5,
371	.word	0x3ff2df96,	0x1f641589,	0x3c9d16cf,	0xfbbce198,
372	.word	0x3ff2ecaf,	0xa93e2f56,	0x3c71ca0f,	0x45d52383,
373	.word	0x3ff2f9d2,	0x4abd886b,	0xbc653c55,	0x532bda93,
374	.word	0x3ff306fe,	0x0a31b715,	0x3c86f46a,	0xd23182e4,
375	.word	0x3ff31432,	0xedeeb2fd,	0x3c8959a3,	0xf3f3fcd1,
376	.word	0x3ff32170,	0xfc4cd831,	0x3c8a9ce7,	0x8e18047c,
377	.word	0x3ff32eb8,	0x3ba8ea32,	0xbc9c45e8,	0x3cb4f318,
378	.word	0x3ff33c08,	0xb26416ff,	0x3c932721,	0x843659a6,
379	.word	0x3ff34962,	0x66e3fa2d,	0xbc835a75,	0x930881a4,
380	.word	0x3ff356c5,	0x5f929ff1,	0xbc8b5cee,	0x5c4e4628,
381	.word	0x3ff36431,	0xa2de883b,	0xbc8c3144,	0xa06cb85e,
382	.word	0x3ff371a7,	0x373aa9cb,	0xbc963aea,	0xbf42eae2,
383	.word	0x3ff37f26,	0x231e754a,	0xbc99f5ca,	0x9eceb23c,
384	.word	0x3ff38cae,	0x6d05d866,	0xbc9e958d,	0x3c9904bd,
385	.word	0x3ff39a40,	0x1b7140ef,	0xbc99a9a5,	0xfc8e2934,
386	.word	0x3ff3a7db,	0x34e59ff7,	0xbc75e436,	0xd661f5e3,
387	.word	0x3ff3b57f,	0xbfec6cf4,	0x3c954c66,	0xe26fff18,
388	.word	0x3ff3c32d,	0xc313a8e5,	0xbc9efff8,	0x375d29c3,
389	.word	0x3ff3d0e5,	0x44ede173,	0x3c7fe8d0,	0x8c284c71,
390	.word	0x3ff3dea6,	0x4c123422,	0x3c8ada09,	0x11f09ebc,
391	.word	0x3ff3ec70,	0xdf1c5175,	0xbc8af663,	0x7b8c9bca,
392	.word	0x3ff3fa45,	0x04ac801c,	0xbc97d023,	0xf956f9f3,
393	.word	0x3ff40822,	0xc367a024,	0x3c8bddf8,	0xb6f4d048,
394	.word	0x3ff4160a,	0x21f72e2a,	0xbc5ef369,	0x1c309278,
395	.word	0x3ff423fb,	0x2709468a,	0xbc98462d,	0xc0b314dd,
396	.word	0x3ff431f5,	0xd950a897,	0xbc81c7dd,	0xe35f7999,
397	.word	0x3ff43ffa,	0x3f84b9d4,	0x3c8880be,	0x9704c003,
398	.word	0x3ff44e08,	0x6061892d,	0x3c489b7a,	0x04ef80d0,
399	.word	0x3ff45c20,	0x42a7d232,	0xbc686419,	0x82fb1f8e,
400	.word	0x3ff46a41,	0xed1d0057,	0x3c9c944b,	0xd1648a76,
401	.word	0x3ff4786d,	0x668b3237,	0xbc9c20f0,	0xed445733,
402	.word	0x3ff486a2,	0xb5c13cd0,	0x3c73c1a3,	0xb69062f0,
403	.word	0x3ff494e1,	0xe192aed2,	0xbc83b289,	0x5e499ea0,
404	.word	0x3ff4a32a,	0xf0d7d3de,	0x3c99cb62,	0xf3d1be56,
405	.word	0x3ff4b17d,	0xea6db7d7,	0xbc8125b8,	0x7f2897f0,
406	.word	0x3ff4bfda,	0xd5362a27,	0x3c7d4397,	0xafec42e2,
407	.word	0x3ff4ce41,	0xb817c114,	0x3c905e29,	0x690abd5d,
408	.word	0x3ff4dcb2,	0x99fddd0d,	0x3c98ecdb,	0xbc6a7833,
409	.word	0x3ff4eb2d,	0x81d8abff,	0xbc95257d,	0x2e5d7a52,
410	.word	0x3ff4f9b2,	0x769d2ca7,	0xbc94b309,	0xd25957e3,
411	.word	0x3ff50841,	0x7f4531ee,	0x3c7a249b,	0x49b7465f,
412	.word	0x3ff516da,	0xa2cf6642,	0xbc8f7685,	0x69bd93ef,
413	.word	0x3ff5257d,	0xe83f4eef,	0xbc7c998d,	0x43efef71,
414	.word	0x3ff5342b,	0x569d4f82,	0xbc807abe,	0x1db13cad,
415	.word	0x3ff542e2,	0xf4f6ad27,	0x3c87926d,	0x192d5f7e,
416	.word	0x3ff551a4,	0xca5d920f,	0xbc8d689c,	0xefede59b,
417	.word	0x3ff56070,	0xdde910d2,	0xbc90fb6e,	0x168eebf0,
418	.word	0x3ff56f47,	0x36b527da,	0x3c99bb2c,	0x011d93ad,
419	.word	0x3ff57e27,	0xdbe2c4cf,	0xbc90b98c,	0x8a57b9c4,
420	.word	0x3ff58d12,	0xd497c7fd,	0x3c8295e1,	0x5b9a1de8,
421	.word	0x3ff59c08,	0x27ff07cc,	0xbc97e2ce,	0xe467e60f,
422	.word	0x3ff5ab07,	0xdd485429,	0x3c96324c,	0x054647ad,
423	.word	0x3ff5ba11,	0xfba87a03,	0xbc9b77a1,	0x4c233e1a,
424	.word	0x3ff5c926,	0x8a5946b7,	0x3c3c4b1b,	0x816986a2,
425	.word	0x3ff5d845,	0x90998b93,	0xbc9cd6a7,	0xa8b45643,
426	.word	0x3ff5e76f,	0x15ad2148,	0x3c9ba6f9,	0x3080e65e,
427	.word	0x3ff5f6a3,	0x20dceb71,	0xbc89eadd,	0xe3cdcf92,
428	.word	0x3ff605e1,	0xb976dc09,	0xbc93e242,	0x9b56de47,
429	.word	0x3ff6152a,	0xe6cdf6f4,	0x3c9e4b3e,	0x4ab84c27,
430	.word	0x3ff6247e,	0xb03a5585,	0xbc9383c1,	0x7e40b497,
431	.word	0x3ff633dd,	0x1d1929fd,	0x3c984710,	0xbeb964e5,
432	.word	0x3ff64346,	0x34ccc320,	0xbc8c483c,	0x759d8933,
433	.word	0x3ff652b9,	0xfebc8fb7,	0xbc9ae3d5,	0xc9a73e09,
434	.word	0x3ff66238,	0x82552225,	0xbc9bb609,	0x87591c34,
435	.word	0x3ff671c1,	0xc70833f6,	0xbc8e8732,	0x586c6134,
436	.word	0x3ff68155,	0xd44ca973,	0x3c6038ae,	0x44f73e65,
437	.word	0x3ff690f4,	0xb19e9538,	0x3c8804bd,	0x9aeb445d,
438	.word	0x3ff6a09e,	0x667f3bcd,	0xbc9bdd34,	0x13b26456,
439	.word	0x3ff6b052,	0xfa75173e,	0x3c7a38f5,	0x2c9a9d0e,
440	.word	0x3ff6c012,	0x750bdabf,	0xbc728956,	0x67ff0b0d,
441	.word	0x3ff6cfdc,	0xddd47645,	0x3c9c7aa9,	0xb6f17309,
442	.word	0x3ff6dfb2,	0x3c651a2f,	0xbc6bbe3a,	0x683c88ab,
443	.word	0x3ff6ef92,	0x98593ae5,	0xbc90b974,	0x9e1ac8b2,
444	.word	0x3ff6ff7d,	0xf9519484,	0xbc883c0f,	0x25860ef6,
445	.word	0x3ff70f74,	0x66f42e87,	0x3c59d644,	0xd45aa65f,
446	.word	0x3ff71f75,	0xe8ec5f74,	0xbc816e47,	0x86887a99,
447	.word	0x3ff72f82,	0x86ead08a,	0xbc920aa0,	0x2cd62c72,
448	.word	0x3ff73f9a,	0x48a58174,	0xbc90a8d9,	0x6c65d53c,
449	.word	0x3ff74fbd,	0x35d7cbfd,	0x3c9047fd,	0x618a6e1c,
450	.word	0x3ff75feb,	0x564267c9,	0xbc902459,	0x57316dd3,
451	.word	0x3ff77024,	0xb1ab6e09,	0x3c9b7877,	0x169147f8,
452	.word	0x3ff78069,	0x4fde5d3f,	0x3c9866b8,	0x0a02162d,
453	.word	0x3ff790b9,	0x38ac1cf6,	0x3c9349a8,	0x62aadd3e,
454	.word	0x3ff7a114,	0x73eb0187,	0xbc841577,	0xee04992f,
455	.word	0x3ff7b17b,	0x0976cfdb,	0xbc9bebb5,	0x8468dc88,
456	.word	0x3ff7c1ed,	0x0130c132,	0x3c9f124c,	0xd1164dd6,
457	.word	0x3ff7d26a,	0x62ff86f0,	0x3c91bddb,	0xfb72b8b4,
458	.word	0x3ff7e2f3,	0x36cf4e62,	0x3c705d02,	0xba15797e,
459	.word	0x3ff7f387,	0x8491c491,	0xbc807f11,	0xcf9311ae,
460	.word	0x3ff80427,	0x543e1a12,	0xbc927c86,	0x626d972b,
461	.word	0x3ff814d2,	0xadd106d9,	0x3c946437,	0x0d151d4d,
462	.word	0x3ff82589,	0x994cce13,	0xbc9d4c1d,	0xd41532d8,
463	.word	0x3ff8364c,	0x1eb941f7,	0x3c999b9a,	0x31df2bd5,
464	.word	0x3ff8471a,	0x4623c7ad,	0xbc88d684,	0xa341cdfb,
465	.word	0x3ff857f4,	0x179f5b21,	0xbc5ba748,	0xf8b216d0,
466	.word	0x3ff868d9,	0x9b4492ed,	0xbc9fc6f8,	0x9bd4f6ba,
467	.word	0x3ff879ca,	0xd931a436,	0x3c85d2d7,	0xd2db47bd,
468	.word	0x3ff88ac7,	0xd98a6699,	0x3c9994c2,	0xf37cb53a,
469	.word	0x3ff89bd0,	0xa478580f,	0x3c9d5395,	0x4475202a,
470	.word	0x3ff8ace5,	0x422aa0db,	0x3c96e9f1,	0x56864b27,
471	.word	0x3ff8be05,	0xbad61778,	0x3c9ecb5e,	0xfc43446e,
472	.word	0x3ff8cf32,	0x16b5448c,	0xbc70d55e,	0x32e9e3aa,
473	.word	0x3ff8e06a,	0x5e0866d9,	0xbc97114a,	0x6fc9b2e6,
474	.word	0x3ff8f1ae,	0x99157736,	0x3c85cc13,	0xa2e3976c,
475	.word	0x3ff902fe,	0xd0282c8a,	0x3c9592ca,	0x85fe3fd2,
476	.word	0x3ff9145b,	0x0b91ffc6,	0xbc9dd679,	0x2e582524,
477	.word	0x3ff925c3,	0x53aa2fe2,	0xbc83455f,	0xa639db7f,
478	.word	0x3ff93737,	0xb0cdc5e5,	0xbc675fc7,	0x81b57ebc,
479	.word	0x3ff948b8,	0x2b5f98e5,	0xbc8dc3d6,	0x797d2d99,
480	.word	0x3ff95a44,	0xcbc8520f,	0xbc764b7c,	0x96a5f039,
481	.word	0x3ff96bdd,	0x9a7670b3,	0xbc5ba596,	0x7f19c896,
482	.word	0x3ff97d82,	0x9fde4e50,	0xbc9d185b,	0x7c1b85d1,
483	.word	0x3ff98f33,	0xe47a22a2,	0x3c7cabda,	0xa24c78ec,
484	.word	0x3ff9a0f1,	0x70ca07ba,	0xbc9173bd,	0x91cee632,
485	.word	0x3ff9b2bb,	0x4d53fe0d,	0xbc9dd84e,	0x4df6d518,
486	.word	0x3ff9c491,	0x82a3f090,	0x3c7c7c46,	0xb071f2be,
487	.word	0x3ff9d674,	0x194bb8d5,	0xbc9516be,	0xa3dd8233,
488	.word	0x3ff9e863,	0x19e32323,	0x3c7824ca,	0x78e64c6e,
489	.word	0x3ff9fa5e,	0x8d07f29e,	0xbc84a9ce,	0xaaf1face,
490	.word	0x3ffa0c66,	0x7b5de565,	0xbc935949,	0x5d1cd533,
491	.word	0x3ffa1e7a,	0xed8eb8bb,	0x3c9c6618,	0xee8be70e,
492	.word	0x3ffa309b,	0xec4a2d33,	0x3c96305c,	0x7ddc36ab,
493	.word	0x3ffa42c9,	0x80460ad8,	0xbc9aa780,	0x589fb120,
494	.word	0x3ffa5503,	0xb23e255d,	0xbc9d2f6e,	0xdb8d41e1,
495	.word	0x3ffa674a,	0x8af46052,	0x3c650f56,	0x30670366,
496	.word	0x3ffa799e,	0x1330b358,	0x3c9bcb7e,	0xcac563c7,
497	.word	0x3ffa8bfe,	0x53c12e59,	0xbc94f867,	0xb2ba15a9,
498	.word	0x3ffa9e6b,	0x5579fdbf,	0x3c90fac9,	0x0ef7fd31,
499	.word	0x3ffab0e5,	0x21356eba,	0x3c889c31,	0xdae94545,
500	.word	0x3ffac36b,	0xbfd3f37a,	0xbc8f9234,	0xcae76cd0,
501	.word	0x3ffad5ff,	0x3a3c2774,	0x3c97ef3b,	0xb6b1b8e5,
502	.word	0x3ffae89f,	0x995ad3ad,	0x3c97a1cd,	0x345dcc81,
503	.word	0x3ffafb4c,	0xe622f2ff,	0xbc94b2fc,	0x0f315ecd,
504	.word	0x3ffb0e07,	0x298db666,	0xbc9bdef5,	0x4c80e425,
505	.word	0x3ffb20ce,	0x6c9a8952,	0x3c94dd02,	0x4a0756cc,
506	.word	0x3ffb33a2,	0xb84f15fb,	0xbc62805e,	0x3084d708,
507	.word	0x3ffb4684,	0x15b749b1,	0xbc7f763d,	0xe9df7c90,
508	.word	0x3ffb5972,	0x8de5593a,	0xbc9c71df,	0xbbba6de3,
509	.word	0x3ffb6c6e,	0x29f1c52a,	0x3c92a8f3,	0x52883f6e,
510	.word	0x3ffb7f76,	0xf2fb5e47,	0xbc75584f,	0x7e54ac3b,
511	.word	0x3ffb928c,	0xf22749e4,	0xbc9b7216,	0x54cb65c6,
512	.word	0x3ffba5b0,	0x30a1064a,	0xbc9efcd3,	0x0e54292e,
513	.word	0x3ffbb8e0,	0xb79a6f1f,	0xbc3f52d1,	0xc9696205,
514	.word	0x3ffbcc1e,	0x904bc1d2,	0x3c823dd0,	0x7a2d9e84,
515	.word	0x3ffbdf69,	0xc3f3a207,	0xbc3c2623,	0x60ea5b52,
516	.word	0x3ffbf2c2,	0x5bd71e09,	0xbc9efdca,	0x3f6b9c73,
517	.word	0x3ffc0628,	0x6141b33d,	0xbc8d8a5a,	0xa1fbca34,
518	.word	0x3ffc199b,	0xdd85529c,	0x3c811065,	0x895048dd,
519	.word	0x3ffc2d1c,	0xd9fa652c,	0xbc96e516,	0x17c8a5d7,
520	.word	0x3ffc40ab,	0x5fffd07a,	0x3c9b4537,	0xe083c60a,
521	.word	0x3ffc5447,	0x78fafb22,	0x3c912f07,	0x2493b5af,
522	.word	0x3ffc67f1,	0x2e57d14b,	0x3c92884d,	0xff483cad,
523	.word	0x3ffc7ba8,	0x8988c933,	0xbc8e76bb,	0xbe255559,
524	.word	0x3ffc8f6d,	0x9406e7b5,	0x3c71acbc,	0x48805c44,
525	.word	0x3ffca340,	0x5751c4db,	0xbc87f2be,	0xd10d08f5,
526	.word	0x3ffcb720,	0xdcef9069,	0x3c7503cb,	0xd1e949db,
527	.word	0x3ffccb0f,	0x2e6d1675,	0xbc7d220f,	0x86009092,
528	.word	0x3ffcdf0b,	0x555dc3fa,	0xbc8dd83b,	0x53829d72,
529	.word	0x3ffcf315,	0x5b5bab74,	0xbc9a08e9,	0xb86dff57,
530	.word	0x3ffd072d,	0x4a07897c,	0xbc9cbc37,	0x43797a9c,
531	.word	0x3ffd1b53,	0x2b08c968,	0x3c955636,	0x219a36ee,
532	.word	0x3ffd2f87,	0x080d89f2,	0xbc9d487b,	0x719d8578,
533	.word	0x3ffd43c8,	0xeacaa1d6,	0x3c93db53,	0xbf5a1614,
534	.word	0x3ffd5818,	0xdcfba487,	0x3c82ed02,	0xd75b3707,
535	.word	0x3ffd6c76,	0xe862e6d3,	0x3c5fe87a,	0x4a8165a0,
536	.word	0x3ffd80e3,	0x16c98398,	0xbc911ec1,	0x8beddfe8,
537	.word	0x3ffd955d,	0x71ff6075,	0x3c9a052d,	0xbb9af6be,
538	.word	0x3ffda9e6,	0x03db3285,	0x3c9c2300,	0x696db532,
539	.word	0x3ffdbe7c,	0xd63a8315,	0xbc9b76f1,	0x926b8be4,
540	.word	0x3ffdd321,	0xf301b460,	0x3c92da57,	0x78f018c3,
541	.word	0x3ffde7d5,	0x641c0658,	0xbc9ca552,	0x8e79ba8f,
542	.word	0x3ffdfc97,	0x337b9b5f,	0xbc91a5cd,	0x4f184b5c,
543	.word	0x3ffe1167,	0x6b197d17,	0xbc72b529,	0xbd5c7f44,
544	.word	0x3ffe2646,	0x14f5a129,	0xbc97b627,	0x817a1496,
545	.word	0x3ffe3b33,	0x3b16ee12,	0xbc99f4a4,	0x31fdc68b,
546	.word	0x3ffe502e,	0xe78b3ff6,	0x3c839e89,	0x80a9cc8f,
547	.word	0x3ffe6539,	0x24676d76,	0xbc863ff8,	0x7522b735,
548	.word	0x3ffe7a51,	0xfbc74c83,	0x3c92d522,	0xca0c8de2,
549	.word	0x3ffe8f79,	0x77cdb740,	0xbc910894,	0x80b054b1,
550	.word	0x3ffea4af,	0xa2a490da,	0xbc9e9c23,	0x179c2893,
551	.word	0x3ffeb9f4,	0x867cca6e,	0x3c94832f,	0x2293e4f2,
552	.word	0x3ffecf48,	0x2d8e67f1,	0xbc9c93f3,	0xb411ad8c,
553	.word	0x3ffee4aa,	0xa2188510,	0x3c91c68d,	0xa487568d,
554	.word	0x3ffefa1b,	0xee615a27,	0x3c9dc7f4,	0x86a4b6b0,
555	.word	0x3fff0f9c,	0x1cb6412a,	0xbc932200,	0x65181d45,
556	.word	0x3fff252b,	0x376bba97,	0x3c93a1a5,	0xbf0d8e43,
557	.word	0x3fff3ac9,	0x48dd7274,	0xbc795a5a,	0x3ed837de,
558	.word	0x3fff5076,	0x5b6e4540,	0x3c99d3e1,	0x2dd8a18b,
559	.word	0x3fff6632,	0x798844f8,	0x3c9fa37b,	0x3539343e,
560	.word	0x3fff7bfd,	0xad9cbe14,	0xbc9dbb12,	0xd006350a,
561	.word	0x3fff91d8,	0x02243c89,	0xbc612ea8,	0xa779f689,
562	.word	0x3fffa7c1,	0x819e90d8,	0x3c874853,	0xf3a5931e,
563	.word	0x3fffbdba,	0x3692d514,	0xbc796773,	0x15098eb6,
564	.word	0x3fffd3c2,	0x2b8f71f1,	0x3c62eb74,	0x966579e7,
565	.word	0x3fffe9d9,	0x6b2a23d9,	0x3c74a603,	0x7442fde3,
566!
567	.word	0x3c900000,	0x00000000,	! 2**(-54) = 5.551115123125782702e-17
568	.word	0x3ff00000,	0x00000000,	! DONE = 1.0
569	.word	0x43300000,	0x00000000,	! DVAIN52 = 2**52 = 4.503599627370496e15
570	.word	0xffffffff,	0x00000000,	! MHI32   = 0xffffffff00000000
571	.word	0x4062776d,	0x8ce329bd,	! KA5     = (5.77078604860893737986e-01*256)
572	.word	0x406ec709,	0xdc39fc99,	! KA3     = (9.61796693925765549423e-01*256)
573	.word	0x40871547,	0x652b82fe,	! KA1     = (2.885390081777926774e+00*256)
574	.word	0x41100000,	0x00000000,	! HTHRESH = 262144.0
575	.word	0xc110cc00,	0x00000000,	! LTHRESH = -275200.0
576	.word	0x3d83b2ab,	0xc07c93d0,	! KB4     = 2.23939573811855104311e-12
577	.word	0x000fffff,	0xffffffff,	! MMANT
578	.word	0x00000800,	0x00000000,	! MROUND
579	.word	0xfffff000,	0x00000000,	! MHI20
580
581! local storage indices
582#define	tmp0_lo		STACK_BIAS-4
583#define	tmp0_hi		STACK_BIAS-8
584#define	tmp1_lo		STACK_BIAS-12
585#define	tmp1_hi		STACK_BIAS-16
586#define	tmp2_lo		STACK_BIAS-20
587#define	tmp2_hi		STACK_BIAS-24
588#define	tmp3		STACK_BIAS-28
589#define	tmp4		STACK_BIAS-32
590#define	ind_buf		STACK_BIAS-48
591#define	tmp_counter	STACK_BIAS-56
592#define	tmp_px		STACK_BIAS-64
593#define	tmp_py		STACK_BIAS-72
594#define	tmp_mant	STACK_BIAS-80
595#define	tmp5		STACK_BIAS-88
596#define	tmp6		STACK_BIAS-96
597
598! sizeof temp storage - must be a multiple of 16 for V9
599#define	tmps		96
600
601#define	LOGTBL		%g5
602#define	EXPTBL		%g1
603#define	EXPTBL_P8	%l4
604
605#define	MASK_0x7fffffff	%o4
606#define	MASK_0x000fffff	%o3
607#define	MASK_0x3ff00000	%o1
608
609#define	counter		%i0
610#define	px		%i1
611#define	stridex		%l5
612#define	py		%i3
613#define	stridey		%l6
614#define	pz		%i5
615#define	stridez		%l7
616
617#define	HTHRESH		%f0
618#define	LTHRESH		%f2
619
620#define	MHI32		%f38
621#define	KA1_LO		%f40
622#define	KA1_HI		%f40
623
624#define	KB1		%f42
625#define	KB2		%f42
626#define	KB3		%f42
627#define	KB4		%f44
628#define	KB5		%f42
629
630#define	KA1		%f46
631#define	KA3		%f28
632#define	KA5		%f50
633
634#define	DZERO		%f24
635#define	DZERO_HI	%f24
636#define	DZERO_LO	%f25
637#define	DONE		%f18
638#define	DONE_HI		%f18
639#define	DONE_LO		%f19
640
641#define	XKB1		%f42
642#define	XKB2		%f40
643#define	XKB3		%f32
644#define	XKB4		%f36
645#define	XKB5		%f34
646
647#define	s_h		%f46
648#define	yr		%f30
649
650#define	ind_TINY	64
651#define	ind_HUGE	56
652#define	ind_LO		48
653#define	ind_HI		40
654#define	ind_KB5		32
655#define	ind_KB3		24
656#define	ind_KB2		16
657#define	ind_KB1		8
658
659!--------------------------------------------------------------------
660!		!!!!!	vpow algorithm	!!!!!
661!
662!  hx = ((unsigned*)px)[0];
663!  lx = ((unsigned*)px)[1];
664!  hy = ((unsigned*)py)[0];
665!  ly = ((unsigned*)py)[1];
666!  sx = hx >> 31;
667!  sy = hy >> 31;
668!  hx &= 0x7fffffff;
669!  hy &= 0x7fffffff;
670!  y0 = *px;
671!
672!  if (hy < 0x3bf00000) {						/* |Y| < 2^(-64) */
673!    if ((hy | ly) == 0) {						/* pow(X,0)      */
674!      *pz = DONE;
675!      goto next;
676!    }
677!    if (hx > 0x7ff00000 || (hx == 0x7ff00000 && lx != 0)) {		/* |X| = Nan     */
678!      *pz = y0 * y0;
679!      goto next;
680!    }
681!    else if ((hx | lx) == 0 || (hx == 0x7ff00000 && lx == 0)) {	/* X = 0 or Inf  */
682!      ((int*)pz)[0] = hx;
683!      ((int*)pz)[1] = lx;
684!      if (sy) *pz = DONE / *pz;
685!      goto next;
686!    }
687!    else *pz = (sx) ? DZERO / DZERO : DONE;
688!      goto next;
689!  }
690!  yisint = 0; /* Y - non-integer */
691!  expy = hy >> 20; /* Y exponent */
692!
693!  if (hx >= 0x7ff00000 || expy >= 0x43e) {			/* X=Inf,Nan or |Y|>2^63,Inf,Nan */
694!    if (hx > 0x7ff00000 || (hx == 0x7ff00000 && lx != 0) ||
695!        hy > 0x7ff00000 || (hy == 0x7ff00000 && ly != 0))
696!      *pz = y0 * *py; /* |X| or |Y| = Nan */
697!      goto next;
698!    if (hy == 0x7ff00000 && (ly == 0)) { /* |Y| = Inf */
699!      if (hx == 0x3ff00000 && (lx == 0))
700!        *pz = *py - *py; /* +-1 ** +-Inf */
701!      else if ((hx < 0x3ff00000) != sy)
702!        *pz = DZERO;
703!      else {
704!        ((int*)pz)[0] = hy;
705!        ((int*)pz)[1] = ly;
706!      }
707!      goto next;
708!    }
709!    if (expy < 0x43e) {						/* |Y| < 2^63   */
710!      if (sx) {							/* X = -Inf     */
711!        if (expy >= 0x434)						/* |Y| >= 2^53  */
712!          yisint##I = 2; 						/* Y - even     */
713!        else {
714!          if (expy >= 0x3ff) {						/* |Y| >= 1     */
715!            if (expy > (20 + 0x3ff)) {
716!              i0 = ly >> (52 - (expy - 0x3ff));
717!              if ((i0 << (52 - (expy - 0x3ff))) == ly) yisint = 2 - (i0 & 1);
718!            }
719!            else if (ly == 0) {
720!              i0 = hy >> (20 - (expy - 0x3ff));
721!              if ((i0 << (20 - (expy - 0x3ff))) == hy) yisint = 2 - (i0 & 1);
722!            }
723!          }
724!        }
725!      }
726!      if (sy) hx = lx = 0;
727!      hx += yisint << 31;
728!      ((int*)pz)[0] = hx;
729!      ((int*)pz)[1] = lx;
730!      goto next;
731!    }
732!    else {								/* |Y| >= 2^63     */
733!      if (lx == 0 &&							/* |X| = 0, 1, Inf */
734!         (hx == 0 || hx == 0x3ff00000 || hx == 0x7ff00000)) {
735!        ((int*)pz)[0] = hx;
736!        ((int*)pz)[1] = lx;
737!        if (sy) *pz = DONE / *pz;
738!      }
739!      else {
740!        y0 = ((hx < 0x3ff00000) != sy) ? _TINY : _HUGE;
741!        *pz = y0 * y0;
742!      }
743!      goto next;
744!    }
745!  }
746!  if (sx || (hx | lx) == 0) {						/* X <= 0      */
747!    if (expy >= 0x434)							/* |Y| >= 2^53 */
748!      yisint = 2;							/* Y - even    */
749!    else {
750!      if (expy >= 0x3ff) {						/* |Y| >= 1    */
751!        if (expy > (20 + 0x3ff)) {
752!          i0 = ly >> (52 - (expy - 0x3ff));
753!          if ((i0 << (52 - (expy - 0x3ff))) == ly) yisint = 2 - (i0 & 1);
754!        }
755!        else if (ly == 0) {
756!          i0 = hy >> (20 - (expy - 0x3ff));
757!          if ((i0 << (20 - (expy - 0x3ff))) == hy) yisint = 2 - (i0 & 1);
758!        }
759!      }
760!    }
761!    if ((hx | lx) == 0) {						/* X == 0  */
762!      y0 = DZERO;
763!      if (sy) y0 = DONE / y0;
764!      if (sx & yisint) y0 = -y0;
765!      *pz = y0;
766!      goto next;
767!    }
768!    if (yisint == 0) {							/* pow(neg,non-integer) */
769!      *pz = DZERO / DZERO;						/* NaN */
770!      goto next;
771!    }
772!  }
773!
774!  *((int*)&x + 1) = ((unsigned*)px)[1];
775!  *((int*)&ax + 1) = 0;
776!  exp = hx;
777!  hx &= 0xfffff;
778!  hx |= 0x3ff00000;
779!  *(int*)&x = hx;
780!  hx += 0x800;
781!  hx &= 0xfffff000;
782!  *(int*)&ax = hx;
783!  if (exp <= 0xfffff) {
784!    y0 = vis_fand(x, MMANT);
785!    ax = (double) ((long long *) & y0)[0];
786!    x = vis_fand(ax, MMANT);
787!    x = vis_for(x, DONE);
788!    exp = ((unsigned int*) & ax)[0];
789!    exp -= (1023 + 51) << 20;
790!    hx = exp & 0xfffff;
791!    hx |= 0x3ff00000;
792!    hx += 0x800;
793!    *(int*)&ax = hx;
794!  }
795!  exp = (exp >> 20);
796!  exp = exp - 2046;
797!  ux = x + ax;
798!  yd = DONE / ux;
799!  u = x - ax;
800!  s = u * yd;
801!  ux = vis_fand(ux, MHI32);
802!  y = s * s;
803!  s_h = vis_fand(s, MHI32);
804!  dtmp8 = KA5 * y;
805!  dtmp8 = dtmp8 + KA3;
806!  dtmp8 = dtmp8 * y;
807!  s = dtmp8 * s;
808!  dtmp0 = (ux - ax);
809!  s_l = (x - dtmp0);
810!  dtmp0 = s_h * ux;
811!  dtmp1 = s_h * s_l;
812!  s_l = u - dtmp0;
813!  s_l -= dtmp1;
814!  dtmp0 = KA1 * yd;
815!  s_l = dtmp0 * s_l;
816!  i = (hx >> 8);
817!  i = i & 0xff0;
818!  itmp0 = (hx >> 20);
819!  exp += itmp0;
820!  yd = KA1_HI * s_h;
821!  y = *(double *)((char*)__mt_constlog2 + i);
822!  itmp0 = exp << 8;
823!  y += (double)itmp0;
824!  m_h = y + yd;
825!  dtmp2 = m_h - y;
826!  dtmp2 -= yd;
827!  dtmp2 -= s_l;
828!  y = s - dtmp2;
829!  dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
830!  dtmp1 = KA1_LO * s_h;
831!  dtmp0 += dtmp1;
832!  y += dtmp0;
833!  dtmp0 = y + m_h;
834!  s_h = vis_fand(dtmp0, MHI32);
835!  dtmp0 = (s_h - m_h);
836!  y = y - dtmp0;
837!  yd = *py;
838!  s = vis_fand(yd, MHI32);
839!  dtmp0 = (yd - s);
840!  dtmp1 = yd * y;
841!  dtmp0 *= s_h;
842!  yd = dtmp0 + dtmp1;
843!  s = s_h * s;
844!  if (s > HTHRESH) {s = HTHRESH; yd = DZERO;}
845!  if (s < LTHRESH) {s = LTHRESH; yd = DZERO;}
846!  dtmp0 = (s + yd);
847!  ind = (int)dtmp0;
848!  i = ind & 0xff;
849!  i = i << 4;
850!  u = (double)(int)dtmp0;
851!  ind >>= 8;
852!  y = s - u;
853!  y = y + yd;
854!  u = *(double*)((char*)__mt_constexp2 + i);
855!  dtmp0 = KB5 * y;
856!  dtmp1 = dtmp0 + KB4;
857!  dtmp2 = dtmp1 * y;
858!  dtmp3 = dtmp2 + KB3;
859!  dtmp4 = dtmp3 * y;
860!  dtmp5 = dtmp4 + KB2;
861!  dtmp6 = dtmp5 * y;
862!  dtmp7 = dtmp6 + KB1;
863!  y = dtmp7 * y;
864!  eflag = (ind + 1021);
865!  eflag = eflag >> 31;
866!  gflag = (1022 - ind);
867!  gflag = gflag >> 31;
868!  dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
869!  dtmp1 = u * y;
870!  dtmp2 = dtmp0 + dtmp1;
871!  u = dtmp2 + u;
872!  ind = yisint + ind;
873!  itmp0 = 54 & eflag;
874!  itmp1 = 52 & gflag;
875!  ind = ind + itmp0;
876!  ind = ind - itmp1;
877!  ind <<= 20;
878!  *(int*)&dtmp0 = ind;
879!  *((int*)&dtmp0 + 1) = 0;
880!  u = vis_fpadd32(u, dtmp0);
881!  ind = eflag - gflag;
882!  ind += 1;
883!  ind *= 8;
884!  dtmp1 = (*(double*)((char*)lconst + ind);
885!  dtmp1 = u * dtmp1;
886!  *pz = dtmp1;
887!--------------------------------------------------------------------
888!		!!!!!	vpowx algorithm	!!!!! (x > 0 and x != Inf, NaN)
889!
890!                   /* perform s_h + yr = 256*log2(x) */
891!
892!  exp = ((unsigned*)px)[0];
893!  y0 = px[0];
894!  if (exp <= 0xfffff) {
895!    y0 = (double) ((long long *) & y0)[0];
896!    exp = ((unsigned int*) & y0)[0];
897!    exp -= (1023 + 51) << 20;
898!  }
899!  x = vis_fand(y0, MMANT);
900!  x = vis_for(x, DONE);
901!  ax = vis_fpadd32(x, MROUND);
902!  ax = vis_fand(ax, MHI20);
903!  hx = *(int*)&ax;
904!  exp = (exp >> 20);
905!  exp = exp - 2046;
906!  ux = x + ax;
907!  yd = DONE / ux;
908!  u = x - ax;
909!  s = u * yd;
910!  ux = vis_fand(ux, MHI32);
911!  y = s * s;
912!  s_h = vis_fand(s, MHI32);
913!  dtmp8 = KA5 * y;
914!  dtmp8 = dtmp8 + KA3;
915!  dtmp8 = dtmp8 * y;
916!  s = dtmp8 * s;
917!  dtmp0 = (ux - ax);
918!  s_l = (x - dtmp0);
919!  dtmp0 = s_h * ux;
920!  dtmp1 = s_h * s_l;
921!  s_l = u - dtmp0;
922!  s_l -= dtmp1;
923!  dtmp0 = KA1 * yd;
924!  s_l = dtmp0 * s_l;
925!  i = (hx >> 8);
926!  i = i & 0xff0;
927!  itmp0 = (hx >> 20);
928!  exp += itmp0;
929!  yd = KA1_HI * s_h;
930!  y = *(double *)((char*)__mt_constlog2 + i);
931!  itmp0 = exp << 8;
932!  y += (double)itmp0;
933!  m_h = y + yd;
934!  dtmp2 = m_h - y;
935!  dtmp2 -= yd;
936!  dtmp2 -= s_l;
937!  y = s - dtmp2;
938!  dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
939!  dtmp1 = KA1_LO * s_h;
940!  dtmp0 += dtmp1;
941!  y += dtmp0;
942!  dtmp0 = y + m_h;
943!  s_h = vis_fand(dtmp0, MHI32);
944!  dtmp0 = (s_h - m_h);
945!  yr = y - dtmp0;
946!
947!  hy = ((unsigned*)py)[0];
948!  ly = ((unsigned*)py)[1];
949!  hx = ((unsigned*)px)[0];
950!  lx = ((unsigned*)px)[1];
951!  sy = hy >> 31;
952!  hy &= 0x7fffffff;
953!
954!  if (hy < 0x3bf00000) {/* |Y| < 2^(-64) */
955!    *pz = DONE;
956!    goto next;
957!  }
958!
959!  if (hy >= 0x43e00000) {			/* |Y|>2^63,Inf,Nan */
960!    if (hy == 0x7ff00000 && (ly == 0)) {	/* |Y| = Inf */
961!      if (hx == 0x3ff00000 && (lx == 0))
962!        *pz = *py - *py;			/* 1 ** +-Inf */
963!      else if ((hx < 0x3ff00000) != sy)
964!        *pz = DZERO;
965!      else {
966!        ((int*)pz)[0] = hy;
967!        ((int*)pz)[1] = ly;
968!      }
969!      goto next;
970!    }
971!    if (hy >= 0x7ff00000) {
972!      *pz = *px + *py;				/* |Y| = Nan */
973!      goto next;
974!    }
975! 						/* |Y| >= 2^63   */
976!    if (lx == 0 && (hx == 0x3ff00000)) {	/*  X = 1 */
977!      *pz = DONE;
978!    }
979!    else {
980!      y0 = ((hx < 0x3ff00000) != sy) ? _TINY : _HUGE;
981!      *pz = y0 * y0;
982!    }
983!    goto next;
984!  }
985!
986!  yd = *py;
987!  s = vis_fand(yd, MHI32);
988!  dtmp0 = (yd - s);
989!  dtmp1 = yd * yr;
990!  dtmp0 *= s_h;
991!  yd = dtmp0 + dtmp1;
992!  s = s_h * s;
993!  if (s > HTHRESH) {s = HTHRESH; yd = DZERO;}
994!  if (s < LTHRESH) {s = LTHRESH; yd = DZERO;}
995!  dtmp0 = (s + yd);
996!  ind = (int)dtmp0;
997!  i = ind & 0xff;
998!  i = i << 4;
999!  u = (double)(int)dtmp0;
1000!  ind >>= 8;
1001!  y = s - u;
1002!  y = y + yd;
1003!  u = *(double*)((char*)__mt_constexp2 + i);
1004!  dtmp0 = XKB5 * y;
1005!  dtmp1 = dtmp0 + XKB4;
1006!  dtmp2 = dtmp1 * y;
1007!  dtmp3 = dtmp2 + XKB3;
1008!  dtmp4 = dtmp3 * y;
1009!  dtmp5 = dtmp4 + XKB2;
1010!  dtmp6 = dtmp5 * y;
1011!  dtmp7 = dtmp6 + XKB1;
1012!  y = dtmp7 * y;
1013!  eflag = (ind + 1021);
1014!  eflag = eflag >> 31;
1015!  gflag = (1022 - ind);
1016!  gflag = gflag >> 31;
1017!  dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
1018!  dtmp1 = u * y;
1019!  dtmp2 = dtmp0 + dtmp1;
1020!  u = dtmp2 + u;
1021!  itmp0 = 54 & eflag;
1022!  itmp1 = 52 & gflag;
1023!  ind = ind + itmp0;
1024!  ind = ind - itmp1;
1025!  ind <<= 20;
1026!  *(int*)&dtmp0 = ind;
1027!  *((int*)&dtmp0 + 1) = 0;
1028!  u = vis_fpadd32(u, dtmp0);
1029!  ind = eflag - gflag;
1030!  ind += 1;
1031!  ind *= 8;
1032!  dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
1033!  dtmp1 = u * dtmp1;
1034!  *pz = dtmp1;
1035!--------------------------------------------------------------------
1036
1037	ENTRY(__vpow)
1038	save	%sp,-SA(MINFRAME)-tmps,%sp
1039	PIC_SETUP(l7)
1040	PIC_SET(l7,.CONST_TBL,g5)
1041	wr	%g0,0x82,%asi			! set %asi for non-faulting loads
1042
1043	cmp	counter,0
1044	ble,pn	%icc,.end
1045
1046#ifdef	__sparcv9
1047	ldx	[%fp+STACK_BIAS+176],stridez
1048#else
1049	ld	[%fp+STACK_BIAS+92],stridez
1050#endif
1051
1052	ld	[px],%o0
1053	add	LOGTBL,4095,EXPTBL
1054	st	counter,[%fp+tmp_counter]
1055	add	EXPTBL,65,EXPTBL
1056	sra	%i2,0,stridex
1057	stx	px,[%fp+tmp_px]
1058	add	EXPTBL,4095,%l0
1059	fzero	DZERO
1060	stx	py,[%fp+tmp_py]
1061
1062	cmp	stridex,0
1063	bne,pt	%icc,.common_case
1064	add	%l0,1,%l0
1065
1066	cmp	%o0,0
1067	ble,pt	%icc,.common_case
1068	sethi	%hi(0x7f800000),%o1
1069
1070	cmp	%o0,%o1
1071	bl,pn	%icc,.stridex_zero
1072	nop
1073
1074.common_case:
1075	sra	stridez,0,stridez
1076	ldd	[%l0+8],DONE
1077	ldd	[%l0+24],MHI32
1078	sra	%i4,0,stridey
1079	ldd	[%l0+32],KA5
1080	sethi	%hi(0x7ffffc00),MASK_0x7fffffff
1081	ldd	[%l0+40],KA3
1082	sethi	%hi(0xffc00),MASK_0x000fffff
1083	ldd	[%l0+48],KA1
1084	sethi	%hi(0x3ff00000),MASK_0x3ff00000
1085	ldd	[%l0+56],HTHRESH
1086	sllx	stridex,3,stridex
1087	add	MASK_0x7fffffff,0x3ff,MASK_0x7fffffff
1088	ldd	[%l0+64],LTHRESH
1089	sllx	stridey,3,stridey
1090	add	MASK_0x000fffff,0x3ff,MASK_0x000fffff
1091	ldd	[%l0+72],KB4
1092	sllx	stridez,3,stridez
1093	st	%g0,[%fp+tmp1_lo]		! *((int*)&ax + 1) = 0;
1094	sub	%g0,1,%o2
1095	st	%g0,[%fp+tmp2_lo]		! (Y0_0) *((int*)&dtmp0 + 1) = 0;
1096	st	MASK_0x000fffff,[%fp+tmp_mant]
1097	sub	pz,stridez,pz
1098	st	%o2,[%fp+tmp_mant+4]
1099
1100.begin:
1101	ld	[%fp+tmp_counter],counter
1102	ldx	[%fp+tmp_px],px
1103	ldx	[%fp+tmp_py],py
1104	st	%g0,[%fp+tmp_counter]
1105.begin1:
1106	subcc	counter,1,counter
1107	bneg,pn	%icc,.end
1108	or	%g0,ind_buf,%o7
1109
1110	lda	[py]%asi,%o2			! (Y0_1) hy = *py;
1111
1112	and	%o2,MASK_0x7fffffff,%l1		! (Y0_3) hy &= 0x7fffffff;
1113	lda	[px]%asi,%l0			! (Y0_3) hx = ((unsigned*)px)[0];
1114
1115	sra	%l1,20,%o0			! (Y0_3) expy = hy >> 20;
1116	lda	[px+4]%asi,%i2			! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1117
1118	and	MASK_0x000fffff,%l0,%o5		! (Y0_3) hx &= 0xfffff;
1119
1120	or	MASK_0x3ff00000,%o5,%o5		! (Y0_3) hx |= 0x3ff00000;
1121
1122	st	%o5,[%fp+tmp0_hi]		! (Y0_3) *(int*)&x = hx;
1123
1124	add	%o5,2048,%o5			! (Y0_3) hx += 0x800;
1125
1126	st	%i2,[%fp+tmp0_lo]		! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1127	and	%o5,-4096,%l4			! (Y0_3) hx &= 0xfffff000;
1128
1129	add	pz,stridez,pz
1130	st	%l4,[%fp+tmp1_hi]		! (Y0_3) *(int*)&ax = hx;
1131
1132	and	%l0,MASK_0x7fffffff,%l3		! (Y0_3) hx &= 0x7fffffff;
1133
1134	sra	%l3,20,%l2			! (Y0_3) exp = (exp >> 20);
1135
1136	cmp	%o0,959				! (Y0_3) if (expy < 0x3fb);
1137	bl,pn	%icc,.spec0			! (Y0_3) if (expy < 0x3fb);
1138	st	%g0,[%fp+%o7]			! (Y0_3) yisint = 0;
1139
1140	cmp	%o0,1086			! (Y0_3) if (expy >= 0x43e);
1141	bge,pn	%icc,.spec1			! (Y0_3) if (expy >= 0x43e);
1142	nop
1143
1144	cmp	%l2,2047			! (Y0_2) if (exp >= 0x7ff)
1145	bge,pn	%icc,.spec1			! (Y0_2) if (exp >= 0x7ff)
1146	nop
1147
1148	cmp	%l0,MASK_0x000fffff		! (Y0_2) if (hx <= 0xfffff)
1149
1150	ldd	[%fp+tmp0_hi],%f32		! (Y0_2) *(int*)&x = hx;
1151	ble,pn	%icc,.update0			! (Y0_2) if (hx <= 0xfffff)
1152	nop
1153.cont0:
1154	sub	%o7,ind_buf,%o7			! stack buffer pointer update
1155	sub	pz,stridez,pz
1156	ldd	[%fp+tmp1_hi],%f54		! (Y0_2) *(int*)&ax = hx;
1157
1158	add	%o7,4,%o7			! stack buffer pointer update
1159	faddd	%f32,%f54,%f12			! (Y0_2) ux = x + ax;
1160
1161	and	%o7,15,%o7			! stack buffer pointer update
1162
1163	add	%o7,ind_buf,%o7			! stack buffer pointer update
1164	add	px,stridex,px			! px += stridex;
1165
1166	lda	[px]%asi,%l0			! (Y1_2) hx = ((unsigned*)px)[0];
1167
1168	lda	[px+4]%asi,%i2			! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1169	and	MASK_0x000fffff,%l0,%i4		! (Y1_2) hx &= 0xfffff;
1170
1171	st	%g0,[%fp+%o7]			! (Y1_2) yisint = 0;
1172	or	MASK_0x3ff00000,%i4,%i4		! (Y1_2) hx |= 0x3ff00000;
1173
1174	st	%i4,[%fp+tmp0_hi]		! (Y1_2) *(int*)&x = hx;
1175	add	%i4,2048,%i4			! (Y1_2) hx += 0x800;
1176
1177	st	%i2,[%fp+tmp0_lo]		! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1178	and	%i4,-4096,%i4			! (Y1_2) hx &= 0xfffff000;
1179
1180	st	%i4,[%fp+tmp1_hi]		! (Y1_2) *(int*)&ax = hx;
1181	and	%l0,MASK_0x7fffffff,%l2		! (Y1_2) hx &= 0x7fffffff;
1182	cmp	%l0,MASK_0x000fffff		! (Y1_2) if (hx <= 0xfffff)
1183
1184	ble,pn	%icc,.update1			! (Y1_2) if (hx <= 0xfffff)
1185	nop
1186.cont1:
1187	sub	%o7,ind_buf,%o7			! stack buffer pointer update
1188
1189	add	%o7,4,%o7			! stack buffer pointer update
1190	fdivd	DONE,%f12,%f20			! (Y0_2) yd = DONE / ux;
1191
1192	and	%o7,15,%o7			! stack buffer pointer update
1193
1194	sra	%l3,20,%l3			! (Y0_2) exp = (exp >> 20);
1195	add	%o7,ind_buf,%o7			! stack buffer pointer update
1196	ldd	[%fp+tmp0_hi],%f8		! (Y1_2) *(int*)&x = hx;
1197
1198	ldd	[%fp+tmp1_hi],%f14		! (Y1_2) *(int*)&ax = hx;
1199	sra	%l4,20,%l0			! (Y0_2) itmp0 = (hx >> 20);
1200	sub	%l3,2046,%o5			! (Y0_2) exp = exp - 2046;
1201
1202	add	%o5,%l0,%o5			! (Y0_2) exp += itmp0;
1203
1204	sll	%o5,8,%l0			! (Y0_2) itmp0 = exp << 8;
1205	st	%l0,[%fp+tmp3]			! (Y0_2) (double)itmp0;
1206	faddd	%f8,%f14,%f26			! (Y1_2) ux = x + ax;
1207
1208	fand	%f12,MHI32,%f12			! (Y0_2) ux = vis_fand(ux, MHI32);
1209	add	px,stridex,px			! px += stridex;
1210
1211	ldd	[EXPTBL-ind_HI],KA1_HI		! (Y0_2) load KA1_HI;
1212	fsubd	%f12,%f54,%f10			! (Y0_2) dtmp0 = (ux - ax);
1213
1214	ld	[%fp+tmp3],%f16			! (Y0_2) (double)itmp0;
1215	fsubd	%f32,%f54,%f58			! (Y0_2) u = x - ax;
1216
1217	sra	%l4,8,%l4			! (Y0_2) i = (hx >> 8);
1218
1219	and	%l4,4080,%l4			! (Y0_2) i = i & 0xff0;
1220
1221	ldd	[LOGTBL+%l4],%f62		! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
1222	fmuld	%f58,%f20,%f52			! (Y0_2) s = u * yd;
1223	fsubd	%f32,%f10,%f10			! (Y0_2) s_l = (x - dtmp0);
1224
1225	fitod	%f16,%f54			! (Y0_2) (double)itmp0;
1226	add	%l4,8,%o0			! (Y0_2) i += 8;
1227
1228	lda	[px]%asi,%l0			! (Y0_3) hx = ((unsigned*)px)[0];
1229	fand	%f52,MHI32,%f4			! (Y0_2) s_h = vis_fand(s, MHI32);
1230
1231	faddd	%f62,%f54,%f54			! (Y0_2) y += (double)itmp0;
1232	lda	[px+4]%asi,%i2			! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1233	fmuld	%f4,%f12,%f32			! (Y0_2) dtmp0 = s_h * ux;
1234
1235	and	MASK_0x000fffff,%l0,%o5		! (Y0_3) hx &= 0xfffff;
1236	fmuld	%f52,%f52,%f12			! (Y0_2) y = s * s;
1237
1238	or	MASK_0x3ff00000,%o5,%o5		! (Y0_3) hx |= 0x3ff00000;
1239
1240	st	%o5,[%fp+tmp0_hi]		! (Y0_3) *(int*)&x = hx;
1241	fsubd	%f58,%f32,%f32			! (Y0_2) s_l = u - dtmp0;
1242
1243	add	%o5,2048,%o5			! (Y0_3) hx += 0x800;
1244
1245	st	%i2,[%fp+tmp0_lo]		! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1246	and	%o5,-4096,%l4			! (Y0_3) hx &= 0xfffff000;
1247	fmuld	KA5,%f12,%f36			! (Y0_2) dtmp8 = KA5 * y;
1248
1249	st	%l4,[%fp+tmp1_hi]		! (Y0_3) *(int*)&ax = hx;
1250	fmuld	KA1_HI,%f4,%f48			! (Y0_2) yd = KA1_HI * s_h;
1251
1252	fmuld	%f4,%f10,%f10			! (Y0_2) dtmp1 = s_h * s_l;
1253	ldd	[EXPTBL-ind_LO],KA1_LO		! (y0_2) load KA1_LO;
1254	and	%l0,MASK_0x7fffffff,%l3		! (Y0_3) hx &= 0x7fffffff;
1255	faddd	%f36,KA3,%f62			! (Y0_2) dtmp8 = dtmp8 + KA3;
1256
1257	st	%g0,[%fp+%o7]			! (Y0_3) yisint = 0;
1258	faddd	%f54,%f48,%f36			! (Y0_2) m_h = y + yd;
1259
1260	fdivd	DONE,%f26,%f22			! (Y1_2) yd = DONE / ux;
1261	fsubd	%f32,%f10,%f10			! (Y0_2) s_l -= dtmp1;
1262
1263	cmp	%l0,MASK_0x000fffff		! (Y0_2) if (hx <= 0xfffff)
1264
1265	sra	%l2,20,%l2			! (Y1_1) exp = (exp >> 20);
1266	ldd	[%fp+tmp0_hi],%f32		! (Y0_2) *(int*)&x = hx;
1267	ble,pn	%icc,.update2			! (Y0_2) if (hx <= 0xfffff)
1268	fsubd	%f36,%f54,%f30			! (Y0_1) dtmp2 = m_h - y;
1269.cont2:
1270	cmp	%l2,2047			! (Y1_1) if (exp >= 0x7ff)
1271	sub	%o7,ind_buf,%o7			! stack buffer pointer update
1272	ldd	[%fp+tmp1_hi],%f54		! (Y0_2) *(int*)&ax = hx;
1273
1274	sra	%i4,20,%l0			! (Y1_1) itmp0 = (hx >> 20);
1275	sub	%l2,2046,%o5			! (Y1_1) exp = exp - 2046;
1276	fmuld	KA1,%f20,%f20			! (Y0_1) dtmp0 = KA1 * yd;
1277
1278	add	%o5,%l0,%o5			! (Y1_1) exp += itmp0;
1279	fmuld	%f62,%f12,%f62			! (Y0_1) dtmp8 = dtmp8 * y;
1280
1281	sll	%o5,8,%l0			! (Y1_1) itmp0 = exp << 8;
1282	add	%o7,4,%o7			! stack buffer pointer update
1283	st	%l0,[%fp+tmp3]			! (Y1_1) (double)itmp0;
1284	faddd	%f32,%f54,%f12			! (Y0_2) ux = x + ax;
1285
1286	bge,pn	%icc,.update3			! (Y1_1) if (exp >= 0x7ff)
1287	fsubd	%f30,%f48,%f48			! (Y0_1) dtmp2 -= yd;
1288.cont3:
1289	and	%o7,15,%o7			! stack buffer pointer update
1290	fmuld	%f20,%f10,%f10			! (Y0_1) s_l = dtmp0 * s_l;
1291
1292	add	%o7,ind_buf,%o7			! stack buffer pointer update
1293	fmuld	KA1_LO,%f4,%f4			! (Y0_1) dtmp1 = KA1_LO * s_h;
1294	fand	%f26,MHI32,%f26			! (Y1_1) ux = vis_fand(ux, MHI32);
1295
1296	fmuld	%f62,%f52,%f62			! (Y0_1) s = dtmp8 * s;
1297	ldd	[LOGTBL+%o0],%f52		! (Y0_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
1298	fsubd	%f48,%f10,%f20			! (Y0_1) dtmp2 -= s_l;
1299
1300	add	px,stridex,px			! px += stridex;
1301	fsubd	%f26,%f14,%f10			! (Y1_1) dtmp0 = (ux - ax);
1302
1303	faddd	%f52,%f4,%f52			! (Y0_1) dtmp0 += dtmp1;
1304
1305	ldd	[EXPTBL-ind_HI],KA1_HI		! (Y1_1) load KA1_HI;
1306	fsubd	%f62,%f20,%f4			! (Y0_1) y = s - dtmp2;
1307
1308	ld	[%fp+tmp3],%f16			! (Y1_1) (double)itmp0;
1309	fsubd	%f8,%f14,%f58			! (Y1_1) u = x - ax;
1310
1311	sra	%i4,8,%o0			! (Y1_1) i = (hx >> 8);
1312
1313	faddd	%f4,%f52,%f48			! (Y0_1) y += dtmp0;
1314	and	%o0,4080,%o0			! (Y1_1) i = i & 0xff0;
1315
1316	ldd	[LOGTBL+%o0],%f62		! (Y1_1) y = *(double *)((char*)__mt_constlog2 + i);
1317	fmuld	%f58,%f22,%f52			! (Y1_1) s = u * yd;
1318	fsubd	%f8,%f10,%f10			! (Y1_1) s_l = (x - dtmp0);
1319
1320	lda	[py]%asi,%f30			! (Y0_1) yd = *py;
1321	fitod	%f16,%f14			! (Y1_1) (double)itmp0;
1322
1323	lda	[py+4]%asi,%f31			! (Y0_1) yd = *py;
1324	faddd	%f48,%f36,%f8			! (Y0_1) dtmp0 = y + m_h;
1325
1326	add	%o0,8,%o0			! (Y1_1) i += 8;
1327	lda	[px]%asi,%l0			! (Y1_2) hx = ((unsigned*)px)[0];
1328	fand	%f52,MHI32,%f4			! (Y1_1) s_h = vis_fand(s, MHI32);
1329
1330	faddd	%f62,%f14,%f14			! (Y1_1) y += (double)itmp0;
1331
1332	lda	[px+4]%asi,%i2			! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1333	fand	%f8,MHI32,%f20			! (Y0_1) s_h = vis_fand(dtmp0, MHI32);
1334	fmuld	%f4,%f26,%f8			! (Y1_1) dtmp0 = s_h * ux;
1335
1336	fand	%f30,MHI32,%f6			! (Y0_1) s = vis_fand(yd, MHI32);
1337	and	MASK_0x000fffff,%l0,%i4		! (Y1_2) hx &= 0xfffff;
1338	fmuld	%f52,%f52,%f26			! (Y1_1) y = s * s;
1339
1340	st	%g0,[%fp+%o7]			! (Y1_2) yisint = 0;
1341	or	MASK_0x3ff00000,%i4,%i4		! (Y1_2) hx |= 0x3ff00000;
1342	fsubd	%f20,%f36,%f62			! (Y0_1) dtmp0 = (s_h - m_h);
1343
1344	st	%i4,[%fp+tmp0_hi]		! (Y1_2) *(int*)&x = hx;
1345	fsubd	%f58,%f8,%f8			! (Y1_1) s_l = u - dtmp0;
1346
1347	add	%i4,2048,%i4			! (Y1_2) hx += 0x800;
1348	fmuld	%f20,%f6,%f34			! (Y0_1) s = s_h * s;
1349	fsubd	%f30,%f6,%f6			! (Y0_1) dtmp0 = (yd - s);
1350
1351	st	%i2,[%fp+tmp0_lo]		! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1352	and	%i4,-4096,%i4			! (Y1_2) hx &= 0xfffff000;
1353	fmuld	KA5,%f26,%f36			! (Y1_1) dtmp8 = KA5 * y;
1354
1355	st	%i4,[%fp+tmp1_hi]		! (Y1_2) *(int*)&ax = hx;
1356	fsubd	%f48,%f62,%f62			! (Y0_1) y = y - dtmp0;
1357	fmuld	KA1_HI,%f4,%f48			! (Y1_1) yd = KA1_HI * s_h;
1358
1359	fmuld	%f4,%f10,%f10			! (Y1_1) dtmp1 = s_h * s_l;
1360
1361	ldd	[EXPTBL-ind_LO],KA1_LO		! (Y1_1) load KA1_LO;
1362	and	%l0,MASK_0x7fffffff,%l2		! (Y1_2) hx &= 0x7fffffff;
1363	fmuld	%f6,%f20,%f6			! (Y0_1) dtmp0 *= s_h;
1364	fcmped	%fcc0,%f34,HTHRESH		! (Y0_1) s > HTHRESH
1365
1366	cmp	%l0,MASK_0x000fffff		! (Y1_2) if (hx <= 0xfffff)
1367	fmuld	%f30,%f62,%f30			! (Y0_1) dtmp1 = yd * y;
1368	faddd	%f36,KA3,%f62			! (Y1_1) dtmp8 = dtmp8 + KA3;
1369
1370	ble,pn	%icc,.update4			! (Y1_2) if (hx <= 0xfffff)
1371	faddd	%f14,%f48,%f36			! (Y1_1)  m_h = y + yd;
1372.cont4:
1373	sub	%o7,ind_buf,%o7			! stack buffer pointer update
1374	fmovdg	%fcc0,HTHRESH,%f34		! (Y0_1) s = HTHRESH
1375
1376	add	%o7,4,%o7			! stack buffer pointer update
1377	fdivd	DONE,%f12,%f20			! (Y0_2) yd = DONE / ux;
1378	fsubd	%f8,%f10,%f10			! (Y1_1) s_l -= dtmp1;
1379
1380	and	%o7,15,%o7			! stack buffer pointer update
1381	faddd	%f6,%f30,%f6			! (Y0_1) yd = dtmp0 + dtmp1;
1382
1383	sra	%l3,20,%l3			! (Y0_2) exp = (exp >> 20);
1384	add	%o7,ind_buf,%o7			! stack buffer pointer update
1385	ldd	[%fp+tmp0_hi],%f8		! (Y1_2) *(int*)&x = hx;
1386	fsubd	%f36,%f14,%f30			! (Y1_1) dtmp2 = m_h - y;
1387
1388	cmp	%l3,2047			! (Y0_2) if (exp >= 0x7ff)
1389	ldd	[%fp+tmp1_hi],%f14		! (Y1_2) *(int*)&ax = hx;
1390	fmuld	KA1,%f22,%f22			! (Y1_1) dtmp0 = KA1 * yd;
1391
1392	sra	%l4,20,%l0			! (Y0_2) itmp0 = (hx >> 20);
1393	sub	%l3,2046,%o5			! (Y0_2) exp = exp - 2046;
1394	fcmped	%fcc1,%f34,LTHRESH		! (Y0_1) s < LTHRESH
1395
1396	add	%o5,%l0,%o5			! (Y0_2) exp += itmp0;
1397	add	py,stridey,py			! py += stridey;
1398	fmuld	%f62,%f26,%f62			! (Y1_1) dtmp8 = dtmp8 * y;
1399	fmovdg	%fcc0,DZERO,%f6			! (Y0_1) yd = DZERO
1400
1401	sll	%o5,8,%l0			! (Y0_2) itmp0 = exp << 8;
1402	st	%l0,[%fp+tmp3]			! (Y0_2) (double)itmp0;
1403	faddd	%f8,%f14,%f26			! (Y1_2) ux = x + ax;
1404
1405	bge,pn	%icc,.update5			! (Y0_2) if (exp >= 0x7ff)
1406	fsubd	%f30,%f48,%f48			! (Y1_1) dtmp2 -= yd;
1407.cont5:
1408	lda	[py]%asi,%l1			! (Y1_1) hy = *py;
1409	fmuld	%f22,%f10,%f10			! (Y1_1) s_l = dtmp0 * s_l;
1410	fmovdl	%fcc1,LTHRESH,%f34		! (Y0_1) s = LTHRESH
1411
1412	fmovdl	%fcc1,DZERO,%f6			! (Y0_1) yd = DZERO
1413
1414	fand	%f12,MHI32,%f12			! (Y0_2) ux = vis_fand(ux, MHI32);
1415	fmuld	KA1_LO,%f4,%f4			! (Y1_1) dtmp1 = KA1_LO * s_h;
1416
1417	fmuld	%f62,%f52,%f62			! (Y1_1) s = dtmp8 * s;
1418	ldd	[LOGTBL+%o0],%f52		! (Y1_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
1419	fsubd	%f48,%f10,%f22			! (Y1_1) dtmp2 -= s_l;
1420
1421	add	px,stridex,px			! px += stridex;
1422	faddd	%f34,%f6,%f58			! (Y0_1) dtmp0 = (s + yd);
1423
1424	and	%l1,MASK_0x7fffffff,%l1		! (Y1_1) hy &= 0x7fffffff;
1425	ldd	[EXPTBL-ind_HI],KA1_HI		! (Y0_2) load KA1_HI;
1426	fsubd	%f12,%f54,%f10			! (Y0_2) dtmp0 = (ux - ax);
1427
1428	faddd	%f52,%f4,%f52			! (Y1_1) dtmp0 += dtmp1;
1429
1430	fsubd	%f62,%f22,%f4			! (Y1_1) y = s - dtmp2;
1431
1432	fdtoi	%f58,%f17			! (Y0_1) (int)dtmp0;
1433
1434	ld	[%fp+tmp3],%f16			! (Y0_2) (double)itmp0;
1435	fsubd	%f32,%f54,%f58			! (Y0_2) u = x - ax;
1436	sra	%l4,8,%l4			! (Y0_2) i = (hx >> 8);
1437
1438	sra	%l1,20,%l1			! (Y1_1) expy = hy >> 20;
1439	ldd	[EXPTBL-ind_KB5],KB5			! (Y0_1) load KB5;
1440	faddd	%f4,%f52,%f48			! (Y1_1) y += dtmp0;
1441
1442	and	%l4,4080,%l4			! (Y0_2) i = i & 0xff0;
1443	st	%f17,[%fp+tmp4]			! (Y0_1) ind = (int)dtmp0;
1444	fitod	%f17,%f4			! (Y0_1) u = (double)(int)dtmp0;
1445
1446	ldd	[LOGTBL+%l4],%f62		! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
1447	fmuld	%f58,%f20,%f52			! (Y0_2) s = u * yd;
1448	fsubd	%f32,%f10,%f10			! (Y0_2) s_l = (x - dtmp0);
1449
1450	lda	[py]%asi,%f30			! (Y1_1) yd = *py;
1451	fitod	%f16,%f54			! (Y0_2) (double)itmp0;
1452
1453	lda	[py+4]%asi,%f31			! (Y1_1) yd = *py;
1454	faddd	%f48,%f36,%f32			! (Y1_1) dtmp0 = y + m_h;
1455
1456	add	%l4,8,%o0			! (Y0_2) i += 8;
1457	fsubd	%f34,%f4,%f60			! (Y0_1) y = s - u;
1458
1459	cmp	%l1,959				! (Y1_1) if (expy < 0x3fb);
1460	lda	[px]%asi,%l0			! (Y0_3) hx = ((unsigned*)px)[0];
1461	fand	%f52,MHI32,%f4			! (Y0_2) s_h = vis_fand(s, MHI32);
1462
1463	bl,pn	%icc,.update6			! (Y1_1) if (expy < 0x3fb);
1464	faddd	%f62,%f54,%f54			! (Y0_2) y += (double)itmp0;
1465.cont6:
1466	cmp	%l1,1086			! (Y1_1) if (expy >= 0x43e);
1467	lda	[px+4]%asi,%i2			! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1468	fand	%f32,MHI32,%f22			! (Y1_1) s_h = vis_fand(dtmp0, MHI32);
1469
1470	fmuld	%f4,%f12,%f32			! (Y0_2) dtmp0 = s_h * ux;
1471	bge,pn	%icc,.update7			! (Y1_1) if (expy >= 0x43e);
1472	faddd	%f60,%f6,%f60			! (Y0_1) y = y + yd;
1473.cont7:
1474	ld	[%fp+%o7],%o2			! (Y0_1) load yisint
1475	fand	%f30,MHI32,%f6			! (Y1_1) s = vis_fand(yd, MHI32);
1476
1477	and	MASK_0x000fffff,%l0,%o5		! (Y0_3) hx &= 0xfffff;
1478	fmuld	%f52,%f52,%f12			! (Y0_2) y = s * s;
1479
1480	or	MASK_0x3ff00000,%o5,%o5		! (Y0_3) hx |= 0x3ff00000;
1481	fsubd	%f22,%f36,%f62			! (Y1_1) dtmp0 = (s_h - m_h);
1482
1483	st	%o5,[%fp+tmp0_hi]		! (Y0_3) *(int*)&x = hx;
1484	fsubd	%f58,%f32,%f32			! (Y0_2) s_l = u - dtmp0;
1485	fmuld	KB5,%f60,%f58			! (Y0_1) dtmp0 = KB5 * y;
1486
1487	ldd	[EXPTBL-ind_KB3],KB3		! (Y0_1) load KB3;
1488	add	%o5,2048,%o5			! (Y0_3) hx += 0x800;
1489	fmuld	%f22,%f6,%f34			! (Y1_1) s = s_h * s;
1490	fsubd	%f30,%f6,%f6			! (Y1_1) dtmp0 = (yd - s);
1491
1492	st	%i2,[%fp+tmp0_lo]		! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1493	and	%o5,-4096,%l4			! (Y0_3) hx &= 0xfffff000;
1494	fmuld	KA5,%f12,%f36			! (Y0_2) dtmp8 = KA5 * y;
1495
1496	st	%l4,[%fp+tmp1_hi]		! (Y0_3) *(int*)&ax = hx;
1497	fsubd	%f48,%f62,%f62			! (Y1_1) y = y - dtmp0;
1498	fmuld	KA1_HI,%f4,%f48			! (Y0_2) yd = KA1_HI * s_h;
1499
1500	subcc	counter,1,counter
1501	fmuld	%f4,%f10,%f10			! (Y0_2) dtmp1 = s_h * s_l;
1502	faddd	%f58,KB4,%f58			! (Y0_1) dtmp1 = dtmp0 + KB4;
1503
1504	ldd	[EXPTBL-ind_LO],KA1_LO		! (y0_2) load KA1_LO;
1505	and	%l0,MASK_0x7fffffff,%l3		! (Y0_3) hx &= 0x7fffffff;
1506	fmuld	%f6,%f22,%f6			! (Y1_1) dtmp0 *= s_h;
1507	fcmped	%fcc0,%f34,HTHRESH		! (Y1_1) s > HTHRESH;
1508
1509	fmuld	%f30,%f62,%f30			! (Y1_1) dtmp1 = yd * y;
1510	ba	1f
1511	faddd	%f36,KA3,%f62			! (Y0_2) dtmp8 = dtmp8 + KA3;
1512
1513	.align	16
15141:
1515	st	%g0,[%fp+%o7]			! (Y0_3) yisint = 0;
1516	fmuld	%f58,%f60,%f58			! (Y0_1) dtmp2 = dtmp1 * y;
1517	bneg,pn	%icc,.tail
1518	faddd	%f54,%f48,%f36			! (Y0_2) m_h = y + yd;
1519
1520	nop
1521	fmovdg	%fcc0,HTHRESH,%f34		! (Y1_1) s = HTHRESH;
1522
1523	fdivd	DONE,%f26,%f22			! (Y1_2) yd = DONE / ux;
1524	fsubd	%f32,%f10,%f10			! (Y0_2) s_l -= dtmp1;
1525
1526.main_loop:
1527	cmp	%l0,MASK_0x000fffff		! (Y0_2) if (hx <= 0xfffff)
1528	add	py,stridey,py			! py += stridey;
1529	faddd	%f6,%f30,%f6			! (Y1_0) yd = dtmp0 + dtmp1;
1530
1531	sra	%l2,20,%l2			! (Y1_1) exp = (exp >> 20);
1532	ldd	[%fp+tmp0_hi],%f32		! (Y0_2) *(int*)&x = hx;
1533	ble,pn	%icc,.update8			! (Y0_2) if (hx <= 0xfffff)
1534	fsubd	%f36,%f54,%f30			! (Y0_1) dtmp2 = m_h - y;
1535.cont8:
1536	cmp	%l2,2047			! (Y1_1) if (exp >= 0x7ff)
1537	sub	%o7,ind_buf,%o7			! stack buffer pointer update
1538	ldd	[%fp+tmp1_hi],%f54		! (Y0_2) *(int*)&ax = hx;
1539	faddd	%f58,KB3,%f58			! (Y0_0) dtmp3 = dtmp2 + KB3;
1540
1541	sra	%i4,20,%l0			! (Y1_1) itmp0 = (hx >> 20);
1542	sub	%l2,2046,%o5			! (Y1_1) exp = exp - 2046;
1543	fmuld	KA1,%f20,%f20			! (Y0_1) dtmp0 = KA1 * yd;
1544	fcmped	%fcc1,%f34,LTHRESH		! (Y1_0) s < LTHRESH;
1545
1546	ldd	[EXPTBL-ind_KB2],KB2		! (Y0_0) load KB2;
1547	add	%o5,%l0,%o5			! (Y1_1) exp += itmp0;
1548	fmuld	%f62,%f12,%f62			! (Y0_1) dtmp8 = dtmp8 * y;
1549	fmovdg	%fcc0,DZERO,%f6			! (Y1_0) yd = DZERO
1550
1551	sll	%o5,8,%l0			! (Y1_1) itmp0 = exp << 8;
1552	add	%o7,4,%o7			! stack buffer pointer update
1553	st	%l0,[%fp+tmp3]			! (Y1_1) (double)itmp0;
1554	faddd	%f32,%f54,%f12			! (Y0_2) ux = x + ax;
1555
1556	ld	[%fp+tmp4],%i2			! (Y0_0) ind = (int)dtmp0;
1557	fsubd	%f30,%f48,%f48			! (Y0_1) dtmp2 -= yd;
1558	bge,pn	%icc,.update9			! (Y1_1) if (exp >= 0x7ff)
1559        fmuld	%f58,%f60,%f58			! (Y0_0) dtmp4 = dtmp3 * y;
1560.cont9:
1561	lda	[py]%asi,%l1			! (Y0_1) hy = *py;
1562	and	%o7,15,%o7			! stack buffer pointer update
1563	fmuld	%f20,%f10,%f10			! (Y0_1) s_l = dtmp0 * s_l;
1564	fmovdl	%fcc1,LTHRESH,%f34		! (Y1_0) s = LTHRESH;
1565
1566	add	%o7,ind_buf,%o7			! stack buffer pointer update
1567	fmovdl	%fcc1,DZERO,%f6			! (Y1_0) yd = DZERO
1568
1569	fmuld	KA1_LO,%f4,%f4			! (Y0_1) dtmp1 = KA1_LO * s_h;
1570	fand	%f26,MHI32,%f26			! (Y1_1) ux = vis_fand(ux, MHI32);
1571
1572	fmuld	%f62,%f52,%f62			! (Y0_1) s = dtmp8 * s;
1573	nop
1574        faddd	%f58,KB2,%f30			! (Y0_0) dtmp5 = dtmp4 + KB2;
1575
1576	nop
1577	add	pz,stridez,pz			! pz += stridez;
1578	ldd	[LOGTBL+%o0],%f52		! (Y0_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
1579	fsubd	%f48,%f10,%f20			! (Y0_1) dtmp2 -= s_l;
1580
1581	sra	%i2,8,%l0			! (Y0_0) ind >>= 8;
1582	ldd	[EXPTBL-ind_KB1],KB1		! (Y0_0) load KB1;
1583	add	px,stridex,px			! px += stridex;
1584	faddd	%f34,%f6,%f58			! (Y1_0) dtmp0 = (s + yd);
1585
1586	add	%l0,1021,%l2			! (Y0_0) eflag = (ind + 1021);
1587	sub	%g0,%l0,%o5			! (Y0_0) gflag = (1022 - ind);
1588	fsubd	%f26,%f14,%f10			! (Y1_1) dtmp0 = (ux - ax);
1589
1590	sra	%l2,31,%l2			! (Y0_0) eflag = eflag >> 31;
1591	add	%o5,1022,%o5			! (Y0_0) gflag = (1022 - ind);
1592	fmuld	%f30,%f60,%f48			! (Y0_0) dtmp6 = dtmp5 * y;
1593	faddd	%f52,%f4,%f52			! (Y0_1) dtmp0 += dtmp1;
1594
1595	sra	%o5,31,%o5			! (Y0_0) gflag = gflag >> 31;
1596	and	%l2,54,%o0			! (Y0_0) itmp0 = 54 & eflag;
1597	ldd	[EXPTBL-ind_HI],KA1_HI		! (Y1_1) load KA1_HI;
1598	fsubd	%f62,%f20,%f4			! (Y0_1) y = s - dtmp2;
1599
1600	lda	[py]%asi,%f30			! (Y0_1) yd = *py;
1601	sub	%l2,%o5,%l2			! (Y0_0) ind = eflag - gflag;
1602	add	%l0,%o0,%l0			! (Y0_0) ind = ind + itmp0;
1603	fdtoi	%f58,%f20			! (Y1_0) u = (double)(int)dtmp0;
1604
1605	sra	%i4,8,%o0			! (Y1_1) i = (hx >> 8);
1606	and	%o5,52,%o5			! (Y0_0) itmp1 = 52 & gflag;
1607	ld	[%fp+tmp3],%f16			! (Y1_1) (double)itmp0;
1608	fsubd	%f8,%f14,%f58			! (Y1_1) u = x - ax;
1609
1610	and	%o0,4080,%o0			! (Y1_1) i = i & 0xff0;
1611	sub	%l0,%o5,%i4			! (Y0_0) ind = ind - itmp1;
1612	st	%f20,[%fp+tmp4]			! (Y1_0) ind = (int)dtmp0;
1613	faddd	%f48,KB1,%f14			! (Y0_0) dtmp7 = dtmp6 + KB1;
1614
1615	add	%o2,%i4,%i4			! (Y0_0) ind = yisint + ind;
1616	and	%i2,255,%o5			! (Y0_0) i = ind & 0xff;
1617	lda	[px]%asi,%l0			! (Y1_2) hx = ((unsigned*)px)[0];
1618	faddd	%f4,%f52,%f48			! (Y0_1) y += dtmp0;
1619
1620	sll	%i4,20,%i4			! (Y0_0) ind <<= 20;
1621	ldd	[LOGTBL+%o0],%f62		! (Y1_1) y = *(double *)((char*)__mt_constlog2 + i);
1622	and	%l1,MASK_0x7fffffff,%l1		! (Y0_1) hy &= 0x7fffffff;
1623	fitod	%f20,%f4			! (Y1_0) u = (double)(int)dtmp0;
1624
1625	lda	[px+4]%asi,%i2			! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1626	nop
1627	fmuld	%f58,%f22,%f52			! (Y1_1) s = u * yd;
1628	fsubd	%f8,%f10,%f10			! (Y1_1) s_l = (x - dtmp0);
1629
1630	sll	%o5,4,%o5			! (Y0_0) i = i << 4;
1631	st	%i4,[%fp+tmp2_hi]		! (Y0_0) *(int*)&dtmp0 = ind;
1632	fmuld	%f14,%f60,%f20			! (Y0_0) y = dtmp7 * y;
1633	fitod	%f16,%f14			! (Y1_1) (double)itmp0;
1634
1635	sra	%l1,20,%l1			! (Y0_1) expy = hy >> 20;
1636	nop
1637	ldd	[EXPTBL+%o5],%f56		! (Y0_0) u = *(double*)((char*)__mt_constexp2 + i);
1638	faddd	%f48,%f36,%f8			! (Y0_1) dtmp0 = y + m_h;
1639
1640	add	%o5,8,%o5			! (Y0_0) i += 8;
1641	add	%o0,8,%o0			! (Y1_1) i += 8;
1642	lda	[py+4]%asi,%f31			! (Y0_1) yd = *py;
1643	fsubd	%f34,%f4,%f60			! (Y1_0) y = s - u;
1644
1645	cmp	%l1,959				! (Y0_1) if (expy < 0x3fb);
1646	and	MASK_0x000fffff,%l0,%i4		! (Y1_2) hx &= 0xfffff;
1647	ldd	[EXPTBL-ind_KB5],KB5		! (Y1_0) load KB5;
1648	fand	%f52,MHI32,%f4			! (Y1_1) s_h = vis_fand(s, MHI32);
1649
1650	ldd	[EXPTBL+%o5],%f16		! (Y0_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
1651	fmuld	%f56,%f20,%f34			! (Y0_0) dtmp1 = u * y;
1652	bl,pn	%icc,.update10			! (Y0_1) if (expy < 0x3fb);
1653	faddd	%f62,%f14,%f14			! (Y1_1) y += (double)itmp0;
1654.cont10:
1655	or	MASK_0x3ff00000,%i4,%i4		! (Y1_2) hx |= 0x3ff00000;
1656	cmp	%l1,1086			! (Y0_1) if (expy >= 0x43e);
1657	fand	%f8,MHI32,%f20			! (Y0_1) s_h = vis_fand(dtmp0, MHI32);
1658
1659	fmuld	%f4,%f26,%f8			! (Y1_1) dtmp0 = s_h * ux;
1660	st	%i4,[%fp+tmp0_hi]		! (Y1_2) *(int*)&x = hx;
1661	bge,pn	%icc,.update11			! (Y0_1) if (expy >= 0x43e);
1662	faddd	%f60,%f6,%f60			! (Y1_0) y = y + yd;
1663.cont11:
1664	add	%i4,2048,%i4			! (Y1_2) hx += 0x800;
1665	ld	[%fp+%o7],%o2			! (Y1_0) load yisint
1666	fand	%f30,MHI32,%f6			! (Y0_1) s = vis_fand(yd, MHI32);
1667
1668	st	%i2,[%fp+tmp0_lo]		! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1669	and	%i4,-4096,%i4			! (Y1_2) hx &= 0xfffff000;
1670	fmuld	%f52,%f52,%f26			! (Y1_1) y = s * s;
1671	faddd	%f16,%f34,%f16			! (Y0_0) dtmp2 = dtmp0 + dtmp1;
1672
1673	st	%i4,[%fp+tmp1_hi]		! (Y1_2) *(int*)&ax = hx;
1674	fsubd	%f20,%f36,%f62			! (Y0_1) dtmp0 = (s_h - m_h);
1675
1676	fsubd	%f58,%f8,%f8			! (Y1_1) s_l = u - dtmp0;
1677	fmuld	KB5,%f60,%f58			! (Y1_0) dtmp0 = KB5 * y;
1678
1679	ldd	[EXPTBL-ind_KB3],KB3		! (Y1_0) load KB3;
1680	fmuld	%f20,%f6,%f34			! (Y0_1) s = s_h * s;
1681	fsubd	%f30,%f6,%f6			! (Y0_1) dtmp0 = (yd - s);
1682
1683	faddd	%f16,%f56,%f56			! (Y0_0) u = dtmp2 + u;
1684	nop
1685        fmuld	KA5,%f26,%f36			! (Y1_1) dtmp8 = KA5 * y;
1686
1687	nop
1688	add	%l2,513,%l2			! (Y0_0) ind += 513;
1689	fsubd	%f48,%f62,%f62			! (Y0_1) y = y - dtmp0;
1690	fmuld	KA1_HI,%f4,%f48			! (Y1_1) yd = KA1_HI * s_h;
1691
1692	sll	%l2,3,%o5			! (Y0_0) ind *= 8;
1693	ldd	[%fp+tmp2_hi],%f16		! (Y0_0) ld dtmp0;
1694	fmuld	%f4,%f10,%f10			! (Y1_1) dtmp1 = s_h * s_l;
1695	faddd	%f58,KB4,%f58			! (Y1_0) dtmp1 = dtmp0 + KB4;
1696
1697	ldd	[EXPTBL-ind_LO],KA1_LO		! (Y1_1) load KA1_LO;
1698	and	%l0,MASK_0x7fffffff,%l2		! (Y1_2) hx &= 0x7fffffff;
1699	fmuld	%f6,%f20,%f6			! (Y0_1) dtmp0 *= s_h;
1700	fcmped	%fcc0,%f34,HTHRESH		! (Y0_1) s > HTHRESH
1701
1702	ldd	[EXPTBL+%o5],%f20		! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
1703	nop
1704	nop
1705	fpadd32	%f56,%f16,%f56			! (Y0_0) u = vis_fpadd32(u, dtmp0);
1706
1707	nop
1708	cmp	%l0,MASK_0x000fffff		! (Y1_2) if (hx <= 0xfffff)
1709	fmuld	%f30,%f62,%f30			! (Y0_1) dtmp1 = yd * y;
1710	faddd	%f36,KA3,%f62			! (Y1_1) dtmp8 = dtmp8 + KA3;
1711
1712	fmuld	%f58,%f60,%f58			! (Y1_0) dtmp2 = dtmp1 * y;
1713	st	%g0,[%fp+%o7]			! (Y1_2) yisint = 0;
1714	ble,pn	%icc,.update12			! (Y1_2) if (hx <= 0xfffff)
1715	faddd	%f14,%f48,%f36			! (Y1_1)  m_h = y + yd;
1716.cont12:
1717	sra	%l3,20,%l3			! (Y0_2) exp = (exp >> 20);
1718	sub	%o7,ind_buf,%o7			! stack buffer pointer update
1719	fmuld	%f56,%f20,%f16			! (Y0_0) dtmp1 = u * dtmp1;
1720	fmovdg	%fcc0,HTHRESH,%f34		! (Y0_1) s = HTHRESH
1721
1722	cmp	%l3,2047			! (Y0_2) if (exp >= 0x7ff)
1723	st	%f16,[pz]			! (Y0_0) write into memory
1724	fdivd	DONE,%f12,%f20			! (Y0_2) yd = DONE / ux;
1725	fsubd	%f8,%f10,%f10			! (Y1_1) s_l -= dtmp1;
1726
1727	sra	%l4,20,%l0			! (Y0_2) itmp0 = (hx >> 20);
1728	sub	%l3,2046,%o5			! (Y0_2) exp = exp - 2046;
1729	st	%f17,[pz+4]			! (Y0_0) write into memory
1730	faddd	%f6,%f30,%f6			! (Y0_1) yd = dtmp0 + dtmp1;
1731
1732	add	%o5,%l0,%o5			! (Y0_2) exp += itmp0;
1733	add	py,stridey,py			! py += stridey;
1734	ldd	[%fp+tmp0_hi],%f8		! (Y1_2) *(int*)&x = hx;
1735	fsubd	%f36,%f14,%f30			! (Y1_1) dtmp2 = m_h - y;
1736
1737	sll	%o5,8,%l0			! (Y0_2) itmp0 = exp << 8;
1738	ldd	[%fp+tmp1_hi],%f14		! (Y1_2) *(int*)&ax = hx;
1739	fmuld	KA1,%f22,%f22			! (Y1_1) dtmp0 = KA1 * yd;
1740	faddd	%f58,KB3,%f58			! (Y1_0) dtmp3 = dtmp2 + KB3;
1741
1742	add	%o7,4,%o7			! stack buffer pointer update
1743	st	%l0,[%fp+tmp3]			! (Y0_2) (double)itmp0;
1744	fcmped	%fcc1,%f34,LTHRESH		! (Y0_1) s < LTHRESH
1745
1746	and	%o7,15,%o7			! stack buffer pointer update
1747	ld	[%fp+tmp4],%l0			! (Y1_0) ind = (int)dtmp0;
1748	fmuld	%f62,%f26,%f62			! (Y1_1) dtmp8 = dtmp8 * y;
1749	fmovdg	%fcc0,DZERO,%f6			! (Y0_1) yd = DZERO
1750
1751	nop
1752	add	%o7,ind_buf,%o7			! stack buffer pointer update
1753	ldd	[EXPTBL-ind_KB2],KB2		! (Y1_0) load KB2;
1754	faddd	%f8,%f14,%f26			! (Y1_2) ux = x + ax;
1755
1756	fmuld	%f58,%f60,%f58			! (Y1_0) dtmp4 = dtmp3 * y;
1757	nop
1758	bge,pn	%icc,.update13			! (Y0_2) if (exp >= 0x7ff)
1759	fsubd	%f30,%f48,%f48			! (Y1_1) dtmp2 -= yd;
1760.cont13:
1761	lda	[py]%asi,%l1			! (Y1_1) hy = *py;
1762	nop
1763	fmuld	%f22,%f10,%f10			! (Y1_1) s_l = dtmp0 * s_l;
1764	fmovdl	%fcc1,LTHRESH,%f34		! (Y0_1) s = LTHRESH
1765
1766	nop
1767	nop
1768	fmovdl	%fcc1,DZERO,%f6			! (Y0_1) yd = DZERO
1769
1770	fand	%f12,MHI32,%f12			! (Y0_2) ux = vis_fand(ux, MHI32);
1771	nop
1772	nop
1773	fmuld	KA1_LO,%f4,%f4			! (Y1_1) dtmp1 = KA1_LO * s_h;
1774
1775	nop
1776	add	px,stridex,px			! px += stridex;
1777	faddd	%f58,KB2,%f30			! (Y1_0) dtmp5 = dtmp4 + KB2;
1778	fmuld	%f62,%f52,%f62			! (Y1_1) s = dtmp8 * s;
1779
1780	sra	%l0,8,%i2			! (Y1_0) ind >>= 8;
1781	add	pz,stridez,pz			! pz += stridez;
1782	ldd	[LOGTBL+%o0],%f52		! (Y1_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
1783	fsubd	%f48,%f10,%f22			! (Y1_1) dtmp2 -= s_l;
1784
1785	add	%i2,1021,%l3			! (Y1_0) eflag = (ind + 1021);
1786	sub	%g0,%i2,%o5			! (Y1_0) gflag = (1022 - ind);
1787	ldd	[EXPTBL-ind_KB1],KB1		! (Y1_0) load KB1;
1788	faddd	%f34,%f6,%f58			! (Y0_1) dtmp0 = (s + yd);
1789
1790	sra	%l3,31,%l3			! (Y1_0) eflag = eflag >> 31;
1791	add	%o5,1022,%o5			! (Y1_0) gflag = (1022 - ind);
1792	ldd	[EXPTBL-ind_HI],KA1_HI		! (Y0_2) load KA1_HI;
1793	fsubd	%f12,%f54,%f10			! (Y0_2) dtmp0 = (ux - ax);
1794
1795	sra	%o5,31,%o5			! (Y1_0) gflag = gflag >> 31;
1796	and	%l3,54,%o0			! (Y1_0) itmp0 = 54 & eflag;
1797	fmuld	%f30,%f60,%f48			! (Y1_0) dtmp6 = dtmp5 * y;
1798	faddd	%f52,%f4,%f52			! (Y1_1) dtmp0 += dtmp1;
1799
1800	sra	%l4,8,%l4			! (Y0_2) i = (hx >> 8);
1801	add	%i2,%o0,%i2			! (Y1_0) ind = ind + itmp0;
1802	fsubd	%f62,%f22,%f4			! (Y1_1) y = s - dtmp2;
1803
1804	lda	[py]%asi,%f30			! (Y1_1) yd = *py;
1805	and	%l4,4080,%l4			! (Y0_2) i = i & 0xff0;
1806	and	%o5,52,%o0			! (Y1_0) itmp1 = 52 & gflag;
1807	fdtoi	%f58,%f22			! (Y0_1) (int)dtmp0;
1808
1809	sub	%l3,%o5,%l3			! (Y1_0) ind = eflag - gflag;
1810	sub	%i2,%o0,%i2			! (Y1_0) ind = ind - itmp1;
1811	ld	[%fp+tmp3],%f16			! (Y0_2) (double)itmp0;
1812	fsubd	%f32,%f54,%f58			! (Y0_2) u = x - ax;
1813
1814	add	%o2,%i2,%i2			! (Y1_0) ind = yisint + ind;
1815	and	%l0,255,%o5			! (Y1_0) i = ind & 0xff;
1816	st	%f22,[%fp+tmp4]			! (Y0_1) ind = (int)dtmp0;
1817	faddd	%f48,KB1,%f54			! (Y1_0) dtmp7 = dtmp6 + KB1;
1818
1819	sll	%i2,20,%o0			! (Y1_0) ind <<= 20;
1820	nop
1821	lda	[px]%asi,%l0			! (Y0_3) hx = ((unsigned*)px)[0];
1822	faddd	%f4,%f52,%f48			! (Y1_1) y += dtmp0;
1823
1824	and	%l1,MASK_0x7fffffff,%l1		! (Y1_1) hy &= 0x7fffffff;
1825	nop
1826	st	%o0,[%fp+tmp2_hi]		! (Y1_0) *(int*)&dtmp0 = ind;
1827	fitod	%f22,%f4			! (Y0_1) u = (double)(int)dtmp0;
1828
1829	lda	[px+4]%asi,%i2			! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1830	nop
1831	fmuld	%f58,%f20,%f52			! (Y0_2) s = u * yd;
1832	fsubd	%f32,%f10,%f10			! (Y0_2) s_l = (x - dtmp0);
1833
1834	sll	%o5,4,%o5			! (Y1_0) i = i << 4;
1835	ldd	[LOGTBL+%l4],%f62		! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
1836	fmuld	%f54,%f60,%f22			! (Y1_0) y = dtmp7 * y;
1837	fitod	%f16,%f54			! (Y0_2) (double)itmp0;
1838
1839	sra	%l1,20,%l1			! (Y1_1) expy = hy >> 20;
1840	nop
1841	ldd	[EXPTBL+%o5],%f56		! (Y1_0) u = *(double*)((char*)__mt_constexp2 + i);
1842	faddd	%f48,%f36,%f32			! (Y1_1) dtmp0 = y + m_h;
1843
1844	add	%o5,8,%o5			! (Y1_0) i += 8;
1845	add	%l4,8,%o0			! (Y0_2) i += 8;
1846	lda	[py+4]%asi,%f31			! (Y1_1) yd = *py;
1847	fsubd	%f34,%f4,%f60			! (Y0_1) y = s - u;
1848
1849	cmp	%l1,959				! (Y1_1) if (expy < 0x3fb);
1850	and	MASK_0x000fffff,%l0,%l4		! (Y0_3) hx &= 0xfffff;
1851	fand	%f52,MHI32,%f4			! (Y0_2) s_h = vis_fand(s, MHI32);
1852
1853	ldd	[EXPTBL+%o5],%f16		! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
1854	fmuld	%f56,%f22,%f34			! (Y1_0) dtmp1 = u * y;
1855	bl,pn	%icc,.update14			! (Y1_1) if (expy < 0x3fb);
1856	faddd	%f62,%f54,%f54			! (Y0_2) y += (double)itmp0;
1857.cont14:
1858	ldd	[EXPTBL-ind_KB5],KB5		! (Y0_1) load KB5;
1859	or	MASK_0x3ff00000,%l4,%o5		! (Y0_3) hx |= 0x3ff00000;
1860	cmp	%l1,1086			! (Y1_1) if (expy >= 0x43e);
1861	fand	%f32,MHI32,%f22			! (Y1_1) s_h = vis_fand(dtmp0, MHI32);
1862
1863	fmuld	%f4,%f12,%f32			! (Y0_2) dtmp0 = s_h * ux;
1864	st	%o5,[%fp+tmp0_hi]		! (Y0_3) *(int*)&x = hx;
1865	bge,pn	%icc,.update15			! (Y1_1) if (expy >= 0x43e);
1866	faddd	%f60,%f6,%f60			! (Y0_1) y = y + yd;
1867.cont15:
1868	add	%o5,2048,%o5			! (Y0_3) hx += 0x800;
1869	nop
1870	ld	[%fp+%o7],%o2			! (Y0_1) load yisint
1871	fand	%f30,MHI32,%f6			! (Y1_1) s = vis_fand(yd, MHI32);
1872
1873	and	%o5,-4096,%l4			! (Y0_3) hx &= 0xfffff000;
1874	st	%i2,[%fp+tmp0_lo]		! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1875	fmuld	%f52,%f52,%f12			! (Y0_2) y = s * s;
1876	faddd	%f16,%f34,%f16			! (Y1_0) dtmp2 = dtmp0 + dtmp1;
1877
1878	nop
1879	nop
1880	st	%l4,[%fp+tmp1_hi]		! (Y0_3) *(int*)&ax = hx;
1881	fsubd	%f22,%f36,%f62			! (Y1_1) dtmp0 = (s_h - m_h);
1882
1883	fsubd	%f58,%f32,%f32			! (Y0_2) s_l = u - dtmp0;
1884	nop
1885	nop
1886	fmuld	KB5,%f60,%f58			! (Y0_1) dtmp0 = KB5 * y;
1887
1888	ldd	[EXPTBL-ind_KB3],KB3		! (Y0_1) load KB3;
1889	nop
1890	fmuld	%f22,%f6,%f34			! (Y1_1) s = s_h * s;
1891	fsubd	%f30,%f6,%f6			! (Y1_1) dtmp0 = (yd - s);
1892
1893	fmuld	KA5,%f12,%f36			! (Y0_2) dtmp8 = KA5 * y;
1894	nop
1895	faddd	%f16,%f56,%f56			! (Y1_0) u = dtmp2 + u;
1896
1897	add	%l3,513,%l3			! (Y1_0) ind += 1;
1898	fsubd	%f48,%f62,%f62			! (Y1_1) y = y - dtmp0;
1899	fmuld	KA1_HI,%f4,%f48			! (Y0_2) yd = KA1_HI * s_h;
1900
1901	sll	%l3,3,%o5			! (Y1_0) ind *= 8;
1902	ldd	[%fp+tmp2_hi],%f16		! (Y1_0) *(int*)&dtmp0 = ind;
1903	fmuld	%f4,%f10,%f10			! (Y0_2) dtmp1 = s_h * s_l;
1904	faddd	%f58,KB4,%f58			! (Y0_1) dtmp1 = dtmp0 + KB4;
1905
1906	ldd	[EXPTBL-ind_LO],KA1_LO		! (y0_2) load KA1_LO;
1907	and	%l0,MASK_0x7fffffff,%l3		! (Y0_3) hx &= 0x7fffffff;
1908	fmuld	%f6,%f22,%f6			! (Y1_1) dtmp0 *= s_h;
1909	fcmped	%fcc0,%f34,HTHRESH		! (Y1_1) s > HTHRESH;
1910
1911	nop
1912	subcc	counter,2,counter		! update cycle counter
1913	ldd	[EXPTBL+%o5],%f22		! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
1914	fpadd32	%f56,%f16,%f56			! (Y1_0) u = vis_fpadd32(u, dtmp0);
1915
1916	fmuld	%f30,%f62,%f30			! (Y1_1) dtmp1 = yd * y;
1917	nop
1918	nop
1919	faddd	%f36,KA3,%f62			! (Y0_2) dtmp8 = dtmp8 + KA3;
1920
1921	nop
1922	st	%g0,[%fp+%o7]			! (Y0_3) yisint = 0;
1923	fmuld	%f58,%f60,%f58			! (Y0_1) dtmp2 = dtmp1 * y;
1924	faddd	%f54,%f48,%f36			! (Y0_2) m_h = y + yd;
1925
1926	fmuld	%f56,%f22,%f16			! (Y1_0) dtmp1 = u * dtmp1;
1927	nop
1928	st	%f16,[pz]			! (Y1_0) write into memory
1929	fmovdg	%fcc0,HTHRESH,%f34		! (Y1_1) s = HTHRESH;
1930
1931	fdivd	DONE,%f26,%f22			! (Y1_2) yd = DONE / ux;
1932	st	%f17,[pz+4]			! (Y1_0) write into memory
1933	bpos,pt	%icc,.main_loop
1934	fsubd	%f32,%f10,%f10			! (Y0_2) s_l -= dtmp1;
1935
1936.tail:
1937	addcc	counter,1,counter
1938	bneg,pn	%icc,.end_loop
1939
1940	faddd	%f58,KB3,%f58			! (Y0_0) dtmp3 = dtmp2 + KB3;
1941	ldd	[EXPTBL-ind_KB2],KB2		! (Y0_0) load KB2;
1942
1943	ld	[%fp+tmp4],%i2			! (Y0_0) ind = (int)dtmp0;
1944	fmuld	%f58,%f60,%f58			! (Y0_0) dtmp4 = dtmp3 * y;
1945	faddd	%f58,KB2,%f30			! (Y0_0) dtmp5 = dtmp4 + KB2;
1946
1947	add	pz,stridez,pz			! pz += stridez;
1948	ldd	[EXPTBL-ind_KB1],KB1		! (Y0_0) load KB1;
1949	sra	%i2,8,%l0			! (Y0_0) ind >>= 8;
1950
1951	add	%l0,1021,%l2			! (Y0_0) eflag = (ind + 1021);
1952	sub	%g0,%l0,%o5			! (Y0_0) gflag = (1022 - ind);
1953	fmuld	%f30,%f60,%f48			! (Y0_0) dtmp6 = dtmp5 * y;
1954
1955	sra	%l2,31,%l2			! (Y0_0) eflag = eflag >> 31;
1956	add	%o5,1022,%o5			! (Y0_0) gflag = (1022 - ind);
1957
1958	sra	%o5,31,%o5			! (Y0_0) gflag = gflag >> 31;
1959	and	%l2,54,%o0			! (Y0_0) itmp0 = 54 & eflag;
1960
1961	sub	%l2,%o5,%l2			! (Y0_0) ind = eflag - gflag;
1962	add	%l0,%o0,%l0			! (Y0_0) ind = ind + itmp0;
1963
1964	and	%o5,52,%o5			! (Y0_0) itmp1 = 52 & gflag;
1965	faddd	%f48,KB1,%f14			! (Y0_0) dtmp7 = dtmp6 + KB1;
1966
1967	sub	%l0,%o5,%l0			! (Y0_0) ind = ind - itmp1;
1968	and	%i2,255,%i4			! (Y0_0) i = ind & 0xff;
1969
1970	sll	%i4,4,%o5			! (Y0_0) i = i << 4;
1971
1972	ldd	[EXPTBL+%o5],%f56		! (Y0_0) u = *(double*)((char*)__mt_constexp2 + i);
1973	add	%o2,%l0,%l0			! (Y0_0) ind = yisint + ind;
1974	fmuld	%f14,%f60,%f20			! (Y0_0) y = dtmp7 * y;
1975
1976	sll	%l0,20,%i2			! (Y0_0) ind <<= 20;
1977
1978	add	%o5,8,%o5			! (Y0_0) i += 8;
1979	st	%i2,[%fp+tmp2_hi]		! (Y0_0) *(int*)&dtmp0 = ind;
1980
1981	ldd	[EXPTBL+%o5],%f16		! (Y0_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
1982	fmuld	%f56,%f20,%f34			! (Y0_0) dtmp1 = u * y;
1983
1984	faddd	%f16,%f34,%f16			! (Y0_0) dtmp2 = dtmp0 + dtmp1;
1985
1986	faddd	%f16,%f56,%f56			! (Y0_0) u = dtmp2 + u;
1987	add	%l2,513,%l2			! (Y0_0) ind += 513;
1988
1989	sll	%l2,3,%o5			! (Y0_0) ind *= 8;
1990	ldd	[%fp+tmp2_hi],%f16		! (Y0_0) ld dtmp0;
1991
1992	ldd	[EXPTBL+%o5],%f20		! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
1993	fpadd32	%f56,%f16,%f56			! (Y0_0) u = vis_fpadd32(u, dtmp0);
1994
1995	fmuld	%f56,%f20,%f16			! (Y0_0) dtmp1 = u * dtmp1;
1996	st	%f16,[pz]			! (Y0_0) write into memory
1997	st	%f17,[pz+4]			! (Y0_0) write into memory
1998
1999.end_loop:
2000	ba	.begin
2001	nop
2002.end:
2003	ret
2004	restore	%g0,0,%o0
2005
2006	.align	16
2007.update0:
2008	cmp	%l0,%g0				! if (x >= 0);
2009	fzero	%f30
2010
2011	lda	[py+4]%asi,%l0			! ld ly
2012	bge,pt	%icc,.pos0			! if (x >= 0);
2013	or	%g0,%g0,%o5			! yisint = 0;
2014
2015	cmp	%o0,1076			! if (expy >= 0x434);
2016	bge	.neg0				! if (expy >= 0x434);
2017	or	%g0,2,%o5			! yisint = 2;
2018
2019	cmp	%o0,1023			! if (expy < 0x3ff);
2020	bl	.neg0				! if (expy < 0x3ff);
2021	or	%g0,0,%o5			! yisint = 0;
2022
2023	cmp	%o0,1043			! if (expy <= (20 + 0x3ff));
2024	ble	.small0				! if (expy <= (20 + 0x3ff));
2025	sub	%o0,1023,%o0			! expy - 0x3ff;
2026
2027	sub	%g0,%o0,%o0
2028	add	%o0,52,%o0			! sh = (52 - (expy - 0x3ff);
2029	srl	%l0,%o0,%i4			! i0 = (ly >> sh);
2030
2031	sll	%i4,%o0,%i4			! (i0 << sh);
2032
2033	srl	%l0,%o0,%o0			! i0 = (ly >> sh);
2034	cmp	%i4,%l0				! if ((i0 << sh) == ly);
2035
2036	and	%o0,1,%o0			! i0 &= 1;
2037
2038	sub	%g0,%o0,%o0
2039	add	%o0,2,%o0			! i0 = 2 - i0;
2040
2041	move	%icc,%o0,%o5			! yisint = i0;
2042
2043	ba	.neg0
2044	nop
2045.small0:
2046	sub	%g0,%o0,%o0
2047	cmp	%l0,%g0				! if (ly != 0);
2048
2049	add	%o0,20,%o0			! sh = (20 - (expy - 0x3ff);
2050	bne	.neg0				! if (ly != 0);
2051	or	%g0,0,%o5			! yisint = 0;
2052
2053	srl	%l1,%o0,%i4			! i0 = (hy >> sh);
2054
2055	sll	%i4,%o0,%i4			! (i0 << sh);
2056
2057	srl	%l1,%o0,%o0			! i0 = (hy >> sh);
2058	cmp	%i4,%l1				! if ((i0 << sh) == hy);
2059
2060	and	%o0,1,%o0			! i0 &= 1;
2061
2062	sub	%g0,%o0,%o0
2063	add	%o0,2,%o0			! i0 = 2 - i0;
2064
2065	move	%icc,%o0,%o5			! yisint = i0;
2066.neg0:
2067	orcc	%l3,%i2,%g0			! if (x != 0);
2068
2069	sra	%o2,31,%i4			! sy = (*((unsigned*)py)[0]) >> 31;
2070	bne,pt	%icc,3f				! if (x != 0);
2071	nop
2072
2073	cmp	%i4,%g0				! if (sy == 0);
2074	be	1f				! if (sy == 0);
2075	and	%o5,1,%i4			! yisint &= 1;
2076
2077	fdivd	DONE,%f30,%f30			! y0 = DONE / y0;
20781:
2079	cmp	%i4,%g0				! if ((yisint & 1) == 0);
2080	be	2f				! if ((yisint & 1) == 0);
2081	nop
2082
2083	fnegd	%f30,%f30			! y0 = -y0;
20842:
2085	st	%f30,[pz]
2086	ba	.update_point
2087	st	%f31,[pz+4]
20883:
2089	cmp	%o5,%g0				! if (yisint != 0);
2090	bne	.pos0				! if (yisint != 0);
2091	nop
2092
2093	fdivd	DZERO,DZERO,%f30		! y0 = DZERO / DZERO;
2094	st	%f30,[pz]
2095	ba	.update_point
2096	st	%f31,[pz+4]
2097.pos0:
2098	orcc	%l3,%i2,%g0			! if (x != 0);
2099
2100	sra	%o2,31,%i4			! sy = (*((unsigned*)py)[0]) >> 31;
2101	bne,pt	%icc,.nzero0			! if (x != 0);
2102	nop
2103
2104	cmp	%i4,%g0				! if (sy == 0);
2105	be	1f				! if (sy == 0);
2106	nop
2107
2108	fdivd	DONE,%f30,%f30			! y0 = DONE / y0;
21091:
2110	st	%f30,[pz]
2111	ba	.update_point
2112	st	%f31,[pz+4]
2113.nzero0:
2114	sll	%o5,11,%o5
2115	cmp	%l3,MASK_0x000fffff		! if (exp > 0xfffff);
2116
2117	bg,pt	%icc,.cont0			! if (exp > 0xfffff);
2118	st	%o5,[%fp+%o7]
2119
2120	ldd	[%fp+tmp_mant],%f54
2121
2122	or	%g0,1074,%o5
2123	fand	%f32,%f54,%f32			! y0 = vis_fand(x, MMANT);
2124
2125	sll	%o5,20,%o5
2126	fxtod	%