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
1514 1:
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;
2078 1:
2079 cmp %i4,%g0 ! if ((yisint & 1) == 0);
2080 be 2f ! if ((yisint & 1) == 0);
2081 nop
2082
2083 fnegd %f30,%f30 ! y0 = -y0;
2084 2:
2085 st %f30,[pz]
2086 ba .update_point
2087 st %f31,[pz+4]
2088 3:
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;
2109 1:
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]
2942 1:
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);
2957 2:
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);
2964 3:
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]
2975 4:
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;
2983 1:
2984 fdivd DZERO,DZERO,%f16 ! *pz = DZERO / DZERO;
2985 st %f16,[pz]
2986 ba .update_point
2987 st %f17,[pz+4]
2988 5:
2989 fmuld %f16,%f16,%f16 ! *pz = y0 * y0;
2990 6:
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);
3015 1:
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);
3029 3:
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);
3041 1:
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);
3049 2:
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]
3067 1:
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;
3078 1:
3079 ba .update_point
3080 st %i4,[pz+4] ! ((int*)pz)[0] = ly;
3081 3:
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);
3117 1:
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);
3134 2:
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;
3142 1:
3143 st %l3,[pz] ! ((int*)pz)[0] = hx;
3144 ba .update_point
3145 st %i2,[pz+4] ! ((int*)pz)[1] = lx;
3146 4:
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);
3152 5:
3153 bne,pn %icc,7f ! if (hx != 0x7ff00000);
3154 nop
3155
3156 st %l3,[pz] ! ((int*)pz)[0] = hx;
3157 6:
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]
3168 7:
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;
3176 1:
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;
3228 1:
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
3686 1:
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]
4291 1:
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]
4301 1:
4302 st %o2,[pz] ! ((int*)pz)[0] = hy;
4303 ba .xupdate_point
4304 st %l3,[pz+4] ! ((int*)pz)[1] = ly;
4305 2:
4306 bl,a,pn %icc,1f ! if (hy < 0x7ff00000);
4307 ld [%l1+4],%i2 ! ld lx;
4308 3:
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]
4315 1:
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;
4330 1:
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;
4341 1:
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