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 "__vexp.S" 30 31#include "libm.h" 32 33 RO_DATA 34 35/******************************************************************** 36 * vexp() algorithm is from mopt:f_exp.c. Basics are included here 37 * to supplement comments within this file. vexp() has been unrolled 38 * to a depth of 3. Only element 0 is documented. 39 * 40 * Note 1: INVLN2_256, LN2_256H, and LN2_256L were originally scaled by 41 * 2^44 to allow *2^k w/o shifting within the FP registers. These 42 * had to be removed for CHEETAH to avoid the fdtox of a very large 43 * number, which would trap to kernel (2^52). 44 * 45 * Let x = (k + j/256)ln2 + r 46 * then exp(x) = exp(ln2^(k+j/256)) * exp(r) 47 * = 2^k * 2^(j/256) * exp(r) 48 * where r is polynomial approximation 49 * exp(r) = 1 + r + r^2*B1 + r^3*B2 + r^4*B3 50 * = 1 + r*(1+r*(B1+r*(B2+r*B3))) 51 * let 52 * p = r*(1+r*(B1+r*(B2+r*B3))) ! notice, not quite exp(r) 53 * q = 2^(j/256) (high 64 bits) 54 * t = 2^(j/256) (extra precision) ! both from _TBL_exp_z[] 55 * then 56 * 2^(j/256) * exp(r) = (q+t)(1+p) ~ q + ( t + q*p ) 57 * then actual computation is 2^k * ( q + ( t + q*p ) ) 58 * 59 ********************************************************************/ 60 61 .align 16 62TBL: 63 .word 0x3ff00000,0x00000000 64 .word 0x00000000,0x00000000 65 .word 0x3ff00b1a,0xfa5abcbf 66 .word 0xbc84f6b2,0xa7609f71 67 .word 0x3ff0163d,0xa9fb3335 68 .word 0x3c9b6129,0x9ab8cdb7 69 .word 0x3ff02168,0x143b0281 70 .word 0xbc82bf31,0x0fc54eb6 71 .word 0x3ff02c9a,0x3e778061 72 .word 0xbc719083,0x535b085d 73 .word 0x3ff037d4,0x2e11bbcc 74 .word 0x3c656811,0xeeade11a 75 .word 0x3ff04315,0xe86e7f85 76 .word 0xbc90a31c,0x1977c96e 77 .word 0x3ff04e5f,0x72f654b1 78 .word 0x3c84c379,0x3aa0d08c 79 .word 0x3ff059b0,0xd3158574 80 .word 0x3c8d73e2,0xa475b465 81 .word 0x3ff0650a,0x0e3c1f89 82 .word 0xbc95cb7b,0x5799c396 83 .word 0x3ff0706b,0x29ddf6de 84 .word 0xbc8c91df,0xe2b13c26 85 .word 0x3ff07bd4,0x2b72a836 86 .word 0x3c832334,0x54458700 87 .word 0x3ff08745,0x18759bc8 88 .word 0x3c6186be,0x4bb284ff 89 .word 0x3ff092bd,0xf66607e0 90 .word 0xbc968063,0x800a3fd1 91 .word 0x3ff09e3e,0xcac6f383 92 .word 0x3c914878,0x18316136 93 .word 0x3ff0a9c7,0x9b1f3919 94 .word 0x3c85d16c,0x873d1d38 95 .word 0x3ff0b558,0x6cf9890f 96 .word 0x3c98a62e,0x4adc610a 97 .word 0x3ff0c0f1,0x45e46c85 98 .word 0x3c94f989,0x06d21cef 99 .word 0x3ff0cc92,0x2b7247f7 100 .word 0x3c901edc,0x16e24f71 101 .word 0x3ff0d83b,0x23395dec 102 .word 0xbc9bc14d,0xe43f316a 103 .word 0x3ff0e3ec,0x32d3d1a2 104 .word 0x3c403a17,0x27c57b53 105 .word 0x3ff0efa5,0x5fdfa9c5 106 .word 0xbc949db9,0xbc54021b 107 .word 0x3ff0fb66,0xaffed31b 108 .word 0xbc6b9bed,0xc44ebd7b 109 .word 0x3ff10730,0x28d7233e 110 .word 0x3c8d46eb,0x1692fdd5 111 .word 0x3ff11301,0xd0125b51 112 .word 0xbc96c510,0x39449b3a 113 .word 0x3ff11edb,0xab5e2ab6 114 .word 0xbc9ca454,0xf703fb72 115 .word 0x3ff12abd,0xc06c31cc 116 .word 0xbc51b514,0xb36ca5c7 117 .word 0x3ff136a8,0x14f204ab 118 .word 0xbc67108f,0xba48dcf0 119 .word 0x3ff1429a,0xaea92de0 120 .word 0xbc932fbf,0x9af1369e 121 .word 0x3ff14e95,0x934f312e 122 .word 0xbc8b91e8,0x39bf44ab 123 .word 0x3ff15a98,0xc8a58e51 124 .word 0x3c82406a,0xb9eeab0a 125 .word 0x3ff166a4,0x5471c3c2 126 .word 0x3c58f23b,0x82ea1a32 127 .word 0x3ff172b8,0x3c7d517b 128 .word 0xbc819041,0xb9d78a76 129 .word 0x3ff17ed4,0x8695bbc0 130 .word 0x3c709e3f,0xe2ac5a64 131 .word 0x3ff18af9,0x388c8dea 132 .word 0xbc911023,0xd1970f6c 133 .word 0x3ff19726,0x58375d2f 134 .word 0x3c94aadd,0x85f17e08 135 .word 0x3ff1a35b,0xeb6fcb75 136 .word 0x3c8e5b4c,0x7b4968e4 137 .word 0x3ff1af99,0xf8138a1c 138 .word 0x3c97bf85,0xa4b69280 139 .word 0x3ff1bbe0,0x84045cd4 140 .word 0xbc995386,0x352ef607 141 .word 0x3ff1c82f,0x95281c6b 142 .word 0x3c900977,0x8010f8c9 143 .word 0x3ff1d487,0x3168b9aa 144 .word 0x3c9e016e,0x00a2643c 145 .word 0x3ff1e0e7,0x5eb44027 146 .word 0xbc96fdd8,0x088cb6de 147 .word 0x3ff1ed50,0x22fcd91d 148 .word 0xbc91df98,0x027bb78c 149 .word 0x3ff1f9c1,0x8438ce4d 150 .word 0xbc9bf524,0xa097af5c 151 .word 0x3ff2063b,0x88628cd6 152 .word 0x3c8dc775,0x814a8494 153 .word 0x3ff212be,0x3578a819 154 .word 0x3c93592d,0x2cfcaac9 155 .word 0x3ff21f49,0x917ddc96 156 .word 0x3c82a97e,0x9494a5ee 157 .word 0x3ff22bdd,0xa27912d1 158 .word 0x3c8d34fb,0x5577d69e 159 .word 0x3ff2387a,0x6e756238 160 .word 0x3c99b07e,0xb6c70573 161 .word 0x3ff2451f,0xfb82140a 162 .word 0x3c8acfcc,0x911ca996 163 .word 0x3ff251ce,0x4fb2a63f 164 .word 0x3c8ac155,0xbef4f4a4 165 .word 0x3ff25e85,0x711ece75 166 .word 0x3c93e1a2,0x4ac31b2c 167 .word 0x3ff26b45,0x65e27cdd 168 .word 0x3c82bd33,0x9940e9d9 169 .word 0x3ff2780e,0x341ddf29 170 .word 0x3c9e067c,0x05f9e76c 171 .word 0x3ff284df,0xe1f56381 172 .word 0xbc9a4c3a,0x8c3f0d7e 173 .word 0x3ff291ba,0x7591bb70 174 .word 0xbc82cc72,0x28401cbc 175 .word 0x3ff29e9d,0xf51fdee1 176 .word 0x3c8612e8,0xafad1255 177 .word 0x3ff2ab8a,0x66d10f13 178 .word 0xbc995743,0x191690a7 179 .word 0x3ff2b87f,0xd0dad990 180 .word 0xbc410adc,0xd6381aa4 181 .word 0x3ff2c57e,0x39771b2f 182 .word 0xbc950145,0xa6eb5124 183 .word 0x3ff2d285,0xa6e4030b 184 .word 0x3c900247,0x54db41d5 185 .word 0x3ff2df96,0x1f641589 186 .word 0x3c9d16cf,0xfbbce198 187 .word 0x3ff2ecaf,0xa93e2f56 188 .word 0x3c71ca0f,0x45d52383 189 .word 0x3ff2f9d2,0x4abd886b 190 .word 0xbc653c55,0x532bda93 191 .word 0x3ff306fe,0x0a31b715 192 .word 0x3c86f46a,0xd23182e4 193 .word 0x3ff31432,0xedeeb2fd 194 .word 0x3c8959a3,0xf3f3fcd0 195 .word 0x3ff32170,0xfc4cd831 196 .word 0x3c8a9ce7,0x8e18047c 197 .word 0x3ff32eb8,0x3ba8ea32 198 .word 0xbc9c45e8,0x3cb4f318 199 .word 0x3ff33c08,0xb26416ff 200 .word 0x3c932721,0x843659a6 201 .word 0x3ff34962,0x66e3fa2d 202 .word 0xbc835a75,0x930881a4 203 .word 0x3ff356c5,0x5f929ff1 204 .word 0xbc8b5cee,0x5c4e4628 205 .word 0x3ff36431,0xa2de883b 206 .word 0xbc8c3144,0xa06cb85e 207 .word 0x3ff371a7,0x373aa9cb 208 .word 0xbc963aea,0xbf42eae2 209 .word 0x3ff37f26,0x231e754a 210 .word 0xbc99f5ca,0x9eceb23c 211 .word 0x3ff38cae,0x6d05d866 212 .word 0xbc9e958d,0x3c9904bd 213 .word 0x3ff39a40,0x1b7140ef 214 .word 0xbc99a9a5,0xfc8e2934 215 .word 0x3ff3a7db,0x34e59ff7 216 .word 0xbc75e436,0xd661f5e3 217 .word 0x3ff3b57f,0xbfec6cf4 218 .word 0x3c954c66,0xe26fff18 219 .word 0x3ff3c32d,0xc313a8e5 220 .word 0xbc9efff8,0x375d29c3 221 .word 0x3ff3d0e5,0x44ede173 222 .word 0x3c7fe8d0,0x8c284c71 223 .word 0x3ff3dea6,0x4c123422 224 .word 0x3c8ada09,0x11f09ebc 225 .word 0x3ff3ec70,0xdf1c5175 226 .word 0xbc8af663,0x7b8c9bca 227 .word 0x3ff3fa45,0x04ac801c 228 .word 0xbc97d023,0xf956f9f3 229 .word 0x3ff40822,0xc367a024 230 .word 0x3c8bddf8,0xb6f4d048 231 .word 0x3ff4160a,0x21f72e2a 232 .word 0xbc5ef369,0x1c309278 233 .word 0x3ff423fb,0x2709468a 234 .word 0xbc98462d,0xc0b314dd 235 .word 0x3ff431f5,0xd950a897 236 .word 0xbc81c7dd,0xe35f7998 237 .word 0x3ff43ffa,0x3f84b9d4 238 .word 0x3c8880be,0x9704c002 239 .word 0x3ff44e08,0x6061892d 240 .word 0x3c489b7a,0x04ef80d0 241 .word 0x3ff45c20,0x42a7d232 242 .word 0xbc686419,0x82fb1f8e 243 .word 0x3ff46a41,0xed1d0057 244 .word 0x3c9c944b,0xd1648a76 245 .word 0x3ff4786d,0x668b3237 246 .word 0xbc9c20f0,0xed445733 247 .word 0x3ff486a2,0xb5c13cd0 248 .word 0x3c73c1a3,0xb69062f0 249 .word 0x3ff494e1,0xe192aed2 250 .word 0xbc83b289,0x5e499ea0 251 .word 0x3ff4a32a,0xf0d7d3de 252 .word 0x3c99cb62,0xf3d1be56 253 .word 0x3ff4b17d,0xea6db7d7 254 .word 0xbc8125b8,0x7f2897f0 255 .word 0x3ff4bfda,0xd5362a27 256 .word 0x3c7d4397,0xafec42e2 257 .word 0x3ff4ce41,0xb817c114 258 .word 0x3c905e29,0x690abd5d 259 .word 0x3ff4dcb2,0x99fddd0d 260 .word 0x3c98ecdb,0xbc6a7833 261 .word 0x3ff4eb2d,0x81d8abff 262 .word 0xbc95257d,0x2e5d7a52 263 .word 0x3ff4f9b2,0x769d2ca7 264 .word 0xbc94b309,0xd25957e3 265 .word 0x3ff50841,0x7f4531ee 266 .word 0x3c7a249b,0x49b7465f 267 .word 0x3ff516da,0xa2cf6642 268 .word 0xbc8f7685,0x69bd93ee 269 .word 0x3ff5257d,0xe83f4eef 270 .word 0xbc7c998d,0x43efef71 271 .word 0x3ff5342b,0x569d4f82 272 .word 0xbc807abe,0x1db13cac 273 .word 0x3ff542e2,0xf4f6ad27 274 .word 0x3c87926d,0x192d5f7e 275 .word 0x3ff551a4,0xca5d920f 276 .word 0xbc8d689c,0xefede59a 277 .word 0x3ff56070,0xdde910d2 278 .word 0xbc90fb6e,0x168eebf0 279 .word 0x3ff56f47,0x36b527da 280 .word 0x3c99bb2c,0x011d93ad 281 .word 0x3ff57e27,0xdbe2c4cf 282 .word 0xbc90b98c,0x8a57b9c4 283 .word 0x3ff58d12,0xd497c7fd 284 .word 0x3c8295e1,0x5b9a1de8 285 .word 0x3ff59c08,0x27ff07cc 286 .word 0xbc97e2ce,0xe467e60f 287 .word 0x3ff5ab07,0xdd485429 288 .word 0x3c96324c,0x054647ad 289 .word 0x3ff5ba11,0xfba87a03 290 .word 0xbc9b77a1,0x4c233e1a 291 .word 0x3ff5c926,0x8a5946b7 292 .word 0x3c3c4b1b,0x816986a2 293 .word 0x3ff5d845,0x90998b93 294 .word 0xbc9cd6a7,0xa8b45642 295 .word 0x3ff5e76f,0x15ad2148 296 .word 0x3c9ba6f9,0x3080e65e 297 .word 0x3ff5f6a3,0x20dceb71 298 .word 0xbc89eadd,0xe3cdcf92 299 .word 0x3ff605e1,0xb976dc09 300 .word 0xbc93e242,0x9b56de47 301 .word 0x3ff6152a,0xe6cdf6f4 302 .word 0x3c9e4b3e,0x4ab84c27 303 .word 0x3ff6247e,0xb03a5585 304 .word 0xbc9383c1,0x7e40b497 305 .word 0x3ff633dd,0x1d1929fd 306 .word 0x3c984710,0xbeb964e5 307 .word 0x3ff64346,0x34ccc320 308 .word 0xbc8c483c,0x759d8932 309 .word 0x3ff652b9,0xfebc8fb7 310 .word 0xbc9ae3d5,0xc9a73e08 311 .word 0x3ff66238,0x82552225 312 .word 0xbc9bb609,0x87591c34 313 .word 0x3ff671c1,0xc70833f6 314 .word 0xbc8e8732,0x586c6134 315 .word 0x3ff68155,0xd44ca973 316 .word 0x3c6038ae,0x44f73e65 317 .word 0x3ff690f4,0xb19e9538 318 .word 0x3c8804bd,0x9aeb445c 319 .word 0x3ff6a09e,0x667f3bcd 320 .word 0xbc9bdd34,0x13b26456 321 .word 0x3ff6b052,0xfa75173e 322 .word 0x3c7a38f5,0x2c9a9d0e 323 .word 0x3ff6c012,0x750bdabf 324 .word 0xbc728956,0x67ff0b0d 325 .word 0x3ff6cfdc,0xddd47645 326 .word 0x3c9c7aa9,0xb6f17309 327 .word 0x3ff6dfb2,0x3c651a2f 328 .word 0xbc6bbe3a,0x683c88ab 329 .word 0x3ff6ef92,0x98593ae5 330 .word 0xbc90b974,0x9e1ac8b2 331 .word 0x3ff6ff7d,0xf9519484 332 .word 0xbc883c0f,0x25860ef6 333 .word 0x3ff70f74,0x66f42e87 334 .word 0x3c59d644,0xd45aa65f 335 .word 0x3ff71f75,0xe8ec5f74 336 .word 0xbc816e47,0x86887a99 337 .word 0x3ff72f82,0x86ead08a 338 .word 0xbc920aa0,0x2cd62c72 339 .word 0x3ff73f9a,0x48a58174 340 .word 0xbc90a8d9,0x6c65d53c 341 .word 0x3ff74fbd,0x35d7cbfd 342 .word 0x3c9047fd,0x618a6e1c 343 .word 0x3ff75feb,0x564267c9 344 .word 0xbc902459,0x57316dd3 345 .word 0x3ff77024,0xb1ab6e09 346 .word 0x3c9b7877,0x169147f8 347 .word 0x3ff78069,0x4fde5d3f 348 .word 0x3c9866b8,0x0a02162c 349 .word 0x3ff790b9,0x38ac1cf6 350 .word 0x3c9349a8,0x62aadd3e 351 .word 0x3ff7a114,0x73eb0187 352 .word 0xbc841577,0xee04992f 353 .word 0x3ff7b17b,0x0976cfdb 354 .word 0xbc9bebb5,0x8468dc88 355 .word 0x3ff7c1ed,0x0130c132 356 .word 0x3c9f124c,0xd1164dd6 357 .word 0x3ff7d26a,0x62ff86f0 358 .word 0x3c91bddb,0xfb72b8b4 359 .word 0x3ff7e2f3,0x36cf4e62 360 .word 0x3c705d02,0xba15797e 361 .word 0x3ff7f387,0x8491c491 362 .word 0xbc807f11,0xcf9311ae 363 .word 0x3ff80427,0x543e1a12 364 .word 0xbc927c86,0x626d972b 365 .word 0x3ff814d2,0xadd106d9 366 .word 0x3c946437,0x0d151d4d 367 .word 0x3ff82589,0x994cce13 368 .word 0xbc9d4c1d,0xd41532d8 369 .word 0x3ff8364c,0x1eb941f7 370 .word 0x3c999b9a,0x31df2bd5 371 .word 0x3ff8471a,0x4623c7ad 372 .word 0xbc88d684,0xa341cdfb 373 .word 0x3ff857f4,0x179f5b21 374 .word 0xbc5ba748,0xf8b216d0 375 .word 0x3ff868d9,0x9b4492ec 376 .word 0x3ca01c83,0xb21584a3 377 .word 0x3ff879ca,0xd931a436 378 .word 0x3c85d2d7,0xd2db47bc 379 .word 0x3ff88ac7,0xd98a6699 380 .word 0x3c9994c2,0xf37cb53a 381 .word 0x3ff89bd0,0xa478580f 382 .word 0x3c9d5395,0x4475202a 383 .word 0x3ff8ace5,0x422aa0db 384 .word 0x3c96e9f1,0x56864b27 385 .word 0x3ff8be05,0xbad61778 386 .word 0x3c9ecb5e,0xfc43446e 387 .word 0x3ff8cf32,0x16b5448c 388 .word 0xbc70d55e,0x32e9e3aa 389 .word 0x3ff8e06a,0x5e0866d9 390 .word 0xbc97114a,0x6fc9b2e6 391 .word 0x3ff8f1ae,0x99157736 392 .word 0x3c85cc13,0xa2e3976c 393 .word 0x3ff902fe,0xd0282c8a 394 .word 0x3c9592ca,0x85fe3fd2 395 .word 0x3ff9145b,0x0b91ffc6 396 .word 0xbc9dd679,0x2e582524 397 .word 0x3ff925c3,0x53aa2fe2 398 .word 0xbc83455f,0xa639db7f 399 .word 0x3ff93737,0xb0cdc5e5 400 .word 0xbc675fc7,0x81b57ebc 401 .word 0x3ff948b8,0x2b5f98e5 402 .word 0xbc8dc3d6,0x797d2d99 403 .word 0x3ff95a44,0xcbc8520f 404 .word 0xbc764b7c,0x96a5f039 405 .word 0x3ff96bdd,0x9a7670b3 406 .word 0xbc5ba596,0x7f19c896 407 .word 0x3ff97d82,0x9fde4e50 408 .word 0xbc9d185b,0x7c1b85d0 409 .word 0x3ff98f33,0xe47a22a2 410 .word 0x3c7cabda,0xa24c78ed 411 .word 0x3ff9a0f1,0x70ca07ba 412 .word 0xbc9173bd,0x91cee632 413 .word 0x3ff9b2bb,0x4d53fe0d 414 .word 0xbc9dd84e,0x4df6d518 415 .word 0x3ff9c491,0x82a3f090 416 .word 0x3c7c7c46,0xb071f2be 417 .word 0x3ff9d674,0x194bb8d5 418 .word 0xbc9516be,0xa3dd8233 419 .word 0x3ff9e863,0x19e32323 420 .word 0x3c7824ca,0x78e64c6e 421 .word 0x3ff9fa5e,0x8d07f29e 422 .word 0xbc84a9ce,0xaaf1face 423 .word 0x3ffa0c66,0x7b5de565 424 .word 0xbc935949,0x5d1cd533 425 .word 0x3ffa1e7a,0xed8eb8bb 426 .word 0x3c9c6618,0xee8be70e 427 .word 0x3ffa309b,0xec4a2d33 428 .word 0x3c96305c,0x7ddc36ab 429 .word 0x3ffa42c9,0x80460ad8 430 .word 0xbc9aa780,0x589fb120 431 .word 0x3ffa5503,0xb23e255d 432 .word 0xbc9d2f6e,0xdb8d41e1 433 .word 0x3ffa674a,0x8af46052 434 .word 0x3c650f56,0x30670366 435 .word 0x3ffa799e,0x1330b358 436 .word 0x3c9bcb7e,0xcac563c6 437 .word 0x3ffa8bfe,0x53c12e59 438 .word 0xbc94f867,0xb2ba15a8 439 .word 0x3ffa9e6b,0x5579fdbf 440 .word 0x3c90fac9,0x0ef7fd31 441 .word 0x3ffab0e5,0x21356eba 442 .word 0x3c889c31,0xdae94544 443 .word 0x3ffac36b,0xbfd3f37a 444 .word 0xbc8f9234,0xcae76cd0 445 .word 0x3ffad5ff,0x3a3c2774 446 .word 0x3c97ef3b,0xb6b1b8e4 447 .word 0x3ffae89f,0x995ad3ad 448 .word 0x3c97a1cd,0x345dcc81 449 .word 0x3ffafb4c,0xe622f2ff 450 .word 0xbc94b2fc,0x0f315ecc 451 .word 0x3ffb0e07,0x298db666 452 .word 0xbc9bdef5,0x4c80e425 453 .word 0x3ffb20ce,0x6c9a8952 454 .word 0x3c94dd02,0x4a0756cc 455 .word 0x3ffb33a2,0xb84f15fb 456 .word 0xbc62805e,0x3084d708 457 .word 0x3ffb4684,0x15b749b1 458 .word 0xbc7f763d,0xe9df7c90 459 .word 0x3ffb5972,0x8de5593a 460 .word 0xbc9c71df,0xbbba6de3 461 .word 0x3ffb6c6e,0x29f1c52a 462 .word 0x3c92a8f3,0x52883f6e 463 .word 0x3ffb7f76,0xf2fb5e47 464 .word 0xbc75584f,0x7e54ac3b 465 .word 0x3ffb928c,0xf22749e4 466 .word 0xbc9b7216,0x54cb65c6 467 .word 0x3ffba5b0,0x30a1064a 468 .word 0xbc9efcd3,0x0e54292e 469 .word 0x3ffbb8e0,0xb79a6f1f 470 .word 0xbc3f52d1,0xc9696205 471 .word 0x3ffbcc1e,0x904bc1d2 472 .word 0x3c823dd0,0x7a2d9e84 473 .word 0x3ffbdf69,0xc3f3a207 474 .word 0xbc3c2623,0x60ea5b52 475 .word 0x3ffbf2c2,0x5bd71e09 476 .word 0xbc9efdca,0x3f6b9c73 477 .word 0x3ffc0628,0x6141b33d 478 .word 0xbc8d8a5a,0xa1fbca34 479 .word 0x3ffc199b,0xdd85529c 480 .word 0x3c811065,0x895048dd 481 .word 0x3ffc2d1c,0xd9fa652c 482 .word 0xbc96e516,0x17c8a5d7 483 .word 0x3ffc40ab,0x5fffd07a 484 .word 0x3c9b4537,0xe083c60a 485 .word 0x3ffc5447,0x78fafb22 486 .word 0x3c912f07,0x2493b5af 487 .word 0x3ffc67f1,0x2e57d14b 488 .word 0x3c92884d,0xff483cad 489 .word 0x3ffc7ba8,0x8988c933 490 .word 0xbc8e76bb,0xbe255559 491 .word 0x3ffc8f6d,0x9406e7b5 492 .word 0x3c71acbc,0x48805c44 493 .word 0x3ffca340,0x5751c4db 494 .word 0xbc87f2be,0xd10d08f4 495 .word 0x3ffcb720,0xdcef9069 496 .word 0x3c7503cb,0xd1e949db 497 .word 0x3ffccb0f,0x2e6d1675 498 .word 0xbc7d220f,0x86009093 499 .word 0x3ffcdf0b,0x555dc3fa 500 .word 0xbc8dd83b,0x53829d72 501 .word 0x3ffcf315,0x5b5bab74 502 .word 0xbc9a08e9,0xb86dff57 503 .word 0x3ffd072d,0x4a07897c 504 .word 0xbc9cbc37,0x43797a9c 505 .word 0x3ffd1b53,0x2b08c968 506 .word 0x3c955636,0x219a36ee 507 .word 0x3ffd2f87,0x080d89f2 508 .word 0xbc9d487b,0x719d8578 509 .word 0x3ffd43c8,0xeacaa1d6 510 .word 0x3c93db53,0xbf5a1614 511 .word 0x3ffd5818,0xdcfba487 512 .word 0x3c82ed02,0xd75b3706 513 .word 0x3ffd6c76,0xe862e6d3 514 .word 0x3c5fe87a,0x4a8165a0 515 .word 0x3ffd80e3,0x16c98398 516 .word 0xbc911ec1,0x8beddfe8 517 .word 0x3ffd955d,0x71ff6075 518 .word 0x3c9a052d,0xbb9af6be 519 .word 0x3ffda9e6,0x03db3285 520 .word 0x3c9c2300,0x696db532 521 .word 0x3ffdbe7c,0xd63a8315 522 .word 0xbc9b76f1,0x926b8be4 523 .word 0x3ffdd321,0xf301b460 524 .word 0x3c92da57,0x78f018c2 525 .word 0x3ffde7d5,0x641c0658 526 .word 0xbc9ca552,0x8e79ba8f 527 .word 0x3ffdfc97,0x337b9b5f 528 .word 0xbc91a5cd,0x4f184b5c 529 .word 0x3ffe1167,0x6b197d17 530 .word 0xbc72b529,0xbd5c7f44 531 .word 0x3ffe2646,0x14f5a129 532 .word 0xbc97b627,0x817a1496 533 .word 0x3ffe3b33,0x3b16ee12 534 .word 0xbc99f4a4,0x31fdc68a 535 .word 0x3ffe502e,0xe78b3ff6 536 .word 0x3c839e89,0x80a9cc8f 537 .word 0x3ffe6539,0x24676d76 538 .word 0xbc863ff8,0x7522b734 539 .word 0x3ffe7a51,0xfbc74c83 540 .word 0x3c92d522,0xca0c8de2 541 .word 0x3ffe8f79,0x77cdb740 542 .word 0xbc910894,0x80b054b1 543 .word 0x3ffea4af,0xa2a490da 544 .word 0xbc9e9c23,0x179c2893 545 .word 0x3ffeb9f4,0x867cca6e 546 .word 0x3c94832f,0x2293e4f2 547 .word 0x3ffecf48,0x2d8e67f1 548 .word 0xbc9c93f3,0xb411ad8c 549 .word 0x3ffee4aa,0xa2188510 550 .word 0x3c91c68d,0xa487568d 551 .word 0x3ffefa1b,0xee615a27 552 .word 0x3c9dc7f4,0x86a4b6b0 553 .word 0x3fff0f9c,0x1cb6412a 554 .word 0xbc932200,0x65181d45 555 .word 0x3fff252b,0x376bba97 556 .word 0x3c93a1a5,0xbf0d8e43 557 .word 0x3fff3ac9,0x48dd7274 558 .word 0xbc795a5a,0x3ed837de 559 .word 0x3fff5076,0x5b6e4540 560 .word 0x3c99d3e1,0x2dd8a18b 561 .word 0x3fff6632,0x798844f8 562 .word 0x3c9fa37b,0x3539343e 563 .word 0x3fff7bfd,0xad9cbe14 564 .word 0xbc9dbb12,0xd006350a 565 .word 0x3fff91d8,0x02243c89 566 .word 0xbc612ea8,0xa779f689 567 .word 0x3fffa7c1,0x819e90d8 568 .word 0x3c874853,0xf3a5931e 569 .word 0x3fffbdba,0x3692d514 570 .word 0xbc796773,0x15098eb6 571 .word 0x3fffd3c2,0x2b8f71f1 572 .word 0x3c62eb74,0x966579e7 573 .word 0x3fffe9d9,0x6b2a23d9 574 .word 0x3c74a603,0x7442fde3 575 576 .align 16 577constants: 578 .word 0x3ef00000,0x00000000 579 .word 0x40862e42,0xfefa39ef 580 .word 0x01000000,0x00000000 581 .word 0x7f000000,0x00000000 582 .word 0x80000000,0x00000000 583 .word 0x43f00000,0x00000000 ! scaling 2^12 two96 584 .word 0xfff00000,0x00000000 585 .word 0x3ff00000,0x00000000 586 .word 0x3fdfffff,0xfffffff6 587 .word 0x3fc55555,0x721a1d14 588 .word 0x3fa55555,0x6e0896af 589 .word 0x41371547,0x652b82fe ! scaling 2^12 invln2_256 590 .word 0x3ea62e42,0xfee00000 ! scaling 2^(-12) ln2_256h 591 .word 0x3caa39ef,0x35793c76 ! scaling 2^(-12) ln2_256l 592 593 ! base set w/o scaling 594 ! .word 0x43300000,0x00000000 ! scaling two96 595 ! .word 0x40771547,0x652b82fe ! scaling invln2_256 596 ! .word 0x3f662e42,0xfee00000 ! scaling ln2_256h 597 ! .word 0x3d6a39ef,0x35793c76 ! scaling ln2_256l 598 599#define ox3ef 0x0 600#define thresh 0x8 601#define tiny 0x10 602#define huge 0x18 603#define signbit 0x20 604#define two96 0x28 605#define neginf 0x30 606#define one 0x38 607#define B1OFF 0x40 608#define B2OFF 0x48 609#define B3OFF 0x50 610#define invln2_256 0x58 611#define ln2_256h 0x60 612#define ln2_256l 0x68 613 614! local storage indices 615 616#define m2 STACK_BIAS-0x4 617#define m1 STACK_BIAS-0x8 618#define m0 STACK_BIAS-0xc 619#define jnk STACK_BIAS-0x20 620! sizeof temp storage - must be a multiple of 16 for V9 621#define tmps 0x20 622 623! register use 624 625! i0 n 626! i1 x 627! i2 stridex 628! i3 y 629! i4 stridey 630! i5 0x80000000 631 632! g1 TBL 633 634! l0 m0 635! l1 m1 636! l2 m2 637! l3 j0,oy0 638! l4 j1,oy1 639! l5 j2,oy2 640! l6 0x3e300000 641! l7 0x40862e41 642 643! o0 py0 644! o1 py1 645! o2 py2 646! o3 scratch 647! o4 scratch 648! o5 0x40874910 649! o7 0x7ff00000 650 651! f0 x0 652! f2 653! f4 654! f6 655! f8 656! f10 x1 657! f12 658! f14 659! f16 660! f18 661! f20 x2 662! f22 663! f24 664! f26 665! f28 666! f30 667! f32 668! f34 669! f36 0x3ef0... 670! f38 thresh 671! f40 tiny 672! f42 huge 673! f44 signbit 674! f46 two96 675! f48 neginf 676! f50 one 677! f52 B1 678! f54 B2 679! f56 B3 680! f58 invln2_256 681! f60 ln2_256h 682! f62 ln2_256l 683#define BOUNDRY %f36 684#define THRESH %f38 685#define TINY %f40 686#define HUGE %f42 687#define SIGNBIT %f44 688#define TWO96 %f46 689#define NEGINF %f48 690#define ONE %f50 691#define B1 %f52 692#define B2 %f54 693#define B3 %f56 694#define INVLN2_256 %f58 695#define LN2_256H %f60 696#define LN2_256L %f62 697 698 ENTRY(__vexp) 699 save %sp,-SA(MINFRAME)-tmps,%sp 700 PIC_SETUP(l7) 701 PIC_SET(l7,constants,o3) 702 PIC_SET(l7,TBL,o0) 703 mov %o0,%g1 704 wr %g0,0x82,%asi ! set %asi for non-faulting loads 705 706 sethi %hi(0x80000000),%i5 707 sethi %hi(0x3e300000),%l6 708 sethi %hi(0x40862e41),%l7 709 or %l7,%lo(0x40862e41),%l7 710 sethi %hi(0x40874910),%o5 711 or %o5,%lo(0x40874910),%o5 712 sethi %hi(0x7ff00000),%o7 713 ldd [%o3+ox3ef],BOUNDRY 714 ldd [%o3+thresh],THRESH 715 ldd [%o3+tiny],TINY 716 ldd [%o3+huge],HUGE 717 ldd [%o3+signbit],SIGNBIT 718 ldd [%o3+two96],TWO96 719 ldd [%o3+neginf],NEGINF 720 ldd [%o3+one],ONE 721 ldd [%o3+B1OFF],B1 722 ldd [%o3+B2OFF],B2 723 ldd [%o3+B3OFF],B3 724 ldd [%o3+invln2_256],INVLN2_256 725 ldd [%o3+ln2_256h],LN2_256H 726 ldd [%o3+ln2_256l],LN2_256L 727 sll %i2,3,%i2 ! scale strides 728 sll %i4,3,%i4 729 add %fp,jnk,%l3 ! precondition loop 730 add %fp,jnk,%l4 731 add %fp,jnk,%l5 732 ld [%i1],%l0 ! hx = *x 733 ld [%i1],%f0 734 ld [%i1+4],%f1 735 andn %l0,%i5,%l0 ! hx &= ~0x80000000 736 ba .loop0 737 add %i1,%i2,%i1 ! x += stridex 738 739 .align 16 740! -- 16 byte aligned 741.loop0: 742 lda [%i1]%asi,%l1 ! preload next argument 743 sub %l0,%l6,%o3 744 sub %l7,%l0,%o4 745 fand %f0,SIGNBIT,%f2 ! get sign bit 746 747 lda [%i1]%asi,%f10 748 orcc %o3,%o4,%g0 749 mov %i3,%o0 ! py0 = y 750 bl,pn %icc,.range0 ! if hx < 0x3e300000 or > 0x40862e41 751 752! delay slot 753 lda [%i1+4]%asi,%f11 754 addcc %i0,-1,%i0 755 add %i3,%i4,%i3 ! y += stridey 756 ble,pn %icc,.endloop1 757 758! delay slot 759 andn %l1,%i5,%l1 760 add %i1,%i2,%i1 ! x += stridex 761 for %f2,TWO96,%f2 ! used to strip least sig bits 762 fmuld %f0,INVLN2_256,%f4 ! x/ (ln2/256) , creating k 763 764.loop1: 765 lda [%i1]%asi,%l2 ! preload next argument 766 sub %l1,%l6,%o3 767 sub %l7,%l1,%o4 768 fand %f10,SIGNBIT,%f12 769 770 lda [%i1]%asi,%f20 771 orcc %o3,%o4,%g0 772 mov %i3,%o1 ! py1 = y 773 bl,pn %icc,.range1 ! if hx < 0x3e300000 or > 0x40862e41 774 775! delay slot 776 lda [%i1+4]%asi,%f21 777 addcc %i0,-1,%i0 778 add %i3,%i4,%i3 ! y += stridey 779 ble,pn %icc,.endloop2 780 781! delay slot 782 andn %l2,%i5,%l2 783 add %i1,%i2,%i1 ! x += stridex 784 for %f12,TWO96,%f12 785 fmuld %f10,INVLN2_256,%f14 786 787.loop2: 788 sub %l2,%l6,%o3 789 sub %l7,%l2,%o4 790 fand %f20,SIGNBIT,%f22 791 fmuld %f20,INVLN2_256,%f24 ! okay to put this here; for alignment 792 793 orcc %o3,%o4,%g0 794 bl,pn %icc,.range2 ! if hx < 0x3e300000 or > 0x40862e41 795! delay slot 796 for %f22,TWO96,%f22 797 faddd %f4,%f2,%f4 ! creating k+j/256, sra to zero bits 798 799.cont: 800 faddd %f14,%f12,%f14 801 mov %i3,%o2 ! py2 = y 802 803 faddd %f24,%f22,%f24 804 add %i3,%i4,%i3 ! y += stridey 805 806 ! BUBBLE USIII 807 808 fsubd %f4,%f2,%f8 ! creating k+j/256: sll 809 st %f6,[%l3] ! store previous loop x0 810 811 fsubd %f14,%f12,%f18 812 st %f7,[%l3+4] ! store previous loop x0 813 814 fsubd %f24,%f22,%f28 815 st %f16,[%l4] 816 817 ! BUBBLE USIII 818 819 fmuld %f8,LN2_256H,%f2 ! closest LN2_256 to x 820 st %f17,[%l4+4] 821 822 fmuld %f18,LN2_256H,%f12 823 st %f26,[%l5] 824 825 fmuld %f28,LN2_256H,%f22 826 st %f27,[%l5+4] 827 828 ! BUBBLE USIII 829 830 fsubd %f0,%f2,%f0 ! r = x - p*LN2_256H 831 fmuld %f8,LN2_256L,%f4 ! closest LN2_256 to x , added prec 832 833 fsubd %f10,%f12,%f10 834 fmuld %f18,LN2_256L,%f14 835 836 fsubd %f20,%f22,%f20 837 fmuld %f28,LN2_256L,%f24 838 839 ! BUBBLE USIII 840 841 fsubd %f0,%f4,%f0 ! r -= p*LN2_256L 842 843 fsubd %f10,%f14,%f10 844 845 fsubd %f20,%f24,%f20 846 847!!!!!!!!!!!!!!!!!!! New polynomial reorder starts here 848 849 ! Alternate polynomial grouping allowing non-sequential calc of p 850 ! OLD : p = r * ( 1 + r * ( B1 + r * ( B2 + r * B3) ) ) 851 ! NEW : p = r * [ (1+r*B1) + (r*r) * ( B2 + r * B3) ) ] 852 ! 853 ! let SLi Ri SRi be accumulators 854 855 fmuld %f0,B3,%f2 ! SR1 = r1 * B3 856 fdtoi %f8,%f8 ! convert k+j/256 to int 857 st %f8,[%fp+m0] ! store k, to shift return/use 858 859 fmuld %f10,B3,%f12 ! SR2 = r2 * B3 860 fdtoi %f18,%f18 ! convert k+j/256 to int 861 st %f18,[%fp+m1] ! store k, to shift return/use 862 863 fmuld %f20,B3,%f22 ! SR3 = r3 * B3 864 fdtoi %f28,%f28 ! convert k+j/256 to int 865 st %f28,[%fp+m2] ! store k, to shift return/use 866 867 fmuld %f0,%f0,%f4 ! R1 = r1 * r1 868 869 fmuld %f10,%f10,%f14 ! R2 = r2 * r2 870 faddd %f2,B2,%f2 ! SR1 += B2 871 872 fmuld %f20,%f20,%f24 ! R3 = r3 * r3 873 faddd %f12,B2,%f12 ! SR2 += B2 874 875 faddd %f22,B2,%f22 ! SR3 += B2 876 fmuld %f0,B1,%f6 ! SL1 = r1 * B1 877 878 fmuld %f10,B1,%f32 ! SL2 = r2 * B1 879 fand %f8,NEGINF,%f8 880 ! best here for RAW BYPASS 881 ld [%fp+m0],%l0 ! get nonshifted k into intreg 882 883 fmuld %f20,B1,%f34 ! SL3 = r3 * B1 884 fand %f18,NEGINF,%f18 885 ld [%fp+m1],%l1 ! get nonshifted k into intreg 886 887 fmuld %f4,%f2,%f4 ! R1 = R1 * SR1 888 fand %f28,NEGINF,%f28 889 ld [%fp+m2],%l2 ! get nonshifted k into intreg 890 891 fmuld %f14,%f12,%f14 ! R2 = R2 * SR2 892 faddd %f6,ONE,%f6 ! SL1 += 1 893 894 fmuld %f24,%f22,%f24 ! R3 = R3 * SR3 895 faddd %f32,ONE,%f32 ! SL2 += 1 896 sra %l0,8,%l3 ! shift k tobe offset 256-8byte 897 898 faddd %f34,ONE,%f34 ! SL3 += 1 899 sra %l1,8,%l4 ! shift k tobe offset 256-8byte 900 sra %l2,8,%l5 ! shift k tobe offset 256-8byte 901 902 ! BUBBLE in USIII 903 and %l3,0xff0,%l3 904 and %l4,0xff0,%l4 905 906 907 908 faddd %f6,%f4,%f6 ! R1 = SL1 + R1 909 ldd [%g1+%l3],%f4 ! tbl[j] 910 add %l3,8,%l3 ! inc j 911 and %l5,0xff0,%l5 912 913 914 faddd %f32,%f14,%f32 ! R2 = SL2 + R2 915 ldd [%g1+%l4],%f14 ! tbl[j] 916 add %l4,8,%l4 ! inc j 917 sra %l0,20,%o3 918 919 faddd %f34,%f24,%f34 ! R3 = SL3 + R3 920 ldd [%g1+%l5],%f24 ! tbl[j] 921 add %l5,8,%l5 ! inc j 922 sra %l1,20,%l1 923 924 ! BUBBLE in USIII 925 ldd [%g1+%l4],%f16 ! tbl[j+1] 926 add %o3,1021,%o3 ! inc j 927 928 fmuld %f0,%f6,%f0 ! p1 = r1 * R1 929 ldd [%g1+%l3],%f6 ! tbl[j+1] 930 add %l1,1021,%l1 ! inc j 931 sra %l2,20,%l2 932 933 fmuld %f10,%f32,%f10 ! p2 = r2 * R2 934 ldd [%g1+%l5],%f26 ! tbl[j+1] 935 add %l2,1021,%l2 ! inc j 936 937 fmuld %f20,%f34,%f20 ! p3 = r3 * R3 938 939 940 941 942 943!!!!!!!!!!!!!!!!!!! poly-reorder - ends here 944 945 fmuld %f0,%f4,%f0 ! start exp(x) = exp(r) * tbl[j] 946 mov %o0,%l3 947 948 fmuld %f10,%f14,%f10 949 mov %o1,%l4 950 951 fmuld %f20,%f24,%f20 952 mov %o2,%l5 953 954 faddd %f0,%f6,%f6 ! cont exp(x) : apply tbl[j] high bits 955 lda [%i1]%asi,%l0 ! preload next argument 956 957 faddd %f10,%f16,%f16 958 lda [%i1]%asi,%f0 959 960 faddd %f20,%f26,%f26 961 lda [%i1+4]%asi,%f1 962 963 faddd %f6,%f4,%f6 ! cont exp(x) : apply tbl[j+1] low bits 964 add %i1,%i2,%i1 ! x += stridex 965 966 faddd %f16,%f14,%f16 967 andn %l0,%i5,%l0 968 or %o3,%l1,%o4 969 970! -- 16 byte aligned 971 orcc %o4,%l2,%o4 972 bl,pn %icc,.small 973! delay slot 974 faddd %f26,%f24,%f26 975 976 fpadd32 %f6,%f8,%f6 ! done exp(x) : apply 2^k 977 fpadd32 %f16,%f18,%f16 978 979 980 addcc %i0,-1,%i0 981 bg,pn %icc,.loop0 982! delay slot 983 fpadd32 %f26,%f28,%f26 984 985 ba,pt %icc,.endloop0 986! delay slot 987 nop 988 989 990 .align 16 991.small: 992 tst %o3 993 bge,pt %icc,1f 994! delay slot 995 fpadd32 %f6,%f8,%f6 996 fpadd32 %f6,BOUNDRY,%f6 997 fmuld %f6,TINY,%f6 9981: 999 tst %l1 1000 bge,pt %icc,1f 1001! delay slot 1002 fpadd32 %f16,%f18,%f16 1003 fpadd32 %f16,BOUNDRY,%f16 1004 fmuld %f16,TINY,%f16 10051: 1006 tst %l2 1007 bge,pt %icc,1f 1008! delay slot 1009 fpadd32 %f26,%f28,%f26 1010 fpadd32 %f26,BOUNDRY,%f26 1011 fmuld %f26,TINY,%f26 10121: 1013 addcc %i0,-1,%i0 1014 bg,pn %icc,.loop0 1015! delay slot 1016 nop 1017 ba,pt %icc,.endloop0 1018! delay slot 1019 nop 1020 1021 1022.endloop2: 1023 for %f12,TWO96,%f12 1024 fmuld %f10,INVLN2_256,%f14 1025 faddd %f14,%f12,%f14 1026 fsubd %f14,%f12,%f18 1027 fmuld %f18,LN2_256H,%f12 1028 fsubd %f10,%f12,%f10 1029 fmuld %f18,LN2_256L,%f14 1030 fsubd %f10,%f14,%f10 1031 fmuld %f10,B3,%f12 1032 fdtoi %f18,%f18 1033 st %f18,[%fp+m1] 1034 fmuld %f10,%f10,%f14 1035 faddd %f12,B2,%f12 1036 fmuld %f10,B1,%f32 1037 fand %f18,NEGINF,%f18 1038 ld [%fp+m1],%l1 1039 fmuld %f14,%f12,%f14 1040 faddd %f32,ONE,%f32 1041 sra %l1,8,%o4 1042 and %o4,0xff0,%o4 1043 faddd %f32,%f14,%f32 1044 ldd [%g1+%o4],%f14 1045 add %o4,8,%o4 1046 sra %l1,20,%l1 1047 ldd [%g1+%o4],%f30 1048 addcc %l1,1021,%l1 1049 fmuld %f10,%f32,%f10 1050 fmuld %f10,%f14,%f10 1051 faddd %f10,%f30,%f30 1052 faddd %f30,%f14,%f30 1053 bge,pt %icc,1f 1054! delay slot 1055 fpadd32 %f30,%f18,%f30 1056 fpadd32 %f30,BOUNDRY,%f30 1057 fmuld %f30,TINY,%f30 10581: 1059 st %f30,[%o1] 1060 st %f31,[%o1+4] 1061 1062.endloop1: 1063 for %f2,TWO96,%f2 1064 fmuld %f0,INVLN2_256,%f4 1065 faddd %f4,%f2,%f4 1066 fsubd %f4,%f2,%f8 1067 fmuld %f8,LN2_256H,%f2 1068 fsubd %f0,%f2,%f0 1069 fmuld %f8,LN2_256L,%f4 1070 fsubd %f0,%f4,%f0 1071 fmuld %f0,B3,%f2 1072 fdtoi %f8,%f8 1073 st %f8,[%fp+m0] 1074 fmuld %f0,%f0,%f4 1075 faddd %f2,B2,%f2 1076 fmuld %f0,B1,%f32 1077 fand %f8,NEGINF,%f8 1078 ld [%fp+m0],%l0 1079 fmuld %f4,%f2,%f4 1080 faddd %f32,ONE,%f32 1081 sra %l0,8,%o4 1082 and %o4,0xff0,%o4 1083 faddd %f32,%f4,%f32 1084 ldd [%g1+%o4],%f4 1085 add %o4,8,%o4 1086 sra %l0,20,%o3 1087 ldd [%g1+%o4],%f30 1088 addcc %o3,1021,%o3 1089 fmuld %f0,%f32,%f0 1090 fmuld %f0,%f4,%f0 1091 faddd %f0,%f30,%f30 1092 faddd %f30,%f4,%f30 1093 bge,pt %icc,1f 1094! delay slot 1095 fpadd32 %f30,%f8,%f30 1096 fpadd32 %f30,BOUNDRY,%f30 1097 fmuld %f30,TINY,%f30 10981: 1099 st %f30,[%o0] 1100 st %f31,[%o0+4] 1101 1102.endloop0: 1103 st %f6,[%l3] 1104 st %f7,[%l3+4] 1105 st %f16,[%l4] 1106 st %f17,[%l4+4] 1107 st %f26,[%l5] 1108 st %f27,[%l5+4] 1109 ret 1110 restore 1111 1112 1113.range0: 1114 cmp %l0,%l6 1115 bl,a,pt %icc,3f ! if x is tiny 1116! delay slot, annulled if branch not taken 1117 faddd %f0,ONE,%f4 1118 1119 cmp %l0,%o5 1120 bg,pt %icc,1f ! if x is huge, inf, nan 1121! delay slot 1122 nop 1123 1124 fcmpd %fcc0,%f0,THRESH 1125 fbg,a,pt %fcc0,3f ! if x is huge and positive 1126! delay slot, annulled if branch not taken 1127 fmuld HUGE,HUGE,%f4 1128 1129! x is near the extremes but within range; return to the loop 1130 addcc %i0,-1,%i0 1131 add %i3,%i4,%i3 ! y += stridey 1132 ble,pn %icc,.endloop1 1133! delay slot 1134 andn %l1,%i5,%l1 1135 add %i1,%i2,%i1 ! x += stridex 1136 for %f2,TWO96,%f2 1137 ba,pt %icc,.loop1 1138! delay slot 1139 fmuld %f0,INVLN2_256,%f4 1140 11411: 1142 cmp %l0,%o7 1143 bl,pn %icc,2f ! if x is finite 1144! delay slot 1145 nop 1146 fzero %f4 1147 fcmpd %fcc0,%f0,NEGINF 1148 fmovdne %fcc0,%f0,%f4 1149 ba,pt %icc,3f 1150 fmuld %f4,%f4,%f4 ! x*x or zero*zero 11512: 1152 fmovd HUGE,%f4 1153 fcmpd %fcc0,%f0,ONE 1154 fmovdl %fcc0,TINY,%f4 1155 fmuld %f4,%f4,%f4 ! huge*huge or tiny*tiny 11563: 1157 st %f4,[%o0] 1158 andn %l1,%i5,%l0 1159 add %i1,%i2,%i1 ! x += stridex 1160 fmovd %f10,%f0 1161 st %f5,[%o0+4] 1162 addcc %i0,-1,%i0 1163 bg,pt %icc,.loop0 1164! delay slot 1165 add %i3,%i4,%i3 ! y += stridey 1166 ba,pt %icc,.endloop0 1167! delay slot 1168 nop 1169 1170 1171.range1: 1172 cmp %l1,%l6 1173 bl,a,pt %icc,3f ! if x is tiny 1174! delay slot, annulled if branch not taken 1175 faddd %f10,ONE,%f14 1176 1177 cmp %l1,%o5 1178 bg,pt %icc,1f ! if x is huge, inf, nan 1179! delay slot 1180 nop 1181 1182 fcmpd %fcc0,%f10,THRESH 1183 fbg,a,pt %fcc0,3f ! if x is huge and positive 1184! delay slot, annulled if branch not taken 1185 fmuld HUGE,HUGE,%f14 1186 1187! x is near the extremes but within range; return to the loop 1188 addcc %i0,-1,%i0 1189 add %i3,%i4,%i3 ! y += stridey 1190 ble,pn %icc,.endloop2 1191! delay slot 1192 andn %l2,%i5,%l2 1193 add %i1,%i2,%i1 ! x += stridex 1194 for %f12,TWO96,%f12 1195 ba,pt %icc,.loop2 1196! delay slot 1197 fmuld %f10,INVLN2_256,%f14 1198 11991: 1200 cmp %l1,%o7 1201 bl,pn %icc,2f ! if x is finite 1202! delay slot 1203 nop 1204 fzero %f14 1205 fcmpd %fcc0,%f10,NEGINF 1206 fmovdne %fcc0,%f10,%f14 1207 ba,pt %icc,3f 1208 fmuld %f14,%f14,%f14 ! x*x or zero*zero 12092: 1210 fmovd HUGE,%f14 1211 fcmpd %fcc0,%f10,ONE 1212 fmovdl %fcc0,TINY,%f14 1213 fmuld %f14,%f14,%f14 ! huge*huge or tiny*tiny 12143: 1215 st %f14,[%o1] 1216 andn %l2,%i5,%l1 1217 add %i1,%i2,%i1 ! x += stridex 1218 fmovd %f20,%f10 1219 st %f15,[%o1+4] 1220 addcc %i0,-1,%i0 1221 bg,pt %icc,.loop1 1222! delay slot 1223 add %i3,%i4,%i3 ! y += stridey 1224 ba,pt %icc,.endloop1 1225! delay slot 1226 nop 1227 1228 1229.range2: 1230 cmp %l2,%l6 1231 bl,a,pt %icc,3f ! if x is tiny 1232! delay slot, annulled if branch not taken 1233 faddd %f20,ONE,%f24 1234 1235 cmp %l2,%o5 1236 bg,pt %icc,1f ! if x is huge, inf, nan 1237! delay slot 1238 nop 1239 1240 fcmpd %fcc0,%f20,THRESH 1241 fbg,a,pt %fcc0,3f ! if x is huge and positive 1242! delay slot, annulled if branch not taken 1243 fmuld HUGE,HUGE,%f24 1244 1245! x is near the extremes but within range; return to the loop 1246 ba,pt %icc,.cont 1247! delay slot 1248 faddd %f4,%f2,%f4 1249 12501: 1251 cmp %l2,%o7 1252 bl,pn %icc,2f ! if x is finite 1253! delay slot 1254 nop 1255 fzero %f24 1256 fcmpd %fcc0,%f20,NEGINF 1257 fmovdne %fcc0,%f20,%f24 1258 ba,pt %icc,3f 1259 fmuld %f24,%f24,%f24 ! x*x or zero*zero 12602: 1261 fmovd HUGE,%f24 1262 fcmpd %fcc0,%f20,ONE 1263 fmovdl %fcc0,TINY,%f24 1264 fmuld %f24,%f24,%f24 ! huge*huge or tiny*tiny 12653: 1266 st %f24,[%i3] 1267 st %f25,[%i3+4] 1268 lda [%i1]%asi,%l2 ! preload next argument 1269 lda [%i1]%asi,%f20 1270 lda [%i1+4]%asi,%f21 1271 andn %l2,%i5,%l2 1272 add %i1,%i2,%i1 ! x += stridex 1273 addcc %i0,-1,%i0 1274 bg,pt %icc,.loop2 1275! delay slot 1276 add %i3,%i4,%i3 ! y += stridey 1277 ba,pt %icc,.endloop2 1278! delay slot 1279 nop 1280 1281 SET_SIZE(__vexp) 1282 1283