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 "__vsqrt.S"
30
31 #include "libm.h"
32
33 RO_DATA
34 .align 64
35
36 .CONST_TBL:
37 .word 0x3fe00000, 0x00000000 ! A1 = 5.00000000000000001789e-01
38 .word 0xbfbfffff, 0xfffd0bfd ! A2 = -1.24999999997314110667e-01
39 .word 0x3fafffff, 0xfffb5bfb ! A3 = 6.24999999978896565817e-02
40 .word 0xbfa4000f, 0xc00b4fc8 ! A4 = -3.90629693917215481458e-02
41 .word 0x3f9c0018, 0xc012da4e ! A5 = 2.73441188080261677282e-02
42 .word 0x000fffff, 0xffffffff ! DC0 = 0x000fffffffffffff
43 .word 0x00001000, 0x00000000 ! DC2 = 0x0000100000000000
44 .word 0x7fffe000, 0x00000000 ! DC3 = 0x7fffe00000000000
45
46 ! i = [0,128]
47 ! TBL[8*i+0] = 1.0 / (*(double*)&(0x3fe0000000000000LL + (i << 45)));
48 ! TBL[8*i+1] = (double)(2.0 * sqrtl(*(double*)&(0x3fe0000000000000LL + (i << 45))));
49 ! TBL[8*i+2] = (double)(2.0 * sqrtl(*(double*)&(0x3fe0000000000000LL + (i << 45))) - TBL[8*i+1]);
50 ! TBL[8*i+3] = 0
51 ! TBL[8*i+4] = 1.0 / (*(double*)&(0x3fe0000000000000LL + (i << 45)));
52 ! TBL[8*i+5] = (double)(2.0 * sqrtl(2.0) * sqrtl(*(double*)&(0x3fe0000000000000LL + (i << 45))));
53 ! TBL[8*i+6] = (double)(2.0 * sqrtl(2.0) * sqrtl(*(double*)&(0x3fe0000000000000LL + (i << 45))) - TBL[8*i+5]);
54 ! TBL[8*i+7] = 0
55
56 .word 0x40000000, 0x00000000, 0x3ff6a09e, 0x667f3bcd
57 .word 0xbc9bdd34, 0x13b26456, 0x00000000, 0x00000000
58 .word 0x40000000, 0x00000000, 0x40000000, 0x00000000
59 .word 0xb8f00000, 0x00000000, 0x00000000, 0x00000000
60 .word 0x3fffc07f, 0x01fc07f0, 0x3ff6b733, 0xbfd8c648
61 .word 0x3c53b629, 0x05629048, 0x00000000, 0x00000000
62 .word 0x3fffc07f, 0x01fc07f0, 0x40000ff8, 0x07f60deb
63 .word 0x3c90655c, 0x648a53f1, 0x00000000, 0x00000000
64 .word 0x3fff81f8, 0x1f81f820, 0x3ff6cdb2, 0xbbb212eb
65 .word 0x3c960332, 0xcdbaba2d, 0x00000000, 0x00000000
66 .word 0x3fff81f8, 0x1f81f820, 0x40001fe0, 0x3f61bad0
67 .word 0x3ca2c41a, 0x15cbfaf2, 0x00000000, 0x00000000
68 .word 0x3fff4465, 0x9e4a4271, 0x3ff6e41b, 0x9bfb3b75
69 .word 0xbc925d8c, 0xfd6d5c87, 0x00000000, 0x00000000
70 .word 0x3fff4465, 0x9e4a4271, 0x40002fb8, 0xd4e30f48
71 .word 0xbca64203, 0xab1ba910, 0x00000000, 0x00000000
72 .word 0x3fff07c1, 0xf07c1f08, 0x3ff6fa6e, 0xa162d0f0
73 .word 0x3c691a24, 0x3d6297e9, 0x00000000, 0x00000000
74 .word 0x3fff07c1, 0xf07c1f08, 0x40003f81, 0xf636b80c
75 .word 0xbca0efc8, 0xba812a8c, 0x00000000, 0x00000000
76 .word 0x3ffecc07, 0xb301ecc0, 0x3ff710ac, 0x0b5e5e32
77 .word 0xbc991218, 0xb8d2850d, 0x00000000, 0x00000000
78 .word 0x3ffecc07, 0xb301ecc0, 0x40004f3b, 0xd03c0a64
79 .word 0x3c9ee2cf, 0x2d8ae22b, 0x00000000, 0x00000000
80 .word 0x3ffe9131, 0xabf0b767, 0x3ff726d4, 0x1832a0be
81 .word 0xbc2d9b1a, 0xa8ecb058, 0x00000000, 0x00000000
82 .word 0x3ffe9131, 0xabf0b767, 0x40005ee6, 0x8efad48b
83 .word 0xbc9c35f4, 0x8f4b89f7, 0x00000000, 0x00000000
84 .word 0x3ffe573a, 0xc901e574, 0x3ff73ce7, 0x04fb7b23
85 .word 0x3c91470b, 0x816b17a6, 0x00000000, 0x00000000
86 .word 0x3ffe573a, 0xc901e574, 0x40006e82, 0x5da8fc2b
87 .word 0x3c9a315a, 0x8bd8a03b, 0x00000000, 0x00000000
88 .word 0x3ffe1e1e, 0x1e1e1e1e, 0x3ff752e5, 0x0db3a3a2
89 .word 0xbc939331, 0x3eea4381, 0x00000000, 0x00000000
90 .word 0x3ffe1e1e, 0x1e1e1e1e, 0x40007e0f, 0x66afed07
91 .word 0xbc74a6e1, 0xdcd59eaf, 0x00000000, 0x00000000
92 .word 0x3ffde5d6, 0xe3f8868a, 0x3ff768ce, 0x6d3c11e0
93 .word 0xbc9478b8, 0xab33074d, 0x00000000, 0x00000000
94 .word 0x3ffde5d6, 0xe3f8868a, 0x40008d8d, 0xd3b1d9aa
95 .word 0x3c81d533, 0x85fe2b96, 0x00000000, 0x00000000
96 .word 0x3ffdae60, 0x76b981db, 0x3ff77ea3, 0x5d632e43
97 .word 0x3c92f714, 0x9a22fa4f, 0x00000000, 0x00000000
98 .word 0x3ffdae60, 0x76b981db, 0x40009cfd, 0xcd8ed009
99 .word 0xbc4862a9, 0xbcf7f372, 0x00000000, 0x00000000
100 .word 0x3ffd77b6, 0x54b82c34, 0x3ff79464, 0x16ebc56c
101 .word 0x3c9a7cd5, 0x224c7375, 0x00000000, 0x00000000
102 .word 0x3ffd77b6, 0x54b82c34, 0x4000ac5f, 0x7c69a3c8
103 .word 0x3ca94dff, 0x7bfa2757, 0x00000000, 0x00000000
104 .word 0x3ffd41d4, 0x1d41d41d, 0x3ff7aa10, 0xd193c22d
105 .word 0xbc790ed9, 0x403afe85, 0x00000000, 0x00000000
106 .word 0x3ffd41d4, 0x1d41d41d, 0x4000bbb3, 0x07acafdb
107 .word 0xbc852a97, 0x686f9d2e, 0x00000000, 0x00000000
108 .word 0x3ffd0cb5, 0x8f6ec074, 0x3ff7bfa9, 0xc41ab040
109 .word 0x3c8d6bc3, 0x02ae758f, 0x00000000, 0x00000000
110 .word 0x3ffd0cb5, 0x8f6ec074, 0x4000caf8, 0x960e710d
111 .word 0x3c9caa6b, 0xe2366171, 0x00000000, 0x00000000
112 .word 0x3ffcd856, 0x89039b0b, 0x3ff7d52f, 0x244809e9
113 .word 0x3c9081f6, 0xf3b99d5f, 0x00000000, 0x00000000
114 .word 0x3ffcd856, 0x89039b0b, 0x4000da30, 0x4d95fb06
115 .word 0xbc9e1269, 0x76855586, 0x00000000, 0x00000000
116 .word 0x3ffca4b3, 0x055ee191, 0x3ff7eaa1, 0x26f15284
117 .word 0xbc846ce4, 0x68c1882b, 0x00000000, 0x00000000
118 .word 0x3ffca4b3, 0x055ee191, 0x4000e95a, 0x539f492c
119 .word 0xbc80c73f, 0xc38a2184, 0x00000000, 0x00000000
120 .word 0x3ffc71c7, 0x1c71c71c, 0x3ff80000, 0x00000000
121 .word 0x00000000, 0x00000000, 0x00000000, 0x00000000
122 .word 0x3ffc71c7, 0x1c71c71c, 0x4000f876, 0xccdf6cd9
123 .word 0x3cab1a18, 0xf13a34c0, 0x00000000, 0x00000000
124 .word 0x3ffc3f8f, 0x01c3f8f0, 0x3ff8154b, 0xe2773526
125 .word 0xbc857147, 0xe067d0ee, 0x00000000, 0x00000000
126 .word 0x3ffc3f8f, 0x01c3f8f0, 0x40010785, 0xdd689a29
127 .word 0xbcaaabbe, 0x9e4d810a, 0x00000000, 0x00000000
128 .word 0x3ffc0e07, 0x0381c0e0, 0x3ff82a85, 0x00794e6c
129 .word 0xbc82edaa, 0x75e6ac5f, 0x00000000, 0x00000000
130 .word 0x3ffc0e07, 0x0381c0e0, 0x40011687, 0xa8ae14a3
131 .word 0x3cac9b43, 0xbcf06106, 0x00000000, 0x00000000
132 .word 0x3ffbdd2b, 0x899406f7, 0x3ff83fab, 0x8b4d4315
133 .word 0x3c829e06, 0x2d3e134d, 0x00000000, 0x00000000
134 .word 0x3ffbdd2b, 0x899406f7, 0x4001257c, 0x5187fd09
135 .word 0xbca4a750, 0xa83950a4, 0x00000000, 0x00000000
136 .word 0x3ffbacf9, 0x14c1bad0, 0x3ff854bf, 0xb363dc39
137 .word 0x3c99399f, 0xca38787e, 0x00000000, 0x00000000
138 .word 0x3ffbacf9, 0x14c1bad0, 0x40013463, 0xfa37014e
139 .word 0x3c7b295b, 0xaa698cd3, 0x00000000, 0x00000000
140 .word 0x3ffb7d6c, 0x3dda338b, 0x3ff869c1, 0xa85cc346
141 .word 0x3c9fcc99, 0xde11b1d1, 0x00000000, 0x00000000
142 .word 0x3ffb7d6c, 0x3dda338b, 0x4001433e, 0xc467effb
143 .word 0x3c92c031, 0x3b7278c8, 0x00000000, 0x00000000
144 .word 0x3ffb4e81, 0xb4e81b4f, 0x3ff87eb1, 0x990b697a
145 .word 0x3c7c43e9, 0xf593ea0f, 0x00000000, 0x00000000
146 .word 0x3ffb4e81, 0xb4e81b4f, 0x4001520c, 0xd1372feb
147 .word 0xbcadec22, 0x5d8e66d2, 0x00000000, 0x00000000
148 .word 0x3ffb2036, 0x406c80d9, 0x3ff8938f, 0xb37bc9c1
149 .word 0xbc7c115f, 0x9f5c8d6f, 0x00000000, 0x00000000
150 .word 0x3ffb2036, 0x406c80d9, 0x400160ce, 0x41341d74
151 .word 0x3c967036, 0x863a1bb2, 0x00000000, 0x00000000
152 .word 0x3ffaf286, 0xbca1af28, 0x3ff8a85c, 0x24f70659
153 .word 0x3c9f6e07, 0x6b588a50, 0x00000000, 0x00000000
154 .word 0x3ffaf286, 0xbca1af28, 0x40016f83, 0x34644df9
155 .word 0xbcae8679, 0x80a1c48e, 0x00000000, 0x00000000
156 .word 0x3ffac570, 0x1ac5701b, 0x3ff8bd17, 0x1a07e38a
157 .word 0x3c9c20b5, 0xa697f23f, 0x00000000, 0x00000000
158 .word 0x3ffac570, 0x1ac5701b, 0x40017e2b, 0xca46bab9
159 .word 0x3ca1519b, 0x10d04d5f, 0x00000000, 0x00000000
160 .word 0x3ffa98ef, 0x606a63be, 0x3ff8d1c0, 0xbe7f20ac
161 .word 0xbc8bdb8a, 0x6df021f3, 0x00000000, 0x00000000
162 .word 0x3ffa98ef, 0x606a63be, 0x40018cc8, 0x21d6d3e3
163 .word 0xbca30af1, 0xd725cc5b, 0x00000000, 0x00000000
164 .word 0x3ffa6d01, 0xa6d01a6d, 0x3ff8e659, 0x3d77b0b8
165 .word 0xbc7d99d7, 0x64769954, 0x00000000, 0x00000000
166 .word 0x3ffa6d01, 0xa6d01a6d, 0x40019b58, 0x598f7c9f
167 .word 0xbc72e0d8, 0x51c0e011, 0x00000000, 0x00000000
168 .word 0x3ffa41a4, 0x1a41a41a, 0x3ff8fae0, 0xc15ad38a
169 .word 0xbc7db7ad, 0xb6817f6d, 0x00000000, 0x00000000
170 .word 0x3ffa41a4, 0x1a41a41a, 0x4001a9dc, 0x8f6df104
171 .word 0xbcafc519, 0xc18dc1d5, 0x00000000, 0x00000000
172 .word 0x3ffa16d3, 0xf97a4b02, 0x3ff90f57, 0x73e410e4
173 .word 0x3c6fb605, 0xcee75482, 0x00000000, 0x00000000
174 .word 0x3ffa16d3, 0xf97a4b02, 0x4001b854, 0xe0f496a0
175 .word 0x3ca27006, 0x899b7c3a, 0x00000000, 0x00000000
176 .word 0x3ff9ec8e, 0x951033d9, 0x3ff923bd, 0x7e25164d
177 .word 0xbc9278d1, 0x901d3b40, 0x00000000, 0x00000000
178 .word 0x3ff9ec8e, 0x951033d9, 0x4001c6c1, 0x6b2db870
179 .word 0x3c887e1d, 0x8335fb28, 0x00000000, 0x00000000
180 .word 0x3ff9c2d1, 0x4ee4a102, 0x3ff93813, 0x088978c5
181 .word 0xbc54312c, 0x627e5c52, 0x00000000, 0x00000000
182 .word 0x3ff9c2d1, 0x4ee4a102, 0x4001d522, 0x4aae2ee1
183 .word 0x3ca91222, 0xf6aebdc9, 0x00000000, 0x00000000
184 .word 0x3ff99999, 0x9999999a, 0x3ff94c58, 0x3ada5b53
185 .word 0xbc9b7ed7, 0x50df3cca, 0x00000000, 0x00000000
186 .word 0x3ff99999, 0x9999999a, 0x4001e377, 0x9b97f4a8
187 .word 0xbc9f5063, 0x19fcfd19, 0x00000000, 0x00000000
188 .word 0x3ff970e4, 0xf80cb872, 0x3ff9608d, 0x3c41fb4b
189 .word 0x3c73df32, 0xeaa86b83, 0x00000000, 0x00000000
190 .word 0x3ff970e4, 0xf80cb872, 0x4001f1c1, 0x799ca8ff
191 .word 0xbca28b52, 0xeb725e0a, 0x00000000, 0x00000000
192 .word 0x3ff948b0, 0xfcd6e9e0, 0x3ff974b2, 0x334f2346
193 .word 0x3c814e4a, 0xd3ae9e3f, 0x00000000, 0x00000000
194 .word 0x3ff948b0, 0xfcd6e9e0, 0x40020000, 0x00000000
195 .word 0xb9000000, 0x00000000, 0x00000000, 0x00000000
196 .word 0x3ff920fb, 0x49d0e229, 0x3ff988c7, 0x45f88592
197 .word 0x3c95af70, 0x1a56047b, 0x00000000, 0x00000000
198 .word 0x3ff920fb, 0x49d0e229, 0x40020e33, 0x499a21a9
199 .word 0xbc924ba2, 0x74fea9a1, 0x00000000, 0x00000000
200 .word 0x3ff8f9c1, 0x8f9c18fa, 0x3ff99ccc, 0x999fff00
201 .word 0x3c866234, 0x063b88ee, 0x00000000, 0x00000000
202 .word 0x3ff8f9c1, 0x8f9c18fa, 0x40021c5b, 0x70d9f824
203 .word 0xbca844f9, 0x9eee6fc3, 0x00000000, 0x00000000
204 .word 0x3ff8d301, 0x8d3018d3, 0x3ff9b0c2, 0x5315c2ce
205 .word 0xbc87f64a, 0x65cc6887, 0x00000000, 0x00000000
206 .word 0x3ff8d301, 0x8d3018d3, 0x40022a78, 0x8fc76de5
207 .word 0x3c931e32, 0xd4e07a48, 0x00000000, 0x00000000
208 .word 0x3ff8acb9, 0x0f6bf3aa, 0x3ff9c4a8, 0x969b7077
209 .word 0xbc96ca9e, 0x5cd4517a, 0x00000000, 0x00000000
210 .word 0x3ff8acb9, 0x0f6bf3aa, 0x4002388a, 0xc0059c28
211 .word 0xbc96072f, 0xbe0e5da3, 0x00000000, 0x00000000
212 .word 0x3ff886e5, 0xf0abb04a, 0x3ff9d87f, 0x87e71422
213 .word 0xbc85fdd8, 0xb11b7b1d, 0x00000000, 0x00000000
214 .word 0x3ff886e5, 0xf0abb04a, 0x40024692, 0x1ad4ea49
215 .word 0xbcaa6d9b, 0x268ef62d, 0x00000000, 0x00000000
216 .word 0x3ff86186, 0x18618618, 0x3ff9ec47, 0x4a261264
217 .word 0xbc8540c4, 0x89ba5074, 0x00000000, 0x00000000
218 .word 0x3ff86186, 0x18618618, 0x4002548e, 0xb9151e85
219 .word 0x3c999820, 0x0a774879, 0x00000000, 0x00000000
220 .word 0x3ff83c97, 0x7ab2bedd, 0x3ffa0000, 0x00000000
221 .word 0x00000000, 0x00000000, 0x00000000, 0x00000000
222 .word 0x3ff83c97, 0x7ab2bedd, 0x40026280, 0xb3476096
223 .word 0x3c9ab88b, 0x5ffe1cf5, 0x00000000, 0x00000000
224 .word 0x3ff81818, 0x18181818, 0x3ffa13a9, 0xcb996651
225 .word 0xbc9f9ab9, 0x0e4e85c3, 0x00000000, 0x00000000
226 .word 0x3ff81818, 0x18181818, 0x40027068, 0x21902e9a
227 .word 0x3c90ff4c, 0x20f541f6, 0x00000000, 0x00000000
228 .word 0x3ff7f405, 0xfd017f40, 0x3ffa2744, 0xce9674f5
229 .word 0xbc8b936c, 0x81e54daa, 0x00000000, 0x00000000
230 .word 0x3ff7f405, 0xfd017f40, 0x40027e45, 0x1bb944c3
231 .word 0x3c8e4a16, 0x42099ef0, 0x00000000, 0x00000000
232 .word 0x3ff7d05f, 0x417d05f4, 0x3ffa3ad1, 0x2a1da160
233 .word 0x3c951168, 0xf4be5984, 0x00000000, 0x00000000
234 .word 0x3ff7d05f, 0x417d05f4, 0x40028c17, 0xb9337834
235 .word 0xbc8af150, 0xa0e88972, 0x00000000, 0x00000000
236 .word 0x3ff7ad22, 0x08e0ecc3, 0x3ffa4e4e, 0xfeda34de
237 .word 0x3c6afbb4, 0xdbdadd0d, 0x00000000, 0x00000000
238 .word 0x3ff7ad22, 0x08e0ecc3, 0x400299e0, 0x11188575
239 .word 0xbc9a6169, 0x3fb250e5, 0x00000000, 0x00000000
240 .word 0x3ff78a4c, 0x8178a4c8, 0x3ffa61be, 0x6cfec997
241 .word 0xbc8c37ea, 0xb2bb5ca0, 0x00000000, 0x00000000
242 .word 0x3ff78a4c, 0x8178a4c8, 0x4002a79e, 0x3a2cd2e6
243 .word 0xbca5ddd4, 0x9cc9ad59, 0x00000000, 0x00000000
244 .word 0x3ff767dc, 0xe434a9b1, 0x3ffa751f, 0x9447b724
245 .word 0x3c82b909, 0x477e9ed1, 0x00000000, 0x00000000
246 .word 0x3ff767dc, 0xe434a9b1, 0x4002b552, 0x4ae1278e
247 .word 0xbca2f2a9, 0x8841b934, 0x00000000, 0x00000000
248 .word 0x3ff745d1, 0x745d1746, 0x3ffa8872, 0x93fd6f34
249 .word 0x3c768ef2, 0x4f198721, 0x00000000, 0x00000000
250 .word 0x3ff745d1, 0x745d1746, 0x4002c2fc, 0x595456a7
251 .word 0xbc996f60, 0xb0fc7e96, 0x00000000, 0x00000000
252 .word 0x3ff72428, 0x7f46debc, 0x3ffa9bb7, 0x8af6cabc
253 .word 0x3c8ba60d, 0xc999aba7, 0x00000000, 0x00000000
254 .word 0x3ff72428, 0x7f46debc, 0x4002d09c, 0x7b54e03e
255 .word 0x3c98c747, 0xfdeda6de, 0x00000000, 0x00000000
256 .word 0x3ff702e0, 0x5c0b8170, 0x3ffaaeee, 0x979b4838
257 .word 0xbc91f08a, 0xef9ef6c0, 0x00000000, 0x00000000
258 .word 0x3ff702e0, 0x5c0b8170, 0x4002de32, 0xc6628741
259 .word 0x3ca78746, 0xc499a4f7, 0x00000000, 0x00000000
260 .word 0x3ff6e1f7, 0x6b4337c7, 0x3ffac217, 0xd7e53b66
261 .word 0xbc64282a, 0xaa967e4f, 0x00000000, 0x00000000
262 .word 0x3ff6e1f7, 0x6b4337c7, 0x4002ebbf, 0x4fafdd4b
263 .word 0xbca78a73, 0xb72d5c41, 0x00000000, 0x00000000
264 .word 0x3ff6c16c, 0x16c16c17, 0x3ffad533, 0x6963eefc
265 .word 0xbc977c4a, 0x537dbdd2, 0x00000000, 0x00000000
266 .word 0x3ff6c16c, 0x16c16c17, 0x4002f942, 0x2c23c47e
267 .word 0xbc827c85, 0xf29db65d, 0x00000000, 0x00000000
268 .word 0x3ff6a13c, 0xd1537290, 0x3ffae841, 0x693db8b4
269 .word 0x3c90f773, 0xcd7a0713, 0x00000000, 0x00000000
270 .word 0x3ff6a13c, 0xd1537290, 0x400306bb, 0x705ae7c3
271 .word 0x3caf4933, 0x907af47a, 0x00000000, 0x00000000
272 .word 0x3ff68168, 0x16816817, 0x3ffafb41, 0xf432002e
273 .word 0xbc7ac94a, 0xfdfe8c5b, 0x00000000, 0x00000000
274 .word 0x3ff68168, 0x16816817, 0x4003142b, 0x30a929ab
275 .word 0x3c98dc01, 0x081a6c5c, 0x00000000, 0x00000000
276 .word 0x3ff661ec, 0x6a5122f9, 0x3ffb0e35, 0x269b38f5
277 .word 0xbc4f69a8, 0x05c3271a, 0x00000000, 0x00000000
278 .word 0x3ff661ec, 0x6a5122f9, 0x40032191, 0x811b0a41
279 .word 0xbc9ce3f0, 0xb38c0bf7, 0x00000000, 0x00000000
280 .word 0x3ff642c8, 0x590b2164, 0x3ffb211b, 0x1c70d023
281 .word 0x3c2e4c5e, 0x66eae2f0, 0x00000000, 0x00000000
282 .word 0x3ff642c8, 0x590b2164, 0x40032eee, 0x75770416
283 .word 0x3caed8e7, 0x730eaff2, 0x00000000, 0x00000000
284 .word 0x3ff623fa, 0x77016240, 0x3ffb33f3, 0xf1490def
285 .word 0xbc95894b, 0xcb02373b, 0x00000000, 0x00000000
286 .word 0x3ff623fa, 0x77016240, 0x40033c42, 0x213ee0c9
287 .word 0x3ca84c24, 0x4ba98124, 0x00000000, 0x00000000
288 .word 0x3ff60581, 0x60581606, 0x3ffb46bf, 0xc05aeb89
289 .word 0x3c9b1c7c, 0xc39adc9f, 0x00000000, 0x00000000
290 .word 0x3ff60581, 0x60581606, 0x4003498c, 0x97b10540
291 .word 0x3c734193, 0xbc8543b4, 0x00000000, 0x00000000
292 .word 0x3ff5e75b, 0xb8d015e7, 0x3ffb597e, 0xa47fdda3
293 .word 0xbc923cc8, 0x9d1e4635, 0x00000000, 0x00000000
294 .word 0x3ff5e75b, 0xb8d015e7, 0x400356cd, 0xebc9b5e2
295 .word 0x3c96dee1, 0x46bb1571, 0x00000000, 0x00000000
296 .word 0x3ff5c988, 0x2b931057, 0x3ffb6c30, 0xb83593e6
297 .word 0x3c8f4e3f, 0xd28d84bc, 0x00000000, 0x00000000
298 .word 0x3ff5c988, 0x2b931057, 0x40036406, 0x30445306
299 .word 0xbca78d86, 0x2327430a, 0x00000000, 0x00000000
300 .word 0x3ff5ac05, 0x6b015ac0, 0x3ffb7ed6, 0x159fadc8
301 .word 0xbc899bcf, 0xf04d134b, 0x00000000, 0x00000000
302 .word 0x3ff5ac05, 0x6b015ac0, 0x40037135, 0x779c8dcb
303 .word 0xbc8fe126, 0xce9778ae, 0x00000000, 0x00000000
304 .word 0x3ff58ed2, 0x308158ed, 0x3ffb916e, 0xd68964ec
305 .word 0x3c826a5d, 0x5dbaae29, 0x00000000, 0x00000000
306 .word 0x3ff58ed2, 0x308158ed, 0x40037e5b, 0xd40f95a1
307 .word 0x3cac6ff5, 0xeca5d122, 0x00000000, 0x00000000
308 .word 0x3ff571ed, 0x3c506b3a, 0x3ffba3fb, 0x14672d7c
309 .word 0xbc8117d3, 0x97dcefc9, 0x00000000, 0x00000000
310 .word 0x3ff571ed, 0x3c506b3a, 0x40038b79, 0x579d3eab
311 .word 0xbcac254f, 0xc0db598e, 0x00000000, 0x00000000
312 .word 0x3ff55555, 0x55555555, 0x3ffbb67a, 0xe8584caa
313 .word 0x3c9cec95, 0xd0b5c1e3, 0x00000000, 0x00000000
314 .word 0x3ff55555, 0x55555555, 0x4003988e, 0x1409212e
315 .word 0x3caf40c8, 0x6450c869, 0x00000000, 0x00000000
316 .word 0x3ff53909, 0x48f40feb, 0x3ffbc8ee, 0x6b2865b9
317 .word 0x3c9394eb, 0x90f645c8, 0x00000000, 0x00000000
318 .word 0x3ff53909, 0x48f40feb, 0x4003a59a, 0x1adbb257
319 .word 0x3ca6adce, 0x020a308d, 0x00000000, 0x00000000
320 .word 0x3ff51d07, 0xeae2f815, 0x3ffbdb55, 0xb550fdbc
321 .word 0x3c7365e9, 0x6aa5fae3, 0x00000000, 0x00000000
322 .word 0x3ff51d07, 0xeae2f815, 0x4003b29d, 0x7d635662
323 .word 0x3cac99b0, 0x5e282129, 0x00000000, 0x00000000
324 .word 0x3ff50150, 0x15015015, 0x3ffbedb0, 0xdefaf661
325 .word 0x3c91a627, 0xb279170d, 0x00000000, 0x00000000
326 .word 0x3ff50150, 0x15015015, 0x4003bf98, 0x4cb56c77
327 .word 0x3ca8f653, 0xbcc0c4a1, 0x00000000, 0x00000000
328 .word 0x3ff4e5e0, 0xa72f0539, 0x3ffc0000, 0x00000000
329 .word 0x00000000, 0x00000000, 0x00000000, 0x00000000
330 .word 0x3ff4e5e0, 0xa72f0539, 0x4003cc8a, 0x99af5453
331 .word 0xbc486364, 0x4f05f2be, 0x00000000, 0x00000000
332 .word 0x3ff4cab8, 0x8725af6e, 0x3ffc1243, 0x2fec0329
333 .word 0x3c96e0d7, 0x8dd23a7d, 0x00000000, 0x00000000
334 .word 0x3ff4cab8, 0x8725af6e, 0x4003d974, 0x74f76df2
335 .word 0x3c82e3c9, 0xfdbbbdc2, 0x00000000, 0x00000000
336 .word 0x3ff4afd6, 0xa052bf5b, 0x3ffc247a, 0x85fe81fa
337 .word 0x3c89d8ee, 0xf6854220, 0x00000000, 0x00000000
338 .word 0x3ff4afd6, 0xa052bf5b, 0x4003e655, 0xeefe1367
339 .word 0x3c80eb35, 0xbb532559, 0x00000000, 0x00000000
340 .word 0x3ff49539, 0xe3b2d067, 0x3ffc36a6, 0x192bf168
341 .word 0xbc9083d8, 0x1a423b11, 0x00000000, 0x00000000
342 .word 0x3ff49539, 0xe3b2d067, 0x4003f32f, 0x17fe8d04
343 .word 0xbc905d6c, 0x1c437de0, 0x00000000, 0x00000000
344 .word 0x3ff47ae1, 0x47ae147b, 0x3ffc48c6, 0x001f0ac0
345 .word 0xbc92d481, 0x189efd6b, 0x00000000, 0x00000000
346 .word 0x3ff47ae1, 0x47ae147b, 0x40040000, 0x00000000
347 .word 0x00000000, 0x00000000, 0x00000000, 0x00000000
348 .word 0x3ff460cb, 0xc7f5cf9a, 0x3ffc5ada, 0x513a1593
349 .word 0xbc7aaedd, 0x014f5f03, 0x00000000, 0x00000000
350 .word 0x3ff460cb, 0xc7f5cf9a, 0x40040cc8, 0xb6d657c2
351 .word 0xbc9c05ab, 0xf480ce19, 0x00000000, 0x00000000
352 .word 0x3ff446f8, 0x6562d9fb, 0x3ffc6ce3, 0x22982a3f
353 .word 0x3c891b2d, 0xf3e15f29, 0x00000000, 0x00000000
354 .word 0x3ff446f8, 0x6562d9fb, 0x40041989, 0x4c2329f0
355 .word 0x3c976037, 0x46da0ea6, 0x00000000, 0x00000000
356 .word 0x3ff42d66, 0x25d51f87, 0x3ffc7ee0, 0x8a0e6d4c
357 .word 0x3c991c54, 0xc53e75c8, 0x00000000, 0x00000000
358 .word 0x3ff42d66, 0x25d51f87, 0x40042641, 0xcf569572
359 .word 0xbcadf80b, 0x1442c029, 0x00000000, 0x00000000
360 .word 0x3ff41414, 0x14141414, 0x3ffc90d2, 0x9d2d43ce
361 .word 0xbc9edadb, 0x07f1137a, 0x00000000, 0x00000000
362 .word 0x3ff41414, 0x14141414, 0x400432f2, 0x4fb01c7a
363 .word 0x3ca38bfe, 0x0e012c1c, 0x00000000, 0x00000000
364 .word 0x3ff3fb01, 0x3fb013fb, 0x3ffca2b9, 0x714180f7
365 .word 0xbc81a63d, 0x6750c57c, 0x00000000, 0x00000000
366 .word 0x3ff3fb01, 0x3fb013fb, 0x40043f9a, 0xdc3f79ce
367 .word 0x3c66d2b1, 0x767ae30a, 0x00000000, 0x00000000
368 .word 0x3ff3e22c, 0xbce4a902, 0x3ffcb495, 0x1b558d17
369 .word 0x3c8fcbcb, 0x357f2308, 0x00000000, 0x00000000
370 .word 0x3ff3e22c, 0xbce4a902, 0x40044c3b, 0x83e57153
371 .word 0x3c98c853, 0xc6be5ee1, 0x00000000, 0x00000000
372 .word 0x3ff3c995, 0xa47babe7, 0x3ffcc665, 0xb0328622
373 .word 0xbc91baa4, 0xd369f814, 0x00000000, 0x00000000
374 .word 0x3ff3c995, 0xa47babe7, 0x400458d4, 0x55549c1a
375 .word 0x3ca02d72, 0x8d9a6054, 0x00000000, 0x00000000
376 .word 0x3ff3b13b, 0x13b13b14, 0x3ffcd82b, 0x446159f3
377 .word 0x3c983fb7, 0xb33cdfe8, 0x00000000, 0x00000000
378 .word 0x3ff3b13b, 0x13b13b14, 0x40046565, 0x5f122ff6
379 .word 0x3ca862c5, 0xd2f0ca4c, 0x00000000, 0x00000000
380 .word 0x3ff3991c, 0x2c187f63, 0x3ffce9e5, 0xec2bda80
381 .word 0xbc94ccf3, 0xd8e249ab, 0x00000000, 0x00000000
382 .word 0x3ff3991c, 0x2c187f63, 0x400471ee, 0xaf76c2c6
383 .word 0x3c975c62, 0xeff26e8e, 0x00000000, 0x00000000
384 .word 0x3ff38138, 0x13813814, 0x3ffcfb95, 0xbb9dcc0c
385 .word 0x3c92cea2, 0x0857ae03, 0x00000000, 0x00000000
386 .word 0x3ff38138, 0x13813814, 0x40047e70, 0x54af0989
387 .word 0x3c9d8c33, 0xc0054830, 0x00000000, 0x00000000
388 .word 0x3ff3698d, 0xf3de0748, 0x3ffd0d3a, 0xc685eda4
389 .word 0x3c94115a, 0x0ff4cf9e, 0x00000000, 0x00000000
390 .word 0x3ff3698d, 0xf3de0748, 0x40048aea, 0x5cbc935f
391 .word 0xbca8cb00, 0x12d14ff5, 0x00000000, 0x00000000
392 .word 0x3ff3521c, 0xfb2b78c1, 0x3ffd1ed5, 0x2076fbe9
393 .word 0x3c8f48a8, 0x6b72875f, 0x00000000, 0x00000000
394 .word 0x3ff3521c, 0xfb2b78c1, 0x4004975c, 0xd5768088
395 .word 0xbca1731e, 0xbc02f748, 0x00000000, 0x00000000
396 .word 0x3ff33ae4, 0x5b57bcb2, 0x3ffd3064, 0xdcc8ae67
397 .word 0x3c93480e, 0x805158ba, 0x00000000, 0x00000000
398 .word 0x3ff33ae4, 0x5b57bcb2, 0x4004a3c7, 0xcc8a358a
399 .word 0xbc9d8f7f, 0xd2726ffa, 0x00000000, 0x00000000
400 .word 0x3ff323e3, 0x4a2b10bf, 0x3ffd41ea, 0x0e98af91
401 .word 0x3c824640, 0x0309962f, 0x00000000, 0x00000000
402 .word 0x3ff323e3, 0x4a2b10bf, 0x4004b02b, 0x4f7c0a88
403 .word 0xbcaf71e1, 0xf6cafde2, 0x00000000, 0x00000000
404 .word 0x3ff30d19, 0x0130d190, 0x3ffd5364, 0xc8cb8f86
405 .word 0x3c8ad003, 0xc00630e1, 0x00000000, 0x00000000
406 .word 0x3ff30d19, 0x0130d190, 0x4004bc87, 0x6ba7f6ec
407 .word 0x3c9c1edb, 0x2be943b8, 0x00000000, 0x00000000
408 .word 0x3ff2f684, 0xbda12f68, 0x3ffd64d5, 0x1e0db1c6
409 .word 0xbc911ed3, 0x6986d362, 0x00000000, 0x00000000
410 .word 0x3ff2f684, 0xbda12f68, 0x4004c8dc, 0x2e423980
411 .word 0xbc949d1f, 0x46ef5d2c, 0x00000000, 0x00000000
412 .word 0x3ff2e025, 0xc04b8097, 0x3ffd763b, 0x20d435ef
413 .word 0x3c9d6780, 0xf76cb258, 0x00000000, 0x00000000
414 .word 0x3ff2e025, 0xc04b8097, 0x4004d529, 0xa457fcfc
415 .word 0xbca1404a, 0x46484e3d, 0x00000000, 0x00000000
416 .word 0x3ff2c9fb, 0x4d812ca0, 0x3ffd8796, 0xe35ddbb2
417 .word 0x3c83fdd9, 0x1aeb637a, 0x00000000, 0x00000000
418 .word 0x3ff2c9fb, 0x4d812ca0, 0x4004e16f, 0xdacff937
419 .word 0xbca1deb9, 0xd3815ad2, 0x00000000, 0x00000000
420 .word 0x3ff2b404, 0xad012b40, 0x3ffd98e8, 0x77b3e207
421 .word 0xbc48c301, 0xee02dee8, 0x00000000, 0x00000000
422 .word 0x3ff2b404, 0xad012b40, 0x4004edae, 0xde6b10fe
423 .word 0x3ca99709, 0x4a91a780, 0x00000000, 0x00000000
424 .word 0x3ff29e41, 0x29e4129e, 0x3ffdaa2f, 0xefaae1d8
425 .word 0xbc63fe0e, 0x03f44594, 0x00000000, 0x00000000
426 .word 0x3ff29e41, 0x29e4129e, 0x4004f9e6, 0xbbc4ecb3
427 .word 0x3c6ce5a6, 0x018493f1, 0x00000000, 0x00000000
428 .word 0x3ff288b0, 0x1288b013, 0x3ffdbb6d, 0x5ce3a42f
429 .word 0xbc922c27, 0xf71c8337, 0x00000000, 0x00000000
430 .word 0x3ff288b0, 0x1288b013, 0x40050617, 0x7f5491bb
431 .word 0xbc9e591e, 0x7b2a6d1a, 0x00000000, 0x00000000
432 .word 0x3ff27350, 0xb8812735, 0x3ffdcca0, 0xd0cbf408
433 .word 0x3c7a6d16, 0x2310db57, 0x00000000, 0x00000000
434 .word 0x3ff27350, 0xb8812735, 0x40051241, 0x356cf6e0
435 .word 0x3ca37dc2, 0x60e8bc2d, 0x00000000, 0x00000000
436 .word 0x3ff25e22, 0x708092f1, 0x3ffdddca, 0x5c9f6be8
437 .word 0x3c818520, 0xf0a3f809, 0x00000000, 0x00000000
438 .word 0x3ff25e22, 0x708092f1, 0x40051e63, 0xea3d95b0
439 .word 0x3caecf78, 0x2e88d5ce, 0x00000000, 0x00000000
440 .word 0x3ff24924, 0x92492492, 0x3ffdeeea, 0x11683f49
441 .word 0x3c802aae, 0x4bfa7c27, 0x00000000, 0x00000000
442 .word 0x3ff24924, 0x92492492, 0x40052a7f, 0xa9d2f8ea
443 .word 0xbca21c62, 0xb033c079, 0x00000000, 0x00000000
444 .word 0x3ff23456, 0x789abcdf, 0x3ffe0000, 0x00000000
445 .word 0x00000000, 0x00000000, 0x00000000, 0x00000000
446 .word 0x3ff23456, 0x789abcdf, 0x40053694, 0x80174810
447 .word 0xbc9c3ec1, 0xa4ee7c21, 0x00000000, 0x00000000
448 .word 0x3ff21fb7, 0x8121fb78, 0x3ffe110c, 0x39105faf
449 .word 0x3c776161, 0x4c513964, 0x00000000, 0x00000000
450 .word 0x3ff21fb7, 0x8121fb78, 0x400542a2, 0x78d2d036
451 .word 0xbca495c2, 0x45254df4, 0x00000000, 0x00000000
452 .word 0x3ff20b47, 0x0c67c0d9, 0x3ffe220e, 0xcd13ed60
453 .word 0xbc729f01, 0xf18c9dc9, 0x00000000, 0x00000000
454 .word 0x3ff20b47, 0x0c67c0d9, 0x40054ea9, 0x9fac8a0f
455 .word 0x3c80cfbb, 0x19353b3d, 0x00000000, 0x00000000
456 .word 0x3ff1f704, 0x7dc11f70, 0x3ffe3307, 0xcc56cf5c
457 .word 0xbc81f04e, 0xc3189131, 0x00000000, 0x00000000
458 .word 0x3ff1f704, 0x7dc11f70, 0x40055aaa, 0x002a9d5a
459 .word 0xbc4bf504, 0x76241f94, 0x00000000, 0x00000000
460 .word 0x3ff1e2ef, 0x3b3fb874, 0x3ffe43f7, 0x46f7795b
461 .word 0xbc931e7f, 0x8af68f8c, 0x00000000, 0x00000000
462 .word 0x3ff1e2ef, 0x3b3fb874, 0x400566a3, 0xa5b2e1b1
463 .word 0x3caa1fd2, 0x8cc92e33, 0x00000000, 0x00000000
464 .word 0x3ff1cf06, 0xada2811d, 0x3ffe54dd, 0x4ce75f1e
465 .word 0xbc811b19, 0x5dfc62e5, 0x00000000, 0x00000000
466 .word 0x3ff1cf06, 0xada2811d, 0x40057296, 0x9b8b5cd8
467 .word 0x3ca30cbf, 0x1c53312e, 0x00000000, 0x00000000
468 .word 0x3ff1bb4a, 0x4046ed29, 0x3ffe65b9, 0xedeba38e
469 .word 0xbc7bb732, 0x51e8c364, 0x00000000, 0x00000000
470 .word 0x3ff1bb4a, 0x4046ed29, 0x40057e82, 0xecdabe8d
471 .word 0xbc7c2aed, 0xf3c4c4bd, 0x00000000, 0x00000000
472 .word 0x3ff1a7b9, 0x611a7b96, 0x3ffe768d, 0x399dc470
473 .word 0xbc9a8c81, 0x3405c01c, 0x00000000, 0x00000000
474 .word 0x3ff1a7b9, 0x611a7b96, 0x40058a68, 0xa4a8d9f3
475 .word 0x3ca50798, 0xe67012d9, 0x00000000, 0x00000000
476 .word 0x3ff19453, 0x808ca29c, 0x3ffe8757, 0x3f6c42c5
477 .word 0x3c9dbf9c, 0xf7bbcda3, 0x00000000, 0x00000000
478 .word 0x3ff19453, 0x808ca29c, 0x40059647, 0xcddf1ca5
479 .word 0x3ca14a95, 0xf35dea0b, 0x00000000, 0x00000000
480 .word 0x3ff18118, 0x11811812, 0x3ffe9818, 0x0e9b47f2
481 .word 0xbc9b6bd7, 0x4396d08e, 0x00000000, 0x00000000
482 .word 0x3ff18118, 0x11811812, 0x4005a220, 0x73490377
483 .word 0xbcadd036, 0x39925812, 0x00000000, 0x00000000
484 .word 0x3ff16e06, 0x89427379, 0x3ffea8cf, 0xb64547ab
485 .word 0x3c8721b2, 0x6374e19f, 0x00000000, 0x00000000
486 .word 0x3ff16e06, 0x89427379, 0x4005adf2, 0x9f948cfb
487 .word 0xbca42520, 0xf7716fa6, 0x00000000, 0x00000000
488 .word 0x3ff15b1e, 0x5f75270d, 0x3ffeb97e, 0x455b9edb
489 .word 0x3c999b45, 0x40857883, 0x00000000, 0x00000000
490 .word 0x3ff15b1e, 0x5f75270d, 0x4005b9be, 0x5d52a9da
491 .word 0x3c9098cd, 0x1b3af777, 0x00000000, 0x00000000
492 .word 0x3ff1485f, 0x0e0acd3b, 0x3ffeca23, 0xcaa72f73
493 .word 0x3c7e3ed5, 0x29679959, 0x00000000, 0x00000000
494 .word 0x3ff1485f, 0x0e0acd3b, 0x4005c583, 0xb6f7ab03
495 .word 0x3ca963bc, 0x9d795b51, 0x00000000, 0x00000000
496 .word 0x3ff135c8, 0x1135c811, 0x3ffedac0, 0x54c8f94c
497 .word 0x3c90b5c1, 0x15a56207, 0x00000000, 0x00000000
498 .word 0x3ff135c8, 0x1135c811, 0x4005d142, 0xb6dbadc5
499 .word 0x3ca6f1f5, 0x5323d116, 0x00000000, 0x00000000
500 .word 0x3ff12358, 0xe75d3033, 0x3ffeeb53, 0xf23ab028
501 .word 0xbc8617e4, 0xb5384f5d, 0x00000000, 0x00000000
502 .word 0x3ff12358, 0xe75d3033, 0x4005dcfb, 0x673b05df
503 .word 0xbca099df, 0xc321634f, 0x00000000, 0x00000000
504 .word 0x3ff11111, 0x11111111, 0x3ffefbde, 0xb14f4eda
505 .word 0xbc93a145, 0xfe1be078, 0x00000000, 0x00000000
506 .word 0x3ff11111, 0x11111111, 0x4005e8ad, 0xd236a58f
507 .word 0xbc7ef8c7, 0xc0d1fec6, 0x00000000, 0x00000000
508 .word 0x3ff0fef0, 0x10fef011, 0x3fff0c60, 0xa033a7b3
509 .word 0xbc91b0fc, 0x15cd89c6, 0x00000000, 0x00000000
510 .word 0x3ff0fef0, 0x10fef011, 0x4005f45a, 0x01d483b4
511 .word 0xbc94a237, 0xdc0fa105, 0x00000000, 0x00000000
512 .word 0x3ff0ecf5, 0x6be69c90, 0x3fff1cd9, 0xcceef239
513 .word 0x3c91afd8, 0x64eab60a, 0x00000000, 0x00000000
514 .word 0x3ff0ecf5, 0x6be69c90, 0x40060000, 0x00000000
515 .word 0x00000000, 0x00000000, 0x00000000, 0x00000000
516 .word 0x3ff0db20, 0xa88f4696, 0x3fff2d4a, 0x45635640
517 .word 0xbc8eebae, 0xea670bc2, 0x00000000, 0x00000000
518 .word 0x3ff0db20, 0xa88f4696, 0x40060b9f, 0xd68a4554
519 .word 0x3ca328e1, 0x70dae176, 0x00000000, 0x00000000
520 .word 0x3ff0c971, 0x4fbcda3b, 0x3fff3db2, 0x174e7468
521 .word 0x3c9e1513, 0x2d6ac52a, 0x00000000, 0x00000000
522 .word 0x3ff0c971, 0x4fbcda3b, 0x40061739, 0x8f2aaa48
523 .word 0xbc9b672b, 0xba260735, 0x00000000, 0x00000000
524 .word 0x3ff0b7e6, 0xec259dc8, 0x3fff4e11, 0x5049ec26
525 .word 0xbc9b6656, 0xb6bd5d76, 0x00000000, 0x00000000
526 .word 0x3ff0b7e6, 0xec259dc8, 0x400622cd, 0x337f0fe8
527 .word 0x3c9fe207, 0x3279559f, 0x00000000, 0x00000000
528 .word 0x3ff0a681, 0x0a6810a7, 0x3fff5e67, 0xfdcbdf44
529 .word 0xbc98af06, 0x1849d6fc, 0x00000000, 0x00000000
530 .word 0x3ff0a681, 0x0a6810a7, 0x40062e5a, 0xcd0c3ebe
531 .word 0xbca2c50e, 0x2092203a, 0x00000000, 0x00000000
532 .word 0x3ff0953f, 0x39010954, 0x3fff6eb6, 0x2d27730d
533 .word 0xbc9401d9, 0x5ca1ce34, 0x00000000, 0x00000000
534 .word 0x3ff0953f, 0x39010954, 0x400639e2, 0x653e421b
535 .word 0xbc9f75e0, 0x5835e4b9, 0x00000000, 0x00000000
536 .word 0x3ff08421, 0x08421084, 0x3fff7efb, 0xeb8d4f12
537 .word 0xbc7e84e8, 0xa6ff3256, 0x00000000, 0x00000000
538 .word 0x3ff08421, 0x08421084, 0x40064564, 0x0568c1c3
539 .word 0x3cad1778, 0x7e4c8970, 0x00000000, 0x00000000
540 .word 0x3ff07326, 0x0a47f7c6, 0x3fff8f39, 0x460c19a8
541 .word 0x3c989b4e, 0x16ee9aaf, 0x00000000, 0x00000000
542 .word 0x3ff07326, 0x0a47f7c6, 0x400650df, 0xb6c759f4
543 .word 0x3c99063c, 0x91db4c77, 0x00000000, 0x00000000
544 .word 0x3ff0624d, 0xd2f1a9fc, 0x3fff9f6e, 0x4990f227
545 .word 0x3c8b42e5, 0xb5d1e808, 0x00000000, 0x00000000
546 .word 0x3ff0624d, 0xd2f1a9fc, 0x40065c55, 0x827df1d2
547 .word 0xbca3923d, 0xf03e1e2f, 0x00000000, 0x00000000
548 .word 0x3ff05197, 0xf7d73404, 0x3fffaf9b, 0x02e7e8f2
549 .word 0x3c897a76, 0x8f34e1c2, 0x00000000, 0x00000000
550 .word 0x3ff05197, 0xf7d73404, 0x400667c5, 0x7199104b
551 .word 0x3c875b89, 0x6f332e70, 0x00000000, 0x00000000
552 .word 0x3ff04104, 0x10410410, 0x3fffbfbf, 0x7ebc755f
553 .word 0xbc9b2a94, 0x084da0b6, 0x00000000, 0x00000000
554 .word 0x3ff04104, 0x10410410, 0x4006732f, 0x8d0e2f77
555 .word 0xbc93dffd, 0x470422e3, 0x00000000, 0x00000000
556 .word 0x3ff03091, 0xb51f5e1a, 0x3fffcfdb, 0xc999e97d
557 .word 0x3c82be17, 0xecdd3bbc, 0x00000000, 0x00000000
558 .word 0x3ff03091, 0xb51f5e1a, 0x40067e93, 0xddbc0e73
559 .word 0xbc86eb9f, 0x32ac1a5c, 0x00000000, 0x00000000
560 .word 0x3ff02040, 0x81020408, 0x3fffdfef, 0xefebe3d6
561 .word 0xbc909afc, 0xfc7c1f3b, 0x00000000, 0x00000000
562 .word 0x3ff02040, 0x81020408, 0x400689f2, 0x6c6b01d0
563 .word 0x3cae816f, 0x9d2a1032, 0x00000000, 0x00000000
564 .word 0x3ff01010, 0x10101010, 0x3fffeffb, 0xfdfebf1f
565 .word 0x3c95dee5, 0x1994f18b, 0x00000000, 0x00000000
566 .word 0x3ff01010, 0x10101010, 0x4006954b, 0x41cd4293
567 .word 0x3ca3d5bc, 0xcc443076, 0x00000000, 0x00000000
568 .word 0x3ff00000, 0x00000000, 0x40000000, 0x00000000
569 .word 0x00000000, 0x00000000, 0x00000000, 0x00000000
570 .word 0x3ff00000, 0x00000000, 0x4006a09e, 0x667f3bcd
571 .word 0xbcabdd34, 0x13b26456, 0x00000000, 0x00000000
572
573 #define A5 %f32
574 #define A4 %f30
575 #define A3 %f28
576 #define A2 %f26
577 #define A1 %f56
578
579 #define DC0 %f8
580 #define DC2 %f6
581 #define DC3 %f4
582
583 #define counter %l3
584 #define TBL %l5
585 #define stridex %l6
586 #define stridey %l7
587
588 #define _0x00001ff8 %i0
589 #define _0x7ff00000 %o0
590 #define _0x00100000 %o2
591
592 #define tmp_counter STACK_BIAS-0x40
593 #define tmp_px STACK_BIAS-0x38
594 #define tmp0 STACK_BIAS-0x30
595 #define tmp1 STACK_BIAS-0x28
596 #define tmp2 STACK_BIAS-0x20
597 #define tmp3 STACK_BIAS-0x18
598 #define tmp4 STACK_BIAS-0x10
599 #define tmp5 STACK_BIAS-0x08
600
601 ! sizeof temp storage - must be a multiple of 16 for V9
602 #define tmps 0x40
603
604 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
605 ! !!!!! algorithm !!!!!
606 ! ((float*)&res)[0] = ((float*)px)[0];
607 ! ((float*)&res)[1] = ((float*)px)[1];
608 ! hx = *(int*)px;
609 ! px += stridex;
610 !
611 ! if ( hx >= 0x7ff00000 )
612 ! {
613 ! res = sqrt(res);
614 ! ((float*)py)[0] = ((float*)&res)[0];
615 ! ((float*)py)[1] = ((float*)&res)[1];
616 ! py += stridey;
617 ! goto next;
618 ! }
619 ! if ( hx < 0x00100000 )
620 ! {
621 ! res = sqrt(res);
622 ! ((float*)py)[0] = ((float*)&res)[0];
623 ! ((float*)py)[1] = ((float*)&res)[1];
624 ! py += stridey;
625 ! goto next;
626 ! }
627 !
628 ! sqrt_exp = hx >> 21;
629 ! sqrt_exp -= 512;
630 ! sqrt_exp <<= 52;
631 ! dsqrt_exp = *(double*)&sqrt_exp;
632 ! bit = hx >> 15;
633 ! bit &= 32;
634 ! ind0 = hx >> 7;
635 ! ind0 &= 0x1ff8;
636 ! ind0 += 32;
637 ! ind0 &= -64;
638 ! ind1 = ind0;
639 ! ind1 += bit;
640 !
641 ! res = vis_fand(res,DC0); /* DC0 = vis_to_double(0x000fffff, 0xffffffff); */
642 ! res = vis_for(res,A1); /* A1 = vis_to_double(0x3fe00000, 0x00000000); */
643 ! res_c = vis_fpadd32(res,DC2); /* DC2 = vis_to_double(0x00001000, 0x00000000); */
644 ! res_c = vis_fand(res_c,DC3); /* DC3 = vis_to_double(0x7fffe000, 0x00000000); */
645 !
646 ! pind = (char*)TBL + ind1;
647 ! dexp_hi = ((double*)pind)[1];
648 ! dexp_lo = ((double*)pind)[2];
649 !
650 ! dtmp0 = ((double*)pind)[0];
651 ! xx = (res - res_c);
652 ! xx *= dtmp0;
653 !
654 ! res = A5 * xx;
655 ! res += A4;
656 ! res *= xx;
657 ! res += A3;
658 ! res *= xx;
659 ! res += A2;
660 ! res *= xx;
661 ! res += A1;
662 ! res *= xx;
663 !
664 ! res = dexp_hi * res;
665 ! res += dexp_lo;
666 ! res += dexp_hi;
667 !
668 ! dtmp0 = vis_fpadd32(dsqrt_exp,res);
669 ! ((float*)py)[0] = ((float*)&dtmp0)[0];
670 ! ((float*)py)[1] = ((float*)&dtmp0)[1];
671 ! py += stridey;
672 !
673 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
674
675 ENTRY(__vsqrt)
676 save %sp,-SA(MINFRAME)-tmps,%sp
677 PIC_SETUP(l7)
678 PIC_SET(l7,.CONST_TBL,l5)
679 wr %g0,0x82,%asi
680
681 ldd [TBL],A1
682 sll %i2,3,stridex
683 or %g0,%i3,%o4
684
685 ldd [TBL+8],A2
686 sll %i4,3,stridey
687 or %g0,0x7ff,%o0
688
689 ldd [TBL+16],A3
690 sll %o0,20,_0x7ff00000
691 or %g0,0x001,%o2
692
693 ldd [TBL+24],A4
694 sll %o2,20,_0x00100000
695
696 ldd [TBL+32],A5
697 ldd [TBL+40],DC0
698 ldd [TBL+48],DC2
699 ldd [TBL+56],DC3
700
701 add TBL,64,TBL
702 add %g0,1023,%o5
703 st %i0,[%fp+tmp_counter]
704
705 sll %o5,3,_0x00001ff8
706 stx %i1,[%fp+tmp_px]
707
708 .begin:
709 ld [%fp+tmp_counter],counter
710 ldx [%fp+tmp_px],%l2
711 st %g0,[%fp+tmp_counter]
712 .begin1:
713 cmp counter,0
714 ble,pn %icc,.exit
715 lda [%l2]%asi,%o5 ! (5_1) hx = *(int*)px;
716
717 lda [%l2]%asi,%f10 ! (5_0) ((float*)&res)[0] = ((float*)px)[0];
718
719 lda [%l2+4]%asi,%f11 ! (5_0) ((float*)&res)[1] = ((float*)px)[1];
720
721 cmp %o5,_0x7ff00000 ! (5_1) hx ? 0x7ff00000
722 bge,pn %icc,.spec ! (5_1) if ( hx >= 0x7ff00000 )
723 nop
724
725 cmp %o5,_0x00100000 ! (5_1) hx ? 0x00100000
726 bl,pn %icc,.spec ! (5_1) if ( hx < 0x00100000 )
727 nop
728
729 add %l2,stridex,%l2 ! px += stridex
730 fand %f10,DC0,%f50 ! (5_1) res = vis_fand(res,DC0);
731
732 for %f50,A1,%f40 ! (5_1) res = vis_for(res,A1);
733 sra %o5,21,%l1 ! (5_1) sqrt_exp = hx >> 21;
734 sra %o5,15,%i1 ! (5_1) bit = hx >> 15;
735
736 sra %o5,7,%o1 ! (5_1) ind0 = hx >> 7;
737 sub %l1,512,%o3 ! (5_1) sqrt_exp -= 512;
738
739 and %o1,_0x00001ff8,%o1 ! (5_1) ind0 &= 0x1ff8;
740 lda [%l2]%asi,%f10 ! (0_0) ((float*)&res)[0] = ((float*)px)[0];
741
742 add %o1,32,%o1 ! (5_1) ind0 += 32;
743 lda [%l2+4]%asi,%f11 ! (0_0) ((float*)&res)[1] = ((float*)px)[1];
744
745 and %i1,32,%i4 ! (5_1) bit &= 32;
746 and %o1,-64,%o1 ! (5_1) ind0 &= -8;
747
748 sll %o1,0,%o7 ! (5_1) ind1 = ind0;
749
750 sllx %o3,52,%o3 ! (5_1) sqrt_exp <<= 52;
751 add %o7,%i4,%l0 ! (5_1) ind1 += bit;
752 lda [%l2]%asi,%o5 ! (0_0) hx = *(int*)px;
753
754 stx %o3,[%fp+tmp0] ! (5_1) dsqrt_exp = *(double*)&sqrt_exp;
755 fand %f10,DC0,%f50 ! (0_0) res = vis_fand(res,DC0);
756
757 add %l2,stridex,%l2 ! px += stridex
758 fpadd32 %f40,DC2,%f54 ! (5_1) res_c = vis_fpadd32(res,DC2);
759
760 add %l0,TBL,%o1 ! (5_1) pind = (char*)TBL + ind1
761
762 cmp %o5,_0x7ff00000 ! (0_0) hx ? 0x7ff00000
763 bge,pn %icc,.update0 ! (0_0) if ( hx >= 0x7ff00000 )
764 for %f50,A1,%f42 ! (0_0) res = vis_for(res,A1);
765 .cont0:
766 sra %o5,21,%l1 ! (0_0) sqrt_exp = hx >> 21;
767 sra %o5,15,%i2 ! (0_0) bit = hx >> 15;
768 ldd [%o1],%f50 ! (5_1) dtmp0 = ((double*)pind)[0];
769
770 sra %o5,7,%o1 ! (0_0) ind0 = hx >> 7;
771 sub %l1,512,%o3 ! (0_0) sqrt_exp -= 512;
772 fand %f54,DC3,%f54 ! (5_1) res_c = vis_fand(res_c,DC3);
773
774 and %o1,_0x00001ff8,%o1 ! (0_0) ind0 &= 0x1ff8;
775 lda [%l2]%asi,%f10 ! (1_0) ((float*)&res)[0] = ((float*)px)[0];
776
777 add %o1,32,%o1 ! (0_0) ind0 += 32;
778 lda [%l2+4]%asi,%f11 ! (1_0) ((float*)&res)[1] = ((float*)px)[1];
779
780 and %i2,32,%i4 ! (0_0) bit &= 32;
781 and %o1,-64,%o1 ! (0_0) ind0 &= -8;
782 fsubd %f40,%f54,%f40 ! (5_1) xx = (res - res_c);
783
784 sll %o1,0,%o7 ! (0_0) ind1 = ind0;
785
786 cmp %o5,_0x00100000 ! (0_0) hx ? 0x00100000
787 bl,pn %icc,.update1 ! (0_0) if ( hx < 0x00100000 )
788 lda [%l2]%asi,%o5 ! (1_0) hx = *(int*)px;
789 .cont1:
790 sllx %o3,52,%o3 ! (0_0) sqrt_exp <<= 52;
791 add %o7,%i4,%i1 ! (0_0) ind1 += bit;
792
793 fmuld %f40,%f50,%f40 ! (5_1) xx *= dtmp0;
794 stx %o3,[%fp+tmp1] ! (0_0) dsqrt_exp = *(double*)&sqrt_exp;
795 fand %f10,DC0,%f50 ! (1_0) res = vis_fand(res,DC0);
796
797 add %l2,stridex,%l2 ! px += stridex
798 fpadd32 %f42,DC2,%f54 ! (0_0) res_c = vis_fpadd32(res,DC2);
799
800 add %i1,TBL,%o1 ! (0_0) pind = (char*)TBL + ind1
801
802 cmp %o5,_0x7ff00000 ! (1_0) hx ? 0x7ff00000
803 bge,pn %icc,.update2 ! (1_0) if ( hx >= 0x7ff00000 )
804 for %f50,A1,%f14 ! (1_0) res = vis_for(res,A1);
805 .cont2:
806 sra %o5,21,%l1 ! (1_0) sqrt_exp = hx >> 21;
807 sra %o5,15,%g5 ! (1_0) bit = hx >> 15;
808 ldd [%o1],%f50 ! (0_0) dtmp0 = ((double*)pind)[0];
809
810 fmuld A5,%f40,%f52 ! (5_1) res = A5 * xx;
811 sra %o5,7,%o1 ! (1_0) ind0 = hx >> 7;
812 sub %l1,512,%o3 ! (1_0) sqrt_exp -= 512;
813 fand %f54,DC3,%f54 ! (0_0) res_c = vis_fand(res_c,DC3);
814
815 and %o1,_0x00001ff8,%o1 ! (1_0) ind0 &= 0x1ff8;
816 lda [%l2]%asi,%f10 ! (2_0) ((float*)&res)[0] = ((float*)px)[0];
817
818 add %o1,32,%o1 ! (1_0) ind0 += 32;
819 lda [%l2+4]%asi,%f11 ! (2_0) ((float*)&res)[1] = ((float*)px)[1];
820
821 and %g5,32,%i4 ! (1_0) bit &= 32;
822 and %o1,-64,%o1 ! (1_0) ind0 &= -8;
823 fsubd %f42,%f54,%f42 ! (0_0) xx = (res - res_c);
824
825 sll %o1,0,%o7 ! (1_0) ind1 = ind0;
826 faddd %f52,A4,%f54 ! (5_1) res += A4;
827
828 cmp %o5,_0x00100000 ! (1_0) hx ? 0x00100000
829 bl,pn %icc,.update3 ! (1_0) if ( hx < 0x00100000 )
830 lda [%l2]%asi,%o5 ! (2_0) hx = *(int*)px;
831 .cont3:
832 sllx %o3,52,%o3 ! (1_0) sqrt_exp <<= 52;
833 add %o7,%i4,%i2 ! (1_0) ind1 += bit;
834
835 fmuld %f42,%f50,%f42 ! (0_0) xx *= dtmp0;
836 stx %o3,[%fp+tmp2] ! (1_0) dsqrt_exp = *(double*)&sqrt_exp;
837 fand %f10,DC0,%f50 ! (2_0) res = vis_fand(res,DC0);
838
839 fmuld %f54,%f40,%f34 ! (5_1) res *= xx;
840 fpadd32 %f14,DC2,%f54 ! (1_0) res_c = vis_fpadd32(res,DC2);
841 add %l2,stridex,%l2 ! px += stridex
842
843 add %i2,TBL,%o1 ! (1_0) pind = (char*)TBL + ind1
844
845 cmp %o5,_0x7ff00000 ! (2_0) hx ? 0x7ff00000
846 bge,pn %icc,.update4 ! (2_0) if ( hx >= 0x7ff00000 )
847 for %f50,A1,%f18 ! (2_0) res = vis_for(res,A1);
848 .cont4:
849 sra %o5,21,%l1 ! (2_0) sqrt_exp = hx >> 21;
850 sra %o5,15,%g1 ! (2_0) bit = hx >> 15;
851 ldd [%o1],%f50 ! (1_0) dtmp0 = ((double*)pind)[0];
852
853 fmuld A5,%f42,%f52 ! (0_0) res = A5 * xx;
854 sra %o5,7,%o1 ! (2_0) ind0 = hx >> 7;
855 sub %l1,512,%o3 ! (2_0) sqrt_exp -= 512;
856 fand %f54,DC3,%f54 ! (1_0) res_c = vis_fand(res_c,DC3);
857
858 and %o1,_0x00001ff8,%o1 ! (2_0) ind0 &= 0x1ff8;
859 lda [%l2]%asi,%f10 ! (3_0) ((float*)&res)[0] = ((float*)px)[0];
860 faddd %f34,A3,%f62 ! (5_1) res += A3;
861
862 add %o1,32,%o1 ! (2_0) ind0 += 32;
863 lda [%l2+4]%asi,%f11 ! (3_0) ((float*)&res)[1] = ((float*)px)[1];
864
865 and %g1,32,%i4 ! (2_0) bit &= 32;
866 and %o1,-64,%o1 ! (2_0) ind0 &= -8;
867 fsubd %f14,%f54,%f14 ! (1_0) xx = (res - res_c);
868
869 sll %o1,0,%o7 ! (2_0) ind1 = ind0;
870 faddd %f52,A4,%f54 ! (0_0) res += A4;
871
872 fmuld %f62,%f40,%f52 ! (5_1) res *= xx;
873 cmp %o5,_0x00100000 ! (2_0) hx ? 0x00100000
874 bl,pn %icc,.update5 ! (2_0) if ( hx < 0x00100000 )
875 lda [%l2]%asi,%o5 ! (3_0) hx = *(int*)px;
876 .cont5:
877 sllx %o3,52,%o3 ! (2_0) sqrt_exp <<= 52;
878 add %o7,%i4,%g5 ! (2_0) ind1 += bit;
879
880 fmuld %f14,%f50,%f14 ! (1_0) xx *= dtmp0;
881 stx %o3,[%fp+tmp3] ! (2_0) dsqrt_exp = *(double*)&sqrt_exp;
882 fand %f10,DC0,%f50 ! (3_0) res = vis_fand(res,DC0);
883
884 fmuld %f54,%f42,%f34 ! (0_0) res *= xx;
885 fpadd32 %f18,DC2,%f54 ! (2_0) res_c = vis_fpadd32(res,DC2);
886 add %l2,stridex,%l2 ! px += stridex
887
888 add %g5,TBL,%o1 ! (2_0) pind = (char*)TBL + ind1
889 faddd %f52,A2,%f20 ! (5_1) res += A2;
890
891 cmp %o5,_0x7ff00000 ! (3_0) hx ? 0x7ff00000
892 bge,pn %icc,.update6 ! (3_0) if ( hx >= 0x7ff00000 )
893 for %f50,A1,%f44 ! (3_0) res = vis_for(res,A1);
894 .cont6:
895 sra %o5,21,%l1 ! (3_0) sqrt_exp = hx >> 21;
896 sra %o5,15,%i3 ! (3_0) bit = hx >> 15;
897 ldd [%o1],%f50 ! (2_0) dtmp0 = ((double*)pind)[0];
898
899 fmuld A5,%f14,%f52 ! (1_0) res = A5 * xx;
900 sra %o5,7,%o1 ! (3_0) ind0 = hx >> 7;
901 sub %l1,512,%o3 ! (3_0) sqrt_exp -= 512;
902 fand %f54,DC3,%f54 ! (2_0) res_c = vis_fand(res_c,DC3);
903
904 fmuld %f20,%f40,%f20 ! (5_1) res *= xx;
905 and %o1,_0x00001ff8,%o1 ! (3_0) ind0 &= 0x1ff8;
906 lda [%l2]%asi,%f10 ! (4_0) ((float*)&res)[0] = ((float*)px)[0];
907 faddd %f34,A3,%f62 ! (0_0) res += A3;
908
909 add %o1,32,%o1 ! (3_0) ind0 += 32;
910 lda [%l2+4]%asi,%f11 ! (4_0) ((float*)&res)[1] = ((float*)px)[1];
911
912 and %i3,32,%i4 ! (3_0) bit &= 32;
913 and %o1,-64,%o1 ! (3_0) ind0 &= -8;
914 fsubd %f18,%f54,%f18 ! (2_0) xx = (res - res_c);
915
916 sll %o1,0,%o7 ! (3_0) ind1 = ind0;
917 faddd %f52,A4,%f54 ! (1_0) res += A4;
918
919 fmuld %f62,%f42,%f52 ! (0_0) res *= xx;
920 cmp %o5,_0x00100000 ! (3_0) hx ? 0x00100000
921 bl,pn %icc,.update7 ! (3_0) if ( hx < 0x00100000 )
922 faddd %f20,A1,%f12 ! (5_1) res += A1;
923 .cont7:
924 lda [%l2]%asi,%o5 ! (4_0) hx = *(int*)px;
925 sllx %o3,52,%o3 ! (3_0) sqrt_exp <<= 52;
926 add %o7,%i4,%g1 ! (3_0) ind1 += bit;
927
928 fmuld %f18,%f50,%f18 ! (2_0) xx *= dtmp0;
929 add %l0,TBL,%l0 ! (5_1) pind = (char*)TBL + ind1;
930 stx %o3,[%fp+tmp4] ! (3_0) dsqrt_exp = *(double*)&sqrt_exp;
931 fand %f10,DC0,%f50 ! (4_0) res = vis_fand(res,DC0);
932
933 fmuld %f54,%f14,%f34 ! (1_0) res *= xx;
934 add %l2,stridex,%l2 ! px += stridex
935 ldd [%l0+16],%f36 ! (5_1) dexp_lo = ((double*)pind)[2];
936 fpadd32 %f44,DC2,%f54 ! (3_0) res_c = vis_fpadd32(res,DC2);
937
938 fmuld %f12,%f40,%f12 ! (5_1) res *= xx;
939 add %g1,TBL,%o1 ! (3_0) (char*)div_arr+ind0
940 ldd [%l0+8],%f40 ! (5_1) dexp_hi = ((double*)pind)[1];
941 faddd %f52,A2,%f20 ! (0_0) res += A2;
942
943 cmp %o5,_0x7ff00000 ! (4_0) hx ? 0x7ff00000
944 bge,pn %icc,.update8 ! (4_0) if ( hx >= 0x7ff00000 )
945 for %f50,A1,%f24 ! (4_0) res = vis_for(res,A1);
946 .cont8:
947 sra %o5,21,%l1 ! (4_0) sqrt_exp = hx >> 21;
948 sra %o5,15,%l0 ! (4_0) bit = hx >> 15;
949 ldd [%o1],%f22 ! (3_0) dtmp0 = ((double*)pind)[0];
950
951 fmuld A5,%f18,%f52 ! (2_0) res = A5 * xx;
952 sra %o5,7,%o1 ! (4_0) ind0 = hx >> 7;
953 sub %l1,512,%o3 ! (4_0) sqrt_exp -= 512;
954 fand %f54,DC3,%f54 ! (3_0) res_c = vis_fand(res_c,DC3);
955
956 fmuld %f20,%f42,%f20 ! (0_0) res *= xx;
957 and %o1,_0x00001ff8,%o1 ! (4_0) ind0 &= 0x1ff8;
958 lda [%l2]%asi,%f10 ! (5_0) ((float*)&res)[0] = ((float*)px)[0];
959 faddd %f34,A3,%f62 ! (1_0) res += A3;
960
961 fmuld %f40,%f12,%f34 ! (5_1) res = dexp_hi * res;
962 add %o1,32,%o1 ! (4_0) ind0 += 32;
963 lda [%l2+4]%asi,%f11 ! (5_0) ((float*)&res)[1] = ((float*)px)[1];
964
965 and %l0,32,%i4 ! (4_0) bit &= 32;
966 cmp %o5,_0x00100000 ! (4_0) hx ? 0x00100000
967 bl,pn %icc,.update9 ! (4_0) if ( hx < 0x00100000 )
968 fsubd %f44,%f54,%f44 ! (3_0) xx = (res - res_c);
969 .cont9:
970 and %o1,-64,%o1 ! (4_0) ind0 &= -8;
971 faddd %f52,A4,%f54 ! (2_0) res += A4;
972
973 cmp counter,6
974 bl,pn %icc,.tail
975 or %g0,%o4,%l0
976
977 ba .main_loop
978 nop
979
980 .align 16
981 .main_loop:
982 fmuld %f62,%f14,%f52 ! (1_1) res *= xx;
983 sll %o1,0,%i3 ! (4_1) ind1 = ind0;
984 add %i1,TBL,%i1 ! (0_1) pind = (char*)TBL + ind1;
985 faddd %f20,A1,%f12 ! (0_1) res += A1;
986
987 lda [%l2]%asi,%o5 ! (5_1) hx = *(int*)px;
988 sllx %o3,52,%o3 ! (4_1) sqrt_exp <<= 52;
989 add %i3,%i4,%i3 ! (4_1) ind1 += bit;
990 faddd %f34,%f36,%f60 ! (5_2) res += dexp_lo;
991
992 fmuld %f44,%f22,%f44 ! (3_1) xx *= dtmp0;
993 add %l2,stridex,%l2 ! px += stridex
994 stx %o3,[%fp+tmp5] ! (4_1) dsqrt_exp = *(double*)&sqrt_exp;
995 fand %f10,DC0,%f50 ! (5_1) res = vis_fand(res,DC0);
996
997 fmuld %f54,%f18,%f34 ! (2_1) res *= xx;
998 nop
999 ldd [%i1+16],%f36 ! (0_1) dexp_lo = ((double*)pind)[2];
1000 fpadd32 %f24,DC2,%f54 ! (4_1) res_c = vis_fpadd32(res,DC2);
1001
1002 fmuld %f12,%f42,%f16 ! (0_1) res *= xx;
1003 sra %o5,21,%l1 ! (5_1) sqrt_exp = hx >> 21;
1004 ldd [%i1+8],%f42 ! (0_1) dexp_hi = ((double*)pind)[1];
1005 faddd %f52,A2,%f20 ! (1_1) res += A2;
1006
1007 ldd [%fp+tmp0],%f48 ! (5_2) dsqrt_exp = *(double*)&sqrt_exp;
1008 cmp %o5,_0x7ff00000 ! (5_1) hx ? 0x7ff00000
1009 bge,pn %icc,.update10 ! (5_1) if ( hx >= 0x7ff00000 )
1010 faddd %f60,%f40,%f60 ! (5_2) res += dexp_hi;
1011 .cont10:
1012 lda [%l2]%asi,%f10 ! (0_0) ((float*)&res)[0] = ((float*)px)[0];
1013 sra %o5,15,%i1 ! (5_1) bit = hx >> 15;
1014 add %i3,TBL,%o7 ! (4_1) pind = (char*)TBL + ind1
1015 for %f50,A1,%f40 ! (5_1) res = vis_for(res,A1);
1016
1017 fmuld A5,%f44,%f52 ! (3_1) res = A5 * xx;
1018 sra %o5,7,%o1 ! (5_1) ind0 = hx >> 7;
1019 ldd [%o7],%f22 ! (4_1) dtmp0 = ((double*)pind)[0];
1020 fand %f54,DC3,%f54 ! (4_1) res_c = vis_fand(res_c,DC3);
1021
1022 fmuld %f20,%f14,%f20 ! (1_1) res *= xx;
1023 and %o1,_0x00001ff8,%o1 ! (5_1) ind0 &= 0x1ff8;
1024 sub %l1,512,%o3 ! (5_1) sqrt_exp -= 512;
1025 faddd %f34,A3,%f62 ! (2_1) res += A3;
1026
1027 fpadd32 %f48,%f60,%f12 ! (5_2) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1028 add %o1,32,%o1 ! (5_1) ind0 += 32;
1029 st %f12,[%l0] ! (5_2) ((float*)py)[0] = ((float*)&dtmp0)[0];
1030 fmuld %f42,%f16,%f34 ! (0_1) res = dexp_hi * res;
1031
1032 lda [%l2+4]%asi,%f11 ! (0_0) ((float*)&res)[1] = ((float*)px)[1];
1033 and %i1,32,%i4 ! (5_1) bit &= 32;
1034 and %o1,-64,%o1 ! (5_1) ind0 &= -8;
1035 fsubd %f24,%f54,%f24 ! (4_1) xx = (res - res_c);
1036
1037 sll %o1,0,%o7 ! (5_1) ind1 = ind0;
1038 add %l0,stridey,%i1 ! py += stridey
1039 st %f13,[%l0+4] ! (5_2) ((float*)py)[1] = ((float*)&dtmp0)[1];
1040 faddd %f52,A4,%f54 ! (3_1) res += A4;
1041
1042 fmuld %f62,%f18,%f52 ! (2_1) res *= xx;
1043 cmp %o5,_0x00100000 ! (5_1) hx ? 0x00100000
1044 bl,pn %icc,.update11 ! (5_1) if ( hx < 0x00100000 )
1045 faddd %f20,A1,%f12 ! (1_1) res += A1;
1046 .cont11:
1047 sllx %o3,52,%o3 ! (5_1) sqrt_exp <<= 52;
1048 add %o7,%i4,%l0 ! (5_1) ind1 += bit;
1049 lda [%l2]%asi,%o5 ! (0_0) hx = *(int*)px;
1050 faddd %f34,%f36,%f60 ! (0_1) res += dexp_lo;
1051
1052 fmuld %f24,%f22,%f24 ! (4_1) xx *= dtmp0;
1053 add %i2,TBL,%i2 ! (1_1) pind = (char*)TBL + ind1;
1054 stx %o3,[%fp+tmp0] ! (5_1) dsqrt_exp = *(double*)&sqrt_exp;
1055 fand %f10,DC0,%f50 ! (0_0) res = vis_fand(res,DC0);
1056
1057 fmuld %f54,%f44,%f34 ! (3_1) res *= xx;
1058 add %l2,stridex,%l2 ! px += stridex
1059 ldd [%i2+16],%f36 ! (1_1) dexp_lo = ((double*)pind)[2];
1060 fpadd32 %f40,DC2,%f54 ! (5_1) res_c = vis_fpadd32(res,DC2);
1061
1062 fmuld %f12,%f14,%f16 ! (1_1) res *= xx;
1063 sra %o5,21,%l1 ! (0_0) sqrt_exp = hx >> 21;
1064 ldd [%i2+8],%f14 ! (1_1) dexp_hi = ((double*)pind)[1];
1065 faddd %f52,A2,%f20 ! (2_1) res += A2;
1066
1067 ldd [%fp+tmp1],%f48 ! (0_1) dsqrt_exp = *(double*)&sqrt_exp;
1068 cmp %o5,_0x7ff00000 ! (0_0) hx ? 0x7ff00000
1069 bge,pn %icc,.update12 ! (0_0) if ( hx >= 0x7ff00000 )
1070 faddd %f60,%f42,%f60 ! (0_1) res += dexp_hi;
1071 .cont12:
1072 lda [%l2]%asi,%f10 ! (1_0) ((float*)&res)[0] = ((float*)px)[0];
1073 sra %o5,15,%i2 ! (0_0) bit = hx >> 15;
1074 add %l0,TBL,%o7 ! (5_1) pind = (char*)TBL + ind1
1075 for %f50,A1,%f42 ! (0_0) res = vis_for(res,A1);
1076
1077 fmuld A5,%f24,%f52 ! (4_1) res = A5 * xx;
1078 sra %o5,7,%o1 ! (0_0) ind0 = hx >> 7;
1079 ldd [%o7],%f22 ! (5_1) dtmp0 = ((double*)pind)[0];
1080 fand %f54,DC3,%f54 ! (5_1) res_c = vis_fand(res_c,DC3);
1081
1082 fmuld %f20,%f18,%f20 ! (2_1) res *= xx;
1083 and %o1,_0x00001ff8,%o1 ! (0_0) ind0 &= 0x1ff8;
1084 sub %l1,512,%o3 ! (0_0) sqrt_exp -= 512;
1085 faddd %f34,A3,%f62 ! (3_1) res += A3;
1086
1087 fpadd32 %f48,%f60,%f12 ! (0_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1088 add %o1,32,%o1 ! (0_0) ind0 += 32;
1089 st %f12,[%i1] ! (0_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1090 fmuld %f14,%f16,%f34 ! (1_1) res = dexp_hi * res;
1091
1092 lda [%l2+4]%asi,%f11 ! (1_0) ((float*)&res)[1] = ((float*)px)[1];
1093 and %i2,32,%i4 ! (0_0) bit &= 32;
1094 and %o1,-64,%o1 ! (0_0) ind0 &= -8;
1095 fsubd %f40,%f54,%f40 ! (5_1) xx = (res - res_c);
1096
1097 sll %o1,0,%o7 ! (0_0) ind1 = ind0;
1098 add %i1,stridey,%i2 ! py += stridey
1099 st %f13,[%i1+4] ! (0_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1100 faddd %f52,A4,%f54 ! (4_1) res += A4;
1101
1102 fmuld %f62,%f44,%f52 ! (3_1) res *= xx;
1103 cmp %o5,_0x00100000 ! (0_0) hx ? 0x00100000
1104 bl,pn %icc,.update13 ! (0_0) if ( hx < 0x00100000 )
1105 faddd %f20,A1,%f12 ! (2_1) res += A1;
1106 .cont13:
1107 lda [%l2]%asi,%o5 ! (1_0) hx = *(int*)px;
1108 sllx %o3,52,%o3 ! (0_0) sqrt_exp <<= 52;
1109 add %o7,%i4,%i1 ! (0_0) ind1 += bit;
1110 faddd %f34,%f36,%f60 ! (1_1) res += dexp_lo;
1111
1112 fmuld %f40,%f22,%f40 ! (5_1) xx *= dtmp0;
1113 add %g5,TBL,%g5 ! (2_1) pind = (char*)TBL + ind1;
1114 stx %o3,[%fp+tmp1] ! (0_0) dsqrt_exp = *(double*)&sqrt_exp;
1115 fand %f10,DC0,%f50 ! (1_0) res = vis_fand(res,DC0);
1116
1117 fmuld %f54,%f24,%f34 ! (4_1) res *= xx;
1118 add %l2,stridex,%l2 ! px += stridex
1119 ldd [%g5+16],%f36 ! (2_1) dexp_lo = ((double*)pind)[2];
1120 fpadd32 %f42,DC2,%f54 ! (0_0) res_c = vis_fpadd32(res,DC2);
1121
1122 fmuld %f12,%f18,%f16 ! (2_1) res *= xx;
1123 sra %o5,21,%l1 ! (1_0) sqrt_exp = hx >> 21;
1124 ldd [%g5+8],%f18 ! (2_1) dexp_hi = ((double*)pind)[1];
1125 faddd %f52,A2,%f20 ! (3_1) res += A2;
1126
1127 ldd [%fp+tmp2],%f48 ! (1_1) dsqrt_exp = *(double*)&sqrt_exp;
1128 cmp %o5,_0x7ff00000 ! (1_0) hx ? 0x7ff00000
1129 bge,pn %icc,.update14 ! (1_0) if ( hx >= 0x7ff00000 )
1130 faddd %f60,%f14,%f60 ! (1_1) res += dexp_hi;
1131 .cont14:
1132 lda [%l2]%asi,%f10 ! (2_0) ((float*)&res)[0] = ((float*)px)[0];
1133 sra %o5,15,%g5 ! (1_0) bit = hx >> 15;
1134 add %i1,TBL,%o7 ! (0_0) pind = (char*)TBL + ind1
1135 for %f50,A1,%f14 ! (1_0) res = vis_for(res,A1);
1136
1137 fmuld A5,%f40,%f52 ! (5_1) res = A5 * xx;
1138 sra %o5,7,%o1 ! (1_0) ind0 = hx >> 7;
1139 ldd [%o7],%f22 ! (0_0) dtmp0 = ((double*)pind)[0];
1140 fand %f54,DC3,%f54 ! (0_0) res_c = vis_fand(res_c,DC3);
1141
1142 fmuld %f20,%f44,%f20 ! (3_1) res *= xx;
1143 and %o1,_0x00001ff8,%o1 ! (1_0) ind0 &= 0x1ff8;
1144 sub %l1,512,%o3 ! (1_0) sqrt_exp -= 512;
1145 faddd %f34,A3,%f62 ! (4_1) res += A3;
1146
1147 fpadd32 %f48,%f60,%f12 ! (1_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1148 add %o1,32,%o1 ! (1_0) ind0 += 32;
1149 st %f12,[%i2] ! (1_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1150 fmuld %f18,%f16,%f34 ! (2_1) res = dexp_hi * res;
1151
1152 lda [%l2+4]%asi,%f11 ! (2_0) ((float*)&res)[1] = ((float*)px)[1];
1153 and %g5,32,%i4 ! (1_0) bit &= 32;
1154 and %o1,-64,%o1 ! (1_0) ind0 &= -8;
1155 fsubd %f42,%f54,%f42 ! (0_0) xx = (res - res_c);
1156
1157 sll %o1,0,%o7 ! (1_0) ind1 = ind0;
1158 add %i2,stridey,%g5 ! py += stridey
1159 st %f13,[%i2+4] ! (1_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1160 faddd %f52,A4,%f54 ! (5_1) res += A4;
1161
1162 fmuld %f62,%f24,%f52 ! (4_1) res *= xx;
1163 cmp %o5,_0x00100000 ! (1_0) hx ? 0x00100000
1164 bl,pn %icc,.update15 ! (1_0) if ( hx < 0x00100000 )
1165 faddd %f20,A1,%f12 ! (3_1) res += A1;
1166 .cont15:
1167 lda [%l2]%asi,%o5 ! (2_0) hx = *(int*)px;
1168 sllx %o3,52,%o3 ! (1_0) sqrt_exp <<= 52;
1169 add %o7,%i4,%i2 ! (1_0) ind1 += bit;
1170 faddd %f34,%f36,%f60 ! (2_1) res += dexp_lo;
1171
1172 fmuld %f42,%f22,%f42 ! (0_0) xx *= dtmp0;
1173 add %g1,TBL,%g1 ! (3_1) pind = (char*)TBL + ind1;
1174 stx %o3,[%fp+tmp2] ! (1_0) dsqrt_exp = *(double*)&sqrt_exp;
1175 fand %f10,DC0,%f50 ! (2_0) res = vis_fand(res,DC0);
1176
1177 fmuld %f54,%f40,%f34 ! (5_1) res *= xx;
1178 fpadd32 %f14,DC2,%f54 ! (1_0) res_c = vis_fpadd32(res,DC2);
1179 add %l2,stridex,%l2 ! px += stridex
1180 ldd [%g1+16],%f36 ! (3_1) dexp_lo = ((double*)pind)[2];
1181
1182 fmuld %f12,%f44,%f16 ! (3_1) res *= xx;
1183 sra %o5,21,%l1 ! (2_0) sqrt_exp = hx >> 21;
1184 ldd [%g1+8],%f44 ! (3_1) dexp_hi = ((double*)pind)[1];
1185 faddd %f52,A2,%f20 ! (4_1) res += A2;
1186
1187 ldd [%fp+tmp3],%f48 ! (2_1) dsqrt_exp = *(double*)&sqrt_exp;
1188 cmp %o5,_0x7ff00000 ! (2_0) hx ? 0x7ff00000
1189 bge,pn %icc,.update16 ! (2_0) if ( hx >= 0x7ff00000 )
1190 faddd %f60,%f18,%f60 ! (2_1) res += dexp_hi;
1191 .cont16:
1192 lda [%l2]%asi,%f10 ! (3_0) ((float*)&res)[0] = ((float*)px)[0];
1193 sra %o5,15,%g1 ! (2_0) bit = hx >> 15;
1194 add %i2,TBL,%o7 ! (1_0) pind = (char*)TBL + ind1
1195 for %f50,A1,%f18 ! (2_0) res = vis_for(res,A1);
1196
1197 fmuld A5,%f42,%f52 ! (0_0) res = A5 * xx;
1198 sra %o5,7,%o1 ! (2_0) ind0 = hx >> 7;
1199 ldd [%o7],%f22 ! (1_0) dtmp0 = ((double*)pind)[0];
1200 fand %f54,DC3,%f54 ! (1_0) res_c = vis_fand(res_c,DC3);
1201
1202 fmuld %f20,%f24,%f20 ! (4_1) res *= xx;
1203 and %o1,_0x00001ff8,%o1 ! (2_0) ind0 &= 0x1ff8;
1204 sub %l1,512,%o3 ! (2_0) sqrt_exp -= 512;
1205 faddd %f34,A3,%f62 ! (5_1) res += A3;
1206
1207 fpadd32 %f48,%f60,%f12 ! (2_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1208 add %o1,32,%o1 ! (2_0) ind0 += 32;
1209 st %f12,[%g5] ! (2_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1210 fmuld %f44,%f16,%f34 ! (3_1) res = dexp_hi * res;
1211
1212 lda [%l2+4]%asi,%f11 ! (3_0) ((float*)&res)[1] = ((float*)px)[1];
1213 and %g1,32,%i4 ! (2_0) bit &= 32;
1214 and %o1,-64,%o1 ! (2_0) ind0 &= -8;
1215 fsubd %f14,%f54,%f14 ! (1_0) xx = (res - res_c);
1216
1217 sll %o1,0,%o7 ! (2_0) ind1 = ind0;
1218 add %g5,stridey,%g1 ! py += stridey
1219 st %f13,[%g5+4] ! (2_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1220 faddd %f52,A4,%f54 ! (0_0) res += A4;
1221
1222 fmuld %f62,%f40,%f52 ! (5_1) res *= xx;
1223 cmp %o5,_0x00100000 ! (2_0) hx ? 0x00100000
1224 bl,pn %icc,.update17 ! (2_0) if ( hx < 0x00100000 )
1225 faddd %f20,A1,%f12 ! (4_1) res += A1;
1226 .cont17:
1227 lda [%l2]%asi,%o5 ! (3_0) hx = *(int*)px;
1228 sllx %o3,52,%o3 ! (2_0) sqrt_exp <<= 52;
1229 add %o7,%i4,%g5 ! (2_0) ind1 += bit;
1230 faddd %f34,%f36,%f60 ! (3_1) res += dexp_lo;
1231
1232 fmuld %f14,%f22,%f14 ! (1_0) xx *= dtmp0;
1233 add %i3,TBL,%i3 ! (4_1) pind = (char*)TBL + ind1;
1234 stx %o3,[%fp+tmp3] ! (2_0) dsqrt_exp = *(double*)&sqrt_exp;
1235 fand %f10,DC0,%f50 ! (3_0) res = vis_fand(res,DC0);
1236
1237 fmuld %f54,%f42,%f34 ! (0_0) res *= xx;
1238 fpadd32 %f18,DC2,%f54 ! (2_0) res_c = vis_fpadd32(res,DC2);
1239 add %l2,stridex,%l2 ! px += stridex
1240 ldd [%i3+16],%f36 ! (4_1) dexp_lo = ((double*)pind)[2];
1241
1242 fmuld %f12,%f24,%f16 ! (4_1) res *= xx;
1243 sra %o5,21,%l1 ! (3_0) sqrt_exp = hx >> 21;
1244 ldd [%i3+8],%f24 ! (4_1) dexp_hi = ((double*)pind)[1];
1245 faddd %f52,A2,%f20 ! (5_1) res += A2;
1246
1247 ldd [%fp+tmp4],%f48 ! (3_1) dsqrt_exp = *(double*)&sqrt_exp;
1248 cmp %o5,_0x7ff00000 ! (3_0) hx ? 0x7ff00000
1249 bge,pn %icc,.update18 ! (3_0) if ( hx >= 0x7ff00000 )
1250 faddd %f60,%f44,%f60 ! (3_1) res += dexp_hi;
1251 .cont18:
1252 lda [%l2]%asi,%f10 ! (4_0) ((float*)&res)[0] = ((float*)px)[0];
1253 sra %o5,15,%i3 ! (3_0) bit = hx >> 15;
1254 add %g5,TBL,%o7 ! (2_0) pind = (char*)TBL + ind1
1255 for %f50,A1,%f44 ! (3_0) res = vis_for(res,A1);
1256
1257 fmuld A5,%f14,%f52 ! (1_0) res = A5 * xx;
1258 sra %o5,7,%o1 ! (3_0) ind0 = hx >> 7;
1259 ldd [%o7],%f22 ! (2_0) dtmp0 = ((double*)pind)[0];
1260 fand %f54,DC3,%f54 ! (2_0) res_c = vis_fand(res_c,DC3);
1261
1262 fmuld %f20,%f40,%f20 ! (5_1) res *= xx;
1263 and %o1,_0x00001ff8,%o1 ! (3_0) ind0 &= 0x1ff8;
1264 sub %l1,512,%o3 ! (3_0) sqrt_exp -= 512;
1265 faddd %f34,A3,%f62 ! (0_0) res += A3;
1266
1267 fpadd32 %f48,%f60,%f12 ! (3_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1268 add %o1,32,%o1 ! (3_0) ind0 += 32;
1269 st %f12,[%g1] ! (3_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1270 fmuld %f24,%f16,%f34 ! (4_1) res = dexp_hi * res;
1271
1272 lda [%l2+4]%asi,%f11 ! (4_0) ((float*)&res)[1] = ((float*)px)[1];
1273 and %i3,32,%i4 ! (3_0) bit &= 32;
1274 and %o1,-64,%o1 ! (3_0) ind0 &= -8;
1275 fsubd %f18,%f54,%f18 ! (2_0) xx = (res - res_c);
1276
1277 or %g0,%o1,%o7 ! (3_0) ind1 = ind0;
1278 add %g1,stridey,%i3 ! py += stridey
1279 st %f13,[%g1+4] ! (3_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1280 faddd %f52,A4,%f54 ! (1_0) res += A4;
1281
1282 fmuld %f62,%f42,%f52 ! (0_0) res *= xx;
1283 cmp %o5,_0x00100000 ! (3_0) hx ? 0x00100000
1284 bl,pn %icc,.update19 ! (3_0) if ( hx < 0x00100000 )
1285 faddd %f20,A1,%f12 ! (5_1) res += A1;
1286 .cont19:
1287 lda [%l2]%asi,%o5 ! (4_0) hx = *(int*)px;
1288 sllx %o3,52,%o3 ! (3_0) sqrt_exp <<= 52;
1289 add %o7,%i4,%g1 ! (3_0) ind1 += bit;
1290 faddd %f34,%f36,%f60 ! (4_1) res += dexp_lo;
1291
1292 fmuld %f18,%f22,%f18 ! (2_0) xx *= dtmp0;
1293 add %l0,TBL,%l0 ! (5_1) pind = (char*)TBL + ind1;
1294 stx %o3,[%fp+tmp4] ! (3_0) dsqrt_exp = *(double*)&sqrt_exp;
1295 fand %f10,DC0,%f50 ! (4_0) res = vis_fand(res,DC0);
1296
1297 fmuld %f54,%f14,%f34 ! (1_0) res *= xx;
1298 add %l2,stridex,%l2 ! px += stridex
1299 ldd [%l0+16],%f36 ! (5_1) dexp_lo = ((double*)pind)[2];
1300 fpadd32 %f44,DC2,%f54 ! (3_0) res_c = vis_fpadd32(res,DC2);
1301
1302 fmuld %f12,%f40,%f16 ! (5_1) res *= xx;
1303 sra %o5,21,%l1 ! (4_0) sqrt_exp = hx >> 21;
1304 ldd [%l0+8],%f40 ! (5_1) dexp_hi = ((double*)pind)[1];
1305 faddd %f52,A2,%f20 ! (0_0) res += A2;
1306
1307 ldd [%fp+tmp5],%f48 ! (4_1) dsqrt_exp = *(double*)&sqrt_exp;
1308 cmp %o5,_0x7ff00000 ! (4_0) hx ? 0x7ff00000
1309 bge,pn %icc,.update20 ! (4_0) if ( hx >= 0x7ff00000 )
1310 faddd %f60,%f24,%f60 ! (4_1) res += dexp_hi;
1311 .cont20:
1312 lda [%l2]%asi,%f10 ! (5_0) ((float*)&res)[0] = ((float*)px)[0];
1313 sra %o5,15,%l0 ! (4_0) bit = hx >> 15;
1314 add %g1,TBL,%o7 ! (3_0) (char*)div_arr+ind0
1315 for %f50,A1,%f24 ! (4_0) res = vis_for(res,A1);
1316
1317 fmuld A5,%f18,%f52 ! (2_0) res = A5 * xx;
1318 sra %o5,7,%o1 ! (4_0) ind0 = hx >> 7;
1319 ldd [%o7],%f22 ! (3_0) dtmp0 = ((double*)pind)[0];
1320 fand %f54,DC3,%f54 ! (3_0) res_c = vis_fand(res_c,DC3);
1321
1322 fmuld %f20,%f42,%f20 ! (0_0) res *= xx;
1323 and %o1,_0x00001ff8,%o1 ! (4_0) ind0 &= 0x1ff8;
1324 sub %l1,512,%o3 ! (4_0) sqrt_exp -= 512;
1325 faddd %f34,A3,%f62 ! (1_0) res += A3;
1326
1327 lda [%l2+4]%asi,%f11 ! (5_0) ((float*)&res)[1] = ((float*)px)[1];
1328 add %o1,32,%o1 ! (4_0) ind0 += 32;
1329 fpadd32 %f48,%f60,%f12 ! (4_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1330 fmuld %f40,%f16,%f34 ! (5_1) res = dexp_hi * res;
1331
1332 and %l0,32,%i4 ! (4_0) bit &= 32;
1333 cmp %o5,_0x00100000 ! (4_0) hx ? 0x00100000
1334 bl,pn %icc,.update21 ! (4_0) if ( hx < 0x00100000 )
1335 fsubd %f44,%f54,%f44 ! (3_0) xx = (res - res_c);
1336 .cont21:
1337 and %o1,-64,%o1 ! (4_0) ind0 &= -8;
1338 sub counter,6,counter ! counter
1339 st %f12,[%i3] ! (4_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1340 faddd %f52,A4,%f54 ! (2_0) res += A4;
1341
1342 st %f13,[%i3+4] ! (4_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1343 cmp counter,6
1344 bge,pt %icc,.main_loop
1345 add %i3,stridey,%l0 ! py += stridey
1346
1347 .tail:
1348 subcc counter,1,counter
1349 bneg .begin
1350 or %g0,%l0,%o4
1351
1352 fmuld %f62,%f14,%f52 ! (1_1) res *= xx;
1353 add %i1,TBL,%i1 ! (0_1) pind = (char*)TBL + ind1;
1354 faddd %f20,A1,%f12 ! (0_1) res += A1;
1355
1356 faddd %f34,%f36,%f60 ! (5_2) res += dexp_lo;
1357
1358 fmuld %f44,%f22,%f44 ! (3_1) xx *= dtmp0;
1359 add %l2,stridex,%l2 ! px += stridex
1360
1361 fmuld %f54,%f18,%f34 ! (2_1) res *= xx;
1362 ldd [%i1+16],%f36 ! (0_1) dexp_lo = ((double*)pind)[2];
1363
1364 fmuld %f12,%f42,%f12 ! (0_1) res *= xx;
1365 ldd [%i1+8],%f42 ! (0_1) dexp_hi = ((double*)pind)[1];
1366 faddd %f52,A2,%f20 ! (1_1) res += A2;
1367
1368 ldd [%fp+tmp0],%f48 ! (5_2) dsqrt_exp = *(double*)&sqrt_exp;
1369 faddd %f60,%f40,%f60 ! (5_2) res += dexp_hi;
1370
1371 fmuld A5,%f44,%f52 ! (3_1) res = A5 * xx;
1372
1373 fmuld %f20,%f14,%f20 ! (1_1) res *= xx;
1374 faddd %f34,A3,%f62 ! (2_1) res += A3;
1375
1376 fmuld %f42,%f12,%f34 ! (0_1) res = dexp_hi * res;
1377 fpadd32 %f48,%f60,%f12 ! (5_2) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1378
1379 st %f12,[%l0] ! (5_2) ((float*)py)[0] = ((float*)&dtmp0)[0];
1380
1381 add %l0,stridey,%i1 ! py += stridey
1382 st %f13,[%l0+4] ! (5_2) ((float*)py)[1] = ((float*)&dtmp0)[1];
1383 faddd %f52,A4,%f54 ! (3_1) res += A4;
1384
1385 subcc counter,1,counter
1386 bneg .begin
1387 or %g0,%i1,%o4
1388
1389 fmuld %f62,%f18,%f52 ! (2_1) res *= xx;
1390 faddd %f20,A1,%f12 ! (1_1) res += A1;
1391
1392 faddd %f34,%f36,%f60 ! (0_1) res += dexp_lo;
1393
1394 add %i2,TBL,%i2 ! (1_1) pind = (char*)TBL + ind1;
1395
1396 fmuld %f54,%f44,%f34 ! (3_1) res *= xx;
1397 add %l2,stridex,%l2 ! px += stridex
1398 ldd [%i2+16],%f36 ! (1_1) dexp_lo = ((double*)pind)[2];
1399
1400 fmuld %f12,%f14,%f12 ! (1_1) res *= xx;
1401 ldd [%i2+8],%f14 ! (1_1) dexp_hi = ((double*)pind)[1];
1402 faddd %f52,A2,%f20 ! (2_1) res += A2;
1403
1404 ldd [%fp+tmp1],%f48 ! (0_1) dsqrt_exp = *(double*)&sqrt_exp;
1405 faddd %f60,%f42,%f60 ! (0_1) res += dexp_hi;
1406
1407 fmuld %f20,%f18,%f20 ! (2_1) res *= xx;
1408 faddd %f34,A3,%f62 ! (3_1) res += A3;
1409
1410 fmuld %f14,%f12,%f34 ! (1_1) res = dexp_hi * res;
1411 fpadd32 %f48,%f60,%f12 ! (0_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1412
1413 st %f12,[%i1] ! (0_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1414
1415 add %i1,stridey,%i2 ! py += stridey
1416 st %f13,[%i1+4] ! (0_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1417
1418 subcc counter,1,counter
1419 bneg .begin
1420 or %g0,%i2,%o4
1421
1422 fmuld %f62,%f44,%f52 ! (3_1) res *= xx;
1423 faddd %f20,A1,%f12 ! (2_1) res += A1;
1424
1425 faddd %f34,%f36,%f60 ! (1_1) res += dexp_lo;
1426
1427 add %g5,TBL,%g5 ! (2_1) pind = (char*)TBL + ind1;
1428
1429 add %l2,stridex,%l2 ! px += stridex
1430 ldd [%g5+16],%f36 ! (2_1) dexp_lo = ((double*)pind)[2];
1431
1432 fmuld %f12,%f18,%f12 ! (2_1) res *= xx;
1433 ldd [%g5+8],%f18 ! (2_1) dexp_hi = ((double*)pind)[1];
1434 faddd %f52,A2,%f20 ! (3_1) res += A2;
1435
1436 ldd [%fp+tmp2],%f48 ! (1_1) dsqrt_exp = *(double*)&sqrt_exp;
1437 faddd %f60,%f14,%f60 ! (1_1) res += dexp_hi;
1438
1439 fmuld %f20,%f44,%f20 ! (3_1) res *= xx;
1440
1441 fmuld %f18,%f12,%f34 ! (2_1) res = dexp_hi * res;
1442 fpadd32 %f48,%f60,%f12 ! (1_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1443
1444 st %f12,[%i2] ! (1_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1445
1446 add %i2,stridey,%g5 ! py += stridey
1447 st %f13,[%i2+4] ! (1_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1448
1449 subcc counter,1,counter
1450 bneg .begin
1451 or %g0,%g5,%o4
1452
1453 faddd %f20,A1,%f12 ! (3_1) res += A1;
1454
1455 faddd %f34,%f36,%f60 ! (2_1) res += dexp_lo;
1456
1457 add %g1,TBL,%g1 ! (3_1) pind = (char*)TBL + ind1;
1458
1459 add %l2,stridex,%l2 ! px += stridex
1460 ldd [%g1+16],%f36 ! (3_1) dexp_lo = ((double*)pind)[2];
1461
1462 fmuld %f12,%f44,%f12 ! (3_1) res *= xx;
1463 ldd [%g1+8],%f44 ! (3_1) dexp_hi = ((double*)pind)[1];
1464
1465 ldd [%fp+tmp3],%f48 ! (2_1) dsqrt_exp = *(double*)&sqrt_exp;
1466 faddd %f60,%f18,%f60 ! (2_1) res += dexp_hi;
1467
1468 fmuld %f44,%f12,%f34 ! (3_1) res = dexp_hi * res;
1469 fpadd32 %f48,%f60,%f12 ! (2_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1470
1471 st %f12,[%g5] ! (2_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1472
1473 add %g5,stridey,%g1 ! py += stridey
1474 st %f13,[%g5+4] ! (2_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1475
1476 subcc counter,1,counter
1477 bneg .begin
1478 or %g0,%g1,%o4
1479
1480 faddd %f34,%f36,%f60 ! (3_1) res += dexp_lo;
1481
1482 add %l2,stridex,%l2 ! px += stridex
1483
1484 ldd [%fp+tmp4],%f48 ! (3_1) dsqrt_exp = *(double*)&sqrt_exp;
1485 faddd %f60,%f44,%f60 ! (3_1) res += dexp_hi;
1486
1487 fpadd32 %f48,%f60,%f12 ! (3_1) dtmp0 = vis_fpadd32(dsqrt_exp,res);
1488
1489 st %f12,[%g1] ! (3_1) ((float*)py)[0] = ((float*)&dtmp0)[0];
1490
1491 add %g1,stridey,%i3 ! py += stridey
1492 st %f13,[%g1+4] ! (3_1) ((float*)py)[1] = ((float*)&dtmp0)[1];
1493
1494 ba .begin
1495 or %g0,%i3,%o4
1496
1497 .align 16
1498 .spec:
1499 fsqrtd %f10,%f10
1500 add %l2,stridex,%l2
1501
1502 st %f10,[%o4]
1503 st %f11,[%o4+4]
1504
1505 add %o4,stridey,%o4
1506 ba .begin1
1507 sub counter,1,counter
1508
1509 .align 16
1510 .update0:
1511 cmp counter,1
1512 ble .cont0
1513 nop
1514
1515 sub %l2,stridex,%i5
1516 stx %i5,[%fp+tmp_px]
1517
1518 sub counter,1,counter
1519 st counter,[%fp+tmp_counter]
1520
1521 ba .cont0
1522 or %g0,1,counter
1523
1524 .align 16
1525 .update1:
1526 cmp counter,1
1527 ble .cont1
1528 nop
1529
1530 sub %l2,stridex,%i5
1531 stx %i5,[%fp+tmp_px]
1532
1533 sub counter,1,counter
1534 st counter,[%fp+tmp_counter]
1535
1536 ba .cont1
1537 or %g0,1,counter
1538
1539 .align 16
1540 .update2:
1541 cmp counter,2
1542 ble .cont2
1543 nop
1544
1545 sub %l2,stridex,%i5
1546 stx %i5,[%fp+tmp_px]
1547
1548 sub counter,2,counter
1549 st counter,[%fp+tmp_counter]
1550
1551 ba .cont2
1552 or %g0,2,counter
1553
1554 .align 16
1555 .update3:
1556 cmp counter,2
1557 ble .cont3
1558 nop
1559
1560 sub %l2,stridex,%i5
1561 stx %i5,[%fp+tmp_px]
1562
1563 sub counter,2,counter
1564 st counter,[%fp+tmp_counter]
1565
1566 ba .cont3
1567 or %g0,2,counter
1568
1569 .align 16
1570 .update4:
1571 cmp counter,3
1572 ble .cont4
1573 nop
1574
1575 sub %l2,stridex,%i5
1576 stx %i5,[%fp+tmp_px]
1577
1578 sub counter,3,counter
1579 st counter,[%fp+tmp_counter]
1580
1581 ba .cont4
1582 or %g0,3,counter
1583
1584 .align 16
1585 .update5:
1586 cmp counter,3
1587 ble .cont5
1588 nop
1589
1590 sub %l2,stridex,%i5
1591 stx %i5,[%fp+tmp_px]
1592
1593 sub counter,3,counter
1594 st counter,[%fp+tmp_counter]
1595
1596 ba .cont5
1597 or %g0,3,counter
1598
1599 .align 16
1600 .update6:
1601 cmp counter,4
1602 ble .cont6
1603 nop
1604
1605 sub %l2,stridex,%i5
1606 stx %i5,[%fp+tmp_px]
1607
1608 sub counter,4,counter
1609 st counter,[%fp+tmp_counter]
1610
1611 ba .cont6
1612 or %g0,4,counter
1613
1614 .align 16
1615 .update7:
1616 cmp counter,4
1617 ble .cont7
1618 nop
1619
1620 sub %l2,stridex,%i5
1621 stx %i5,[%fp+tmp_px]
1622
1623 sub counter,4,counter
1624 st counter,[%fp+tmp_counter]
1625
1626 ba .cont7
1627 or %g0,4,counter
1628
1629 .align 16
1630 .update8:
1631 cmp counter,5
1632 ble .cont8
1633 nop
1634
1635 sub %l2,stridex,%i5
1636 stx %i5,[%fp+tmp_px]
1637
1638 sub counter,5,counter
1639 st counter,[%fp+tmp_counter]
1640
1641 ba .cont8
1642 or %g0,5,counter
1643
1644 .align 16
1645 .update9:
1646 cmp counter,5
1647 ble .cont9
1648 nop
1649
1650 sub %l2,stridex,%i5
1651 stx %i5,[%fp+tmp_px]
1652
1653 sub counter,5,counter
1654 st counter,[%fp+tmp_counter]
1655
1656 ba .cont9
1657 or %g0,5,counter
1658
1659 .align 16
1660 .update10:
1661 cmp counter,6
1662 ble .cont10
1663 nop
1664
1665 sub %l2,stridex,%i5
1666 stx %i5,[%fp+tmp_px]
1667
1668 sub counter,6,counter
1669 st counter,[%fp+tmp_counter]
1670
1671 ba .cont10
1672 or %g0,6,counter
1673
1674 .align 16
1675 .update11:
1676 cmp counter,6
1677 ble .cont11
1678 nop
1679
1680 sub %l2,stridex,%i5
1681 stx %i5,[%fp+tmp_px]
1682
1683 sub counter,6,counter
1684 st counter,[%fp+tmp_counter]
1685
1686 ba .cont11
1687 or %g0,6,counter
1688
1689 .align 16
1690 .update12:
1691 cmp counter,7
1692 ble .cont12
1693 nop
1694
1695 sub %l2,stridex,%i5
1696 stx %i5,[%fp+tmp_px]
1697
1698 sub counter,7,counter
1699 st counter,[%fp+tmp_counter]
1700
1701 ba .cont12
1702 or %g0,7,counter
1703
1704 .align 16
1705 .update13:
1706 cmp counter,7
1707 ble .cont13
1708 nop
1709
1710 sub %l2,stridex,%i5
1711 stx %i5,[%fp+tmp_px]
1712
1713 sub counter,7,counter
1714 st counter,[%fp+tmp_counter]
1715
1716 ba .cont13
1717 or %g0,7,counter
1718
1719 .align 16
1720 .update14:
1721 cmp counter,8
1722 ble .cont14
1723 nop
1724
1725 sub %l2,stridex,%i5
1726 stx %i5,[%fp+tmp_px]
1727
1728 sub counter,8,counter
1729 st counter,[%fp+tmp_counter]
1730
1731 ba .cont14
1732 or %g0,8,counter
1733
1734 .align 16
1735 .update15:
1736 cmp counter,8
1737 ble .cont15
1738 nop
1739
1740 sub %l2,stridex,%i5
1741 stx %i5,[%fp+tmp_px]
1742
1743 sub counter,8,counter
1744 st counter,[%fp+tmp_counter]
1745
1746 ba .cont15
1747 or %g0,8,counter
1748
1749 .align 16
1750 .update16:
1751 cmp counter,9
1752 ble .cont16
1753 nop
1754
1755 sub %l2,stridex,%i5
1756 stx %i5,[%fp+tmp_px]
1757
1758 sub counter,9,counter
1759 st counter,[%fp+tmp_counter]
1760
1761 ba .cont16
1762 or %g0,9,counter
1763
1764 .align 16
1765 .update17:
1766 cmp counter,9
1767 ble .cont17
1768 nop
1769
1770 sub %l2,stridex,%i5
1771 stx %i5,[%fp+tmp_px]
1772
1773 sub counter,9,counter
1774 st counter,[%fp+tmp_counter]
1775
1776 ba .cont17
1777 or %g0,9,counter
1778
1779 .align 16
1780 .update18:
1781 cmp counter,10
1782 ble .cont18
1783 nop
1784
1785 sub %l2,stridex,%i5
1786 stx %i5,[%fp+tmp_px]
1787
1788 sub counter,10,counter
1789 st counter,[%fp+tmp_counter]
1790
1791 ba .cont18
1792 or %g0,10,counter
1793
1794 .align 16
1795 .update19:
1796 cmp counter,10
1797 ble .cont19
1798 nop
1799
1800 sub %l2,stridex,%i5
1801 stx %i5,[%fp+tmp_px]
1802
1803 sub counter,10,counter
1804 st counter,[%fp+tmp_counter]
1805
1806 ba .cont19
1807 or %g0,10,counter
1808
1809 .align 16
1810 .update20:
1811 cmp counter,11
1812 ble .cont20
1813 nop
1814
1815 sub %l2,stridex,%i5
1816 stx %i5,[%fp+tmp_px]
1817
1818 sub counter,11,counter
1819 st counter,[%fp+tmp_counter]
1820
1821 ba .cont20
1822 or %g0,11,counter
1823
1824 .align 16
1825 .update21:
1826 cmp counter,11
1827 ble .cont21
1828 nop
1829
1830 sub %l2,stridex,%i5
1831 stx %i5,[%fp+tmp_px]
1832
1833 sub counter,11,counter
1834 st counter,[%fp+tmp_counter]
1835
1836 ba .cont21
1837 or %g0,11,counter
1838
1839 .exit:
1840 ret
1841 restore
1842
1843 SET_SIZE(__vsqrt)
1844