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	%f32,%f32			! ax = (double) ((long long *) & y0)[0];
2127
2128	std	%f32,[%fp+tmp0_hi]		! exp = ((unsigned int*) & ax)[0];
2129	fand	%f32,%f54,%f32			! x = vis_fand(ax, MMANT);
2130
2131	ld	[%fp+tmp0_hi],%i2		! exp = ((unsigned int*) & ax)[0];
2132	for	%f32,DONE,%f32			! x = vis_for(x, DONE);
2133
2134	sub	%i2,%o5,%l3			! exp -= (1023 + 51) << 20;
2135	and	MASK_0x000fffff,%i2,%l4		! hx = exp & 0xfffff;
2136	or	MASK_0x3ff00000,%l4,%l4		! hx |= 0x3ff00000;
2137	add	%l4,2048,%l4			! hx += 0x800;
2138	and	%l4,-4096,%l4			! hx &= 0xfffff000;
2139
2140	ba	.cont0
2141	st	%l4,[%fp+tmp1_hi]		! *(int*)&ax = hx;
2142
2143	.align	16
2144.update1:
2145	cmp	counter,0
2146	ble,pt	%icc,.cont1
2147	add	py,stridey,%o5
2148
2149	stx	px,[%fp+tmp_px]
2150
2151	orcc	%l2,%i2,%g0			! if (x == 0);
2152	bne,pt	%icc,.nzero1			! if (x == 0);
2153	stx	%o5,[%fp+tmp_py]
2154.u1:
2155	st	counter,[%fp+tmp_counter]
2156	ba	.cont1
2157	or	%g0,0,counter
2158.nzero1:
2159	lda	[%o5]%asi,%l1			! ld hy;
2160	cmp	%l0,%g0				! if (x >= 0);
2161
2162	lda	[%o5+4]%asi,%l0			! ld ly
2163	bge,pt	%icc,.pos1			! if (x >= 0);
2164	or	%g0,%g0,%o5			! yisint = 0;
2165
2166	and	%l1,MASK_0x7fffffff,%i2		! hy &= 0x7fffffff;
2167
2168	sra	%i2,20,%i2			! expy = hy >> 20;
2169
2170	cmp	%i2,1076			! if (expy >= 0x434);
2171	bge	.neg1				! if (expy >= 0x434);
2172	or	%g0,2,%o5			! yisint = 2;
2173
2174	cmp	%i2,1023			! if (expy < 0x3ff);
2175	bl	.neg1				! if (expy < 0x3ff);
2176	or	%g0,0,%o5			! yisint = 0;
2177
2178	cmp	%i2,1043			! if (expy <= (20 + 0x3ff));
2179	ble	.small1				! if (expy <= (20 + 0x3ff));
2180	sub	%i2,1023,%i2			! expy - 0x3ff;
2181
2182	sub	%g0,%i2,%i2
2183	add	%i2,52,%i2			! sh = (52 - (expy - 0x3ff);
2184	srl	%l0,%i2,%l1			! i0 = (ly >> sh);
2185
2186	sll	%l1,%i2,%l1			! (i0 << sh);
2187
2188	srl	%l0,%i2,%i2			! i0 = (ly >> sh);
2189	cmp	%l1,%l0				! if ((i0 << sh) == ly);
2190
2191	and	%i2,1,%i2			! i0 &= 1;
2192
2193	sub	%g0,%i2,%i2
2194	add	%i2,2,%i2			! i0 = 2 - i0;
2195
2196	move	%icc,%i2,%o5			! yisint = i0;
2197
2198	ba	.neg1
2199	nop
2200.small1:
2201	sub	%g0,%i2,%i2
2202	cmp	%l0,%g0				! if (ly != 0);
2203
2204	add	%i2,20,%i2			! sh = (20 - (expy - 0x3ff);
2205	bne	.neg1				! if (ly != 0);
2206	or	%g0,0,%o5			! yisint = 0;
2207
2208	srl	%l1,%i2,%l0			! i0 = (hy >> sh);
2209
2210	sll	%l0,%i2,%l0			! (i0 << sh);
2211
2212	srl	%l1,%i2,%i2			! i0 = (hy >> sh);
2213	cmp	%l0,%l1				! if ((i0 << sh) == hy);
2214
2215	and	%i2,1,%i2			! i0 &= 1;
2216
2217	sub	%g0,%i2,%i2
2218	add	%i2,2,%i2			! i0 = 2 - i0;
2219
2220	move	%icc,%i2,%o5			! yisint = i0;
2221.neg1:
2222	cmp	%o5,%g0
2223	be	.u1
2224	nop
2225.pos1:
2226	sll	%o5,11,%o5
2227	cmp	%l2,MASK_0x000fffff		! if (exp > 0xfffff);
2228
2229	bg,pt	%icc,.cont1			! if (exp > 0xfffff);
2230	st	%o5,[%fp+%o7]
2231
2232	std	%f32,[%fp+tmp5];
2233	std	%f54,[%fp+tmp6];
2234	ldd	[%fp+tmp0_hi],%f32
2235	ldd	[%fp+tmp_mant],%f54
2236
2237	or	%g0,1074,%o5
2238	fand	%f32,%f54,%f32			! y0 = vis_fand(x, MMANT);
2239
2240	sll	%o5,20,%o5
2241	fxtod	%f32,%f32			! ax = (double) ((long long *) & y0)[0];
2242
2243	std	%f32,[%fp+tmp0_hi]		! exp = ((unsigned int*) & ax)[0];
2244	fand	%f32,%f54,%f32			! x = vis_fand(ax, MMANT);
2245
2246	ld	[%fp+tmp0_hi],%i2		! exp = ((unsigned int*) & ax)[0];
2247	for	%f32,DONE,%f32			! x = vis_for(x, DONE);
2248
2249	std	%f32,[%fp+tmp0_hi];
2250	sub	%i2,%o5,%l2			! exp -= (1023 + 51) << 20;
2251	and	MASK_0x000fffff,%i2,%i4		! hx = exp & 0xfffff;
2252	ldd	[%fp+tmp5],%f32
2253	or	MASK_0x3ff00000,%i4,%i4		! hx |= 0x3ff00000;
2254	add	%i4,2048,%i4			! hx += 0x800;
2255	ldd	[%fp+tmp6],%f54
2256	and	%i4,-4096,%i4			! hx &= 0xfffff000;
2257
2258	ba	.cont1
2259	st	%i4,[%fp+tmp1_hi]		! *(int*)&ax = hx;
2260
2261	.align	16
2262.update2:
2263	cmp	counter,1
2264	ble,pt	%icc,.cont2
2265	add	py,stridey,%o5
2266
2267	add	%o5,stridey,%o5
2268	stx	px,[%fp+tmp_px]
2269
2270	orcc	%l3,%i2,%g0			! if (x == 0);
2271	bne,pt	%icc,.nzero2			! if (x == 0);
2272	stx	%o5,[%fp+tmp_py]
2273.u2:
2274	sub	counter,1,counter
2275	st	counter,[%fp+tmp_counter]
2276	ba	.cont2
2277	or	%g0,1,counter
2278.nzero2:
2279	lda	[%o5]%asi,%l1			! ld hy;
2280	cmp	%l0,%g0				! if (x >= 0);
2281
2282	lda	[%o5+4]%asi,%l0			! ld ly
2283	bge,pt	%icc,.pos2			! if (x >= 0);
2284	or	%g0,%g0,%o5			! yisint = 0;
2285
2286	and	%l1,MASK_0x7fffffff,%i2		! hy &= 0x7fffffff;
2287
2288	sra	%i2,20,%i2			! expy = hy >> 20;
2289
2290	cmp	%i2,1076			! if (expy >= 0x434);
2291	bge	.neg2				! if (expy >= 0x434);
2292	or	%g0,2,%o5			! yisint = 2;
2293
2294	cmp	%i2,1023			! if (expy < 0x3ff);
2295	bl	.neg2				! if (expy < 0x3ff);
2296	or	%g0,0,%o5			! yisint = 0;
2297
2298	cmp	%i2,1043			! if (expy <= (20 + 0x3ff));
2299	ble	.small2				! if (expy <= (20 + 0x3ff));
2300	sub	%i2,1023,%i2			! expy - 0x3ff;
2301
2302	sub	%g0,%i2,%i2
2303	add	%i2,52,%i2			! sh = (52 - (expy - 0x3ff);
2304	srl	%l0,%i2,%l1			! i0 = (ly >> sh);
2305
2306	sll	%l1,%i2,%l1			! (i0 << sh);
2307
2308	srl	%l0,%i2,%i2			! i0 = (ly >> sh);
2309	cmp	%l1,%l0				! if ((i0 << sh) == ly);
2310
2311	and	%i2,1,%i2			! i0 &= 1;
2312
2313	sub	%g0,%i2,%i2
2314	add	%i2,2,%i2			! i0 = 2 - i0;
2315
2316	move	%icc,%i2,%o5			! yisint = i0;
2317
2318	ba	.neg2
2319	nop
2320.small2:
2321	sub	%g0,%i2,%i2
2322	cmp	%l0,%g0				! if (ly != 0);
2323
2324	add	%i2,20,%i2			! sh = (20 - (expy - 0x3ff);
2325	bne	.neg2				! if (ly != 0);
2326	or	%g0,0,%o5			! yisint = 0;
2327
2328	srl	%l1,%i2,%l0			! i0 = (hy >> sh);
2329
2330	sll	%l0,%i2,%l0			! (i0 << sh);
2331
2332	srl	%l1,%i2,%i2			! i0 = (hy >> sh);
2333	cmp	%l0,%l1				! if ((i0 << sh) == hy);
2334
2335	and	%i2,1,%i2			! i0 &= 1;
2336
2337	sub	%g0,%i2,%i2
2338	add	%i2,2,%i2			! i0 = 2 - i0;
2339
2340	move	%icc,%i2,%o5			! yisint = i0;
2341.neg2:
2342	cmp	%o5,%g0
2343	be	.u2
2344	nop
2345.pos2:
2346	sll	%o5,11,%o5
2347	cmp	%l3,MASK_0x000fffff		! if (exp > 0xfffff);
2348
2349	bg,pt	%icc,.cont2			! if (exp > 0xfffff);
2350	st	%o5,[%fp+%o7]
2351
2352	ldd	[%fp+tmp_mant],%f54
2353
2354	or	%g0,1074,%o5
2355	fand	%f32,%f54,%f32			! y0 = vis_fand(x, MMANT);
2356
2357	sll	%o5,20,%o5
2358	fxtod	%f32,%f32			! ax = (double) ((long long *) & y0)[0]
2359
2360	std	%f32,[%fp+tmp0_hi]		! exp = ((unsigned int*) & ax)[0];
2361	fand	%f32,%f54,%f32			! x = vis_fand(ax, MMANT);
2362
2363	ld	[%fp+tmp0_hi],%i2		! exp = ((unsigned int*) & ax)[0];
2364	for	%f32,DONE,%f32			! x = vis_for(x, DONE);
2365
2366	sub	%i2,%o5,%l3			! exp -= (1023 + 51) << 20;
2367	and	MASK_0x000fffff,%i2,%l4		! hx = exp & 0xfffff;
2368	or	MASK_0x3ff00000,%l4,%l4		! hx |= 0x3ff00000;
2369	add	%l4,2048,%l4			! hx += 0x800;
2370	and	%l4,-4096,%l4			! hx &= 0xfffff000;
2371
2372	ba	.cont2
2373	st	%l4,[%fp+tmp1_hi]		! *(int*)&ax = hx;
2374
2375	.align	16
2376.update3:
2377	cmp	counter,0
2378	ble,pt	%icc,.cont3
2379	sub	px,stridex,%o5
2380
2381	ld	[%fp+tmp_counter],%l1
2382
2383	stx	%o5,[%fp+tmp_px]
2384	add	py,stridey,%o5
2385
2386	add	%l1,counter,counter
2387	stx	%o5,[%fp+tmp_py]
2388
2389	st	counter,[%fp+tmp_counter]
2390	ba	.cont3
2391	or	%g0,0,counter
2392
2393	.align	16
2394.update4:
2395	cmp	counter,2
2396	ble,pt	%icc,.cont4
2397	add	py,stridey,%o5
2398
2399	add	%o5,stridey,%o5
2400	add	%o5,stridey,%o5
2401	stx	px,[%fp+tmp_px]
2402
2403	orcc	%l2,%i2,%g0			! if (x == 0);
2404	bne,pt	%icc,.nzero4			! if (x == 0);
2405	stx	%o5,[%fp+tmp_py]
2406.u4:
2407	sub	counter,2,counter
2408	st	counter,[%fp+tmp_counter]
2409	ba	.cont4
2410	or	%g0,2,counter
2411.nzero4:
2412	lda	[%o5]%asi,%l1			! ld hy;
2413	cmp	%l0,%g0				! if (x >= 0);
2414
2415	lda	[%o5+4]%asi,%l0			! ld ly
2416	bge,pt	%icc,.pos4			! if (x >= 0);
2417	or	%g0,%g0,%o5			! yisint = 0;
2418
2419	and	%l1,MASK_0x7fffffff,%i2		! hy &= 0x7fffffff;
2420
2421	sra	%i2,20,%i2			! expy = hy >> 20;
2422
2423	cmp	%i2,1076			! if (expy >= 0x434);
2424	bge	.neg4				! if (expy >= 0x434);
2425	or	%g0,2,%o5			! yisint = 2;
2426
2427	cmp	%i2,1023			! if (expy < 0x3ff);
2428	bl	.neg4				! if (expy < 0x3ff);
2429	or	%g0,0,%o5			! yisint = 2;
2430
2431	cmp	%i2,1043			! if (expy <= (20 + 0x3ff));
2432	ble	.small4				! if (expy <= (20 + 0x3ff));
2433	sub	%i2,1023,%i2			! expy - 0x3ff;
2434
2435	sub	%g0,%i2,%i2
2436	add	%i2,52,%i2			! sh = (52 - (expy - 0x3ff);
2437	srl	%l0,%i2,%l1			! i0 = (ly >> sh);
2438
2439	sll	%l1,%i2,%l1			! (i0 << sh);
2440
2441	srl	%l0,%i2,%i2			! i0 = (ly >> sh);
2442	cmp	%l1,%l0				! if ((i0 << sh) == ly);
2443
2444	and	%i2,1,%i2			! i0 &= 1;
2445
2446	sub	%g0,%i2,%i2
2447	add	%i2,2,%i2			! i0 = 2 - i0;
2448
2449	move	%icc,%i2,%o5			! yisint = i0;
2450
2451	ba	.neg4
2452	nop
2453.small4:
2454	sub	%g0,%i2,%i2
2455	cmp	%l0,%g0				! if (ly != 0);
2456
2457	add	%i2,20,%i2			! sh = (20 - (expy - 0x3ff);
2458	bne	.neg4				! if (ly != 0);
2459	or	%g0,0,%o5			! yisint = 0;
2460
2461	srl	%l1,%i2,%l0			! i0 = (hy >> sh);
2462
2463	sll	%l0,%i2,%l0			! (i0 << sh);
2464
2465	srl	%l1,%i2,%i2			! i0 = (hy >> sh);
2466	cmp	%l0,%l1				! if ((i0 << sh) == hy);
2467
2468	and	%i2,1,%i2			! i0 &= 1;
2469
2470	sub	%g0,%i2,%i2
2471	add	%i2,2,%i2			! i0 = 2 - i0;
2472
2473	move	%icc,%i2,%o5			! yisint = i0;
2474.neg4:
2475	cmp	%o5,%g0
2476	be	.u4
2477	nop
2478.pos4:
2479	sll	%o5,11,%o5
2480	cmp	%l2,MASK_0x000fffff		! if (exp > 0xfffff);
2481
2482	bg,pt	%icc,.cont4			! if (exp > 0xfffff);
2483	st	%o5,[%fp+%o7]
2484
2485	std	%f32,[%fp+tmp5];
2486	std	%f54,[%fp+tmp6];
2487	ldd	[%fp+tmp0_hi],%f32
2488	ldd	[%fp+tmp_mant],%f54
2489
2490	or	%g0,1074,%o5
2491	fand	%f32,%f54,%f32			! y0 = vis_fand(x, MMANT);
2492
2493	sll	%o5,20,%o5
2494	fxtod	%f32,%f32			! ax = (double) ((long long *) & y0)[0]
2495
2496	std	%f32,[%fp+tmp0_hi]		! exp = ((unsigned int*) & ax)[0];
2497	fand	%f32,%f54,%f32			! x = vis_fand(ax, MMANT);
2498
2499	ld	[%fp+tmp0_hi],%i2		! exp = ((unsigned int*) & ax)[0];
2500	for	%f32,DONE,%f32			! x = vis_for(x, DONE);
2501
2502	std	%f32,[%fp+tmp0_hi];
2503	sub	%i2,%o5,%l2			! exp -= (1023 + 51) << 20;
2504	and	MASK_0x000fffff,%i2,%i4		! hx = exp & 0xfffff;
2505	ldd	[%fp+tmp5],%f32
2506	or	MASK_0x3ff00000,%i4,%i4		! hx |= 0x3ff00000;
2507	add	%i4,2048,%i4			! hx += 0x800;
2508	ldd	[%fp+tmp6],%f54
2509	and	%i4,-4096,%i4			! hx &= 0xfffff000;
2510
2511	ba	.cont4
2512	st	%i4,[%fp+tmp1_hi]		! *(int*)&ax = hx;
2513
2514	.align	16
2515.update5:
2516	cmp	counter,1
2517	ble,pt	%icc,.cont5
2518	sub	px,stridex,%o5
2519
2520	ld	[%fp+tmp_counter],%l1
2521
2522	stx	%o5,[%fp+tmp_px]
2523	add	py,stridey,%o5
2524
2525	add	%l1,counter,counter
2526	stx	%o5,[%fp+tmp_py]
2527
2528	sub	counter,1,counter
2529	st	counter,[%fp+tmp_counter]
2530	ba	.cont5
2531	or	%g0,1,counter
2532
2533	.align	16
2534.update6:
2535	cmp	counter,0
2536	ble,pt	%icc,.cont6
2537	fmovd	DONE,%f30
2538
2539	ld	[%fp+tmp_counter],%o2
2540	sub	px,stridex,%o5
2541
2542	sub	%o5,stridex,%o5
2543	stx	py,[%fp+tmp_py]
2544
2545	add	%o2,counter,counter
2546	sub	%o5,stridex,%o5
2547	stx	%o5,[%fp+tmp_px]
2548
2549	st	counter,[%fp+tmp_counter]
2550	ba	.cont6
2551	or	%g0,0,counter
2552
2553	.align	16
2554.update7:
2555	cmp	counter,0
2556	ble,pt	%icc,.cont7
2557	fmovd	DONE,%f30
2558	sub	px,stridex,%o5
2559
2560	ld	[%fp+tmp_counter],%o2
2561
2562	sub	%o5,stridex,%o5
2563	stx	py,[%fp+tmp_py]
2564
2565	add	%o2,counter,counter
2566	sub	%o5,stridex,%o5
2567	stx	%o5,[%fp+tmp_px]
2568
2569	st	counter,[%fp+tmp_counter]
2570	ba	.cont7
2571	or	%g0,0,counter
2572
2573	.align	16
2574.update8:
2575	cmp	counter,2
2576	ble,pt	%icc,.cont8
2577	add	py,stridey,%o5
2578
2579	add	%o5,stridey,%o5
2580	stx	px,[%fp+tmp_px]
2581
2582	orcc	%l3,%i2,%g0			! if (x == 0);
2583	bne,pt	%icc,.nzero8			! if (x == 0);
2584	stx	%o5,[%fp+tmp_py]
2585.u8:
2586	sub	counter,2,counter
2587	st	counter,[%fp+tmp_counter]
2588	ba	.cont8
2589	or	%g0,2,counter
2590.nzero8:
2591	lda	[%o5]%asi,%l1			! ld hy;
2592	cmp	%l0,%g0				! if (x >= 0);
2593
2594	lda	[%o5+4]%asi,%l0			! ld ly
2595	bge,pt	%icc,.pos8			! if (x >= 0);
2596	or	%g0,%g0,%o5			! yisint = 0;
2597
2598	and	%l1,MASK_0x7fffffff,%i2		! hy &= 0x7fffffff;
2599
2600	sra	%i2,20,%i2			! expy = hy >> 20;
2601
2602	cmp	%i2,1076			! if (expy >= 0x434);
2603	bge	.pos8				! if (expy >= 0x434);
2604	or	%g0,2,%o5			! yisint = 2;
2605
2606	cmp	%i2,1023			! if (expy < 0x3ff);
2607	bl	.neg8				! if (expy < 0x3ff);
2608	or	%g0,0,%o5			! yisint = 0;
2609
2610	cmp	%i2,1043			! if (expy <= (20 + 0x3ff));
2611	ble	.small8				! if (expy <= (20 + 0x3ff));
2612	sub	%i2,1023,%i2			! expy - 0x3ff;
2613
2614	sub	%g0,%i2,%i2
2615	add	%i2,52,%i2			! sh = (52 - (expy - 0x3ff);
2616	srl	%l0,%i2,%l1			! i0 = (ly >> sh);
2617
2618	sll	%l1,%i2,%l1			! (i0 << sh);
2619
2620	srl	%l0,%i2,%i2			! i0 = (ly >> sh);
2621	cmp	%l1,%l0				! if ((i0 << sh) == ly);
2622
2623	and	%i2,1,%i2			! i0 &= 1;
2624
2625	sub	%g0,%i2,%i2
2626	add	%i2,2,%i2			! i0 = 2 - i0;
2627
2628	move	%icc,%i2,%o5			! yisint = i0;
2629
2630	ba	.neg8
2631	nop
2632.small8:
2633	sub	%g0,%i2,%i2
2634	cmp	%l0,%g0				! if (ly != 0);
2635
2636	add	%i2,20,%i2			! sh = (20 - (expy - 0x3ff);
2637	bne	.neg8				! if (ly != 0);
2638	or	%g0,0,%o5			! yisint = 0;
2639
2640	srl	%l1,%i2,%l0			! i0 = (hy >> sh);
2641
2642	sll	%l0,%i2,%l0			! (i0 << sh);
2643
2644	srl	%l1,%i2,%i2			! i0 = (hy >> sh);
2645	cmp	%l0,%l1				! if ((i0 << sh) == hy);
2646
2647	and	%i2,1,%i2			! i0 &= 1;
2648
2649	sub	%g0,%i2,%i2
2650	add	%i2,2,%i2			! i0 = 2 - i0;
2651
2652	move	%icc,%i2,%o5			! yisint = i0;
2653.neg8:
2654	cmp	%o5,%g0
2655	be	.u8
2656	nop
2657.pos8:
2658	sll	%o5,11,%o5
2659	cmp	%l3,MASK_0x000fffff		! if (exp > 0xfffff);
2660
2661	bg,pt	%icc,.cont8			! if (exp > 0xfffff);
2662	st	%o5,[%fp+%o7]
2663
2664	ldd	[%fp+tmp_mant],%f54
2665
2666	or	%g0,1074,%o5
2667	fand	%f32,%f54,%f32			! y0 = vis_fand(x, MMANT);
2668
2669	sll	%o5,20,%o5
2670	fxtod	%f32,%f32			! ax = (double) ((long long *) & y0)[0]
2671
2672	std	%f32,[%fp+tmp0_hi]		! exp = ((unsigned int*) & ax)[0];
2673	fand	%f32,%f54,%f32			! x = vis_fand(ax, MMANT);
2674
2675	ld	[%fp+tmp0_hi],%i2		! exp = ((unsigned int*) & ax)[0];
2676	for	%f32,DONE,%f32			! x = vis_for(x, DONE);
2677
2678	sub	%i2,%o5,%l3			! exp -= (1023 + 51) << 20;
2679	and	MASK_0x000fffff,%i2,%l4		! hx &= 0xfffff;
2680	or	MASK_0x3ff00000,%l4,%l4		! hx |= 0x3ff00000;
2681	add	%l4,2048,%l4			! hx += 0x800;
2682	and	%l4,-4096,%l4			! hx &= 0xfffff000;
2683
2684	ba	.cont8
2685	st	%l4,[%fp+tmp1_hi]		! *(int*)&ax = hx;
2686
2687	.align	16
2688.update9:
2689	cmp	counter,1
2690	ble,pt	%icc,.cont9
2691	sub	px,stridex,%o5
2692
2693	ld	[%fp+tmp_counter],%l1
2694
2695	stx	%o5,[%fp+tmp_px]
2696	add	py,stridey,%o5
2697
2698	add	%l1,counter,counter
2699	stx	%o5,[%fp+tmp_py]
2700
2701	sub	counter,1,counter
2702	st	counter,[%fp+tmp_counter]
2703	ba	.cont9
2704	or	%g0,1,counter
2705
2706	.align	16
2707.update10:
2708	cmp	counter,0
2709	ble,pt	%icc,.cont10
2710	fmovd	DONE,%f30
2711
2712	ld	[%fp+tmp_counter],%o2
2713	sub	px,stridex,%o5
2714
2715	sub	%o5,stridex,%o5
2716	stx	py,[%fp+tmp_py]
2717
2718	add	%o2,counter,counter
2719	sub	%o5,stridex,%o5
2720	stx	%o5,[%fp+tmp_px]
2721
2722	st	counter,[%fp+tmp_counter]
2723	ba	.cont10
2724	or	%g0,0,counter
2725
2726	.align	16
2727.update11:
2728	cmp	counter,0
2729	ble,pt	%icc,.cont11
2730	fmovd	DONE,%f30
2731
2732	ld	[%fp+tmp_counter],%o2
2733	sub	px,stridex,%o5
2734
2735	sub	%o5,stridex,%o5
2736	stx	py,[%fp+tmp_py]
2737
2738	add	%o2,counter,counter
2739	sub	%o5,stridex,%o5
2740	stx	%o5,[%fp+tmp_px]
2741
2742	st	counter,[%fp+tmp_counter]
2743	ba	.cont11
2744	or	%g0,0,counter
2745
2746	.align	16
2747.update12:
2748	cmp	counter,3
2749	ble,pt	%icc,.cont12
2750	add	py,stridey,%o5
2751
2752	add	%o5,stridey,%o5
2753	stx	px,[%fp+tmp_px]
2754
2755	add	%o5,stridey,%o5
2756	orcc	%l2,%i2,%g0			! if (x == 0);
2757
2758	bne,pt	%icc,.nzero12			! if (x == 0);
2759	stx	%o5,[%fp+tmp_py]
2760.u12:
2761	sub	counter,3,counter
2762	st	counter,[%fp+tmp_counter]
2763	ba	.cont12
2764	or	%g0,3,counter
2765.nzero12:
2766	lda	[%o5]%asi,%l1			! ld hy;
2767	cmp	%l0,%g0				! if (x >= 0);
2768
2769	lda	[%o5+4]%asi,%l0			! ld ly
2770	bge,pt	%icc,.pos12			! if (x >= 0);
2771	or	%g0,%g0,%o5			! yisint = 0;
2772
2773	and	%l1,MASK_0x7fffffff,%i2		! hy &= 0x7fffffff;
2774
2775	sra	%i2,20,%i2			! expy = hy >> 20;
2776
2777	cmp	%i2,1076			! if (expy >= 0x434);
2778	bge	.neg12				! if (expy >= 0x434);
2779	or	%g0,2,%o5			! yisint = 2;
2780
2781	cmp	%i2,1023			! if (expy < 0x3ff);
2782	bl	.neg12				! if (expy < 0x3ff);
2783	or	%g0,0,%o5			! yisint = 0;
2784
2785	cmp	%i2,1043			! if (expy <= (20 + 0x3ff));
2786	ble	.small12			! if (expy <= (20 + 0x3ff));
2787	sub	%i2,1023,%i2			! expy - 0x3ff;
2788
2789	sub	%g0,%i2,%i2
2790	add	%i2,52,%i2			! sh = (52 - (expy - 0x3ff);
2791	srl	%l0,%i2,%l1			! i0 = (ly >> sh);
2792
2793	sll	%l1,%i2,%l1			! (i0 << sh);
2794
2795	srl	%l0,%i2,%i2			! i0 = (ly >> sh);
2796	cmp	%l1,%l0				! if ((i0 << sh) == ly);
2797
2798	and	%i2,1,%i2			! i0 &= 1;
2799
2800	sub	%g0,%i2,%i2
2801	add	%i2,2,%i2			! i0 = 2 - i0;
2802
2803	move	%icc,%i2,%o5			! yisint = i0;
2804
2805	ba	.neg12
2806	nop
2807.small12:
2808	sub	%g0,%i2,%i2
2809	cmp	%l0,%g0				! if (ly != 0);
2810
2811	add	%i2,20,%i2			! sh = (20 - (expy - 0x3ff);
2812	bne	.neg12				! if (ly != 0);
2813	or	%g0,0,%o5			! yisint = 0;
2814
2815	srl	%l1,%i2,%l0			! i0 = (hy >> sh);
2816
2817	sll	%l0,%i2,%l0			! (i0 << sh);
2818
2819	srl	%l1,%i2,%i2			! i0 = (hy >> sh);
2820	cmp	%l0,%l1				! if ((i0 << sh) == hy);
2821
2822	and	%i2,1,%i2			! i0 &= 1;
2823
2824	sub	%g0,%i2,%i2
2825	add	%i2,2,%i2			! i0 = 2 - i0;
2826
2827	move	%icc,%i2,%o5			! yisint = i0;
2828.neg12:
2829	cmp	%o5,%g0
2830	be	.u12
2831	nop
2832.pos12:
2833	sll	%o5,11,%o5
2834	cmp	%l2,MASK_0x000fffff		! y0 = vis_fand(x, MMANT);
2835
2836	bg,pt	%icc,.cont12			! y0 = vis_fand(x, MMANT);
2837	st	%o5,[%fp+%o7]
2838
2839	std	%f32,[%fp+tmp5];
2840	std	%f54,[%fp+tmp6];
2841	ldd	[%fp+tmp0_hi],%f32
2842	ldd	[%fp+tmp_mant],%f54
2843
2844	or	%g0,1074,%o5
2845	fand	%f32,%f54,%f32			! y0 = vis_fand(x, MMANT);
2846
2847	sll	%o5,20,%o5
2848	fxtod	%f32,%f32			! ax = (double) ((long long *) & y0)[0]
2849
2850	std	%f32,[%fp+tmp0_hi]		! exp = ((unsigned int*) & ax)[0];
2851	fand	%f32,%f54,%f32			! x = vis_fand(ax, MMANT);
2852
2853	ld	[%fp+tmp0_hi],%i2		! exp = ((unsigned int*) & ax)[0];
2854	for	%f32,DONE,%f32			! x = vis_for(x, DONE);
2855
2856	std	%f32,[%fp+tmp0_hi];
2857	sub	%i2,%o5,%l2			! exp -= (1023 + 51) << 20;
2858	and	MASK_0x000fffff,%i2,%i4		! hx &= 0xfffff;
2859	ldd	[%fp+tmp5],%f32
2860	or	MASK_0x3ff00000,%i4,%i4		! hx |= 0x3ff00000;
2861	add	%i4,2048,%i4			! hx += 0x800;
2862	ldd	[%fp+tmp6],%f54
2863	and	%i4,-4096,%i4			! hx &= 0xfffff000;
2864
2865	ba	.cont12
2866	st	%i4,[%fp+tmp1_hi]		! *(int*)&ax = hx;
2867
2868	.align	16
2869.update13:
2870	cmp	counter,2
2871	ble,pt	%icc,.cont13
2872	sub	px,stridex,%o5
2873
2874	ld	[%fp+tmp_counter],%l1
2875
2876	stx	%o5,[%fp+tmp_px]
2877	add	py,stridey,%o5
2878
2879	add	%l1,counter,counter
2880	stx	%o5,[%fp+tmp_py]
2881
2882	sub	counter,2,counter
2883	st	counter,[%fp+tmp_counter]
2884	ba	.cont13
2885	or	%g0,2,counter
2886
2887	.align	16
2888.update14:
2889	cmp	counter,1
2890	ble,pt	%icc,.cont14
2891	fmovd	DONE,%f30
2892
2893	ld	[%fp+tmp_counter],%o2
2894	sub	px,stridex,%o5
2895
2896	sub	%o5,stridex,%o5
2897	stx	py,[%fp+tmp_py]
2898
2899	add	%o2,counter,counter
2900	sub	%o5,stridex,%o5
2901	stx	%o5,[%fp+tmp_px]
2902
2903	sub	counter,1,counter
2904	st	counter,[%fp+tmp_counter]
2905	ba	.cont14
2906	or	%g0,1,counter
2907
2908	.align	16
2909.update15:
2910	cmp	counter,1
2911	ble,pt	%icc,.cont15
2912	fmovd	DONE,%f30
2913
2914	sub	px,stridex,%o5
2915
2916	ld	[%fp+tmp_counter],%o2
2917	sub	%o5,stridex,%o5
2918	stx	py,[%fp+tmp_py]
2919
2920	add	%o2,counter,counter
2921	sub	%o5,stridex,%o5
2922	stx	%o5,[%fp+tmp_px]
2923
2924	sub	counter,1,counter
2925	st	counter,[%fp+tmp_counter]
2926	ba	.cont15
2927	or	%g0,1,counter
2928
2929	.align	16
2930.spec0:
2931	lda	[py+4]%asi,%o5			! ld ly;
2932	lda	[px]%asi,%f16			! y0 = *px;
2933	lda	[px+4]%asi,%f17			! y0 = *px;
2934	orcc	%l1,%o5,%g0			! if (hy | ly) != 0;
2935
2936	bne,pn	%icc,1f
2937	sethi	%hi(0x7ff00000),%o5
2938
2939	st	DONE_HI,[pz]
2940	ba	.update_point
2941	st	DONE_LO,[pz+4]
29421:
2943	cmp	%l3,%o5				! if (hx > 0x7ff00000);
2944	bgu,a,pn	%icc,6f			! if (hx > 0x7ff00000);
2945	fmuld	%f16,%f16,%f16			! *pz = y0 * y0;
2946
2947	bne,pt	%icc,2f				! if (hx != 0x7ff00000);
2948	orcc	%l3,%i2,%g0			! if (hx | lx) != 0;
2949
2950	cmp	%i2,0				! if (lx) != 0;
2951	bne,pn	%icc,5f				! if (lx) != 0;
2952	srl	%o2,31,%o5			! sy;
2953
2954	st	%l3,[pz]			! ((int*)pz)[0] = hx;
2955	ba	3f
2956	cmp	%o5,0				! if (sy == 0);
29572:
2958	bne,pt	%icc,4f				! if (hx | lx) != 0;
2959	srl	%l0,31,%o5			! sx;
2960
2961	st	%l3,[pz]			! ((int*)pz)[0] = hx;
2962	srl	%o2,31,%o5			! sy;
2963	cmp	%o5,0				! if (sy == 0);
29643:
2965	be,pt	%icc,.update_point		! if (sy == 0);
2966	st	%i2,[pz+4]			! ((int*)pz)[1] = lx;
2967
2968	ld	[pz],%f16			! *pz;
2969	ld	[pz+4],%f17			! *pz;
2970	fdivd	DONE,%f16,%f16			! *pz = DONE / *pz;
2971
2972	st	%f16,[pz]
2973	ba	.update_point
2974	st	%f17,[pz+4]
29754:
2976	cmp	%o5,0				! if (sx == 0);
2977	bne,a,pt	%icc,1f
2978	nop
2979
2980	st	DONE_HI,[pz]			! *pz = DONE;
2981	ba	.update_point
2982	st	DONE_LO,[pz+4]			! *pz = DONE;
29831:
2984	fdivd	DZERO,DZERO,%f16		! *pz = DZERO / DZERO;
2985	st	%f16,[pz]
2986	ba	.update_point
2987	st	%f17,[pz+4]
29885:
2989	fmuld	%f16,%f16,%f16			! *pz = y0 * y0;
29906:
2991	st	%f16,[pz]
2992	ba	.update_point
2993	st	%f17,[pz+4]
2994
2995	.align	16
2996.spec1:
2997	lda	[px]%asi,%f14			! y0 = *px;
2998	lda	[px+4]%asi,%f15			! y0 = *px;
2999	sethi	%hi(0x7ff00000),%o5
3000	lda	[py+4]%asi,%i4			! ld ly;
3001	srl	%o2,31,%o2			! sy
3002	cmp	%l3,%o5				! if (hx >= 0x7ff00000);
3003	bcc,pn	%icc,3f
3004	nop
3005
3006	cmp	%l1,%o5				! if (hy > 0x7ff00000);
3007	bgu,a,pt	%icc,.spec1_nan_inf	! if (hy > 0x7ff00000);
3008	lda	[py]%asi,%f16			! ld y
3009
3010	bne,a,pt	%icc,1f			! if (hy != 0x7ff00000);
3011	cmp	%i2,0				! if (lx != 0);
3012
3013	ba	2f				! if (hy == 0x7ff00000);
3014	cmp	%i4,0				! if (ly != 0);
30151:
3016	bne,pt	%icc,7f				! if (lx != 0);
3017	nop
3018
3019	cmp	%l3,0				! if (hx == 0);
3020	be,a,pt	%icc,6f				! if (hx == 0);
3021	st	%l3,[pz]			! ((int*)pz)[0] = hx;
3022
3023	cmp	%l3,MASK_0x3ff00000		! if (hx == 0x3ff00000);
3024	be,a,pn	%icc,6f				! if (hx == 0x3ff00000);
3025	st	%l3,[pz]			! ((int*)pz)[0] = hx;
3026
3027	ba	5f
3028	cmp	%l3,%o5				! if (hx != 0x7ff00000);
30293:
3030	bgu,a,pt	%icc,.spec1_nan_inf	! if (hx > 0x7ff00000);
3031	lda	[py]%asi,%f16			! ld y
3032
3033	bne,a,pn	%icc,1f			! if (hx != 0x7ff00000);
3034	cmp	%l1,%o5				! if (hy > 0x7ff00000);
3035
3036	cmp	%i2,0				! if (lx != 0);
3037	bne,a,pt	%icc,.spec1_nan_inf	! if (lx != 0);
3038	lda	[py]%asi,%f16			! ld y
3039
3040	cmp	%l1,%o5				! if (hy > 0x7ff00000);
30411:
3042	bgu,a,pt	%icc,.spec1_nan_inf	! if (hy > 0x7ff00000);
3043	lda	[py]%asi,%f16			! ld y
3044
3045	bne,pn	%icc,3f				! if (hy != 0x7ff00000);
3046	nop
3047
3048	cmp	%i4,0				! if (ly != 0);
30492:
3050	bne,a,pn	%icc,.spec1_nan_inf	! if (ly != 0);
3051	lda	[py]%asi,%f16			! ld y
3052
3053	cmp	%l3,MASK_0x3ff00000		! if (hx != 0x3ff00000);
3054	bne,pn	%icc,1f				! if (hx != 0x3ff00000);
3055	cmp	%i2,0				! if (lx != 0);
3056
3057	bne,pn	%icc,1f				! if (lx != 0);
3058	nop
3059
3060	ld	[py],%f16			! ld y
3061	ld	[py+4],%f17			! ld y
3062	fzero	%f14
3063	fmuld	%f16,%f14,%f14			! *pz = *py * 0.0;
3064	st	%f14,[pz]
3065	ba	.update_point
3066	st	%f15,[pz+4]
30671:
3068	sub	%l3,MASK_0x3ff00000,%o7		! (hx - 0x3ff00000);
3069	srlx	%o7,63,%l2			! (hx - 0x3ff00000) >> 63;
3070
3071	cmp	%l2,%o2				! if ((hx < 0x3ff00000) == sy)
3072	be,a,pn	%icc,1f				! if ((hx < 0x3ff00000) == sy)
3073	st	%l1,[pz]			! ((int*)pz)[0] = hy;
3074
3075	st	DZERO_HI,[pz]			! *pz = DZERO;
3076	ba	.update_point
3077	st	DZERO_LO,[pz+4]			! *pz = DZERO;
30781:
3079	ba	.update_point
3080	st	%i4,[pz+4]			! ((int*)pz)[0] = ly;
30813:
3082	cmp	%o0,1086			! if (expy >= 0x43e);
3083	bge,pn	%icc,4f				! if (expy >= 0x43e)
3084	nop
3085
3086	srl	%l0,31,%l0			! sx;
3087	cmp	%l0,0				! if (sx == 0);
3088	be,pn	%icc,2f
3089	or	%g0,0,%l4
3090
3091	cmp	%o0,1076			! if (expy >= 0x434);
3092
3093	bge,pn	%icc,2f				! if (expy >= 0x434);
3094	or	%g0,2,%l4			! yisint = 2;
3095
3096	cmp	%o0,1023			! if (expy < 0x3ff);
3097	bl,a,pn	%icc,2f				! if (expy < 0x3ff);
3098	or	%g0,0,%l4			! yisint = 0;
3099
3100	cmp	%o0,1043			! if (expy <= (20 + 0x3ff));
3101	ble,pn	%icc,1f
3102	sub	%o0,1023,%l2			! (expy - 0x3ff);
3103
3104	sub	%g0,%l2,%l2			! 0 - (expy - 0x3ff);
3105	add	%l2,52,%l2			! sh = 52 - (expy - 0x3ff);
3106	srl	%i4,%l2,%o0			! i0 = ly >> sh;
3107	sll	%o0,%l2,%l2			! i0 << sh;
3108	cmp	%l2,%i4				! if ((i0 << sh) != ly);
3109	bne,a,pn	%icc,2f			! if ((i0 << sh) != ly);
3110	or	%g0,0,%l4			! yisint = 0;
3111
3112	and	%o0,1,%o0			! i0 &= 1;
3113	sub	%g0,%o0,%o0
3114
3115	ba	2f
3116	add	%o0,2,%l4			! yisint = 2 - (i0 & 1);
31171:
3118	cmp	%i4,0				! if (ly != 0)
3119	bne,a,pn	%icc,2f			! if (ly != 0)
3120	or	%g0,0,%l4			! yisint = 0;
3121
3122	sub	%o0,1023,%l2			! (expy - 0x3ff);
3123	sub	%g0,%l2,%l2			! 0 - (expy - 0x3ff);
3124	add	%l2,20,%l2			! sh = 20 - (expy - 0x3ff);
3125	srl	%l1,%l2,%o0			! i0 = hy >> sh;
3126	sll	%o0,%l2,%l2			! i0 << sh;
3127	cmp	%l2,%l1				! if ((i0 << sh) != hy);
3128	bne,a,pn	%icc,2f			! if ((i0 << sh) != hy);
3129	or	%g0,0,%l4			! yisint = 0;
3130
3131	and	%o0,1,%o0			! i0 &= 1;
3132	sub	%g0,%o0,%o0
3133	add	%o0,2,%l4			! yisint = 2 - (i0 & 1);
31342:
3135	cmp	%o2,0				! if (sy == 0);
3136	sll	%l4,31,%l4			! yisint << 31;
3137	be,pt	%icc,1f				! if (sy == 0);
3138	add	%l3,%l4,%l3			! hx += yisint << 31;
3139
3140	or	%g0,%l4,%l3			! hx = yisint << 31;
3141	or	%g0,0,%i2			! lx = 0;
31421:
3143	st	%l3,[pz]			! ((int*)pz)[0] = hx;
3144	ba	.update_point
3145	st	%i2,[pz+4]			! ((int*)pz)[1] = lx;
31464:
3147	cmp	%i2,0				! if (lx != 0);
3148	bne,pn	%icc,7f				! if (lx != 0);
3149	nop
3150
3151	cmp	%l3,%o5				! if (hx != 0x7ff00000);
31525:
3153	bne,pn	%icc,7f				! if (hx != 0x7ff00000);
3154	nop
3155
3156	st	%l3,[pz]			! ((int*)pz)[0] = hx;
31576:
3158	cmp	%o2,0				! if (sy == 0);
3159	be,pt	%icc,.update_point
3160	st	%i2,[pz+4]			! ((int*)pz)[1] = lx;
3161
3162	ld	[pz],%f14			! ld *pz;
3163	ld	[pz+4],%f15			! ld *pz;
3164	fdivd	DONE,%f14,%f14			! *pz = DONE / *pz;
3165	st	%f14,[pz]
3166	ba	.update_point
3167	st	%f15,[pz+4]
31687:
3169	sub	%l3,MASK_0x3ff00000,%o7		! hx - 0x3ff00000;
3170	srlx	%o7,63,%l2			! (hx - 0x3ff00000) >> 63;
3171	cmp	%l2,%o2				! if (hx < 0x3ff00000) == sy);
3172	be,a,pn	%icc,1f				! if (hx < 0x3ff00000) == sy);
3173	ldd	[EXPTBL-ind_HUGE],%f14		! y0 = _HUGE;
3174
3175	ldd	[EXPTBL-ind_TINY],%f14		! y0 = _TINY;
31761:
3177	fmuld	%f14,%f14,%f14			! *pz = y0 * y0
3178
3179	st	%f14,[pz]
3180	ba .update_point
3181	st	%f15,[pz+4]
3182
3183	.align	16
3184.spec1_nan_inf:
3185	lda	[py+4]%asi,%f17			! ld y
3186	fmuld 	%f14,%f16,%f16              	! *pz = *px * *py
3187	st	%f16,[pz]
3188	ba 	.update_point
3189	st	%f17,[pz+4]
3190
3191
3192	.align	16
3193.update_point:
3194	add 	px,stridex,px
3195	ba 	.begin1
3196	add 	py,stridey,py
3197
3198	.align  64
3199.stridex_zero:
3200
3201	sra	stridez,0,stridez
3202	ld	[%i1],%f18			! y0 = px[0];
3203	ld	[%i1+4],%f19			! y0 = px[0];
3204
3205	sra	%i4,0,stridey
3206	sethi	%hi(0xffc00),MASK_0x000fffff
3207	ldd	[%l0+80],%f12			! ld MMANT
3208
3209	sllx	stridez,3,stridez
3210	add	MASK_0x000fffff,0x3ff,MASK_0x000fffff
3211	ldd	[%l0+8],%f56			! ld  DONE
3212
3213	sllx	stridey,3,stridey
3214	ldd	[%l0+88],%f14			! ld  MROUND
3215
3216	ldd	[%l0+96],%f16			! ld  MHI20
3217	cmp	%o0,MASK_0x000fffff		! if (exp <= 0xfffff)
3218
3219	bg,pt	%icc,1f
3220	srl	%o0,20,%o0			! exp = (exp >> 20);
3221
3222	fxtod	%f18,%f18			! y0 = (double) ((long long *) & y0)[0];
3223	std	%f18,[%fp+tmp0_hi]		! exp = ((unsigned int*) & y0)[0];
3224	or	%g0,1074,%i2
3225	ld	[%fp+tmp0_hi],%o0		! exp = ((unsigned int*) & y0)[0];
3226	srl	%o0,20,%o0			! exp = (exp >> 20);
3227	sub	%o0,%i2,%o0			! exp -= (1023 + 51) << 20;
32281:
3229	ldd	[%l0+24],MHI32
3230	sub	%o0,2046,%l5			! exp = exp - 2046;
3231	fand	%f18,%f12,%f18			! x = vis_fand(y0, MMANT);
3232
3233	ldd	[%l0+48],%f10			! ld KA1
3234	for	%f18,%f56,%f18			! x = vis_for(x, DONE);
3235
3236	ldd	[EXPTBL-ind_HI],%f28		! ld KA1_HI
3237	fpadd32	%f18,%f14,%f44			! ax = vis_fpadd32(x, MROUND);
3238
3239	ldd	[%l0+32],%f46			! ld KA5
3240	fand	%f44,%f16,%f60			! ax = vis_fand(ax, MHI20);
3241
3242	std	%f60,[%fp+tmp0_hi]		! itmp0 = (hx >> 20);
3243	faddd	%f18,%f60,%f50			! ux = x + ax;
3244
3245	ldd	[EXPTBL-ind_LO],%f52		! ld KA1_LO
3246	fsubd	%f18,%f60,%f30			! u = x - ax;
3247
3248	ld	[%fp+tmp0_hi],%i2		! itmp0 = (hx >> 20);
3249	fdivd	%f56,%f50,%f56			! yd = DONE / ux;
3250	fand	%f50,MHI32,%f50			! ux = vis_fand(ux, MHI32);
3251
3252	srl	%i2,20,%l3			! itmp0 = (hx >> 20);
3253	ldd	[%l0+40],%f26			! ld KA3
3254
3255	srl	%i2,8,%i2			! i = (hx >> 8);
3256	add	%l5,%l3,%l5			! exp += itmp0;
3257
3258	and	%i2,4080,%o3			! i = i & 0xff0;
3259	sll	%l5,8,%l3			! itmp0 = exp << 8;
3260	st	%l3,[%fp+tmp1_hi]		! (double)itmp0;
3261	fsubd	%f50,%f60,%f60			! dtmp0 = (ux - ax);
3262
3263	add	%o3,8,%i2
3264	ldd	[%o3+LOGTBL],%f58		! y = *(double *)((char*)__mt_constlog2 + i);
3265
3266	ldd	[%i2+LOGTBL],%f20		! dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
3267
3268	ld	[%fp+tmp1_hi],%f8		! (double)itmp0;
3269
3270	fitod	%f8,%f62			! (double)itmp0;
3271
3272	faddd	%f58,%f62,%f22			! y += (double)itmp0;
3273
3274	fsubd	%f18,%f60,%f62			! s_l = (x - dtmp0);
3275	fmuld	%f30,%f56,%f16			! s = u * yd;
3276
3277	fmuld	%f10,%f56,%f8			! dtmp0 = KA1 * yd;
3278	fand	%f16,MHI32,%f58			! s_h = vis_fand(s, MHI32);
3279
3280	ldd	[%l0+56],HTHRESH
3281	fmuld	%f16,%f16,%f18			! y = s * s;
3282
3283	ldd	[%l0+64],LTHRESH
3284	fmuld	%f58,%f50,%f60			! dtmp0 = s_h * ux;
3285
3286	ldd	[%l0+72],XKB4
3287	fmuld	%f28,%f58,%f50			! yd = KA1_HI * s_h;
3288
3289	ldd	[EXPTBL-ind_KB1],XKB1
3290	fmuld	%f46,%f18,%f56			! dtmp8 = KA5 * y;
3291
3292	ldd	[EXPTBL-ind_KB2],XKB2
3293	fmuld	%f58,%f62,%f46			! dtmp1 = s_h * s_l;
3294	fsubd	%f30,%f60,%f62			! s_l = u - dtmp0;
3295
3296	ldd	[EXPTBL-ind_KB3],XKB3
3297	fmuld	%f52,%f58,%f10			! dtmp1 = KA1_LO * s_h;
3298	faddd	%f22,%f50,%f28			! m_h = y + yd;
3299
3300	ldd	[EXPTBL-ind_KB5],XKB5
3301	faddd	%f56,%f26,%f58			! dtmp8 = dtmp8 + KA3;
3302
3303	add	EXPTBL,8,EXPTBL_P8
3304	fsubd	%f62,%f46,%f46			! s_l -= dtmp1;
3305
3306	fsubd	%f28,%f22,%f60			! dtmp2 = m_h - y;
3307
3308	st	%g0,[%fp+tmp0_lo]		! *((int*)&dtmp0 + 1) = 0;
3309	faddd	%f20,%f10,%f56			! dtmp0 += dtmp1;
3310
3311	st	%g0,[%fp+tmp1_lo]		! *((int*)&dtmp0 + 1) = 0;
3312	fmuld	%f58,%f18,%f18			! dtmp8 = dtmp8 * y;
3313
3314	st	%g0,[%fp+tmp2_lo]		! *((int*)&dtmp0 + 1) = 0;
3315	fmuld	%f8,%f46,%f62			! s_l = dtmp0 * s_l;
3316
3317	fsubd	%f60,%f50,%f10			! dtmp2 -= yd;
3318
3319	fmuld	%f18,%f16,%f58			! s = dtmp8 * s;
3320
3321	fsubd	%f10,%f62,%f46			! dtmp2 -= s_l;
3322
3323	fsubd	%f58,%f46,%f50			! y = s - dtmp2;
3324
3325	faddd	%f50,%f56,%f60			! y += dtmp0;
3326
3327	faddd	%f60,%f28,%f18			! dtmp0 = y + m_h;
3328
3329	fand	%f18,MHI32,s_h			! s_h = vis_fand(dtmp0, MHI32);
3330
3331	fsubd	s_h,%f28,%f62			! dtmp0 = (s_h - m_h);
3332
3333	fsubd	%f60,%f62,yr			! yr = y - dtmp0;
3334
3335.xbegin:
3336	ld	[%fp+tmp_counter],counter
3337	ldx	[%fp+tmp_py],py
3338	st	%g0,[%fp+tmp_counter]
3339.xbegin1:
3340	subcc	counter,1,counter
3341	bneg,pn	%icc,.end
3342	nop
3343
3344	lda	[py]0x82,%l2			! (Y0_3) hy = *py;
3345
3346	lda	[py]0x82,%f18			! (Y0_3) yd = *py;
3347	lda	[py+4]%asi,%f19			! (Y0_3) yd = *py;
3348
3349	sra	%l2,20,%l5			! (Y0_3) expy = hy >> 20;
3350
3351	and	%l5,0x7ff,%l5			! (Y0_3) expy &= 0x7ff;
3352
3353	cmp	%l5,959				! (Y0_3) if (expy < 0x3fb);
3354
3355	bl,pn	%icc,.xspec0			! (Y0_3) if (expy < 0x3fb);
3356	nop
3357
3358	cmp	%l5,1086			! (Y0_2) if (expy >= 0x43e);
3359
3360	bge,pn	%icc,.xspec1			! (Y0_2) if (expy >= 0x43e);
3361	nop
3362
3363	add	py,stridey,py			! y += stridey;
3364	fand	%f18,MHI32,%f12			! (Y0_2) s = vis_fand(yd, MHI32);
3365
3366	lda	[py]0x82,%l5			! (Y1_2) hy = *py;
3367
3368	lda	[py]0x82,%f10			! (Y1_2) yd = *py;
3369	lda	[py+4]%asi,%f11			! (Y1_2) yd = *py;
3370
3371	sra	%l5,20,%l5			! (Y1_2) expy = hy >> 20;
3372
3373	and	%l5,0x7ff,%l5			! (Y1_2) expy &= 0x7ff;
3374
3375	cmp	%l5,959				! (Y1_2) if (expy < 0x3fb);
3376	add	py,stridey,py			! y += stridey;
3377	fmuld	s_h,%f12,%f50			! (Y0_2) s = s_h * s;
3378	fsubd	%f18,%f12,%f56			! (Y0_2) dtmp0 = (yd - s);
3379
3380	fmuld	%f18,yr,%f26			! (Y0_2) dtmp1 = yd * yr;
3381	bl,pn	%icc,.xupdate0			! (Y1_2) if (expy < 0x3fb);
3382	nop
3383.xcont0:
3384	cmp	%l5,1086			! (Y1_2) if (expy >= 0x43e);
3385	bge,pn	%icc,.xupdate1			! (Y0_2) if (expy >= 0x43e);
3386	nop
3387.xcont1:
3388	fmuld	%f56,s_h,%f58			! (Y0_2) dtmp0 *= s_h;
3389	fand	%f10,MHI32,%f12			! (Y1_2) s = vis_fand(yd, MHI32);
3390
3391	fcmped	%fcc0,%f50,HTHRESH		! (Y0_2) if (s > HTHRESH);
3392
3393	faddd	%f58,%f26,%f48			! (Y0_2) yd = dtmp0 + dtmp1;
3394
3395	lda	[py]0x82,%l5			! (Y2_2) hy = *py;
3396	fmovdg	%fcc0,HTHRESH,%f50		! (Y0_2) s = HTHRESH;
3397
3398	fmovdg	%fcc0,DZERO,%f48		! (Y0_2) yd = DZERO;
3399
3400	fcmped	%fcc1,%f50,LTHRESH		! (Y0_2) if (s < LTHRESH);
3401
3402	lda	[py]0x82,%f14			! (Y2_2) yd = *py;
3403	lda	[py+4]%asi,%f15			! (Y2_2) yd = *py;
3404
3405	sra	%l5,20,%l5			! (Y2_2) expy = hy >> 20;
3406
3407	fmovdl	%fcc1,DZERO,%f48		! (Y0_2) yd = DZERO;
3408
3409	add	py,stridey,py			! y += stridey;
3410	and	%l5,0x7ff,%l5			! (Y2_2) expy &= 0x7ff;
3411	fmovdl	%fcc1,LTHRESH,%f50		! (Y0_2) s = LTHRESH;
3412
3413	cmp	%l5,959				! (Y2_2) if (expy < 0x3fb);
3414
3415	fmuld	s_h,%f12,%f16			! (Y1_2) s = s_h * s;
3416	bl,pn	%icc,.xupdate2			! (Y2_2) if (expy < 0x3fb);
3417	fsubd	%f10,%f12,%f56			! (Y1_2) dtmp0 = (yd - s);
3418.xcont2:
3419	cmp	%l5,1086			! (Y2_2) if (expy >= 0x43e);
3420	fmuld	%f10,yr,%f8			! (Y1_2) dtmp1 = yd * yr;
3421	faddd	%f50,%f48,%f28			! (Y0_2) dtmp0 = (s + yd);
3422
3423	lda	[py]0x82,%l5			! (Y0_3) hy = *py;
3424	bge,pn	%icc,.xupdate3			! (Y2_2) if (expy >= 0x43e);
3425	nop
3426.xcont3:
3427	fmuld	%f56,s_h,%f58			! (Y1_2) dtmp0 *= s_h;
3428	fand	%f14,MHI32,%f44			! (Y2_2) s = vis_fand(yd, MHI32);
3429
3430	fcmped	%fcc0,%f16,HTHRESH		! (Y1_2) if (s > HTHRESH);
3431
3432	fdtoi	%f28,%f3			! (Y0_2) u = (double)(int)dtmp0;
3433
3434	st	%f3,[%fp+tmp3]			! (Y0_2) ind = (int)dtmp0;
3435
3436	faddd	%f58,%f8,%f10			! (Y1_2) yd = dtmp0 + dtmp1;
3437
3438	lda	[py]0x82,%f18			! (Y0_3) yd = *py;
3439	lda	[py+4]%asi,%f19			! (Y0_3) yd = *py;
3440	fmovdg	%fcc0,HTHRESH,%f16		! (Y1_2) s = HTHRESH;
3441
3442	fitod	%f3,%f58			! (Y0_2) u = (double)(int)dtmp0;
3443
3444	fmovdg	%fcc0,DZERO,%f10		! (Y1_2) yd = DZERO;
3445
3446	sra	%l5,20,%l5			! (Y0_3) expy = hy >> 20;
3447	fcmped	%fcc1,%f16,LTHRESH		! (Y1_2) if (s < LTHRESH);
3448
3449	and	%l5,0x7ff,%l5			! (Y0_3) expy &= 0x7ff;
3450	fsubd	%f50,%f58,%f54			! (Y0_2) y = s - u;
3451
3452	cmp	%l5,959				! (Y0_3) if (expy < 0x3fb);
3453
3454	bl,pn	%icc,.xupdate4			! (Y0_3) if (expy < 0x3fb);
3455	nop
3456.xcont4:
3457	fmovdl	%fcc1,DZERO,%f10		! (Y1_2) yd = DZERO;
3458
3459	fmovdl	%fcc1,LTHRESH,%f16		! (Y1_2) s = LTHRESH;
3460
3461	faddd	%f54,%f48,%f54			! (Y0_2) y = y + yd;
3462
3463	ld	[%fp+tmp3],%o2			! (Y0_2) ind = (int)dtmp0;
3464
3465
3466	fsubd	%f14,%f44,%f50			! (Y2_1) dtmp0 = (yd - s);
3467
3468	cmp	%l5,1086			! (Y0_2) if (expy >= 0x43e);
3469
3470	fmuld	s_h,%f44,%f44			! (Y2_1) s = s_h * s;
3471	bge,pn	%icc,.xupdate5			! (Y0_2) if (expy >= 0x43e);
3472	faddd	%f16,%f10,%f22			! (Y1_1) dtmp0 = (s + yd);
3473.xcont5:
3474	sra	%o2,8,%o0			! (Y0_1) ind >>= 8;
3475	add	py,stridey,py			! y += stridey;
3476	fmuld	%f14,yr,%f20			! (Y2_1) dtmp1 = yd * yr;
3477
3478	add	%o0,1021,%i1			! (Y0_1) eflag = (ind + 1021);
3479	fmuld	XKB5,%f54,%f48			! (Y0_1) dtmp0 = XKB5 * y;
3480
3481	sub	%g0,%o0,%o3			! (Y0_1) gflag = (1022 - ind);
3482	fmuld	%f50,s_h,%f52			! (Y2_1) dtmp0 *= s_h;
3483	fand	%f18,MHI32,%f12			! (Y0_2) s = vis_fand(yd, MHI32);
3484
3485	sra	%i1,31,%o1			! (Y0_1) eflag = eflag >> 31;
3486	add	%o3,1022,%l0			! (Y0_1) gflag = (1022 - ind);
3487	fcmped	%fcc0,%f44,HTHRESH		! (Y2_1) if (s > HTHRESH);
3488
3489	sra	%l0,31,%o4			! (Y0_1) gflag = gflag >> 31;
3490	and	%o1,54,%i4			! (Y0_1) itmp0 = 54 & eflag;
3491	fdtoi	%f22,%f4			! (Y1_1) u = (double)(int)dtmp0;
3492
3493	add	%o0,%i4,%i2			! (Y0_1) ind = ind + itmp0;
3494	and	%o4,52,%l3			! (Y0_1) itmp1 = 52 & gflag;
3495	st	%f4,[%fp+tmp4]			! (Y1_1) ind = (int)dtmp0;
3496	faddd	%f48,XKB4,%f60			! (Y0_1) dtmp1 = dtmp0 + XKB4;
3497
3498	sub	%i2,%l3,%l2			! (Y0_1) ind = ind - itmp1;
3499	sub	%o1,%o4,%o4			! (Y0_1) ind = eflag - gflag;
3500	faddd	%f52,%f20,%f62			! (Y2_1) yd = dtmp0 + dtmp1;
3501
3502	sll	%l2,20,%o3			! (Y0_1) ind <<= 20;
3503	lda	[py]0x82,%l5			! (Y1_2) hy = *py;
3504	fmovdg	%fcc0,HTHRESH,%f44		! (Y2_1) s = HTHRESH;
3505
3506	st	%o3,[%fp+tmp0_hi]		! (Y0_1) *(int*)&dtmp0 = ind;
3507	fitod	%f4,%f48			! (Y1_1) u = (double)(int)dtmp0;
3508
3509	fmuld	%f60,%f54,%f60			! (Y0_1) dtmp2 = dtmp1 * y;
3510
3511	lda	[py]0x82,%f20			! (Y1_2) yd = *py;
3512	lda	[py+4]%asi,%f21			! (Y1_2) yd = *py;
3513	fmovdg	%fcc0,DZERO,%f62		! (Y2_1) yd = DZERO;
3514
3515	fcmped	%fcc1,%f44,LTHRESH		! (Y2_1) if (s < LTHRESH);
3516
3517	fsubd	%f16,%f48,%f50			! (Y1_1) y = s - u;
3518
3519	faddd	%f60,XKB3,%f60			! (Y0_1) dtmp3 = dtmp2 + XKB3;
3520
3521	sra	%l5,20,%l5			! (Y1_2) expy = hy >> 20;
3522
3523	fmovdl	%fcc1,DZERO,%f62		! (Y2_1) yd = DZERO;
3524
3525	and	%l5,0x7ff,%l5			! (Y1_2) expy &= 0x7ff;
3526	fmovdl	%fcc1,LTHRESH,%f44		! (Y2_1) s = LTHRESH;
3527
3528	cmp	%l5,959				! (Y1_2) if (expy < 0x3fb);
3529	fmuld	%f60,%f54,%f48			! (Y0_1) dtmp4 = dtmp3 * y;
3530	faddd	%f50,%f10,%f52			! (Y1_1) y = y + yd;
3531
3532	ld	[%fp+tmp4],%o1			! (Y1_1) ind = (int)dtmp0;
3533
3534	add	py,stridey,py			! y += stridey;
3535	fmuld	s_h,%f12,%f50			! (Y0_2) s = s_h * s;
3536	fsubd	%f18,%f12,%f56			! (Y0_2) dtmp0 = (yd - s);
3537
3538	fmuld	%f18,yr,%f26			! (Y0_2) dtmp1 = yd * yr;
3539	bl,pn	%icc,.xupdate6			! (Y1_2) if (expy < 0x3fb);
3540	faddd	%f44,%f62,%f28			! (Y2_1) dtmp0 = (s + yd);
3541.xcont6:
3542	sra	%o1,8,%o3			! (Y1_1) ind >>= 8;
3543	cmp	%l5,1086			! (Y1_2) if (expy >= 0x43e);
3544	fmuld	XKB5,%f52,%f22			! (Y1_1) dtmp0 = XKB5 * y;
3545	faddd	%f48,XKB2,%f14			! (Y0_1) dtmp5 = dtmp4 + XKB2;
3546
3547	add	%o3,1021,%o0			! (Y1_1) eflag = (ind + 1021);
3548	bge,pn	%icc,.xupdate7			! (Y0_2) if (expy >= 0x43e);
3549	nop
3550.xcont7:
3551	sub	%g0,%o3,%i2			! (Y1_1) gflag = (1022 - ind);
3552	fmuld	%f56,s_h,%f58			! (Y0_2) dtmp0 *= s_h;
3553	fand	%f20,MHI32,%f12			! (Y1_2) s = vis_fand(yd, MHI32);
3554
3555	sra	%o0,31,%l3			! (Y1_1) eflag = eflag >> 31;
3556	add	%i2,1022,%l2			! (Y1_1) gflag = (1022 - ind);
3557	fcmped	%fcc0,%f50,HTHRESH		! (Y0_2) if (s > HTHRESH);
3558
3559	sra	%l2,31,%o7			! (Y1_1) gflag = gflag >> 31;
3560	and	%l3,54,%i1			! (Y1_1) itmp0 = 54 & eflag;
3561	fdtoi	%f28,%f3			! (Y2_1) u = (double)(int)dtmp0;
3562
3563	add	%o3,%i1,%l0			! (Y1_1) ind = ind + itmp0;
3564	and	%o7,52,%l1			! (Y1_1) itmp1 = 52 & gflag;
3565	st	%f3,[%fp+ind_buf]		! (Y2_1) ind = (int)dtmp0;
3566	faddd	%f22,XKB4,%f60			! (Y1_1) dtmp1 = dtmp0 + XKB4;
3567
3568	sub	%l0,%l1,%i4			! (Y1_1) ind = ind - itmp1;
3569	sub	%l3,%o7,%o7			! (Y1_1) ind = eflag - gflag;
3570	faddd	%f58,%f26,%f48			! (Y0_2) yd = dtmp0 + dtmp1;
3571
3572	sll	%i4,20,%i2			! (Y1_1) ind <<= 20;
3573	lda	[py]0x82,%l5			! (Y2_2) hy = *py;
3574	fmovdg	%fcc0,HTHRESH,%f50		! (Y0_2) s = HTHRESH;
3575
3576	st	%i2,[%fp+tmp1_hi]		! (Y1_1) *(int*)&dtmp0 = ind;
3577	fitod	%f3,%f18			! (Y2_1) u = (double)(int)dtmp0;
3578
3579	fmuld	%f60,%f52,%f60			! (Y1_1) dtmp2 = dtmp1 * y;
3580
3581	fmuld	%f14,%f54,%f56			! (Y0_1) dtmp6 = dtmp5 * y;
3582	fmovdg	%fcc0,DZERO,%f48		! (Y0_2) yd = DZERO;
3583
3584	fcmped	%fcc1,%f50,LTHRESH		! (Y0_2) if (s < LTHRESH);
3585
3586	lda	[py]0x82,%f26			! (Y2_2) yd = *py;
3587	lda	[py+4]%asi,%f27			! (Y2_2) yd = *py;
3588	fsubd	%f44,%f18,%f18			! (Y2_1) y = s - u;
3589
3590	faddd	%f60,XKB3,%f44			! (Y1_1) dtmp3 = dtmp2 + XKB3;
3591
3592	sra	%l5,20,%l5			! (Y2_2) expy = hy >> 20;
3593	and	%o2,255,%o2			! (Y0_1) i = ind & 0xff;
3594	faddd	%f56,XKB1,%f58			! (Y0_1) dtmp7 = dtmp6 + XKB1;
3595
3596	sll	%o2,4,%l2			! (Y0_1) i = i << 4;
3597	fmovdl	%fcc1,DZERO,%f48		! (Y0_2) yd = DZERO;
3598
3599	add	py,stridey,py			! y += stridey;
3600	and	%l5,0x7ff,%l5			! (Y2_2) expy &= 0x7ff;
3601	fmovdl	%fcc1,LTHRESH,%f50		! (Y0_2) s = LTHRESH;
3602
3603	cmp	%l5,959				! (Y2_2) if (expy < 0x3fb);
3604	ldd	[EXPTBL+%l2],%f22		! (Y0_1) u = *(double*)((char*)__mt_constexp2 + i);
3605	faddd	%f18,%f62,%f18			! (Y2_1) y = y + yd;
3606	fmuld	%f44,%f52,%f62			! (Y1_1) dtmp4 = dtmp3 * y;
3607
3608	ld	[%fp+ind_buf],%l1		! (Y2_1) ind = (int)dtmp0;
3609	fmuld	%f58,%f54,%f54			! (Y0_1) y = dtmp7 * y;
3610
3611	fmuld	s_h,%f12,%f16			! (Y1_2) s = s_h * s;
3612	bl,pn	%icc,.xupdate8			! (Y2_2) if (expy < 0x3fb);
3613	fsubd	%f20,%f12,%f56			! (Y1_2) dtmp0 = (yd - s);
3614.xcont8:
3615	cmp	%l5,1086			! (Y2_2) if (expy >= 0x43e);
3616	fmuld	%f20,yr,%f8			! (Y1_2) dtmp1 = yd * yr;
3617	faddd	%f50,%f48,%f28			! (Y0_2) dtmp0 = (s + yd);
3618
3619	sra	%l1,8,%o2			! (Y2_1) ind >>= 8;
3620	lda	[py]0x82,%l5			! (Y0_3) hy = *py;
3621	fmuld	XKB5,%f18,%f20			! (Y2_1) dtmp0 = XKB5 * y;
3622	faddd	%f62,XKB2,%f12			! (Y1_1) dtmp5 = dtmp4 + XKB2;
3623
3624	add	%o2,1021,%l0			! (Y2_1) eflag = (ind + 1021);
3625	bge,pn	%icc,.xupdate9			! (Y2_2) if (expy >= 0x43e);
3626	nop
3627.xcont9:
3628	sub	%g0,%o2,%l3			! (Y2_1) gflag = (1022 - ind);
3629	ldd	[EXPTBL_P8+%l2],%f14		! (Y0_1) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3630	fmuld	%f56,s_h,%f58			! (Y1_2) dtmp0 *= s_h;
3631	fand	%f26,MHI32,%f44			! (Y2_2) s = vis_fand(yd, MHI32);
3632
3633	sra	%l0,31,%o0			! (Y2_1) eflag = eflag >> 31;
3634	add	%l3,1022,%i4			! (Y2_1) gflag = (1022 - ind);
3635	fmuld	%f22,%f54,%f56			! (Y0_1) dtmp1 = u * y;
3636	fcmped	%fcc0,%f16,HTHRESH		! (Y1_2) if (s > HTHRESH);
3637
3638	sra	%i4,31,%o5			! (Y2_1) gflag = gflag >> 31;
3639	and	%o0,54,%i2			! (Y2_1) itmp0 = 54 & eflag;
3640	fdtoi	%f28,%f3			! (Y0_2) u = (double)(int)dtmp0;
3641
3642	add	%o2,%i2,%i1			! (Y2_1) ind = ind + itmp0;
3643	and	%o5,52,%l2			! (Y2_1) itmp1 = 52 & gflag;
3644	st	%f3,[%fp+tmp3]			! (Y0_2) ind = (int)dtmp0;
3645	faddd	%f20,XKB4,%f60			! (Y2_1) dtmp1 = dtmp0 + XKB4;
3646
3647	sub	%i1,%l2,%o3			! (Y2_1) ind = ind - itmp1;
3648	sub	%o0,%o5,%o5			! (Y2_1) ind = eflag - gflag;
3649	faddd	%f58,%f8,%f10			! (Y1_2) yd = dtmp0 + dtmp1;
3650
3651	sll	%o3,20,%l3			! (Y2_1) ind <<= 20;
3652	lda	[py]0x82,%f28			! (Y0_3) yd = *py;
3653	lda	[py+4]%asi,%f29			! (Y0_3) yd = *py;
3654	fmovdg	%fcc0,HTHRESH,%f16		! (Y1_2) s = HTHRESH;
3655
3656	st	%l3,[%fp+tmp2_hi]		! (Y2_1) *(int*)&dtmp0 = ind;
3657	fitod	%f3,%f58			! (Y0_2) u = (double)(int)dtmp0;
3658
3659	fmuld	%f60,%f18,%f60			! (Y2_1) dtmp2 = dtmp1 * y;
3660	faddd	%f14,%f56,%f20			! (Y0_1) dtmp2 = dtmp0 + dtmp1;
3661
3662	fmuld	%f12,%f52,%f56			! (Y1_1) dtmp6 = dtmp5 * y;
3663	fmovdg	%fcc0,DZERO,%f10		! (Y1_2) yd = DZERO;
3664
3665	sra	%l5,20,%l5			! (Y0_3) expy = hy >> 20;
3666	fcmped	%fcc1,%f16,LTHRESH		! (Y1_2) if (s < LTHRESH);
3667
3668	and	%l5,0x7ff,%l5			! (Y0_3) expy &= 0x7ff;
3669	fsubd	%f50,%f58,%f54			! (Y0_2) y = s - u;
3670
3671	cmp	%l5,959				! (Y0_3) if (expy < 0x3fb);
3672	faddd	%f60,XKB3,%f60			! (Y2_1) dtmp3 = dtmp2 + XKB3;
3673
3674	and	%o1,255,%o1			! (Y1_1) i = ind & 0xff;
3675	bl,pn	%icc,.xupdate10			! (Y0_3) if (expy < 0x3fb);
3676	faddd	%f56,XKB1,%f8			! (Y1_1) dtmp7 = dtmp6 + XKB1;
3677.xcont10:
3678	sll	%o1,4,%l0			! (Y1_1) i = i << 4;
3679	fmovdl	%fcc1,DZERO,%f10		! (Y1_2) yd = DZERO;
3680
3681	nop
3682	ba	1f
3683	fmovdl	%fcc1,LTHRESH,%f16		! (Y1_2) s = LTHRESH;
3684
3685	.align	16
36861:
3687	subcc	counter,2,counter
3688	ldd	[EXPTBL+%l0],%f56		! (Y1_1) u = *(double*)((char*)__mt_constexp2 + i);
3689	fmuld	%f60,%f18,%f58			! (Y2_1) dtmp4 = dtmp3 * y;
3690	faddd	%f54,%f48,%f54			! (Y0_2) y = y + yd;
3691
3692	fmuld	%f8,%f52,%f60			! (Y1_1) y = dtmp7 * y;
3693	ld	[%fp+tmp3],%o2			! (Y0_2) ind = (int)dtmp0;
3694	bneg,pn	%icc,.xtail
3695	faddd	%f20,%f22,%f12			! (Y0_1) u = dtmp2 + u;
3696
3697.xmain_loop:
3698	cmp	%l5,1086			! (Y0_2) if (expy >= 0x43e);
3699	add	%o4,513,%o4			! (Y0_0) ind += 513;
3700	ldd	[%fp+tmp0_hi],%f52		! (Y0_0) *(int*)&dtmp0 = ind;
3701	fsubd	%f26,%f44,%f50			! (Y2_1) dtmp0 = (yd - s);
3702
3703	fmuld	s_h,%f44,%f44			! (Y2_1) s = s_h * s;
3704	sra	%o2,8,%o0			! (Y0_1) ind >>= 8;
3705	bge,pn	%icc,.xupdate11			! (Y0_2) if (expy >= 0x43e);
3706	faddd	%f16,%f10,%f22			! (Y1_1) dtmp0 = (s + yd);
3707.xcont11:
3708	sll	%o4,3,%l2			! (Y0_0) ind *= 8;
3709	add	py,stridey,py			! y += stridey;
3710	fmuld	%f26,yr,%f20			! (Y2_1) dtmp1 = yd * yr;
3711	faddd	%f58,XKB2,%f14			! (Y2_0) dtmp5 = dtmp4 + XKB2;
3712
3713	add	%o0,1021,%i1			! (Y0_1) eflag = (ind + 1021);
3714	ldd	[%l2+EXPTBL],%f62		! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
3715	fmuld	XKB5,%f54,%f48			! (Y0_1) dtmp0 = XKB5 * y;
3716	fpadd32	%f12,%f52,%f58			! (Y0_0) u = vis_fpadd32(u, dtmp0);
3717
3718	sub	%g0,%o0,%o3			! (Y0_1) gflag = (1022 - ind);
3719	ldd	[EXPTBL_P8+%l0],%f8		! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3720	fand	%f28,MHI32,%f12			! (Y0_2) s = vis_fand(yd, MHI32);
3721	fmuld	%f50,s_h,%f52			! (Y2_1) dtmp0 *= s_h;
3722
3723	sra	%i1,31,%o1			! (Y0_1) eflag = eflag >> 31;
3724	add	%o3,1022,%l0			! (Y0_1) gflag = (1022 - ind);
3725	fmuld	%f56,%f60,%f26			! (Y1_0) dtmp1 = u * y;
3726	fcmped	%fcc0,%f44,HTHRESH		! (Y2_1) if (s > HTHRESH);
3727
3728	sra	%l0,31,%o4			! (Y0_1) gflag = gflag >> 31;
3729	and	%o1,54,%i4			! (Y0_1) itmp0 = 54 & eflag;
3730	fmuld	%f58,%f62,%f6			! (Y0_0) dtmp1 = u * dtmp1;
3731	fdtoi	%f22,%f4			! (Y1_1) u = (double)(int)dtmp0;
3732
3733	add	%o0,%i4,%i2			! (Y0_1) ind = ind + itmp0;
3734	and	%o4,52,%l3			! (Y0_1) itmp1 = 52 & gflag;
3735	st	%f4,[%fp+tmp4]			! (Y1_1) ind = (int)dtmp0;
3736	faddd	%f48,XKB4,%f60			! (Y0_1) dtmp1 = dtmp0 + XKB4;
3737
3738	sub	%i2,%l3,%l2			! (Y0_1) ind = ind - itmp1;
3739	sub	%o1,%o4,%o4			! (Y0_1) ind = eflag - gflag;
3740	st	%f6,[pz]			! (Y0_0) write into memory
3741	faddd	%f52,%f20,%f62			! (Y2_1) yd = dtmp0 + dtmp1;
3742
3743	sll	%l2,20,%o3			! (Y0_1) ind <<= 20;
3744	nop
3745	st	%o3,[%fp+tmp0_hi]		! (Y0_1) *(int*)&dtmp0 = ind;
3746	fmovdg	%fcc0,HTHRESH,%f44		! (Y2_1) s = HTHRESH;
3747
3748	lda	[py]0x82,%l5			! (Y1_2) hy = *py;
3749	nop
3750	fitod	%f4,%f48			! (Y1_1) u = (double)(int)dtmp0;
3751
3752	fmuld	%f60,%f54,%f60			! (Y0_1) dtmp2 = dtmp1 * y;
3753	nop
3754	st	%f7,[pz+4]			! (Y0_0) write into memory
3755	faddd	%f8,%f26,%f26			! (Y1_0) dtmp2 = dtmp0 + dtmp1;
3756
3757	lda	[py]0x82,%f8			! (Y1_2) yd = *py;
3758	nop
3759	fmuld	%f14,%f18,%f52			! (Y2_0) dtmp6 = dtmp5 * y;
3760	fmovdg	%fcc0,DZERO,%f62		! (Y2_1) yd = DZERO;
3761
3762	lda	[py+4]%asi,%f9			! (Y1_2) yd = *py;
3763	add	pz,stridez,pz			! z += stridez;
3764	fcmped	%fcc1,%f44,LTHRESH		! (Y2_1) if (s < LTHRESH);
3765
3766	fsubd	%f16,%f48,%f50			! (Y1_1) y = s - u;
3767
3768	faddd	%f60,XKB3,%f60			! (Y0_1) dtmp3 = dtmp2 + XKB3;
3769
3770	sra	%l5,20,%l5			! (Y1_2) expy = hy >> 20;
3771	and	%l1,255,%l1			! (Y2_0) i = ind & 0xff;
3772	faddd	%f52,XKB1,%f58			! (Y2_0) dtmp7 = dtmp6 + XKB1;
3773
3774	sll	%l1,4,%l0			! (Y2_0) i = i << 4;
3775	fmovdl	%fcc1,DZERO,%f62		! (Y2_1) yd = DZERO;
3776
3777	and	%l5,0x7ff,%l5			! (Y1_2) expy &= 0x7ff;
3778	nop
3779	fmovdl	%fcc1,LTHRESH,%f44		! (Y2_1) s = LTHRESH;
3780
3781	cmp	%l5,959				! (Y1_2) if (expy < 0x3fb);
3782	ldd	[EXPTBL+%l0],%f20		! (Y2_0) u = *(double*)((char*)__mt_constexp2 + i);
3783	fmuld	%f60,%f54,%f48			! (Y0_1) dtmp4 = dtmp3 * y;
3784	faddd	%f50,%f10,%f52			! (Y1_1) y = y + yd;
3785
3786	add	%o7,513,%o7			! (Y1_0) ind += 513;
3787	ld	[%fp+tmp4],%o1			! (Y1_1) ind = (int)dtmp0;
3788	fmuld	%f58,%f18,%f18			! (Y2_0) y = dtmp7 * y;
3789	faddd	%f26,%f56,%f58			! (Y1_0) u = dtmp2 + u;
3790
3791	add	py,stridey,py			! y += stridey;
3792	ldd	[%fp+tmp1_hi],%f60		! (Y1_0) *(int*)&dtmp0 = ind;
3793	fmuld	s_h,%f12,%f50			! (Y0_2) s = s_h * s;
3794	fsubd	%f28,%f12,%f56			! (Y0_2) dtmp0 = (yd - s);
3795
3796	sll	%o7,3,%l3			! (Y1_0) ind *= 8;
3797	fmuld	%f28,yr,%f26			! (Y0_2) dtmp1 = yd * yr;
3798	bl,pn	%icc,.xupdate12			! (Y1_2) if (expy < 0x3fb);
3799	faddd	%f44,%f62,%f28			! (Y2_1) dtmp0 = (s + yd);
3800.xcont12:
3801	sra	%o1,8,%o3			! (Y1_1) ind >>= 8;
3802	cmp	%l5,1086			! (Y1_2) if (expy >= 0x43e);
3803	fmuld	XKB5,%f52,%f22			! (Y1_1) dtmp0 = XKB5 * y;
3804	faddd	%f48,XKB2,%f14			! (Y0_1) dtmp5 = dtmp4 + XKB2;
3805
3806	add	%o3,1021,%o0			! (Y1_1) eflag = (ind + 1021);
3807	ldd	[%l3+EXPTBL],%f48		! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
3808	bge,pn	%icc,.xupdate13			! (Y1_2) if (expy >= 0x43e);
3809	fpadd32	%f58,%f60,%f60			! (Y1_0) u = vis_fpadd32(u, dtmp0);
3810.xcont13:
3811	sub	%g0,%o3,%i2			! (Y1_1) gflag = (1022 - ind);
3812	ldd	[EXPTBL_P8+%l0],%f16		! (Y2_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3813	fmuld	%f56,s_h,%f58			! (Y0_2) dtmp0 *= s_h;
3814	fand	%f8,MHI32,%f12			! (Y1_2) s = vis_fand(yd, MHI32);
3815
3816	sra	%o0,31,%l3			! (Y1_1) eflag = eflag >> 31;
3817	add	%i2,1022,%l2			! (Y1_1) gflag = (1022 - ind);
3818	fmuld	%f20,%f18,%f56			! (Y2_0) dtmp1 = u * y;
3819	fcmped	%fcc0,%f50,HTHRESH		! (Y0_2) if (s > HTHRESH);
3820
3821	sra	%l2,31,%o7			! (Y1_1) gflag = gflag >> 31;
3822	and	%l3,54,%i1			! (Y1_1) itmp0 = 54 & eflag;
3823	fmuld	%f60,%f48,%f18			! (Y1_0) dtmp1 = u * dtmp1;
3824	fdtoi	%f28,%f3			! (Y2_1) u = (double)(int)dtmp0;
3825
3826	add	%o3,%i1,%l0			! (Y1_1) ind = ind + itmp0;
3827	and	%o7,52,%l1			! (Y1_1) itmp1 = 52 & gflag;
3828	st	%f3,[%fp+ind_buf]		! (Y2_1) ind = (int)dtmp0;
3829	faddd	%f22,XKB4,%f60			! (Y1_1) dtmp1 = dtmp0 + XKB4;
3830
3831	sub	%l0,%l1,%i4			! (Y1_1) ind = ind - itmp1;
3832	sub	%l3,%o7,%o7			! (Y1_1) ind = eflag - gflag;
3833	st	%f18,[pz]			! (Y1_0) write into memory
3834	faddd	%f58,%f26,%f48			! (Y0_2) yd = dtmp0 + dtmp1;
3835
3836	sll	%i4,20,%i2			! (Y1_1) ind <<= 20;
3837	lda	[py]0x82,%l5			! (Y2_2) hy = *py;
3838	fmovdg	%fcc0,HTHRESH,%f50		! (Y0_2) s = HTHRESH;
3839
3840	st	%i2,[%fp+tmp1_hi]		! (Y1_1) *(int*)&dtmp0 = ind;
3841	fitod	%f3,%f10			! (Y2_1) u = (double)(int)dtmp0;
3842
3843	fmuld	%f60,%f52,%f60			! (Y1_1) dtmp2 = dtmp1 * y;
3844	st	%f19,[pz+4]			! (Y1_0) write into memory
3845	faddd	%f16,%f56,%f28			! (Y2_0) dtmp2 = dtmp0 + dtmp1;
3846
3847	fmuld	%f14,%f54,%f56			! (Y0_1) dtmp6 = dtmp5 * y;
3848	fmovdg	%fcc0,DZERO,%f48		! (Y0_2) yd = DZERO;
3849
3850	add	pz,stridez,pz			! z += stridez;
3851	fcmped	%fcc1,%f50,LTHRESH		! (Y0_2) if (s < LTHRESH);
3852
3853	lda	[py]0x82,%f26			! (Y2_2) yd = *py;
3854	fsubd	%f44,%f10,%f18			! (Y2_1) y = s - u;
3855
3856	lda	[py+4]%asi,%f27			! (Y2_2) yd = *py;
3857	faddd	%f60,XKB3,%f44			! (Y1_1) dtmp3 = dtmp2 + XKB3;
3858
3859	sra	%l5,20,%l5			! (Y2_2) expy = hy >> 20;
3860	and	%o2,255,%o2			! (Y0_1) i = ind & 0xff;
3861	faddd	%f56,XKB1,%f58			! (Y0_1) dtmp7 = dtmp6 + XKB1;
3862
3863	sll	%o2,4,%l2			! (Y0_1) i = i << 4;
3864	fmovdl	%fcc1,DZERO,%f48		! (Y0_2) yd = DZERO;
3865
3866	add	py,stridey,py			! y += stridey;
3867	and	%l5,0x7ff,%l5			! (Y2_2) expy &= 0x7ff;
3868	fmovdl	%fcc1,LTHRESH,%f50		! (Y0_2) s = LTHRESH;
3869
3870	cmp	%l5,959				! (Y2_2) if (expy < 0x3fb);
3871	ldd	[EXPTBL+%l2],%f22		! (Y0_1) u = *(double*)((char*)__mt_constexp2 + i);
3872	faddd	%f18,%f62,%f18			! (Y2_1) y = y + yd;
3873	fmuld	%f44,%f52,%f62			! (Y1_1) dtmp4 = dtmp3 * y;
3874
3875	add	%o5,513,%o5			! (Y2_0) ind += 513;
3876	ld	[%fp+ind_buf],%l1		! (Y2_1) ind = (int)dtmp0;
3877	fmuld	%f58,%f54,%f54			! (Y0_1) y = dtmp7 * y;
3878	faddd	%f28,%f20,%f58			! (Y2_0) u = dtmp2 + u;
3879
3880	ldd	[%fp+tmp2_hi],%f60		! (Y2_0) *(int*)&dtmp0 = ind;
3881	fmuld	s_h,%f12,%f16			! (Y1_2) s = s_h * s;
3882	bl,pn	%icc,.xupdate14			! (Y2_2) if (expy < 0x3fb);
3883	fsubd	%f8,%f12,%f56			! (Y1_2) dtmp0 = (yd - s);
3884.xcont14:
3885	sll	%o5,3,%i1			! (Y2_0) ind *= 8;
3886	cmp	%l5,1086			! (Y2_2) if (expy >= 0x43e);
3887	fmuld	%f8,yr,%f8			! (Y1_2) dtmp1 = yd * yr;
3888	faddd	%f50,%f48,%f28			! (Y0_2) dtmp0 = (s + yd);
3889
3890	sra	%l1,8,%o2			! (Y2_1) ind >>= 8;
3891	lda	[py]0x82,%l5			! (Y0_3) hy = *py;
3892	fmuld	XKB5,%f18,%f20			! (Y2_1) dtmp0 = XKB5 * y;
3893	faddd	%f62,XKB2,%f12			! (Y1_1) dtmp5 = dtmp4 + XKB2;
3894
3895	add	%o2,1021,%l0			! (Y2_1) eflag = (ind + 1021);
3896	ldd	[%i1+EXPTBL],%f62		! (Y2_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
3897	bge,pn	%icc,.xupdate15			! (Y2_2) if (expy >= 0x43e);
3898	fpadd32	%f58,%f60,%f60			! (Y2_0) u = vis_fpadd32(u, dtmp0);
3899.xcont15:
3900	sub	%g0,%o2,%l3			! (Y2_1) gflag = (1022 - ind);
3901	ldd	[EXPTBL_P8+%l2],%f14		! (Y0_1) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3902	fmuld	%f56,s_h,%f58			! (Y1_2) dtmp0 *= s_h;
3903	fand	%f26,MHI32,%f44			! (Y2_2) s = vis_fand(yd, MHI32);
3904
3905	sra	%l0,31,%o0			! (Y2_1) eflag = eflag >> 31;
3906	add	%l3,1022,%i4			! (Y2_1) gflag = (1022 - ind);
3907	fmuld	%f22,%f54,%f56			! (Y0_1) dtmp1 = u * y;
3908	fcmped	%fcc0,%f16,HTHRESH		! (Y1_2) if (s > HTHRESH);
3909
3910	sra	%i4,31,%o5			! (Y2_1) gflag = gflag >> 31;
3911	and	%o0,54,%i2			! (Y2_1) itmp0 = 54 & eflag;
3912	fmuld	%f60,%f62,%f6			! (Y2_0) dtmp1 = u * dtmp1;
3913	fdtoi	%f28,%f3			! (Y0_2) u = (double)(int)dtmp0;
3914
3915	add	%o2,%i2,%i1			! (Y2_1) ind = ind + itmp0;
3916	and	%o5,52,%l2			! (Y2_1) itmp1 = 52 & gflag;
3917	st	%f3,[%fp+tmp3]			! (Y0_2) ind = (int)dtmp0;
3918	faddd	%f20,XKB4,%f60			! (Y2_1) dtmp1 = dtmp0 + XKB4;
3919
3920	sub	%i1,%l2,%o3			! (Y2_1) ind = ind - itmp1;
3921	sub	%o0,%o5,%o5			! (Y2_1) ind = eflag - gflag;
3922	st	%f6,[pz]			! (Y2_0) write into memory
3923	faddd	%f58,%f8,%f10			! (Y1_2) yd = dtmp0 + dtmp1;
3924
3925	sll	%o3,20,%l3			! (Y2_1) ind <<= 20;
3926	lda	[py]0x82,%f28			! (Y0_3) yd = *py;
3927	fmovdg	%fcc0,HTHRESH,%f16		! (Y1_2) s = HTHRESH;
3928
3929	lda	[py+4]%asi,%f29			! (Y0_3) yd = *py;
3930	fitod	%f3,%f58			! (Y0_2) u = (double)(int)dtmp0;
3931
3932	fmuld	%f60,%f18,%f60			! (Y2_1) dtmp2 = dtmp1 * y;
3933	st	%l3,[%fp+tmp2_hi]		! (Y2_1) *(int*)&dtmp0 = ind;
3934	faddd	%f14,%f56,%f20			! (Y0_1) dtmp2 = dtmp0 + dtmp1;
3935
3936	fmuld	%f12,%f52,%f56			! (Y1_1) dtmp6 = dtmp5 * y;
3937	st	%f7,[pz+4]			! (Y2_0) write into memory
3938	fmovdg	%fcc0,DZERO,%f10		! (Y1_2) yd = DZERO;
3939
3940	sra	%l5,20,%l5			! (Y0_3) expy = hy >> 20;
3941	add	pz,stridez,pz			! z += stridez;
3942	fcmped	%fcc1,%f16,LTHRESH		! (Y1_2) if (s < LTHRESH);
3943
3944	and	%l5,0x7ff,%l5			! (Y0_3) expy &= 0x7ff;
3945	fsubd	%f50,%f58,%f54			! (Y0_2) y = s - u;
3946
3947	cmp	%l5,959				! (Y0_3) if (expy < 0x3fb);
3948	faddd	%f60,XKB3,%f60			! (Y2_1) dtmp3 = dtmp2 + XKB3;
3949
3950	and	%o1,255,%o1			! (Y1_1) i = ind & 0xff;
3951	bl,pn	%icc,.xupdate16			! (Y0_3) if (expy < 0x3fb);
3952	faddd	%f56,XKB1,%f8			! (Y1_1) dtmp7 = dtmp6 + XKB1;
3953.xcont16:
3954	sll	%o1,4,%l0			! (Y1_1) i = i << 4;
3955	fmovdl	%fcc1,DZERO,%f10		! (Y1_2) yd = DZERO;
3956
3957	subcc	counter,3,counter		! update cycle counter
3958	fmovdl	%fcc1,LTHRESH,%f16		! (Y1_2) s = LTHRESH;
3959
3960	ldd	[EXPTBL+%l0],%f56		! (Y1_1) u = *(double*)((char*)__mt_constexp2 + i);
3961	fmuld	%f60,%f18,%f58			! (Y2_1) dtmp4 = dtmp3 * y;
3962	faddd	%f54,%f48,%f54			! (Y0_2) y = y + yd;
3963
3964	fmuld	%f8,%f52,%f60			! (Y1_1) y = dtmp7 * y;
3965	ld	[%fp+tmp3],%o2			! (Y0_2) ind = (int)dtmp0;
3966	bpos,pt	%icc,.xmain_loop
3967	faddd	%f20,%f22,%f12			! (Y0_1) u = dtmp2 + u;
3968
3969.xtail:
3970	addcc	counter,2,counter
3971	ldd	[%fp+tmp0_hi],%f52		! (Y0_0) *(int*)&dtmp0 = ind;
3972
3973	add	%o4,513,%o4			! (Y0_0) ind += 513;
3974	bneg,pn	%icc,.xend_loop
3975	nop
3976
3977	sll	%o4,3,%l2			! (Y0_0) ind *= 8;
3978
3979	subcc	counter,1,counter
3980	ldd	[%l2+EXPTBL],%f62		! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
3981	fpadd32	%f12,%f52,%f58			! (Y0_0) u = vis_fpadd32(u, dtmp0);
3982
3983	ldd	[EXPTBL_P8+%l0],%f8		! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3984
3985	fmuld	%f56,%f60,%f26			! (Y1_0) dtmp1 = u * y;
3986
3987	fmuld	%f58,%f62,%f6			! (Y0_0) dtmp1 = u * dtmp1;
3988
3989	st	%f6,[pz]			! (Y0_0) write into memory
3990	st	%f7,[pz+4]			! (Y0_0) write into memory
3991	bneg,pn	%icc,.xend_loop
3992	add	pz,stridez,pz			! z += stridez;
3993
3994	faddd	%f8,%f26,%f26			! (Y1_0) dtmp2 = dtmp0 + dtmp1;
3995
3996	add	%o7,513,%o7			! (Y1_0) ind += 513;
3997	faddd	%f26,%f56,%f58			! (Y1_0) u = dtmp2 + u;
3998
3999	ldd	[%fp+tmp1_hi],%f60		! (Y1_0) *(int*)&dtmp0 = ind;
4000
4001	sll	%o7,3,%l3			! (Y1_0) ind *= 8;
4002
4003	ldd	[%l3+EXPTBL],%f48		! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
4004	fpadd32	%f58,%f60,%f60			! (Y1_0) u = vis_fpadd32(u, dtmp0);
4005
4006	fmuld	%f60,%f48,%f18			! (Y1_0) dtmp1 = u * dtmp1;
4007
4008	st	%f18,[pz]			! (Y1_0) write into memory
4009	st	%f19,[pz+4]			! (Y1_0) write into memory
4010	add	pz,stridez,pz			! z += stridez;
4011
4012.xend_loop:
4013	ba	.xbegin
4014	nop
4015
4016	.align	16
4017.xupdate0:
4018	cmp	counter,0
4019	sub	py,stridey,%i2
4020	ble,pt	%icc,.xcont0
4021	fmovd	DZERO,%f10
4022
4023	stx	%i2,[%fp+tmp_py]
4024
4025	st	counter,[%fp+tmp_counter]
4026	ba	.xcont0
4027	or	%g0,0,counter
4028
4029	.align	16
4030.xupdate1:
4031	cmp	counter,0
4032	sub	py,stridey,%i2
4033	ble,pt	%icc,.xcont1
4034	fmovd	DZERO,%f10
4035
4036	stx	%i2,[%fp+tmp_py]
4037
4038	st	counter,[%fp+tmp_counter]
4039	ba	.xcont1
4040	or	%g0,0,counter
4041
4042	.align	16
4043.xupdate2:
4044	cmp	counter,1
4045	sub	py,stridey,%l3
4046	ble,pt	%icc,.xcont2
4047	fmovd	DZERO,%f14
4048
4049	stx	%l3,[%fp+tmp_py]
4050	sub	counter,1,counter
4051
4052	st	counter,[%fp+tmp_counter]
4053	ba	.xcont2
4054	or	%g0,1,counter
4055
4056	.align	16
4057.xupdate3:
4058	cmp	counter,1
4059	sub	py,stridey,%l3
4060	ble,pt	%icc,.xcont3
4061	fmovd	DZERO,%f14
4062
4063	stx	%l3,[%fp+tmp_py]
4064	sub	counter,1,counter
4065
4066	st	counter,[%fp+tmp_counter]
4067	ba	.xcont3
4068	or	%g0,1,counter
4069
4070	.align	16
4071.xupdate4:
4072	cmp	counter,2
4073	ble,pt	%icc,.xcont4
4074	fmovd	DZERO,%f18
4075
4076	stx	py,[%fp+tmp_py]
4077	sub	counter,2,counter
4078
4079	st	counter,[%fp+tmp_counter]
4080	ba	.xcont4
4081	or	%g0,2,counter
4082
4083	.align	16
4084.xupdate5:
4085	cmp	counter,2
4086	ble,pt	%icc,.xcont5
4087	fmovd	DZERO,%f18
4088
4089	stx	py,[%fp+tmp_py]
4090	sub	counter,2,counter
4091
4092	st	counter,[%fp+tmp_counter]
4093	ba	.xcont5
4094	or	%g0,2,counter
4095
4096	.align	16
4097.xupdate6:
4098	cmp	counter,3
4099	sub	py,stridey,%i2
4100	ble,pt	%icc,.xcont6
4101	fmovd	DZERO,%f20
4102
4103	stx	%i2,[%fp+tmp_py]
4104	sub	counter,3,counter
4105
4106	st	counter,[%fp+tmp_counter]
4107	ba	.xcont6
4108	or	%g0,3,counter
4109
4110	.align	16
4111.xupdate7:
4112	cmp	counter,3
4113	sub	py,stridey,%i2
4114	ble,pt	%icc,.xcont7
4115	fmovd	DZERO,%f20
4116
4117	stx	%i2,[%fp+tmp_py]
4118	sub	counter,3,counter
4119
4120	st	counter,[%fp+tmp_counter]
4121	ba	.xcont7
4122	or	%g0,3,counter
4123
4124	.align	16
4125.xupdate8:
4126	cmp	counter,4
4127	sub	py,stridey,%l3
4128	ble,pt	%icc,.xcont8
4129	fmovd	DZERO,%f26
4130
4131	stx	%l3,[%fp+tmp_py]
4132	sub	counter,4,counter
4133
4134	st	counter,[%fp+tmp_counter]
4135	ba	.xcont8
4136	or	%g0,4,counter
4137
4138	.align	16
4139.xupdate9:
4140	cmp	counter,4
4141	sub	py,stridey,%l3
4142	ble,pt	%icc,.xcont9
4143	fmovd	DZERO,%f26
4144
4145	stx	%l3,[%fp+tmp_py]
4146	sub	counter,4,counter
4147
4148	st	counter,[%fp+tmp_counter]
4149	ba	.xcont9
4150	or	%g0,4,counter
4151
4152	.align	16
4153.xupdate10:
4154	cmp	counter,5
4155	ble,pt	%icc,.xcont10
4156	fmovd	DZERO,%f28
4157
4158	stx	py,[%fp+tmp_py]
4159	sub	counter,5,counter
4160
4161	st	counter,[%fp+tmp_counter]
4162	ba	.xcont10
4163	or	%g0,5,counter
4164
4165	.align	16
4166.xupdate11:
4167	cmp	counter,3
4168	ble,pt	%icc,.xcont11
4169	fmovd	DZERO,%f28
4170
4171	stx	py,[%fp+tmp_py]
4172	sub	counter,3,counter
4173
4174	st	counter,[%fp+tmp_counter]
4175	ba	.xcont11
4176	or	%g0,3,counter
4177
4178	.align	16
4179.xupdate12:
4180	cmp	counter,4
4181	sub	py,stridey,%i2
4182	ble,pt	%icc,.xcont12
4183	fmovd	DZERO,%f8
4184
4185	stx	%i2,[%fp+tmp_py]
4186	sub	counter,4,counter
4187
4188	st	counter,[%fp+tmp_counter]
4189	ba	.xcont12
4190	or	%g0,4,counter
4191
4192	.align	16
4193.xupdate13:
4194	cmp	counter,4
4195	sub	py,stridey,%i2
4196	ble,pt	%icc,.xcont13
4197	fmovd	DZERO,%f8
4198
4199	stx	%i2,[%fp+tmp_py]
4200	sub	counter,4,counter
4201
4202	st	counter,[%fp+tmp_counter]
4203	ba	.xcont13
4204	or	%g0,4,counter
4205
4206	.align	16
4207.xupdate14:
4208	cmp	counter,5
4209	sub	py,stridey,%l3
4210	ble,pt	%icc,.xcont14
4211	fmovd	DZERO,%f26
4212
4213	stx	%l3,[%fp+tmp_py]
4214	sub	counter,5,counter
4215
4216	st	counter,[%fp+tmp_counter]
4217	ba	.xcont14
4218	or	%g0,5,counter
4219
4220	.align	16
4221.xupdate15:
4222	cmp	counter,5
4223	sub	py,stridey,%l3
4224	ble,pt	%icc,.xcont15
4225	fmovd	DZERO,%f26
4226
4227	stx	%l3,[%fp+tmp_py]
4228	sub	counter,5,counter
4229
4230	st	counter,[%fp+tmp_counter]
4231	ba	.xcont15
4232	or	%g0,5,counter
4233
4234	.align	16
4235.xupdate16:
4236	cmp	counter,6
4237	ble,pt	%icc,.xcont16
4238	fmovd	DZERO,%f28
4239
4240	stx	py,[%fp+tmp_py]
4241	sub	counter,6,counter
4242
4243	st	counter,[%fp+tmp_counter]
4244	ba	.xcont16
4245	or	%g0,6,counter
4246
4247	.align	16
4248.xspec0:
4249	add	EXPTBL,4095,%l0
4250	add	%l0,1,%l0
4251	ldd	[%l0+8],%f20			! ld  DONE
4252	st	%f20,[pz]			! *pz = DONE;
4253	ba	.xupdate_point
4254	st	%f21,[pz+4]			! *pz = DONE;
4255
4256	.align	16
4257.xspec1:
4258	ldx	[%fp+tmp_px],%l1
4259	sethi	%hi(0x7ffffc00),MASK_0x7fffffff
4260
4261	sethi	%hi(0x7ff00000),%o3
4262	add	MASK_0x7fffffff,0x3ff,MASK_0x7fffffff
4263
4264	and	%l2,MASK_0x7fffffff,%o2		! if (hy &= 0x7fffffff);
4265	sethi	%hi(0x3ff00000),MASK_0x3ff00000
4266
4267	cmp	%o2,%o3				! if (hy != 0x7ff00000);
4268	bne,pn	%icc,2f				! if (hy != 0x7ff00000);
4269	nop
4270
4271	ld	[py+4],%l3			! ld ly;
4272	cmp	%l3,0				! if (ly != 0);
4273	bne,a,pt	%icc,3f			! if (ly != 0);
4274	nop
4275
4276	ld	[%l1],%i1			! ld hx;
4277	cmp	%i1,MASK_0x3ff00000		! if (hx != 0x3ff00000);
4278	bne,a,pn	%icc,1f			! if (hx != 0x3ff00000);
4279	srl	%l2,31,%o7			! sy = hy >> 31;
4280
4281	ld	[%l1+4],%i2			! ld lx;
4282	cmp	%i2,0				! if (lx != 0);
4283	bne,pn	%icc,1f				! if (lx != 0);
4284	srl	%l2,31,%o7			! sy = hy >> 31;
4285
4286	fzero	%f28
4287	fmuld	%f18,%f28,%f28			! *pz = *py * 0.0;
4288	st	%f28,[pz]
4289	ba	.xupdate_point
4290	st	%f29,[pz+4]
42911:
4292	sub	%i1,MASK_0x3ff00000,%o0		! hx - 0x3ff00000;
4293	srlx	%o0,63,%o0			! (hx - 0x3ff00000) >> 63;
4294
4295	cmp	%o0,%o7				! if ((hx < 0x3ff00000) == sy);
4296	be,pn	%icc,1f				! if ((hx < 0x3ff00000) == sy);
4297
4298	st	DZERO_HI,[pz]
4299	ba	.xupdate_point
4300	st	DZERO_LO,[pz+4]
43011:
4302	st	%o2,[pz]			! ((int*)pz)[0] = hy;
4303	ba	.xupdate_point
4304	st	%l3,[pz+4]			! ((int*)pz)[1] = ly;
43052:
4306	bl,a,pn	%icc,1f				! if (hy < 0x7ff00000);
4307	ld	[%l1+4],%i2			! ld lx;
43083:
4309	ld	[%l1],%f20			! x = *px;
4310	ld	[%l1+4],%f21			! x = *px;
4311	fmuld	%f20,%f18,%f28			! *pz = *px * *py;
4312	st	%f28,[pz]
4313	ba	.xupdate_point
4314	st	%f29,[pz+4]
43151:
4316	ld	[%l1],%i1			! ld hx;
4317	cmp	%i2,0				! if (lx != 0);
4318	bne,pn	%icc,1f				! if (lx != 0);
4319	nop
4320
4321	cmp	%i1,MASK_0x3ff00000		! if (hx != 0x3ff00000);
4322	add	EXPTBL,4095,%l0
4323	bne,pn	%icc,1f				! if (hx != 0x3ff00000);
4324	add	%l0,1,%l0
4325
4326	ldd	[%l0+8],%f20			! ld  DONE
4327	st	%f20,[pz]			! *pz = DONE;
4328	ba	.xupdate_point
4329	st	%f21,[pz+4]			! *pz = DONE;
43301:
4331	srl	%l2,31,%o7			! sy = hy >> 31;
4332	sub	%i1,MASK_0x3ff00000,%o0		! hx - 0x3ff00000;
4333
4334	srlx	%o0,63,%o0			! (hx - 0x3ff00000) >> 63;
4335
4336	cmp	%o0,%o7				! if (hx < 0x3ff00000) == sy);
4337	be,a,pn	%icc,1f				! if (hx < 0x3ff00000) == sy);
4338	ldd	[EXPTBL-ind_HUGE],%f20		! y0 = _HUGE;
4339
4340	ldd	[EXPTBL-ind_TINY],%f20		! y0 = _TINY;
43411:
4342	fmuld	%f20,%f20,%f20			! *pz = y0 * y0
4343	st	%f20,[pz]
4344	ba	.xupdate_point
4345	st	%f21,[pz+4]
4346
4347.xupdate_point:
4348	add	py,stridey,py
4349	ba	.xbegin1
4350	add	pz,stridez,pz
4351
4352	SET_SIZE(__vpow)
4353
4354