1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  23  */
  24 /*
  25  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  26  * Use is subject to license terms.
  27  */
  28 
  29         .file   "__vpow.S"
  30 
  31 #include "libm.h"
  32 
  33         RO_DATA
  34         .align  64
  35 
  36 .CONST_TBL:
  37 
  38 ! __mt_constlog2[2*i] = high order rounded 32 bits log2(1+i/256)*256, i = [0, 255]
  39 ! __mt_constlog2[2*i+1] = low order least bits log2(1+i/256)*256, i = [0, 255]
  40 
  41         .word   0x00000000,     0x00000000,     0x00000000,     0x00000000,
  42         .word   0x3ff709c4,     0x00000000,     0x3e9b5eab,     0x1dd2b66f,
  43         .word   0x4006fe51,     0x00000000,     0xbea2443d,     0xeba01c72,
  44         .word   0x40113631,     0x00000000,     0x3e97a97b,     0x0c4bb41a,
  45         .word   0x4016e797,     0x00000000,     0xbebe8f4b,     0x759d6476,
  46         .word   0x401c9364,     0x00000000,     0xbeb15ebc,     0x1e666460,
  47         .word   0x40211cd2,     0x00000000,     0xbeb57665,     0xf6893f5d,
  48         .word   0x4023ed31,     0x00000000,     0xbecae5e9,     0x7677f62d,
  49         .word   0x4026bad3,     0x00000000,     0x3ecd63bf,     0x61cc4d82,
  50         .word   0x402985c0,     0x00000000,     0xbebe5b57,     0x35cfaf8e,
  51         .word   0x402c4dfb,     0x00000000,     0xbec1bd55,     0x2842c1c2,
  52         .word   0x402f138a,     0x00000000,     0xbecf336b,     0x18178cbe,
  53         .word   0x4030eb39,     0x00000000,     0xbed81758,     0x19530c23,
  54         .word   0x40324b5b,     0x00000000,     0x3edf84d6,     0x8f2268b4,
  55         .word   0x4033aa30,     0x00000000,     0xbec16c07,     0x1e93fd97,
  56         .word   0x403507b8,     0x00000000,     0x3ecb019d,     0xdb6a796a,
  57         .word   0x403663f7,     0x00000000,     0xbe94dbb3,     0xa60cceb2,
  58         .word   0x4037beef,     0x00000000,     0xbeda51d7,     0x5fb0ef94,
  59         .word   0x403918a1,     0x00000000,     0x3edb918c,     0xd6ab9c8d,
  60         .word   0x403a7112,     0x00000000,     0xbec065bd,     0xb60a5dd4,
  61         .word   0x403bc842,     0x00000000,     0x3ed02b6a,     0xee98ecb1,
  62         .word   0x403d1e35,     0x00000000,     0xbebca47d,     0x25b2f4c7,
  63         .word   0x403e72ec,     0x00000000,     0x3eb17fa5,     0xb21cbdb6,
  64         .word   0x403fc66a,     0x00000000,     0x3eae1601,     0x49209a69,
  65         .word   0x40408c59,     0x00000000,     0xbeecc961,     0x871a7611,
  66         .word   0x404134e2,     0x00000000,     0xbee2ddbe,     0x74803297,
  67         .word   0x4041dcd2,     0x00000000,     0xbeea2ab5,     0x212856eb,
  68         .word   0x40428429,     0x00000000,     0x3ee2c1e9,     0x8fe35da3,
  69         .word   0x40432aea,     0x00000000,     0xbecd8751,     0xe5e0ae0d,
  70         .word   0x4043d114,     0x00000000,     0x3eeb66a2,     0x98fc02ce,
  71         .word   0x404476aa,     0x00000000,     0xbea9f022,     0xcb3b1c5b,
  72         .word   0x40451bac,     0x00000000,     0xbeebe168,     0xdd6dd3fe,
  73         .word   0x4045c01a,     0x00000000,     0x3edcfdeb,     0x43cfd006,
  74         .word   0x404663f7,     0x00000000,     0xbea4dbb3,     0xa60cceb2,
  75         .word   0x40470743,     0x00000000,     0xbed5887e,     0xc06b1ff2,
  76         .word   0x4047a9ff,     0x00000000,     0xbedc17d1,     0x108740d9,
  77         .word   0x40484c2c,     0x00000000,     0xbed7e87e,     0x268116ee,
  78         .word   0x4048edcb,     0x00000000,     0xbec7cad4,     0x944a32be,
  79         .word   0x40498edd,     0x00000000,     0x3eadf9c3,     0x7c0beb3a,
  80         .word   0x404a2f63,     0x00000000,     0x3ed1905c,     0x35651c43,
  81         .word   0x404acf5e,     0x00000000,     0x3ed6da76,     0x49f7f08f,
  82         .word   0x404b6ecf,     0x00000000,     0x3ec75f95,     0xe96bed8d,
  83         .word   0x404c0db7,     0x00000000,     0xbed91359,     0x08df8ec9,
  84         .word   0x404cac16,     0x00000000,     0x3ede3b86,     0xe44b6265,
  85         .word   0x404d49ee,     0x00000000,     0x3ee30c96,     0x5bf23d2d,
  86         .word   0x404de740,     0x00000000,     0xbecc4eb7,     0xf11e41be,
  87         .word   0x404e840c,     0x00000000,     0xbec8b195,     0xb338360c,
  88         .word   0x404f2053,     0x00000000,     0x3edc9047,     0x93a3ba95,
  89         .word   0x404fbc17,     0x00000000,     0xbee1bf65,     0xfd7715ca,
  90         .word   0x40502bac,     0x00000000,     0xbef76cbe,     0x67113a18,
  91         .word   0x4050790b,     0x00000000,     0xbee227e7,     0xfb487e73,
  92         .word   0x4050c629,     0x00000000,     0x3efd550a,     0xa3a93ec8,
  93         .word   0x40511308,     0x00000000,     0xbee2967a,     0x451a7b48,
  94         .word   0x40515fa6,     0x00000000,     0x3efdaec2,     0x3fd65f8e,
  95         .word   0x4051ac06,     0x00000000,     0xbef35b83,     0xe3eb5ce3,
  96         .word   0x4051f826,     0x00000000,     0xbec24ee3,     0xd9a82f2e,
  97         .word   0x40524408,     0x00000000,     0xbef53c7e,     0x319f6e92,
  98         .word   0x40528fab,     0x00000000,     0x3eead993,     0x41b181d1,
  99         .word   0x4052db11,     0x00000000,     0xbead932a,     0x8487642e,
 100         .word   0x40532639,     0x00000000,     0x3ef8daca,     0x0d66b8f9,
 101         .word   0x40537125,     0x00000000,     0xbee8ad99,     0x09933766,
 102         .word   0x4053bbd4,     0x00000000,     0xbef7d788,     0xc15a9f3d,
 103         .word   0x40540646,     0x00000000,     0x3eed8d82,     0x24bad97a,
 104         .word   0x4054507d,     0x00000000,     0xbe922b03,     0xc6b2a5f6,
 105         .word   0x40549a78,     0x00000000,     0x3ef2f346,     0xe2bf924b,
 106         .word   0x4054e439,     0x00000000,     0xbeffc5c1,     0x258110a4,
 107         .word   0x40552dbe,     0x00000000,     0xbead9b4a,     0x641184f9,
 108         .word   0x40557709,     0x00000000,     0x3edb3378,     0xcab10782,
 109         .word   0x4055c01a,     0x00000000,     0x3eecfdeb,     0x43cfd006,
 110         .word   0x405608f2,     0x00000000,     0xbef2f5ad,     0xd49a43fc,
 111         .word   0x40565190,     0x00000000,     0xbedb9884,     0x591add87,
 112         .word   0x405699f5,     0x00000000,     0x3ee2466a,     0x5c3462a4,
 113         .word   0x4056e222,     0x00000000,     0xbee93179,     0x90d43957,
 114         .word   0x40572a16,     0x00000000,     0x3eebe5e0,     0xc14a1a6d,
 115         .word   0x405771d3,     0x00000000,     0xbef16041,     0x3106e405,
 116         .word   0x4057b958,     0x00000000,     0xbef4eb95,     0x4eea2724,
 117         .word   0x405800a5,     0x00000000,     0x3ef8c587,     0x150cabae,
 118         .word   0x405847bc,     0x00000000,     0x3ee9ec30,     0xc6e3e04a,
 119         .word   0x40588e9c,     0x00000000,     0x3efcb82c,     0x89692d99,
 120         .word   0x4058d546,     0x00000000,     0x3efced70,     0xdc6acf42,
 121         .word   0x40591bbb,     0x00000000,     0xbefdb83a,     0x3dd2d353,
 122         .word   0x405961f9,     0x00000000,     0x3eb49d02,     0x6e33d676,
 123         .word   0x4059a802,     0x00000000,     0x3eec8f11,     0x979a5db7,
 124         .word   0x4059edd6,     0x00000000,     0x3efd66c9,     0x77e236c7,
 125         .word   0x405a3376,     0x00000000,     0x3ec4fec0,     0xa13af882,
 126         .word   0x405a78e1,     0x00000000,     0x3ef1bdef,     0xbd14a081,
 127         .word   0x405abe18,     0x00000000,     0x3efe5fc7,     0xd238691d,
 128         .word   0x405b031c,     0x00000000,     0xbed01f9b,     0xcb999fe9,
 129         .word   0x405b47ec,     0x00000000,     0xbec18efa,     0xbeb7d722,
 130         .word   0x405b8c89,     0x00000000,     0xbee203bc,     0xc3346511,
 131         .word   0x405bd0f3,     0x00000000,     0xbed6186f,     0xcf54bbd3,
 132         .word   0x405c152a,     0x00000000,     0x3efb0932,     0xb9700973,
 133         .word   0x405c5930,     0x00000000,     0xbef4b5a9,     0x2a606047,
 134         .word   0x405c9d03,     0x00000000,     0xbec26b70,     0x98590071,
 135         .word   0x405ce0a5,     0x00000000,     0xbefb7169,     0xe0cda8bd,
 136         .word   0x405d2415,     0x00000000,     0xbeebfa06,     0xc156f521,
 137         .word   0x405d6754,     0x00000000,     0xbedfcd15,     0xf101c142,
 138         .word   0x405daa62,     0x00000000,     0x3ee10327,     0xdc8093a5,
 139         .word   0x405ded40,     0x00000000,     0xbee5dee4,     0xd9d8a273,
 140         .word   0x405e2fed,     0x00000000,     0x3eee84b9,     0x4c06f913,
 141         .word   0x405e726b,     0x00000000,     0xbef7862a,     0xcb7ceb98,
 142         .word   0x405eb4b8,     0x00000000,     0x3ef1f456,     0xf394f972,
 143         .word   0x405ef6d6,     0x00000000,     0x3efcca38,     0x881f4780,
 144         .word   0x405f38c5,     0x00000000,     0x3ef9ef31,     0x50343f8e,
 145         .word   0x405f7a85,     0x00000000,     0x3efa32c1,     0xb3b3864c,
 146         .word   0x405fbc17,     0x00000000,     0xbef1bf65,     0xfd7715ca,
 147         .word   0x405ffd7a,     0x00000000,     0xbef95f00,     0x19518ce0,
 148         .word   0x40601f57,     0x00000000,     0x3ef3b932,     0x6ff91960,
 149         .word   0x40603fdb,     0x00000000,     0xbf0d1a19,     0xa0331af3,
 150         .word   0x40606047,     0x00000000,     0x3ee9f24e,     0xb23e991f,
 151         .word   0x4060809d,     0x00000000,     0xbedb011f,     0x855b4988,
 152         .word   0x4060a0dc,     0x00000000,     0x3efa7c70,     0xfde006c7,
 153         .word   0x4060c105,     0x00000000,     0x3e9ac754,     0xcb104aea,
 154         .word   0x4060e117,     0x00000000,     0x3f0d535f,     0x0444ebab,
 155         .word   0x40610114,     0x00000000,     0xbf03ab0d,     0xc56138c9,
 156         .word   0x406120fa,     0x00000000,     0xbef630f3,     0xfc695a97,
 157         .word   0x406140ca,     0x00000000,     0xbec5786a,     0xf187a96b,
 158         .word   0x40616084,     0x00000000,     0x3f012578,     0x0181e2b3,
 159         .word   0x40618029,     0x00000000,     0xbef846b4,     0x4ad8a38b,
 160         .word   0x40619fb8,     0x00000000,     0xbf01c336,     0xf7a3a78f,
 161         .word   0x4061bf31,     0x00000000,     0x3eee95d0,     0x0de3b514,
 162         .word   0x4061de95,     0x00000000,     0x3eed9cbb,     0xa6187a4d,
 163         .word   0x4061fde4,     0x00000000,     0xbef678bf,     0x6cdedf51,
 164         .word   0x40621d1d,     0x00000000,     0x3f06edb5,     0x668c543d,
 165         .word   0x40623c42,     0x00000000,     0xbef5ec6c,     0x1bfbf89a,
 166         .word   0x40625b51,     0x00000000,     0x3f062dcf,     0x4115a1a3,
 167         .word   0x40627a4c,     0x00000000,     0x3ec6172f,     0xe015e13c,
 168         .word   0x40629932,     0x00000000,     0xbed30dd5,     0x3f5c184c,
 169         .word   0x4062b803,     0x00000000,     0x3f01cfde,     0xb43cfd00,
 170         .word   0x4062d6c0,     0x00000000,     0x3ee35013,     0x8064a94e,
 171         .word   0x4062f568,     0x00000000,     0x3f0d7acf,     0xc98509e3,
 172         .word   0x406313fd,     0x00000000,     0xbf0d7932,     0x43718371,
 173         .word   0x4063327c,     0x00000000,     0x3f0aad27,     0x29b21ae5,
 174         .word   0x406350e8,     0x00000000,     0x3ef92b83,     0xec743665,
 175         .word   0x40636f40,     0x00000000,     0xbec249ba,     0x76fee235,
 176         .word   0x40638d84,     0x00000000,     0xbeefd0a2,     0xf6d7e41e,
 177         .word   0x4063abb4,     0x00000000,     0xbec57f7a,     0x64ccd537,
 178         .word   0x4063c9d0,     0x00000000,     0x3f09242b,     0x8488b305,
 179         .word   0x4063e7d9,     0x00000000,     0x3efbcfb8,     0x0b357154,
 180         .word   0x406405cf,     0x00000000,     0xbf0cb1c2,     0xd10504b4,
 181         .word   0x406423b0,     0x00000000,     0x3f0fa61a,     0xaa59c1d8,
 182         .word   0x4064417f,     0x00000000,     0x3ef26410,     0xb256d8d7,
 183         .word   0x40645f3b,     0x00000000,     0xbf09d77e,     0x31d6ca00,
 184         .word   0x40647ce3,     0x00000000,     0xbeda5fb4,     0xf23978de,
 185         .word   0x40649a78,     0x00000000,     0x3f02f346,     0xe2bf924b,
 186         .word   0x4064b7fb,     0x00000000,     0xbf0106da,     0x1aa0e9e7,
 187         .word   0x4064d56a,     0x00000000,     0x3f06ccf3,     0xb1129b7c,
 188         .word   0x4064f2c7,     0x00000000,     0x3f006a7c,     0xcf9dd420,
 189         .word   0x40651012,     0x00000000,     0xbf0e3dd5,     0xc1c885ae,
 190         .word   0x40652d49,     0x00000000,     0x3f00b91e,     0x4253bd27,
 191         .word   0x40654a6f,     0x00000000,     0xbf0cd6af,     0x1c9393cd,
 192         .word   0x40656781,     0x00000000,     0x3f0ee1ac,     0x0b1ec5ea,
 193         .word   0x40658482,     0x00000000,     0x3ef34c4e,     0x99e1c6c6,
 194         .word   0x4065a171,     0x00000000,     0xbf06d01c,     0xa8f50e5f,
 195         .word   0x4065be4d,     0x00000000,     0x3ed96a28,     0x6955d67e,
 196         .word   0x4065db17,     0x00000000,     0x3f0d4210,     0x4f127092,
 197         .word   0x4065f7d0,     0x00000000,     0xbed7c3ec,     0xa28e69ca,
 198         .word   0x40661477,     0x00000000,     0xbf07f393,     0xbdd98c47,
 199         .word   0x4066310c,     0x00000000,     0xbf0c2ab3,     0xedefe569,
 200         .word   0x40664d8f,     0x00000000,     0xbef44732,     0x0833c207,
 201         .word   0x40666a01,     0x00000000,     0xbf0c6e1d,     0xcd0cb449,
 202         .word   0x40668661,     0x00000000,     0xbefb4848,     0x3c643a24,
 203         .word   0x4066a2b0,     0x00000000,     0xbf08697c,     0x3d7dfd9b,
 204         .word   0x4066beed,     0x00000000,     0x3ef12866,     0xd705c554,
 205         .word   0x4066db19,     0x00000000,     0x3f0a9d86,     0x52765f7c,
 206         .word   0x4066f735,     0x00000000,     0xbf0d0e8e,     0x7a165e04,
 207         .word   0x4067133f,     0x00000000,     0xbf093aa4,     0xe106ba60,
 208         .word   0x40672f38,     0x00000000,     0xbf04bace,     0x940d18ba,
 209         .word   0x40674b20,     0x00000000,     0xbef4d8fc,     0x561c8d44,
 210         .word   0x406766f7,     0x00000000,     0x3ef5931e,     0xf6e6f15b,
 211         .word   0x406782be,     0x00000000,     0xbf000896,     0x6a210de0,
 212         .word   0x40679e74,     0x00000000,     0xbf05dbfe,     0x780eccdb,
 213         .word   0x4067ba19,     0x00000000,     0xbecb2bf4,     0x6fd85522,
 214         .word   0x4067d5ae,     0x00000000,     0xbefd2fc3,     0xaddfdee2,
 215         .word   0x4067f132,     0x00000000,     0x3ef0c167,     0x8ae89767,
 216         .word   0x40680ca6,     0x00000000,     0x3ef034a6,     0xfc6488d1,
 217         .word   0x4068280a,     0x00000000,     0xbef520c7,     0xc69211fe,
 218         .word   0x4068435d,     0x00000000,     0x3f05328d,     0xdcedf39e,
 219         .word   0x40685ea1,     0x00000000,     0xbf03d361,     0x367bde41,
 220         .word   0x406879d4,     0x00000000,     0xbebc2624,     0x7a0cdfbb,
 221         .word   0x406894f7,     0x00000000,     0x3f02c1bb,     0xe2d01ba9,
 222         .word   0x4068b00b,     0x00000000,     0xbf043a4a,     0xd5c7a4dd,
 223         .word   0x4068cb0e,     0x00000000,     0x3efda59d,     0xded9b445,
 224         .word   0x4068e602,     0x00000000,     0x3eb11eb3,     0x043f5602,
 225         .word   0x406900e6,     0x00000000,     0x3ee60002,     0xccfe43f5,
 226         .word   0x40691bbb,     0x00000000,     0xbf0db83a,     0x3dd2d353,
 227         .word   0x4069367f,     0x00000000,     0x3f0b682a,     0xcba73219,
 228         .word   0x40695135,     0x00000000,     0xbef53d8e,     0x8e4c59c3,
 229         .word   0x40696bdb,     0x00000000,     0xbef6a9a5,     0x050809db,
 230         .word   0x40698671,     0x00000000,     0x3f0db68e,     0x0ba15359,
 231         .word   0x4069a0f9,     0x00000000,     0xbef6278f,     0xd810b546,
 232         .word   0x4069bb71,     0x00000000,     0xbec528c6,     0xcdef4d8d,
 233         .word   0x4069d5da,     0x00000000,     0xbeb57f7a,     0x64ccd537,
 234         .word   0x4069f034,     0x00000000,     0xbee33716,     0xa9ae332f,
 235         .word   0x406a0a7f,     0x00000000,     0xbef2d9f7,     0x698ce769,
 236         .word   0x406a24bb,     0x00000000,     0xbef48c02,     0x44aa8cfc,
 237         .word   0x406a3ee8,     0x00000000,     0xbed8e3cf,     0xc25f0ce6,
 238         .word   0x406a5906,     0x00000000,     0x3f0044c5,     0x590979a0,
 239         .word   0x406a7316,     0x00000000,     0xbef7e86f,     0x9c2154fb,
 240         .word   0x406a8d17,     0x00000000,     0xbf03a076,     0x2ed351cd,
 241         .word   0x406aa709,     0x00000000,     0xbed4ffd6,     0x59064390,
 242         .word   0x406ac0ed,     0x00000000,     0xbf04d9bb,     0x3135f0b1,
 243         .word   0x406adac2,     0x00000000,     0xbee8ee37,     0xcd2ea9d3,
 244         .word   0x406af489,     0x00000000,     0xbf02ba1b,     0x4a95229c,
 245         .word   0x406b0e41,     0x00000000,     0x3ef35e64,     0x35ebd377,
 246         .word   0x406b27eb,     0x00000000,     0x3f02fe3c,     0x2291b5ad,
 247         .word   0x406b4187,     0x00000000,     0x3efa5480,     0x45ecbc5d,
 248         .word   0x406b5b15,     0x00000000,     0xbedee0d3,     0x3432f2c3,
 249         .word   0x406b7495,     0x00000000,     0xbf0c2ab3,     0x496d2d24,
 250         .word   0x406b8e06,     0x00000000,     0x3ef04439,     0x848e9d1e,
 251         .word   0x406ba76a,     0x00000000,     0xbf03186d,     0xa6fc41e0,
 252         .word   0x406bc0bf,     0x00000000,     0x3f05fc8d,     0x8164754e,
 253         .word   0x406bda07,     0x00000000,     0x3eecc67e,     0x6db516de,
 254         .word   0x406bf341,     0x00000000,     0x3ee14464,     0xa6bcdf48,
 255         .word   0x406c0c6d,     0x00000000,     0x3f011f17,     0x74d8b66a,
 256         .word   0x406c258c,     0x00000000,     0xbefd4cdb,     0xebaa4121,
 257         .word   0x406c3e9d,     0x00000000,     0xbf074797,     0xeab3259d,
 258         .word   0x406c57a0,     0x00000000,     0xbee44a49,     0xa82ed669,
 259         .word   0x406c7096,     0x00000000,     0xbf045b87,     0x8e27d0d9,
 260         .word   0x406c897e,     0x00000000,     0xbec7c929,     0xc9e33277,
 261         .word   0x406ca259,     0x00000000,     0xbef1ab66,     0x74e5008e,
 262         .word   0x406cbb26,     0x00000000,     0x3f09333f,     0x3d6bb35f,
 263         .word   0x406cd3e7,     0x00000000,     0xbf07cd5d,     0xbe4f6f23,
 264         .word   0x406cec9a,     0x00000000,     0xbf0848eb,     0x7f40a752,
 265         .word   0x406d053f,     0x00000000,     0x3f0b4982,     0x259cc626,
 266         .word   0x406d1dd8,     0x00000000,     0x3ee9b4c3,     0xf0c92723,
 267         .word   0x406d3664,     0x00000000,     0xbf036033,     0x8ab5a1f2,
 268         .word   0x406d4ee2,     0x00000000,     0x3f015971,     0x8aacb6ec,
 269         .word   0x406d6754,     0x00000000,     0xbeefcd15,     0xf101c142,
 270         .word   0x406d7fb9,     0x00000000,     0xbf0bd935,     0x64ee1bf6,
 271         .word   0x406d9810,     0x00000000,     0x3f090f59,     0x8530f102,
 272         .word   0x406db05b,     0x00000000,     0x3f0a28be,     0xd929effb,
 273         .word   0x406dc89a,     0x00000000,     0xbf053002,     0xa4e86631,
 274         .word   0x406de0cb,     0x00000000,     0x3efcb99c,     0x5233429f,
 275         .word   0x406df8f0,     0x00000000,     0x3ef04357,     0x9625f7a4,
 276         .word   0x406e1108,     0x00000000,     0x3f0b6bdd,     0x258a7b23,
 277         .word   0x406e2914,     0x00000000,     0x3ef70700,     0xa00fdd55,
 278         .word   0x406e4113,     0x00000000,     0x3f0bab95,     0x4f46b93f,
 279         .word   0x406e5906,     0x00000000,     0x3efe4411,     0x672b0c89,
 280         .word   0x406e70ed,     0x00000000,     0xbf06e041,     0xe4467502,
 281         .word   0x406e88c7,     0x00000000,     0xbf032765,     0x63557797,
 282         .word   0x406ea094,     0x00000000,     0x3f0d7b8f,     0x0e7b8e75,
 283         .word   0x406eb856,     0x00000000,     0xbeccd5dc,     0x13cad28e,
 284         .word   0x406ed00b,     0x00000000,     0x3f0222fb,     0x08d5c3f2,
 285         .word   0x406ee7b4,     0x00000000,     0x3f0c6cea,     0x541f5b70,
 286         .word   0x406eff52,     0x00000000,     0xbf0fd40b,     0x070e6c33,
 287         .word   0x406f16e3,     0x00000000,     0xbf0f8922,     0x73f1379b,
 288         .word   0x406f2e68,     0x00000000,     0xbf0fa051,     0xeebd4f74,
 289         .word   0x406f45e1,     0x00000000,     0xbf0d0c3e,     0x6aac6ca9,
 290         .word   0x406f5d4e,     0x00000000,     0xbf04c432,     0x5068bc88,
 291         .word   0x406f74af,     0x00000000,     0xbede20a0,     0xa450bc93,
 292         .word   0x406f8c04,     0x00000000,     0x3f08f3a3,     0x1a23946e,
 293         .word   0x406fa34e,     0x00000000,     0x3ee177c2,     0x3362928c,
 294         .word   0x406fba8c,     0x00000000,     0x3ec71513,     0x7cfebaa0,
 295         .word   0x406fd1be,     0x00000000,     0x3f031fca,     0xbe50ac88,
 296         .word   0x406fe8e5,     0x00000000,     0xbedd485c,     0xbfb44c3b,
 297 !
 298         .word   0x01a56e1f,     0xc2f8f359,     ! _TINY = 1.0e-300
 299         .word   0x7e37e43c,     0x8800759c,     ! _HUGE = 1.0e+300
 300         .word   0x3f6d94ae,     0x0bf85de6,     ! KA1_LO  = (1.41052154268147309568e-05*256)
 301         .word   0x40871540,     0x00000000,     ! KA1_HI  = (2.8853759765625e+00*256)
 302         .word   0x3cd5d528,     0x93bc7fec,     ! KB5     = 1.21195555854068860923e-15
 303         .word   0x3e2c6b08,     0xd71f5d1e,     ! KB3     = 3.30830268126604677436e-09
 304         .word   0x3ecebfbd,     0xff82c4ed,     ! KB2     = 3.66556559691003767877e-06
 305         .word   0x3f662e42,     0xfefa39ef,     ! KB1     = 2.70760617406228636578e-03
 306 !
 307 ! __mt_constexp2[2*i] = high order bits 2^(i/256), i = [0, 255]
 308 ! __mt_constexp2[2*i+1] = least bits 2^(i/256), i = [0, 255]
 309 
 310         .word   0x3ff00000,     0x00000000,     0x00000000,     0x00000000,
 311         .word   0x3ff00b1a,     0xfa5abcbf,     0xbc84f6b2,     0xa7609f71,
 312         .word   0x3ff0163d,     0xa9fb3335,     0x3c9b6129,     0x9ab8cdb7,
 313         .word   0x3ff02168,     0x143b0281,     0xbc82bf31,     0x0fc54eb6,
 314         .word   0x3ff02c9a,     0x3e778061,     0xbc719083,     0x535b085d,
 315         .word   0x3ff037d4,     0x2e11bbcc,     0x3c656811,     0xeeade11a,
 316         .word   0x3ff04315,     0xe86e7f85,     0xbc90a31c,     0x1977c96e,
 317         .word   0x3ff04e5f,     0x72f654b1,     0x3c84c379,     0x3aa0d08c,
 318         .word   0x3ff059b0,     0xd3158574,     0x3c8d73e2,     0xa475b465,
 319         .word   0x3ff0650a,     0x0e3c1f89,     0xbc95cb7b,     0x5799c397,
 320         .word   0x3ff0706b,     0x29ddf6de,     0xbc8c91df,     0xe2b13c27,
 321         .word   0x3ff07bd4,     0x2b72a836,     0x3c832334,     0x54458700,
 322         .word   0x3ff08745,     0x18759bc8,     0x3c6186be,     0x4bb284ff,
 323         .word   0x3ff092bd,     0xf66607e0,     0xbc968063,     0x800a3fd1,
 324         .word   0x3ff09e3e,     0xcac6f383,     0x3c914878,     0x18316136,
 325         .word   0x3ff0a9c7,     0x9b1f3919,     0x3c85d16c,     0x873d1d38,
 326         .word   0x3ff0b558,     0x6cf9890f,     0x3c98a62e,     0x4adc610b,
 327         .word   0x3ff0c0f1,     0x45e46c85,     0x3c94f989,     0x06d21cef,
 328         .word   0x3ff0cc92,     0x2b7247f7,     0x3c901edc,     0x16e24f71,
 329         .word   0x3ff0d83b,     0x23395dec,     0xbc9bc14d,     0xe43f316a,
 330         .word   0x3ff0e3ec,     0x32d3d1a2,     0x3c403a17,     0x27c57b52,
 331         .word   0x3ff0efa5,     0x5fdfa9c5,     0xbc949db9,     0xbc54021b,
 332         .word   0x3ff0fb66,     0xaffed31b,     0xbc6b9bed,     0xc44ebd7b,
 333         .word   0x3ff10730,     0x28d7233e,     0x3c8d46eb,     0x1692fdd5,
 334         .word   0x3ff11301,     0xd0125b51,     0xbc96c510,     0x39449b3a,
 335         .word   0x3ff11edb,     0xab5e2ab6,     0xbc9ca454,     0xf703fb72,
 336         .word   0x3ff12abd,     0xc06c31cc,     0xbc51b514,     0xb36ca5c7,
 337         .word   0x3ff136a8,     0x14f204ab,     0xbc67108f,     0xba48dcf0,
 338         .word   0x3ff1429a,     0xaea92de0,     0xbc932fbf,     0x9af1369e,
 339         .word   0x3ff14e95,     0x934f312e,     0xbc8b91e8,     0x39bf44ab,
 340         .word   0x3ff15a98,     0xc8a58e51,     0x3c82406a,     0xb9eeab0a,
 341         .word   0x3ff166a4,     0x5471c3c2,     0x3c58f23b,     0x82ea1a32,
 342         .word   0x3ff172b8,     0x3c7d517b,     0xbc819041,     0xb9d78a76,
 343         .word   0x3ff17ed4,     0x8695bbc0,     0x3c709e3f,     0xe2ac5a64,
 344         .word   0x3ff18af9,     0x388c8dea,     0xbc911023,     0xd1970f6c,
 345         .word   0x3ff19726,     0x58375d2f,     0x3c94aadd,     0x85f17e08,
 346         .word   0x3ff1a35b,     0xeb6fcb75,     0x3c8e5b4c,     0x7b4968e4,
 347         .word   0x3ff1af99,     0xf8138a1c,     0x3c97bf85,     0xa4b69280,
 348         .word   0x3ff1bbe0,     0x84045cd4,     0xbc995386,     0x352ef607,
 349         .word   0x3ff1c82f,     0x95281c6b,     0x3c900977,     0x8010f8c9,
 350         .word   0x3ff1d487,     0x3168b9aa,     0x3c9e016e,     0x00a2643c,
 351         .word   0x3ff1e0e7,     0x5eb44027,     0xbc96fdd8,     0x088cb6de,
 352         .word   0x3ff1ed50,     0x22fcd91d,     0xbc91df98,     0x027bb78c,
 353         .word   0x3ff1f9c1,     0x8438ce4d,     0xbc9bf524,     0xa097af5c,
 354         .word   0x3ff2063b,     0x88628cd6,     0x3c8dc775,     0x814a8495,
 355         .word   0x3ff212be,     0x3578a819,     0x3c93592d,     0x2cfcaac9,
 356         .word   0x3ff21f49,     0x917ddc96,     0x3c82a97e,     0x9494a5ee,
 357         .word   0x3ff22bdd,     0xa27912d1,     0x3c8d34fb,     0x5577d69f,
 358         .word   0x3ff2387a,     0x6e756238,     0x3c99b07e,     0xb6c70573,
 359         .word   0x3ff2451f,     0xfb82140a,     0x3c8acfcc,     0x911ca996,
 360         .word   0x3ff251ce,     0x4fb2a63f,     0x3c8ac155,     0xbef4f4a4,
 361         .word   0x3ff25e85,     0x711ece75,     0x3c93e1a2,     0x4ac31b2c,
 362         .word   0x3ff26b45,     0x65e27cdd,     0x3c82bd33,     0x9940e9d9,
 363         .word   0x3ff2780e,     0x341ddf29,     0x3c9e067c,     0x05f9e76c,
 364         .word   0x3ff284df,     0xe1f56381,     0xbc9a4c3a,     0x8c3f0d7e,
 365         .word   0x3ff291ba,     0x7591bb70,     0xbc82cc72,     0x28401cbd,
 366         .word   0x3ff29e9d,     0xf51fdee1,     0x3c8612e8,     0xafad1255,
 367         .word   0x3ff2ab8a,     0x66d10f13,     0xbc995743,     0x191690a7,
 368         .word   0x3ff2b87f,     0xd0dad990,     0xbc410adc,     0xd6381aa4,
 369         .word   0x3ff2c57e,     0x39771b2f,     0xbc950145,     0xa6eb5124,
 370         .word   0x3ff2d285,     0xa6e4030b,     0x3c900247,     0x54db41d5,
 371         .word   0x3ff2df96,     0x1f641589,     0x3c9d16cf,     0xfbbce198,
 372         .word   0x3ff2ecaf,     0xa93e2f56,     0x3c71ca0f,     0x45d52383,
 373         .word   0x3ff2f9d2,     0x4abd886b,     0xbc653c55,     0x532bda93,
 374         .word   0x3ff306fe,     0x0a31b715,     0x3c86f46a,     0xd23182e4,
 375         .word   0x3ff31432,     0xedeeb2fd,     0x3c8959a3,     0xf3f3fcd1,
 376         .word   0x3ff32170,     0xfc4cd831,     0x3c8a9ce7,     0x8e18047c,
 377         .word   0x3ff32eb8,     0x3ba8ea32,     0xbc9c45e8,     0x3cb4f318,
 378         .word   0x3ff33c08,     0xb26416ff,     0x3c932721,     0x843659a6,
 379         .word   0x3ff34962,     0x66e3fa2d,     0xbc835a75,     0x930881a4,
 380         .word   0x3ff356c5,     0x5f929ff1,     0xbc8b5cee,     0x5c4e4628,
 381         .word   0x3ff36431,     0xa2de883b,     0xbc8c3144,     0xa06cb85e,
 382         .word   0x3ff371a7,     0x373aa9cb,     0xbc963aea,     0xbf42eae2,
 383         .word   0x3ff37f26,     0x231e754a,     0xbc99f5ca,     0x9eceb23c,
 384         .word   0x3ff38cae,     0x6d05d866,     0xbc9e958d,     0x3c9904bd,
 385         .word   0x3ff39a40,     0x1b7140ef,     0xbc99a9a5,     0xfc8e2934,
 386         .word   0x3ff3a7db,     0x34e59ff7,     0xbc75e436,     0xd661f5e3,
 387         .word   0x3ff3b57f,     0xbfec6cf4,     0x3c954c66,     0xe26fff18,
 388         .word   0x3ff3c32d,     0xc313a8e5,     0xbc9efff8,     0x375d29c3,
 389         .word   0x3ff3d0e5,     0x44ede173,     0x3c7fe8d0,     0x8c284c71,
 390         .word   0x3ff3dea6,     0x4c123422,     0x3c8ada09,     0x11f09ebc,
 391         .word   0x3ff3ec70,     0xdf1c5175,     0xbc8af663,     0x7b8c9bca,
 392         .word   0x3ff3fa45,     0x04ac801c,     0xbc97d023,     0xf956f9f3,
 393         .word   0x3ff40822,     0xc367a024,     0x3c8bddf8,     0xb6f4d048,
 394         .word   0x3ff4160a,     0x21f72e2a,     0xbc5ef369,     0x1c309278,
 395         .word   0x3ff423fb,     0x2709468a,     0xbc98462d,     0xc0b314dd,
 396         .word   0x3ff431f5,     0xd950a897,     0xbc81c7dd,     0xe35f7999,
 397         .word   0x3ff43ffa,     0x3f84b9d4,     0x3c8880be,     0x9704c003,
 398         .word   0x3ff44e08,     0x6061892d,     0x3c489b7a,     0x04ef80d0,
 399         .word   0x3ff45c20,     0x42a7d232,     0xbc686419,     0x82fb1f8e,
 400         .word   0x3ff46a41,     0xed1d0057,     0x3c9c944b,     0xd1648a76,
 401         .word   0x3ff4786d,     0x668b3237,     0xbc9c20f0,     0xed445733,
 402         .word   0x3ff486a2,     0xb5c13cd0,     0x3c73c1a3,     0xb69062f0,
 403         .word   0x3ff494e1,     0xe192aed2,     0xbc83b289,     0x5e499ea0,
 404         .word   0x3ff4a32a,     0xf0d7d3de,     0x3c99cb62,     0xf3d1be56,
 405         .word   0x3ff4b17d,     0xea6db7d7,     0xbc8125b8,     0x7f2897f0,
 406         .word   0x3ff4bfda,     0xd5362a27,     0x3c7d4397,     0xafec42e2,
 407         .word   0x3ff4ce41,     0xb817c114,     0x3c905e29,     0x690abd5d,
 408         .word   0x3ff4dcb2,     0x99fddd0d,     0x3c98ecdb,     0xbc6a7833,
 409         .word   0x3ff4eb2d,     0x81d8abff,     0xbc95257d,     0x2e5d7a52,
 410         .word   0x3ff4f9b2,     0x769d2ca7,     0xbc94b309,     0xd25957e3,
 411         .word   0x3ff50841,     0x7f4531ee,     0x3c7a249b,     0x49b7465f,
 412         .word   0x3ff516da,     0xa2cf6642,     0xbc8f7685,     0x69bd93ef,
 413         .word   0x3ff5257d,     0xe83f4eef,     0xbc7c998d,     0x43efef71,
 414         .word   0x3ff5342b,     0x569d4f82,     0xbc807abe,     0x1db13cad,
 415         .word   0x3ff542e2,     0xf4f6ad27,     0x3c87926d,     0x192d5f7e,
 416         .word   0x3ff551a4,     0xca5d920f,     0xbc8d689c,     0xefede59b,
 417         .word   0x3ff56070,     0xdde910d2,     0xbc90fb6e,     0x168eebf0,
 418         .word   0x3ff56f47,     0x36b527da,     0x3c99bb2c,     0x011d93ad,
 419         .word   0x3ff57e27,     0xdbe2c4cf,     0xbc90b98c,     0x8a57b9c4,
 420         .word   0x3ff58d12,     0xd497c7fd,     0x3c8295e1,     0x5b9a1de8,
 421         .word   0x3ff59c08,     0x27ff07cc,     0xbc97e2ce,     0xe467e60f,
 422         .word   0x3ff5ab07,     0xdd485429,     0x3c96324c,     0x054647ad,
 423         .word   0x3ff5ba11,     0xfba87a03,     0xbc9b77a1,     0x4c233e1a,
 424         .word   0x3ff5c926,     0x8a5946b7,     0x3c3c4b1b,     0x816986a2,
 425         .word   0x3ff5d845,     0x90998b93,     0xbc9cd6a7,     0xa8b45643,
 426         .word   0x3ff5e76f,     0x15ad2148,     0x3c9ba6f9,     0x3080e65e,
 427         .word   0x3ff5f6a3,     0x20dceb71,     0xbc89eadd,     0xe3cdcf92,
 428         .word   0x3ff605e1,     0xb976dc09,     0xbc93e242,     0x9b56de47,
 429         .word   0x3ff6152a,     0xe6cdf6f4,     0x3c9e4b3e,     0x4ab84c27,
 430         .word   0x3ff6247e,     0xb03a5585,     0xbc9383c1,     0x7e40b497,
 431         .word   0x3ff633dd,     0x1d1929fd,     0x3c984710,     0xbeb964e5,
 432         .word   0x3ff64346,     0x34ccc320,     0xbc8c483c,     0x759d8933,
 433         .word   0x3ff652b9,     0xfebc8fb7,     0xbc9ae3d5,     0xc9a73e09,
 434         .word   0x3ff66238,     0x82552225,     0xbc9bb609,     0x87591c34,
 435         .word   0x3ff671c1,     0xc70833f6,     0xbc8e8732,     0x586c6134,
 436         .word   0x3ff68155,     0xd44ca973,     0x3c6038ae,     0x44f73e65,
 437         .word   0x3ff690f4,     0xb19e9538,     0x3c8804bd,     0x9aeb445d,
 438         .word   0x3ff6a09e,     0x667f3bcd,     0xbc9bdd34,     0x13b26456,
 439         .word   0x3ff6b052,     0xfa75173e,     0x3c7a38f5,     0x2c9a9d0e,
 440         .word   0x3ff6c012,     0x750bdabf,     0xbc728956,     0x67ff0b0d,
 441         .word   0x3ff6cfdc,     0xddd47645,     0x3c9c7aa9,     0xb6f17309,
 442         .word   0x3ff6dfb2,     0x3c651a2f,     0xbc6bbe3a,     0x683c88ab,
 443         .word   0x3ff6ef92,     0x98593ae5,     0xbc90b974,     0x9e1ac8b2,
 444         .word   0x3ff6ff7d,     0xf9519484,     0xbc883c0f,     0x25860ef6,
 445         .word   0x3ff70f74,     0x66f42e87,     0x3c59d644,     0xd45aa65f,
 446         .word   0x3ff71f75,     0xe8ec5f74,     0xbc816e47,     0x86887a99,
 447         .word   0x3ff72f82,     0x86ead08a,     0xbc920aa0,     0x2cd62c72,
 448         .word   0x3ff73f9a,     0x48a58174,     0xbc90a8d9,     0x6c65d53c,
 449         .word   0x3ff74fbd,     0x35d7cbfd,     0x3c9047fd,     0x618a6e1c,
 450         .word   0x3ff75feb,     0x564267c9,     0xbc902459,     0x57316dd3,
 451         .word   0x3ff77024,     0xb1ab6e09,     0x3c9b7877,     0x169147f8,
 452         .word   0x3ff78069,     0x4fde5d3f,     0x3c9866b8,     0x0a02162d,
 453         .word   0x3ff790b9,     0x38ac1cf6,     0x3c9349a8,     0x62aadd3e,
 454         .word   0x3ff7a114,     0x73eb0187,     0xbc841577,     0xee04992f,
 455         .word   0x3ff7b17b,     0x0976cfdb,     0xbc9bebb5,     0x8468dc88,
 456         .word   0x3ff7c1ed,     0x0130c132,     0x3c9f124c,     0xd1164dd6,
 457         .word   0x3ff7d26a,     0x62ff86f0,     0x3c91bddb,     0xfb72b8b4,
 458         .word   0x3ff7e2f3,     0x36cf4e62,     0x3c705d02,     0xba15797e,
 459         .word   0x3ff7f387,     0x8491c491,     0xbc807f11,     0xcf9311ae,
 460         .word   0x3ff80427,     0x543e1a12,     0xbc927c86,     0x626d972b,
 461         .word   0x3ff814d2,     0xadd106d9,     0x3c946437,     0x0d151d4d,
 462         .word   0x3ff82589,     0x994cce13,     0xbc9d4c1d,     0xd41532d8,
 463         .word   0x3ff8364c,     0x1eb941f7,     0x3c999b9a,     0x31df2bd5,
 464         .word   0x3ff8471a,     0x4623c7ad,     0xbc88d684,     0xa341cdfb,
 465         .word   0x3ff857f4,     0x179f5b21,     0xbc5ba748,     0xf8b216d0,
 466         .word   0x3ff868d9,     0x9b4492ed,     0xbc9fc6f8,     0x9bd4f6ba,
 467         .word   0x3ff879ca,     0xd931a436,     0x3c85d2d7,     0xd2db47bd,
 468         .word   0x3ff88ac7,     0xd98a6699,     0x3c9994c2,     0xf37cb53a,
 469         .word   0x3ff89bd0,     0xa478580f,     0x3c9d5395,     0x4475202a,
 470         .word   0x3ff8ace5,     0x422aa0db,     0x3c96e9f1,     0x56864b27,
 471         .word   0x3ff8be05,     0xbad61778,     0x3c9ecb5e,     0xfc43446e,
 472         .word   0x3ff8cf32,     0x16b5448c,     0xbc70d55e,     0x32e9e3aa,
 473         .word   0x3ff8e06a,     0x5e0866d9,     0xbc97114a,     0x6fc9b2e6,
 474         .word   0x3ff8f1ae,     0x99157736,     0x3c85cc13,     0xa2e3976c,
 475         .word   0x3ff902fe,     0xd0282c8a,     0x3c9592ca,     0x85fe3fd2,
 476         .word   0x3ff9145b,     0x0b91ffc6,     0xbc9dd679,     0x2e582524,
 477         .word   0x3ff925c3,     0x53aa2fe2,     0xbc83455f,     0xa639db7f,
 478         .word   0x3ff93737,     0xb0cdc5e5,     0xbc675fc7,     0x81b57ebc,
 479         .word   0x3ff948b8,     0x2b5f98e5,     0xbc8dc3d6,     0x797d2d99,
 480         .word   0x3ff95a44,     0xcbc8520f,     0xbc764b7c,     0x96a5f039,
 481         .word   0x3ff96bdd,     0x9a7670b3,     0xbc5ba596,     0x7f19c896,
 482         .word   0x3ff97d82,     0x9fde4e50,     0xbc9d185b,     0x7c1b85d1,
 483         .word   0x3ff98f33,     0xe47a22a2,     0x3c7cabda,     0xa24c78ec,
 484         .word   0x3ff9a0f1,     0x70ca07ba,     0xbc9173bd,     0x91cee632,
 485         .word   0x3ff9b2bb,     0x4d53fe0d,     0xbc9dd84e,     0x4df6d518,
 486         .word   0x3ff9c491,     0x82a3f090,     0x3c7c7c46,     0xb071f2be,
 487         .word   0x3ff9d674,     0x194bb8d5,     0xbc9516be,     0xa3dd8233,
 488         .word   0x3ff9e863,     0x19e32323,     0x3c7824ca,     0x78e64c6e,
 489         .word   0x3ff9fa5e,     0x8d07f29e,     0xbc84a9ce,     0xaaf1face,
 490         .word   0x3ffa0c66,     0x7b5de565,     0xbc935949,     0x5d1cd533,
 491         .word   0x3ffa1e7a,     0xed8eb8bb,     0x3c9c6618,     0xee8be70e,
 492         .word   0x3ffa309b,     0xec4a2d33,     0x3c96305c,     0x7ddc36ab,
 493         .word   0x3ffa42c9,     0x80460ad8,     0xbc9aa780,     0x589fb120,
 494         .word   0x3ffa5503,     0xb23e255d,     0xbc9d2f6e,     0xdb8d41e1,
 495         .word   0x3ffa674a,     0x8af46052,     0x3c650f56,     0x30670366,
 496         .word   0x3ffa799e,     0x1330b358,     0x3c9bcb7e,     0xcac563c7,
 497         .word   0x3ffa8bfe,     0x53c12e59,     0xbc94f867,     0xb2ba15a9,
 498         .word   0x3ffa9e6b,     0x5579fdbf,     0x3c90fac9,     0x0ef7fd31,
 499         .word   0x3ffab0e5,     0x21356eba,     0x3c889c31,     0xdae94545,
 500         .word   0x3ffac36b,     0xbfd3f37a,     0xbc8f9234,     0xcae76cd0,
 501         .word   0x3ffad5ff,     0x3a3c2774,     0x3c97ef3b,     0xb6b1b8e5,
 502         .word   0x3ffae89f,     0x995ad3ad,     0x3c97a1cd,     0x345dcc81,
 503         .word   0x3ffafb4c,     0xe622f2ff,     0xbc94b2fc,     0x0f315ecd,
 504         .word   0x3ffb0e07,     0x298db666,     0xbc9bdef5,     0x4c80e425,
 505         .word   0x3ffb20ce,     0x6c9a8952,     0x3c94dd02,     0x4a0756cc,
 506         .word   0x3ffb33a2,     0xb84f15fb,     0xbc62805e,     0x3084d708,
 507         .word   0x3ffb4684,     0x15b749b1,     0xbc7f763d,     0xe9df7c90,
 508         .word   0x3ffb5972,     0x8de5593a,     0xbc9c71df,     0xbbba6de3,
 509         .word   0x3ffb6c6e,     0x29f1c52a,     0x3c92a8f3,     0x52883f6e,
 510         .word   0x3ffb7f76,     0xf2fb5e47,     0xbc75584f,     0x7e54ac3b,
 511         .word   0x3ffb928c,     0xf22749e4,     0xbc9b7216,     0x54cb65c6,
 512         .word   0x3ffba5b0,     0x30a1064a,     0xbc9efcd3,     0x0e54292e,
 513         .word   0x3ffbb8e0,     0xb79a6f1f,     0xbc3f52d1,     0xc9696205,
 514         .word   0x3ffbcc1e,     0x904bc1d2,     0x3c823dd0,     0x7a2d9e84,
 515         .word   0x3ffbdf69,     0xc3f3a207,     0xbc3c2623,     0x60ea5b52,
 516         .word   0x3ffbf2c2,     0x5bd71e09,     0xbc9efdca,     0x3f6b9c73,
 517         .word   0x3ffc0628,     0x6141b33d,     0xbc8d8a5a,     0xa1fbca34,
 518         .word   0x3ffc199b,     0xdd85529c,     0x3c811065,     0x895048dd,
 519         .word   0x3ffc2d1c,     0xd9fa652c,     0xbc96e516,     0x17c8a5d7,
 520         .word   0x3ffc40ab,     0x5fffd07a,     0x3c9b4537,     0xe083c60a,
 521         .word   0x3ffc5447,     0x78fafb22,     0x3c912f07,     0x2493b5af,
 522         .word   0x3ffc67f1,     0x2e57d14b,     0x3c92884d,     0xff483cad,
 523         .word   0x3ffc7ba8,     0x8988c933,     0xbc8e76bb,     0xbe255559,
 524         .word   0x3ffc8f6d,     0x9406e7b5,     0x3c71acbc,     0x48805c44,
 525         .word   0x3ffca340,     0x5751c4db,     0xbc87f2be,     0xd10d08f5,
 526         .word   0x3ffcb720,     0xdcef9069,     0x3c7503cb,     0xd1e949db,
 527         .word   0x3ffccb0f,     0x2e6d1675,     0xbc7d220f,     0x86009092,
 528         .word   0x3ffcdf0b,     0x555dc3fa,     0xbc8dd83b,     0x53829d72,
 529         .word   0x3ffcf315,     0x5b5bab74,     0xbc9a08e9,     0xb86dff57,
 530         .word   0x3ffd072d,     0x4a07897c,     0xbc9cbc37,     0x43797a9c,
 531         .word   0x3ffd1b53,     0x2b08c968,     0x3c955636,     0x219a36ee,
 532         .word   0x3ffd2f87,     0x080d89f2,     0xbc9d487b,     0x719d8578,
 533         .word   0x3ffd43c8,     0xeacaa1d6,     0x3c93db53,     0xbf5a1614,
 534         .word   0x3ffd5818,     0xdcfba487,     0x3c82ed02,     0xd75b3707,
 535         .word   0x3ffd6c76,     0xe862e6d3,     0x3c5fe87a,     0x4a8165a0,
 536         .word   0x3ffd80e3,     0x16c98398,     0xbc911ec1,     0x8beddfe8,
 537         .word   0x3ffd955d,     0x71ff6075,     0x3c9a052d,     0xbb9af6be,
 538         .word   0x3ffda9e6,     0x03db3285,     0x3c9c2300,     0x696db532,
 539         .word   0x3ffdbe7c,     0xd63a8315,     0xbc9b76f1,     0x926b8be4,
 540         .word   0x3ffdd321,     0xf301b460,     0x3c92da57,     0x78f018c3,
 541         .word   0x3ffde7d5,     0x641c0658,     0xbc9ca552,     0x8e79ba8f,
 542         .word   0x3ffdfc97,     0x337b9b5f,     0xbc91a5cd,     0x4f184b5c,
 543         .word   0x3ffe1167,     0x6b197d17,     0xbc72b529,     0xbd5c7f44,
 544         .word   0x3ffe2646,     0x14f5a129,     0xbc97b627,     0x817a1496,
 545         .word   0x3ffe3b33,     0x3b16ee12,     0xbc99f4a4,     0x31fdc68b,
 546         .word   0x3ffe502e,     0xe78b3ff6,     0x3c839e89,     0x80a9cc8f,
 547         .word   0x3ffe6539,     0x24676d76,     0xbc863ff8,     0x7522b735,
 548         .word   0x3ffe7a51,     0xfbc74c83,     0x3c92d522,     0xca0c8de2,
 549         .word   0x3ffe8f79,     0x77cdb740,     0xbc910894,     0x80b054b1,
 550         .word   0x3ffea4af,     0xa2a490da,     0xbc9e9c23,     0x179c2893,
 551         .word   0x3ffeb9f4,     0x867cca6e,     0x3c94832f,     0x2293e4f2,
 552         .word   0x3ffecf48,     0x2d8e67f1,     0xbc9c93f3,     0xb411ad8c,
 553         .word   0x3ffee4aa,     0xa2188510,     0x3c91c68d,     0xa487568d,
 554         .word   0x3ffefa1b,     0xee615a27,     0x3c9dc7f4,     0x86a4b6b0,
 555         .word   0x3fff0f9c,     0x1cb6412a,     0xbc932200,     0x65181d45,
 556         .word   0x3fff252b,     0x376bba97,     0x3c93a1a5,     0xbf0d8e43,
 557         .word   0x3fff3ac9,     0x48dd7274,     0xbc795a5a,     0x3ed837de,
 558         .word   0x3fff5076,     0x5b6e4540,     0x3c99d3e1,     0x2dd8a18b,
 559         .word   0x3fff6632,     0x798844f8,     0x3c9fa37b,     0x3539343e,
 560         .word   0x3fff7bfd,     0xad9cbe14,     0xbc9dbb12,     0xd006350a,
 561         .word   0x3fff91d8,     0x02243c89,     0xbc612ea8,     0xa779f689,
 562         .word   0x3fffa7c1,     0x819e90d8,     0x3c874853,     0xf3a5931e,
 563         .word   0x3fffbdba,     0x3692d514,     0xbc796773,     0x15098eb6,
 564         .word   0x3fffd3c2,     0x2b8f71f1,     0x3c62eb74,     0x966579e7,
 565         .word   0x3fffe9d9,     0x6b2a23d9,     0x3c74a603,     0x7442fde3,
 566 !
 567         .word   0x3c900000,     0x00000000,     ! 2**(-54) = 5.551115123125782702e-17
 568         .word   0x3ff00000,     0x00000000,     ! DONE = 1.0
 569         .word   0x43300000,     0x00000000,     ! DVAIN52 = 2**52 = 4.503599627370496e15
 570         .word   0xffffffff,     0x00000000,     ! MHI32   = 0xffffffff00000000
 571         .word   0x4062776d,     0x8ce329bd,     ! KA5     = (5.77078604860893737986e-01*256)
 572         .word   0x406ec709,     0xdc39fc99,     ! KA3     = (9.61796693925765549423e-01*256)
 573         .word   0x40871547,     0x652b82fe,     ! KA1     = (2.885390081777926774e+00*256)
 574         .word   0x41100000,     0x00000000,     ! HTHRESH = 262144.0
 575         .word   0xc110cc00,     0x00000000,     ! LTHRESH = -275200.0
 576         .word   0x3d83b2ab,     0xc07c93d0,     ! KB4     = 2.23939573811855104311e-12
 577         .word   0x000fffff,     0xffffffff,     ! MMANT
 578         .word   0x00000800,     0x00000000,     ! MROUND
 579         .word   0xfffff000,     0x00000000,     ! MHI20
 580 
 581 ! local storage indices
 582 #define tmp0_lo         STACK_BIAS-4
 583 #define tmp0_hi         STACK_BIAS-8
 584 #define tmp1_lo         STACK_BIAS-12
 585 #define tmp1_hi         STACK_BIAS-16
 586 #define tmp2_lo         STACK_BIAS-20
 587 #define tmp2_hi         STACK_BIAS-24
 588 #define tmp3            STACK_BIAS-28
 589 #define tmp4            STACK_BIAS-32
 590 #define ind_buf         STACK_BIAS-48
 591 #define tmp_counter     STACK_BIAS-56
 592 #define tmp_px          STACK_BIAS-64
 593 #define tmp_py          STACK_BIAS-72
 594 #define tmp_mant        STACK_BIAS-80
 595 #define tmp5            STACK_BIAS-88
 596 #define tmp6            STACK_BIAS-96
 597 
 598 ! sizeof temp storage - must be a multiple of 16 for V9
 599 #define tmps            96
 600 
 601 #define LOGTBL          %g5
 602 #define EXPTBL          %g1
 603 #define EXPTBL_P8       %l4
 604 
 605 #define MASK_0x7fffffff %o4
 606 #define MASK_0x000fffff %o3
 607 #define MASK_0x3ff00000 %o1
 608 
 609 #define counter         %i0
 610 #define px              %i1
 611 #define stridex         %l5
 612 #define py              %i3
 613 #define stridey         %l6
 614 #define pz              %i5
 615 #define stridez         %l7
 616 
 617 #define HTHRESH         %f0
 618 #define LTHRESH         %f2
 619 
 620 #define MHI32           %f38
 621 #define KA1_LO          %f40
 622 #define KA1_HI          %f40
 623 
 624 #define KB1             %f42
 625 #define KB2             %f42
 626 #define KB3             %f42
 627 #define KB4             %f44
 628 #define KB5             %f42
 629 
 630 #define KA1             %f46
 631 #define KA3             %f28
 632 #define KA5             %f50
 633 
 634 #define DZERO           %f24
 635 #define DZERO_HI        %f24
 636 #define DZERO_LO        %f25
 637 #define DONE            %f18
 638 #define DONE_HI         %f18
 639 #define DONE_LO         %f19
 640 
 641 #define XKB1            %f42
 642 #define XKB2            %f40
 643 #define XKB3            %f32
 644 #define XKB4            %f36
 645 #define XKB5            %f34
 646 
 647 #define s_h             %f46
 648 #define yr              %f30
 649 
 650 #define ind_TINY        64
 651 #define ind_HUGE        56
 652 #define ind_LO          48
 653 #define ind_HI          40
 654 #define ind_KB5         32
 655 #define ind_KB3         24
 656 #define ind_KB2         16
 657 #define ind_KB1         8
 658 
 659 !--------------------------------------------------------------------
 660 !               !!!!!   vpow algorithm  !!!!!
 661 !
 662 !  hx = ((unsigned*)px)[0];
 663 !  lx = ((unsigned*)px)[1];
 664 !  hy = ((unsigned*)py)[0];
 665 !  ly = ((unsigned*)py)[1];
 666 !  sx = hx >> 31;
 667 !  sy = hy >> 31;
 668 !  hx &= 0x7fffffff;
 669 !  hy &= 0x7fffffff;
 670 !  y0 = *px;
 671 !
 672 !  if (hy < 0x3bf00000) {                                            /* |Y| < 2^(-64) */
 673 !    if ((hy | ly) == 0) {                                              /* pow(X,0)      */
 674 !      *pz = DONE;
 675 !      goto next;
 676 !    }
 677 !    if (hx > 0x7ff00000 || (hx == 0x7ff00000 && lx != 0)) {         /* |X| = Nan     */
 678 !      *pz = y0 * y0;
 679 !      goto next;
 680 !    }
 681 !    else if ((hx | lx) == 0 || (hx == 0x7ff00000 && lx == 0)) {        /* X = 0 or Inf  */
 682 !      ((int*)pz)[0] = hx;
 683 !      ((int*)pz)[1] = lx;
 684 !      if (sy) *pz = DONE / *pz;
 685 !      goto next;
 686 !    }
 687 !    else *pz = (sx) ? DZERO / DZERO : DONE;
 688 !      goto next;
 689 !  }
 690 !  yisint = 0; /* Y - non-integer */
 691 !  expy = hy >> 20; /* Y exponent */
 692 !
 693 !  if (hx >= 0x7ff00000 || expy >= 0x43e) {                       /* X=Inf,Nan or |Y|>2^63,Inf,Nan */
 694 !    if (hx > 0x7ff00000 || (hx == 0x7ff00000 && lx != 0) ||
 695 !        hy > 0x7ff00000 || (hy == 0x7ff00000 && ly != 0))
 696 !      *pz = y0 * *py; /* |X| or |Y| = Nan */
 697 !      goto next;
 698 !    if (hy == 0x7ff00000 && (ly == 0)) { /* |Y| = Inf */
 699 !      if (hx == 0x3ff00000 && (lx == 0))
 700 !        *pz = *py - *py; /* +-1 ** +-Inf */
 701 !      else if ((hx < 0x3ff00000) != sy)
 702 !        *pz = DZERO;
 703 !      else {
 704 !        ((int*)pz)[0] = hy;
 705 !        ((int*)pz)[1] = ly;
 706 !      }
 707 !      goto next;
 708 !    }
 709 !    if (expy < 0x43e) {                                             /* |Y| < 2^63   */
 710 !      if (sx) {                                                        /* X = -Inf     */
 711 !        if (expy >= 0x434)                                          /* |Y| >= 2^53  */
 712 !          yisint##I = 2;                                               /* Y - even     */
 713 !        else {
 714 !          if (expy >= 0x3ff) {                                              /* |Y| >= 1     */
 715 !            if (expy > (20 + 0x3ff)) {
 716 !              i0 = ly >> (52 - (expy - 0x3ff));
 717 !              if ((i0 << (52 - (expy - 0x3ff))) == ly) yisint = 2 - (i0 & 1);
 718 !            }
 719 !            else if (ly == 0) {
 720 !              i0 = hy >> (20 - (expy - 0x3ff));
 721 !              if ((i0 << (20 - (expy - 0x3ff))) == hy) yisint = 2 - (i0 & 1);
 722 !            }
 723 !          }
 724 !        }
 725 !      }
 726 !      if (sy) hx = lx = 0;
 727 !      hx += yisint << 31;
 728 !      ((int*)pz)[0] = hx;
 729 !      ((int*)pz)[1] = lx;
 730 !      goto next;
 731 !    }
 732 !    else {                                                             /* |Y| >= 2^63     */
 733 !      if (lx == 0 &&                                                   /* |X| = 0, 1, Inf */
 734 !         (hx == 0 || hx == 0x3ff00000 || hx == 0x7ff00000)) {
 735 !        ((int*)pz)[0] = hx;
 736 !        ((int*)pz)[1] = lx;
 737 !        if (sy) *pz = DONE / *pz;
 738 !      }
 739 !      else {
 740 !        y0 = ((hx < 0x3ff00000) != sy) ? _TINY : _HUGE;
 741 !        *pz = y0 * y0;
 742 !      }
 743 !      goto next;
 744 !    }
 745 !  }
 746 !  if (sx || (hx | lx) == 0) {                                          /* X <= 0      */
 747 !    if (expy >= 0x434)                                                      /* |Y| >= 2^53 */
 748 !      yisint = 2;                                                      /* Y - even    */
 749 !    else {
 750 !      if (expy >= 0x3ff) {                                          /* |Y| >= 1    */
 751 !        if (expy > (20 + 0x3ff)) {
 752 !          i0 = ly >> (52 - (expy - 0x3ff));
 753 !          if ((i0 << (52 - (expy - 0x3ff))) == ly) yisint = 2 - (i0 & 1);
 754 !        }
 755 !        else if (ly == 0) {
 756 !          i0 = hy >> (20 - (expy - 0x3ff));
 757 !          if ((i0 << (20 - (expy - 0x3ff))) == hy) yisint = 2 - (i0 & 1);
 758 !        }
 759 !      }
 760 !    }
 761 !    if ((hx | lx) == 0) {                                              /* X == 0  */
 762 !      y0 = DZERO;
 763 !      if (sy) y0 = DONE / y0;
 764 !      if (sx & yisint) y0 = -y0;
 765 !      *pz = y0;
 766 !      goto next;
 767 !    }
 768 !    if (yisint == 0) {                                                 /* pow(neg,non-integer) */
 769 !      *pz = DZERO / DZERO;                                             /* NaN */
 770 !      goto next;
 771 !    }
 772 !  }
 773 !
 774 !  *((int*)&x + 1) = ((unsigned*)px)[1];
 775 !  *((int*)&ax + 1) = 0;
 776 !  exp = hx;
 777 !  hx &= 0xfffff;
 778 !  hx |= 0x3ff00000;
 779 !  *(int*)&x = hx;
 780 !  hx += 0x800;
 781 !  hx &= 0xfffff000;
 782 !  *(int*)&ax = hx;
 783 !  if (exp <= 0xfffff) {
 784 !    y0 = vis_fand(x, MMANT);
 785 !    ax = (double) ((long long *) & y0)[0];
 786 !    x = vis_fand(ax, MMANT);
 787 !    x = vis_for(x, DONE);
 788 !    exp = ((unsigned int*) & ax)[0];
 789 !    exp -= (1023 + 51) << 20;
 790 !    hx = exp & 0xfffff;
 791 !    hx |= 0x3ff00000;
 792 !    hx += 0x800;
 793 !    *(int*)&ax = hx;
 794 !  }
 795 !  exp = (exp >> 20);
 796 !  exp = exp - 2046;
 797 !  ux = x + ax;
 798 !  yd = DONE / ux;
 799 !  u = x - ax;
 800 !  s = u * yd;
 801 !  ux = vis_fand(ux, MHI32);
 802 !  y = s * s;
 803 !  s_h = vis_fand(s, MHI32);
 804 !  dtmp8 = KA5 * y;
 805 !  dtmp8 = dtmp8 + KA3;
 806 !  dtmp8 = dtmp8 * y;
 807 !  s = dtmp8 * s;
 808 !  dtmp0 = (ux - ax);
 809 !  s_l = (x - dtmp0);
 810 !  dtmp0 = s_h * ux;
 811 !  dtmp1 = s_h * s_l;
 812 !  s_l = u - dtmp0;
 813 !  s_l -= dtmp1;
 814 !  dtmp0 = KA1 * yd;
 815 !  s_l = dtmp0 * s_l;
 816 !  i = (hx >> 8);
 817 !  i = i & 0xff0;
 818 !  itmp0 = (hx >> 20);
 819 !  exp += itmp0;
 820 !  yd = KA1_HI * s_h;
 821 !  y = *(double *)((char*)__mt_constlog2 + i);
 822 !  itmp0 = exp << 8;
 823 !  y += (double)itmp0;
 824 !  m_h = y + yd;
 825 !  dtmp2 = m_h - y;
 826 !  dtmp2 -= yd;
 827 !  dtmp2 -= s_l;
 828 !  y = s - dtmp2;
 829 !  dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
 830 !  dtmp1 = KA1_LO * s_h;
 831 !  dtmp0 += dtmp1;
 832 !  y += dtmp0;
 833 !  dtmp0 = y + m_h;
 834 !  s_h = vis_fand(dtmp0, MHI32);
 835 !  dtmp0 = (s_h - m_h);
 836 !  y = y - dtmp0;
 837 !  yd = *py;
 838 !  s = vis_fand(yd, MHI32);
 839 !  dtmp0 = (yd - s);
 840 !  dtmp1 = yd * y;
 841 !  dtmp0 *= s_h;
 842 !  yd = dtmp0 + dtmp1;
 843 !  s = s_h * s;
 844 !  if (s > HTHRESH) {s = HTHRESH; yd = DZERO;}
 845 !  if (s < LTHRESH) {s = LTHRESH; yd = DZERO;}
 846 !  dtmp0 = (s + yd);
 847 !  ind = (int)dtmp0;
 848 !  i = ind & 0xff;
 849 !  i = i << 4;
 850 !  u = (double)(int)dtmp0;
 851 !  ind >>= 8;
 852 !  y = s - u;
 853 !  y = y + yd;
 854 !  u = *(double*)((char*)__mt_constexp2 + i);
 855 !  dtmp0 = KB5 * y;
 856 !  dtmp1 = dtmp0 + KB4;
 857 !  dtmp2 = dtmp1 * y;
 858 !  dtmp3 = dtmp2 + KB3;
 859 !  dtmp4 = dtmp3 * y;
 860 !  dtmp5 = dtmp4 + KB2;
 861 !  dtmp6 = dtmp5 * y;
 862 !  dtmp7 = dtmp6 + KB1;
 863 !  y = dtmp7 * y;
 864 !  eflag = (ind + 1021);
 865 !  eflag = eflag >> 31;
 866 !  gflag = (1022 - ind);
 867 !  gflag = gflag >> 31;
 868 !  dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
 869 !  dtmp1 = u * y;
 870 !  dtmp2 = dtmp0 + dtmp1;
 871 !  u = dtmp2 + u;
 872 !  ind = yisint + ind;
 873 !  itmp0 = 54 & eflag;
 874 !  itmp1 = 52 & gflag;
 875 !  ind = ind + itmp0;
 876 !  ind = ind - itmp1;
 877 !  ind <<= 20;
 878 !  *(int*)&dtmp0 = ind;
 879 !  *((int*)&dtmp0 + 1) = 0;
 880 !  u = vis_fpadd32(u, dtmp0);
 881 !  ind = eflag - gflag;
 882 !  ind += 1;
 883 !  ind *= 8;
 884 !  dtmp1 = (*(double*)((char*)lconst + ind);
 885 !  dtmp1 = u * dtmp1;
 886 !  *pz = dtmp1;
 887 !--------------------------------------------------------------------
 888 !               !!!!!   vpowx algorithm !!!!! (x > 0 and x != Inf, NaN)
 889 !
 890 !                   /* perform s_h + yr = 256*log2(x) */
 891 !
 892 !  exp = ((unsigned*)px)[0];
 893 !  y0 = px[0];
 894 !  if (exp <= 0xfffff) {
 895 !    y0 = (double) ((long long *) & y0)[0];
 896 !    exp = ((unsigned int*) & y0)[0];
 897 !    exp -= (1023 + 51) << 20;
 898 !  }
 899 !  x = vis_fand(y0, MMANT);
 900 !  x = vis_for(x, DONE);
 901 !  ax = vis_fpadd32(x, MROUND);
 902 !  ax = vis_fand(ax, MHI20);
 903 !  hx = *(int*)&ax;
 904 !  exp = (exp >> 20);
 905 !  exp = exp - 2046;
 906 !  ux = x + ax;
 907 !  yd = DONE / ux;
 908 !  u = x - ax;
 909 !  s = u * yd;
 910 !  ux = vis_fand(ux, MHI32);
 911 !  y = s * s;
 912 !  s_h = vis_fand(s, MHI32);
 913 !  dtmp8 = KA5 * y;
 914 !  dtmp8 = dtmp8 + KA3;
 915 !  dtmp8 = dtmp8 * y;
 916 !  s = dtmp8 * s;
 917 !  dtmp0 = (ux - ax);
 918 !  s_l = (x - dtmp0);
 919 !  dtmp0 = s_h * ux;
 920 !  dtmp1 = s_h * s_l;
 921 !  s_l = u - dtmp0;
 922 !  s_l -= dtmp1;
 923 !  dtmp0 = KA1 * yd;
 924 !  s_l = dtmp0 * s_l;
 925 !  i = (hx >> 8);
 926 !  i = i & 0xff0;
 927 !  itmp0 = (hx >> 20);
 928 !  exp += itmp0;
 929 !  yd = KA1_HI * s_h;
 930 !  y = *(double *)((char*)__mt_constlog2 + i);
 931 !  itmp0 = exp << 8;
 932 !  y += (double)itmp0;
 933 !  m_h = y + yd;
 934 !  dtmp2 = m_h - y;
 935 !  dtmp2 -= yd;
 936 !  dtmp2 -= s_l;
 937 !  y = s - dtmp2;
 938 !  dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
 939 !  dtmp1 = KA1_LO * s_h;
 940 !  dtmp0 += dtmp1;
 941 !  y += dtmp0;
 942 !  dtmp0 = y + m_h;
 943 !  s_h = vis_fand(dtmp0, MHI32);
 944 !  dtmp0 = (s_h - m_h);
 945 !  yr = y - dtmp0;
 946 !
 947 !  hy = ((unsigned*)py)[0];
 948 !  ly = ((unsigned*)py)[1];
 949 !  hx = ((unsigned*)px)[0];
 950 !  lx = ((unsigned*)px)[1];
 951 !  sy = hy >> 31;
 952 !  hy &= 0x7fffffff;
 953 !
 954 !  if (hy < 0x3bf00000) {/* |Y| < 2^(-64) */
 955 !    *pz = DONE;
 956 !    goto next;
 957 !  }
 958 !
 959 !  if (hy >= 0x43e00000) {                   /* |Y|>2^63,Inf,Nan */
 960 !    if (hy == 0x7ff00000 && (ly == 0)) {       /* |Y| = Inf */
 961 !      if (hx == 0x3ff00000 && (lx == 0))
 962 !        *pz = *py - *py;                       /* 1 ** +-Inf */
 963 !      else if ((hx < 0x3ff00000) != sy)
 964 !        *pz = DZERO;
 965 !      else {
 966 !        ((int*)pz)[0] = hy;
 967 !        ((int*)pz)[1] = ly;
 968 !      }
 969 !      goto next;
 970 !    }
 971 !    if (hy >= 0x7ff00000) {
 972 !      *pz = *px + *py;                         /* |Y| = Nan */
 973 !      goto next;
 974 !    }
 975 !                                               /* |Y| >= 2^63   */
 976 !    if (lx == 0 && (hx == 0x3ff00000)) {       /*  X = 1 */
 977 !      *pz = DONE;
 978 !    }
 979 !    else {
 980 !      y0 = ((hx < 0x3ff00000) != sy) ? _TINY : _HUGE;
 981 !      *pz = y0 * y0;
 982 !    }
 983 !    goto next;
 984 !  }
 985 !
 986 !  yd = *py;
 987 !  s = vis_fand(yd, MHI32);
 988 !  dtmp0 = (yd - s);
 989 !  dtmp1 = yd * yr;
 990 !  dtmp0 *= s_h;
 991 !  yd = dtmp0 + dtmp1;
 992 !  s = s_h * s;
 993 !  if (s > HTHRESH) {s = HTHRESH; yd = DZERO;}
 994 !  if (s < LTHRESH) {s = LTHRESH; yd = DZERO;}
 995 !  dtmp0 = (s + yd);
 996 !  ind = (int)dtmp0;
 997 !  i = ind & 0xff;
 998 !  i = i << 4;
 999 !  u = (double)(int)dtmp0;
1000 !  ind >>= 8;
1001 !  y = s - u;
1002 !  y = y + yd;
1003 !  u = *(double*)((char*)__mt_constexp2 + i);
1004 !  dtmp0 = XKB5 * y;
1005 !  dtmp1 = dtmp0 + XKB4;
1006 !  dtmp2 = dtmp1 * y;
1007 !  dtmp3 = dtmp2 + XKB3;
1008 !  dtmp4 = dtmp3 * y;
1009 !  dtmp5 = dtmp4 + XKB2;
1010 !  dtmp6 = dtmp5 * y;
1011 !  dtmp7 = dtmp6 + XKB1;
1012 !  y = dtmp7 * y;
1013 !  eflag = (ind + 1021);
1014 !  eflag = eflag >> 31;
1015 !  gflag = (1022 - ind);
1016 !  gflag = gflag >> 31;
1017 !  dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
1018 !  dtmp1 = u * y;
1019 !  dtmp2 = dtmp0 + dtmp1;
1020 !  u = dtmp2 + u;
1021 !  itmp0 = 54 & eflag;
1022 !  itmp1 = 52 & gflag;
1023 !  ind = ind + itmp0;
1024 !  ind = ind - itmp1;
1025 !  ind <<= 20;
1026 !  *(int*)&dtmp0 = ind;
1027 !  *((int*)&dtmp0 + 1) = 0;
1028 !  u = vis_fpadd32(u, dtmp0);
1029 !  ind = eflag - gflag;
1030 !  ind += 1;
1031 !  ind *= 8;
1032 !  dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
1033 !  dtmp1 = u * dtmp1;
1034 !  *pz = dtmp1;
1035 !--------------------------------------------------------------------
1036 
1037         ENTRY(__vpow)
1038         save    %sp,-SA(MINFRAME)-tmps,%sp
1039         PIC_SETUP(l7)
1040         PIC_SET(l7,.CONST_TBL,g5)
1041         wr      %g0,0x82,%asi                   ! set %asi for non-faulting loads
1042 
1043         cmp     counter,0
1044         ble,pn  %icc,.end
1045 
1046 #ifdef  __sparcv9
1047         ldx     [%fp+STACK_BIAS+176],stridez
1048 #else
1049         ld      [%fp+STACK_BIAS+92],stridez
1050 #endif
1051 
1052         ld      [px],%o0
1053         add     LOGTBL,4095,EXPTBL
1054         st      counter,[%fp+tmp_counter]
1055         add     EXPTBL,65,EXPTBL
1056         sra     %i2,0,stridex
1057         stx     px,[%fp+tmp_px]
1058         add     EXPTBL,4095,%l0
1059         fzero   DZERO
1060         stx     py,[%fp+tmp_py]
1061 
1062         cmp     stridex,0
1063         bne,pt  %icc,.common_case
1064         add     %l0,1,%l0
1065 
1066         cmp     %o0,0
1067         ble,pt  %icc,.common_case
1068         sethi   %hi(0x7f800000),%o1
1069 
1070         cmp     %o0,%o1
1071         bl,pn   %icc,.stridex_zero
1072         nop
1073 
1074 .common_case:
1075         sra     stridez,0,stridez
1076         ldd     [%l0+8],DONE
1077         ldd     [%l0+24],MHI32
1078         sra     %i4,0,stridey
1079         ldd     [%l0+32],KA5
1080         sethi   %hi(0x7ffffc00),MASK_0x7fffffff
1081         ldd     [%l0+40],KA3
1082         sethi   %hi(0xffc00),MASK_0x000fffff
1083         ldd     [%l0+48],KA1
1084         sethi   %hi(0x3ff00000),MASK_0x3ff00000
1085         ldd     [%l0+56],HTHRESH
1086         sllx    stridex,3,stridex
1087         add     MASK_0x7fffffff,0x3ff,MASK_0x7fffffff
1088         ldd     [%l0+64],LTHRESH
1089         sllx    stridey,3,stridey
1090         add     MASK_0x000fffff,0x3ff,MASK_0x000fffff
1091         ldd     [%l0+72],KB4
1092         sllx    stridez,3,stridez
1093         st      %g0,[%fp+tmp1_lo]               ! *((int*)&ax + 1) = 0;
1094         sub     %g0,1,%o2
1095         st      %g0,[%fp+tmp2_lo]               ! (Y0_0) *((int*)&dtmp0 + 1) = 0;
1096         st      MASK_0x000fffff,[%fp+tmp_mant]
1097         sub     pz,stridez,pz
1098         st      %o2,[%fp+tmp_mant+4]
1099 
1100 .begin:
1101         ld      [%fp+tmp_counter],counter
1102         ldx     [%fp+tmp_px],px
1103         ldx     [%fp+tmp_py],py
1104         st      %g0,[%fp+tmp_counter]
1105 .begin1:
1106         subcc   counter,1,counter
1107         bneg,pn %icc,.end
1108         or      %g0,ind_buf,%o7
1109 
1110         lda     [py]%asi,%o2                    ! (Y0_1) hy = *py;
1111 
1112         and     %o2,MASK_0x7fffffff,%l1         ! (Y0_3) hy &= 0x7fffffff;
1113         lda     [px]%asi,%l0                    ! (Y0_3) hx = ((unsigned*)px)[0];
1114 
1115         sra     %l1,20,%o0                      ! (Y0_3) expy = hy >> 20;
1116         lda     [px+4]%asi,%i2                  ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1117 
1118         and     MASK_0x000fffff,%l0,%o5         ! (Y0_3) hx &= 0xfffff;
1119 
1120         or      MASK_0x3ff00000,%o5,%o5         ! (Y0_3) hx |= 0x3ff00000;
1121 
1122         st      %o5,[%fp+tmp0_hi]               ! (Y0_3) *(int*)&x = hx;
1123 
1124         add     %o5,2048,%o5                    ! (Y0_3) hx += 0x800;
1125 
1126         st      %i2,[%fp+tmp0_lo]               ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1127         and     %o5,-4096,%l4                   ! (Y0_3) hx &= 0xfffff000;
1128 
1129         add     pz,stridez,pz
1130         st      %l4,[%fp+tmp1_hi]               ! (Y0_3) *(int*)&ax = hx;
1131 
1132         and     %l0,MASK_0x7fffffff,%l3         ! (Y0_3) hx &= 0x7fffffff;
1133 
1134         sra     %l3,20,%l2                      ! (Y0_3) exp = (exp >> 20);
1135 
1136         cmp     %o0,959                         ! (Y0_3) if (expy < 0x3fb);
1137         bl,pn   %icc,.spec0                     ! (Y0_3) if (expy < 0x3fb);
1138         st      %g0,[%fp+%o7]                   ! (Y0_3) yisint = 0;
1139 
1140         cmp     %o0,1086                        ! (Y0_3) if (expy >= 0x43e);
1141         bge,pn  %icc,.spec1                     ! (Y0_3) if (expy >= 0x43e);
1142         nop
1143 
1144         cmp     %l2,2047                        ! (Y0_2) if (exp >= 0x7ff)
1145         bge,pn  %icc,.spec1                     ! (Y0_2) if (exp >= 0x7ff)
1146         nop
1147 
1148         cmp     %l0,MASK_0x000fffff             ! (Y0_2) if (hx <= 0xfffff)
1149 
1150         ldd     [%fp+tmp0_hi],%f32              ! (Y0_2) *(int*)&x = hx;
1151         ble,pn  %icc,.update0                   ! (Y0_2) if (hx <= 0xfffff)
1152         nop
1153 .cont0:
1154         sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
1155         sub     pz,stridez,pz
1156         ldd     [%fp+tmp1_hi],%f54              ! (Y0_2) *(int*)&ax = hx;
1157 
1158         add     %o7,4,%o7                       ! stack buffer pointer update
1159         faddd   %f32,%f54,%f12                  ! (Y0_2) ux = x + ax;
1160 
1161         and     %o7,15,%o7                      ! stack buffer pointer update
1162 
1163         add     %o7,ind_buf,%o7                 ! stack buffer pointer update
1164         add     px,stridex,px                   ! px += stridex;
1165 
1166         lda     [px]%asi,%l0                    ! (Y1_2) hx = ((unsigned*)px)[0];
1167 
1168         lda     [px+4]%asi,%i2                  ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1169         and     MASK_0x000fffff,%l0,%i4         ! (Y1_2) hx &= 0xfffff;
1170 
1171         st      %g0,[%fp+%o7]                   ! (Y1_2) yisint = 0;
1172         or      MASK_0x3ff00000,%i4,%i4         ! (Y1_2) hx |= 0x3ff00000;
1173 
1174         st      %i4,[%fp+tmp0_hi]               ! (Y1_2) *(int*)&x = hx;
1175         add     %i4,2048,%i4                    ! (Y1_2) hx += 0x800;
1176 
1177         st      %i2,[%fp+tmp0_lo]               ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1178         and     %i4,-4096,%i4                   ! (Y1_2) hx &= 0xfffff000;
1179 
1180         st      %i4,[%fp+tmp1_hi]               ! (Y1_2) *(int*)&ax = hx;
1181         and     %l0,MASK_0x7fffffff,%l2         ! (Y1_2) hx &= 0x7fffffff;
1182         cmp     %l0,MASK_0x000fffff             ! (Y1_2) if (hx <= 0xfffff)
1183 
1184         ble,pn  %icc,.update1                   ! (Y1_2) if (hx <= 0xfffff)
1185         nop
1186 .cont1:
1187         sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
1188 
1189         add     %o7,4,%o7                       ! stack buffer pointer update
1190         fdivd   DONE,%f12,%f20                  ! (Y0_2) yd = DONE / ux;
1191 
1192         and     %o7,15,%o7                      ! stack buffer pointer update
1193 
1194         sra     %l3,20,%l3                      ! (Y0_2) exp = (exp >> 20);
1195         add     %o7,ind_buf,%o7                 ! stack buffer pointer update
1196         ldd     [%fp+tmp0_hi],%f8               ! (Y1_2) *(int*)&x = hx;
1197 
1198         ldd     [%fp+tmp1_hi],%f14              ! (Y1_2) *(int*)&ax = hx;
1199         sra     %l4,20,%l0                      ! (Y0_2) itmp0 = (hx >> 20);
1200         sub     %l3,2046,%o5                    ! (Y0_2) exp = exp - 2046;
1201 
1202         add     %o5,%l0,%o5                     ! (Y0_2) exp += itmp0;
1203 
1204         sll     %o5,8,%l0                       ! (Y0_2) itmp0 = exp << 8;
1205         st      %l0,[%fp+tmp3]                  ! (Y0_2) (double)itmp0;
1206         faddd   %f8,%f14,%f26                   ! (Y1_2) ux = x + ax;
1207 
1208         fand    %f12,MHI32,%f12                 ! (Y0_2) ux = vis_fand(ux, MHI32);
1209         add     px,stridex,px                   ! px += stridex;
1210 
1211         ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y0_2) load KA1_HI;
1212         fsubd   %f12,%f54,%f10                  ! (Y0_2) dtmp0 = (ux - ax);
1213 
1214         ld      [%fp+tmp3],%f16                 ! (Y0_2) (double)itmp0;
1215         fsubd   %f32,%f54,%f58                  ! (Y0_2) u = x - ax;
1216 
1217         sra     %l4,8,%l4                       ! (Y0_2) i = (hx >> 8);
1218 
1219         and     %l4,4080,%l4                    ! (Y0_2) i = i & 0xff0;
1220 
1221         ldd     [LOGTBL+%l4],%f62               ! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
1222         fmuld   %f58,%f20,%f52                  ! (Y0_2) s = u * yd;
1223         fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l = (x - dtmp0);
1224 
1225         fitod   %f16,%f54                       ! (Y0_2) (double)itmp0;
1226         add     %l4,8,%o0                       ! (Y0_2) i += 8;
1227 
1228         lda     [px]%asi,%l0                    ! (Y0_3) hx = ((unsigned*)px)[0];
1229         fand    %f52,MHI32,%f4                  ! (Y0_2) s_h = vis_fand(s, MHI32);
1230 
1231         faddd   %f62,%f54,%f54                  ! (Y0_2) y += (double)itmp0;
1232         lda     [px+4]%asi,%i2                  ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1233         fmuld   %f4,%f12,%f32                   ! (Y0_2) dtmp0 = s_h * ux;
1234 
1235         and     MASK_0x000fffff,%l0,%o5         ! (Y0_3) hx &= 0xfffff;
1236         fmuld   %f52,%f52,%f12                  ! (Y0_2) y = s * s;
1237 
1238         or      MASK_0x3ff00000,%o5,%o5         ! (Y0_3) hx |= 0x3ff00000;
1239 
1240         st      %o5,[%fp+tmp0_hi]               ! (Y0_3) *(int*)&x = hx;
1241         fsubd   %f58,%f32,%f32                  ! (Y0_2) s_l = u - dtmp0;
1242 
1243         add     %o5,2048,%o5                    ! (Y0_3) hx += 0x800;
1244 
1245         st      %i2,[%fp+tmp0_lo]               ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1246         and     %o5,-4096,%l4                   ! (Y0_3) hx &= 0xfffff000;
1247         fmuld   KA5,%f12,%f36                   ! (Y0_2) dtmp8 = KA5 * y;
1248 
1249         st      %l4,[%fp+tmp1_hi]               ! (Y0_3) *(int*)&ax = hx;
1250         fmuld   KA1_HI,%f4,%f48                 ! (Y0_2) yd = KA1_HI * s_h;
1251 
1252         fmuld   %f4,%f10,%f10                   ! (Y0_2) dtmp1 = s_h * s_l;
1253         ldd     [EXPTBL-ind_LO],KA1_LO          ! (y0_2) load KA1_LO;
1254         and     %l0,MASK_0x7fffffff,%l3         ! (Y0_3) hx &= 0x7fffffff;
1255         faddd   %f36,KA3,%f62                   ! (Y0_2) dtmp8 = dtmp8 + KA3;
1256 
1257         st      %g0,[%fp+%o7]                   ! (Y0_3) yisint = 0;
1258         faddd   %f54,%f48,%f36                  ! (Y0_2) m_h = y + yd;
1259 
1260         fdivd   DONE,%f26,%f22                  ! (Y1_2) yd = DONE / ux;
1261         fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l -= dtmp1;
1262 
1263         cmp     %l0,MASK_0x000fffff             ! (Y0_2) if (hx <= 0xfffff)
1264 
1265         sra     %l2,20,%l2                      ! (Y1_1) exp = (exp >> 20);
1266         ldd     [%fp+tmp0_hi],%f32              ! (Y0_2) *(int*)&x = hx;
1267         ble,pn  %icc,.update2                   ! (Y0_2) if (hx <= 0xfffff)
1268         fsubd   %f36,%f54,%f30                  ! (Y0_1) dtmp2 = m_h - y;
1269 .cont2:
1270         cmp     %l2,2047                        ! (Y1_1) if (exp >= 0x7ff)
1271         sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
1272         ldd     [%fp+tmp1_hi],%f54              ! (Y0_2) *(int*)&ax = hx;
1273 
1274         sra     %i4,20,%l0                      ! (Y1_1) itmp0 = (hx >> 20);
1275         sub     %l2,2046,%o5                    ! (Y1_1) exp = exp - 2046;
1276         fmuld   KA1,%f20,%f20                   ! (Y0_1) dtmp0 = KA1 * yd;
1277 
1278         add     %o5,%l0,%o5                     ! (Y1_1) exp += itmp0;
1279         fmuld   %f62,%f12,%f62                  ! (Y0_1) dtmp8 = dtmp8 * y;
1280 
1281         sll     %o5,8,%l0                       ! (Y1_1) itmp0 = exp << 8;
1282         add     %o7,4,%o7                       ! stack buffer pointer update
1283         st      %l0,[%fp+tmp3]                  ! (Y1_1) (double)itmp0;
1284         faddd   %f32,%f54,%f12                  ! (Y0_2) ux = x + ax;
1285 
1286         bge,pn  %icc,.update3                   ! (Y1_1) if (exp >= 0x7ff)
1287         fsubd   %f30,%f48,%f48                  ! (Y0_1) dtmp2 -= yd;
1288 .cont3:
1289         and     %o7,15,%o7                      ! stack buffer pointer update
1290         fmuld   %f20,%f10,%f10                  ! (Y0_1) s_l = dtmp0 * s_l;
1291 
1292         add     %o7,ind_buf,%o7                 ! stack buffer pointer update
1293         fmuld   KA1_LO,%f4,%f4                  ! (Y0_1) dtmp1 = KA1_LO * s_h;
1294         fand    %f26,MHI32,%f26                 ! (Y1_1) ux = vis_fand(ux, MHI32);
1295 
1296         fmuld   %f62,%f52,%f62                  ! (Y0_1) s = dtmp8 * s;
1297         ldd     [LOGTBL+%o0],%f52               ! (Y0_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
1298         fsubd   %f48,%f10,%f20                  ! (Y0_1) dtmp2 -= s_l;
1299 
1300         add     px,stridex,px                   ! px += stridex;
1301         fsubd   %f26,%f14,%f10                  ! (Y1_1) dtmp0 = (ux - ax);
1302 
1303         faddd   %f52,%f4,%f52                   ! (Y0_1) dtmp0 += dtmp1;
1304 
1305         ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y1_1) load KA1_HI;
1306         fsubd   %f62,%f20,%f4                   ! (Y0_1) y = s - dtmp2;
1307 
1308         ld      [%fp+tmp3],%f16                 ! (Y1_1) (double)itmp0;
1309         fsubd   %f8,%f14,%f58                   ! (Y1_1) u = x - ax;
1310 
1311         sra     %i4,8,%o0                       ! (Y1_1) i = (hx >> 8);
1312 
1313         faddd   %f4,%f52,%f48                   ! (Y0_1) y += dtmp0;
1314         and     %o0,4080,%o0                    ! (Y1_1) i = i & 0xff0;
1315 
1316         ldd     [LOGTBL+%o0],%f62               ! (Y1_1) y = *(double *)((char*)__mt_constlog2 + i);
1317         fmuld   %f58,%f22,%f52                  ! (Y1_1) s = u * yd;
1318         fsubd   %f8,%f10,%f10                   ! (Y1_1) s_l = (x - dtmp0);
1319 
1320         lda     [py]%asi,%f30                   ! (Y0_1) yd = *py;
1321         fitod   %f16,%f14                       ! (Y1_1) (double)itmp0;
1322 
1323         lda     [py+4]%asi,%f31                 ! (Y0_1) yd = *py;
1324         faddd   %f48,%f36,%f8                   ! (Y0_1) dtmp0 = y + m_h;
1325 
1326         add     %o0,8,%o0                       ! (Y1_1) i += 8;
1327         lda     [px]%asi,%l0                    ! (Y1_2) hx = ((unsigned*)px)[0];
1328         fand    %f52,MHI32,%f4                  ! (Y1_1) s_h = vis_fand(s, MHI32);
1329 
1330         faddd   %f62,%f14,%f14                  ! (Y1_1) y += (double)itmp0;
1331 
1332         lda     [px+4]%asi,%i2                  ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1333         fand    %f8,MHI32,%f20                  ! (Y0_1) s_h = vis_fand(dtmp0, MHI32);
1334         fmuld   %f4,%f26,%f8                    ! (Y1_1) dtmp0 = s_h * ux;
1335 
1336         fand    %f30,MHI32,%f6                  ! (Y0_1) s = vis_fand(yd, MHI32);
1337         and     MASK_0x000fffff,%l0,%i4         ! (Y1_2) hx &= 0xfffff;
1338         fmuld   %f52,%f52,%f26                  ! (Y1_1) y = s * s;
1339 
1340         st      %g0,[%fp+%o7]                   ! (Y1_2) yisint = 0;
1341         or      MASK_0x3ff00000,%i4,%i4         ! (Y1_2) hx |= 0x3ff00000;
1342         fsubd   %f20,%f36,%f62                  ! (Y0_1) dtmp0 = (s_h - m_h);
1343 
1344         st      %i4,[%fp+tmp0_hi]               ! (Y1_2) *(int*)&x = hx;
1345         fsubd   %f58,%f8,%f8                    ! (Y1_1) s_l = u - dtmp0;
1346 
1347         add     %i4,2048,%i4                    ! (Y1_2) hx += 0x800;
1348         fmuld   %f20,%f6,%f34                   ! (Y0_1) s = s_h * s;
1349         fsubd   %f30,%f6,%f6                    ! (Y0_1) dtmp0 = (yd - s);
1350 
1351         st      %i2,[%fp+tmp0_lo]               ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1352         and     %i4,-4096,%i4                   ! (Y1_2) hx &= 0xfffff000;
1353         fmuld   KA5,%f26,%f36                   ! (Y1_1) dtmp8 = KA5 * y;
1354 
1355         st      %i4,[%fp+tmp1_hi]               ! (Y1_2) *(int*)&ax = hx;
1356         fsubd   %f48,%f62,%f62                  ! (Y0_1) y = y - dtmp0;
1357         fmuld   KA1_HI,%f4,%f48                 ! (Y1_1) yd = KA1_HI * s_h;
1358 
1359         fmuld   %f4,%f10,%f10                   ! (Y1_1) dtmp1 = s_h * s_l;
1360 
1361         ldd     [EXPTBL-ind_LO],KA1_LO          ! (Y1_1) load KA1_LO;
1362         and     %l0,MASK_0x7fffffff,%l2         ! (Y1_2) hx &= 0x7fffffff;
1363         fmuld   %f6,%f20,%f6                    ! (Y0_1) dtmp0 *= s_h;
1364         fcmped  %fcc0,%f34,HTHRESH              ! (Y0_1) s > HTHRESH
1365 
1366         cmp     %l0,MASK_0x000fffff             ! (Y1_2) if (hx <= 0xfffff)
1367         fmuld   %f30,%f62,%f30                  ! (Y0_1) dtmp1 = yd * y;
1368         faddd   %f36,KA3,%f62                   ! (Y1_1) dtmp8 = dtmp8 + KA3;
1369 
1370         ble,pn  %icc,.update4                   ! (Y1_2) if (hx <= 0xfffff)
1371         faddd   %f14,%f48,%f36                  ! (Y1_1)  m_h = y + yd;
1372 .cont4:
1373         sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
1374         fmovdg  %fcc0,HTHRESH,%f34              ! (Y0_1) s = HTHRESH
1375 
1376         add     %o7,4,%o7                       ! stack buffer pointer update
1377         fdivd   DONE,%f12,%f20                  ! (Y0_2) yd = DONE / ux;
1378         fsubd   %f8,%f10,%f10                   ! (Y1_1) s_l -= dtmp1;
1379 
1380         and     %o7,15,%o7                      ! stack buffer pointer update
1381         faddd   %f6,%f30,%f6                    ! (Y0_1) yd = dtmp0 + dtmp1;
1382 
1383         sra     %l3,20,%l3                      ! (Y0_2) exp = (exp >> 20);
1384         add     %o7,ind_buf,%o7                 ! stack buffer pointer update
1385         ldd     [%fp+tmp0_hi],%f8               ! (Y1_2) *(int*)&x = hx;
1386         fsubd   %f36,%f14,%f30                  ! (Y1_1) dtmp2 = m_h - y;
1387 
1388         cmp     %l3,2047                        ! (Y0_2) if (exp >= 0x7ff)
1389         ldd     [%fp+tmp1_hi],%f14              ! (Y1_2) *(int*)&ax = hx;
1390         fmuld   KA1,%f22,%f22                   ! (Y1_1) dtmp0 = KA1 * yd;
1391 
1392         sra     %l4,20,%l0                      ! (Y0_2) itmp0 = (hx >> 20);
1393         sub     %l3,2046,%o5                    ! (Y0_2) exp = exp - 2046;
1394         fcmped  %fcc1,%f34,LTHRESH              ! (Y0_1) s < LTHRESH
1395 
1396         add     %o5,%l0,%o5                     ! (Y0_2) exp += itmp0;
1397         add     py,stridey,py                   ! py += stridey;
1398         fmuld   %f62,%f26,%f62                  ! (Y1_1) dtmp8 = dtmp8 * y;
1399         fmovdg  %fcc0,DZERO,%f6                 ! (Y0_1) yd = DZERO
1400 
1401         sll     %o5,8,%l0                       ! (Y0_2) itmp0 = exp << 8;
1402         st      %l0,[%fp+tmp3]                  ! (Y0_2) (double)itmp0;
1403         faddd   %f8,%f14,%f26                   ! (Y1_2) ux = x + ax;
1404 
1405         bge,pn  %icc,.update5                   ! (Y0_2) if (exp >= 0x7ff)
1406         fsubd   %f30,%f48,%f48                  ! (Y1_1) dtmp2 -= yd;
1407 .cont5:
1408         lda     [py]%asi,%l1                    ! (Y1_1) hy = *py;
1409         fmuld   %f22,%f10,%f10                  ! (Y1_1) s_l = dtmp0 * s_l;
1410         fmovdl  %fcc1,LTHRESH,%f34              ! (Y0_1) s = LTHRESH
1411 
1412         fmovdl  %fcc1,DZERO,%f6                 ! (Y0_1) yd = DZERO
1413 
1414         fand    %f12,MHI32,%f12                 ! (Y0_2) ux = vis_fand(ux, MHI32);
1415         fmuld   KA1_LO,%f4,%f4                  ! (Y1_1) dtmp1 = KA1_LO * s_h;
1416 
1417         fmuld   %f62,%f52,%f62                  ! (Y1_1) s = dtmp8 * s;
1418         ldd     [LOGTBL+%o0],%f52               ! (Y1_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
1419         fsubd   %f48,%f10,%f22                  ! (Y1_1) dtmp2 -= s_l;
1420 
1421         add     px,stridex,px                   ! px += stridex;
1422         faddd   %f34,%f6,%f58                   ! (Y0_1) dtmp0 = (s + yd);
1423 
1424         and     %l1,MASK_0x7fffffff,%l1         ! (Y1_1) hy &= 0x7fffffff;
1425         ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y0_2) load KA1_HI;
1426         fsubd   %f12,%f54,%f10                  ! (Y0_2) dtmp0 = (ux - ax);
1427 
1428         faddd   %f52,%f4,%f52                   ! (Y1_1) dtmp0 += dtmp1;
1429 
1430         fsubd   %f62,%f22,%f4                   ! (Y1_1) y = s - dtmp2;
1431 
1432         fdtoi   %f58,%f17                       ! (Y0_1) (int)dtmp0;
1433 
1434         ld      [%fp+tmp3],%f16                 ! (Y0_2) (double)itmp0;
1435         fsubd   %f32,%f54,%f58                  ! (Y0_2) u = x - ax;
1436         sra     %l4,8,%l4                       ! (Y0_2) i = (hx >> 8);
1437 
1438         sra     %l1,20,%l1                      ! (Y1_1) expy = hy >> 20;
1439         ldd     [EXPTBL-ind_KB5],KB5                    ! (Y0_1) load KB5;
1440         faddd   %f4,%f52,%f48                   ! (Y1_1) y += dtmp0;
1441 
1442         and     %l4,4080,%l4                    ! (Y0_2) i = i & 0xff0;
1443         st      %f17,[%fp+tmp4]                 ! (Y0_1) ind = (int)dtmp0;
1444         fitod   %f17,%f4                        ! (Y0_1) u = (double)(int)dtmp0;
1445 
1446         ldd     [LOGTBL+%l4],%f62               ! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
1447         fmuld   %f58,%f20,%f52                  ! (Y0_2) s = u * yd;
1448         fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l = (x - dtmp0);
1449 
1450         lda     [py]%asi,%f30                   ! (Y1_1) yd = *py;
1451         fitod   %f16,%f54                       ! (Y0_2) (double)itmp0;
1452 
1453         lda     [py+4]%asi,%f31                 ! (Y1_1) yd = *py;
1454         faddd   %f48,%f36,%f32                  ! (Y1_1) dtmp0 = y + m_h;
1455 
1456         add     %l4,8,%o0                       ! (Y0_2) i += 8;
1457         fsubd   %f34,%f4,%f60                   ! (Y0_1) y = s - u;
1458 
1459         cmp     %l1,959                         ! (Y1_1) if (expy < 0x3fb);
1460         lda     [px]%asi,%l0                    ! (Y0_3) hx = ((unsigned*)px)[0];
1461         fand    %f52,MHI32,%f4                  ! (Y0_2) s_h = vis_fand(s, MHI32);
1462 
1463         bl,pn   %icc,.update6                   ! (Y1_1) if (expy < 0x3fb);
1464         faddd   %f62,%f54,%f54                  ! (Y0_2) y += (double)itmp0;
1465 .cont6:
1466         cmp     %l1,1086                        ! (Y1_1) if (expy >= 0x43e);
1467         lda     [px+4]%asi,%i2                  ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1468         fand    %f32,MHI32,%f22                 ! (Y1_1) s_h = vis_fand(dtmp0, MHI32);
1469 
1470         fmuld   %f4,%f12,%f32                   ! (Y0_2) dtmp0 = s_h * ux;
1471         bge,pn  %icc,.update7                   ! (Y1_1) if (expy >= 0x43e);
1472         faddd   %f60,%f6,%f60                   ! (Y0_1) y = y + yd;
1473 .cont7:
1474         ld      [%fp+%o7],%o2                   ! (Y0_1) load yisint
1475         fand    %f30,MHI32,%f6                  ! (Y1_1) s = vis_fand(yd, MHI32);
1476 
1477         and     MASK_0x000fffff,%l0,%o5         ! (Y0_3) hx &= 0xfffff;
1478         fmuld   %f52,%f52,%f12                  ! (Y0_2) y = s * s;
1479 
1480         or      MASK_0x3ff00000,%o5,%o5         ! (Y0_3) hx |= 0x3ff00000;
1481         fsubd   %f22,%f36,%f62                  ! (Y1_1) dtmp0 = (s_h - m_h);
1482 
1483         st      %o5,[%fp+tmp0_hi]               ! (Y0_3) *(int*)&x = hx;
1484         fsubd   %f58,%f32,%f32                  ! (Y0_2) s_l = u - dtmp0;
1485         fmuld   KB5,%f60,%f58                   ! (Y0_1) dtmp0 = KB5 * y;
1486 
1487         ldd     [EXPTBL-ind_KB3],KB3            ! (Y0_1) load KB3;
1488         add     %o5,2048,%o5                    ! (Y0_3) hx += 0x800;
1489         fmuld   %f22,%f6,%f34                   ! (Y1_1) s = s_h * s;
1490         fsubd   %f30,%f6,%f6                    ! (Y1_1) dtmp0 = (yd - s);
1491 
1492         st      %i2,[%fp+tmp0_lo]               ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1493         and     %o5,-4096,%l4                   ! (Y0_3) hx &= 0xfffff000;
1494         fmuld   KA5,%f12,%f36                   ! (Y0_2) dtmp8 = KA5 * y;
1495 
1496         st      %l4,[%fp+tmp1_hi]               ! (Y0_3) *(int*)&ax = hx;
1497         fsubd   %f48,%f62,%f62                  ! (Y1_1) y = y - dtmp0;
1498         fmuld   KA1_HI,%f4,%f48                 ! (Y0_2) yd = KA1_HI * s_h;
1499 
1500         subcc   counter,1,counter
1501         fmuld   %f4,%f10,%f10                   ! (Y0_2) dtmp1 = s_h * s_l;
1502         faddd   %f58,KB4,%f58                   ! (Y0_1) dtmp1 = dtmp0 + KB4;
1503 
1504         ldd     [EXPTBL-ind_LO],KA1_LO          ! (y0_2) load KA1_LO;
1505         and     %l0,MASK_0x7fffffff,%l3         ! (Y0_3) hx &= 0x7fffffff;
1506         fmuld   %f6,%f22,%f6                    ! (Y1_1) dtmp0 *= s_h;
1507         fcmped  %fcc0,%f34,HTHRESH              ! (Y1_1) s > HTHRESH;
1508 
1509         fmuld   %f30,%f62,%f30                  ! (Y1_1) dtmp1 = yd * y;
1510         ba      1f
1511         faddd   %f36,KA3,%f62                   ! (Y0_2) dtmp8 = dtmp8 + KA3;
1512 
1513         .align  16
1514 1:
1515         st      %g0,[%fp+%o7]                   ! (Y0_3) yisint = 0;
1516         fmuld   %f58,%f60,%f58                  ! (Y0_1) dtmp2 = dtmp1 * y;
1517         bneg,pn %icc,.tail
1518         faddd   %f54,%f48,%f36                  ! (Y0_2) m_h = y + yd;
1519 
1520         nop
1521         fmovdg  %fcc0,HTHRESH,%f34              ! (Y1_1) s = HTHRESH;
1522 
1523         fdivd   DONE,%f26,%f22                  ! (Y1_2) yd = DONE / ux;
1524         fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l -= dtmp1;
1525 
1526 .main_loop:
1527         cmp     %l0,MASK_0x000fffff             ! (Y0_2) if (hx <= 0xfffff)
1528         add     py,stridey,py                   ! py += stridey;
1529         faddd   %f6,%f30,%f6                    ! (Y1_0) yd = dtmp0 + dtmp1;
1530 
1531         sra     %l2,20,%l2                      ! (Y1_1) exp = (exp >> 20);
1532         ldd     [%fp+tmp0_hi],%f32              ! (Y0_2) *(int*)&x = hx;
1533         ble,pn  %icc,.update8                   ! (Y0_2) if (hx <= 0xfffff)
1534         fsubd   %f36,%f54,%f30                  ! (Y0_1) dtmp2 = m_h - y;
1535 .cont8:
1536         cmp     %l2,2047                        ! (Y1_1) if (exp >= 0x7ff)
1537         sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
1538         ldd     [%fp+tmp1_hi],%f54              ! (Y0_2) *(int*)&ax = hx;
1539         faddd   %f58,KB3,%f58                   ! (Y0_0) dtmp3 = dtmp2 + KB3;
1540 
1541         sra     %i4,20,%l0                      ! (Y1_1) itmp0 = (hx >> 20);
1542         sub     %l2,2046,%o5                    ! (Y1_1) exp = exp - 2046;
1543         fmuld   KA1,%f20,%f20                   ! (Y0_1) dtmp0 = KA1 * yd;
1544         fcmped  %fcc1,%f34,LTHRESH              ! (Y1_0) s < LTHRESH;
1545 
1546         ldd     [EXPTBL-ind_KB2],KB2            ! (Y0_0) load KB2;
1547         add     %o5,%l0,%o5                     ! (Y1_1) exp += itmp0;
1548         fmuld   %f62,%f12,%f62                  ! (Y0_1) dtmp8 = dtmp8 * y;
1549         fmovdg  %fcc0,DZERO,%f6                 ! (Y1_0) yd = DZERO
1550 
1551         sll     %o5,8,%l0                       ! (Y1_1) itmp0 = exp << 8;
1552         add     %o7,4,%o7                       ! stack buffer pointer update
1553         st      %l0,[%fp+tmp3]                  ! (Y1_1) (double)itmp0;
1554         faddd   %f32,%f54,%f12                  ! (Y0_2) ux = x + ax;
1555 
1556         ld      [%fp+tmp4],%i2                  ! (Y0_0) ind = (int)dtmp0;
1557         fsubd   %f30,%f48,%f48                  ! (Y0_1) dtmp2 -= yd;
1558         bge,pn  %icc,.update9                   ! (Y1_1) if (exp >= 0x7ff)
1559         fmuld   %f58,%f60,%f58                  ! (Y0_0) dtmp4 = dtmp3 * y;
1560 .cont9:
1561         lda     [py]%asi,%l1                    ! (Y0_1) hy = *py;
1562         and     %o7,15,%o7                      ! stack buffer pointer update
1563         fmuld   %f20,%f10,%f10                  ! (Y0_1) s_l = dtmp0 * s_l;
1564         fmovdl  %fcc1,LTHRESH,%f34              ! (Y1_0) s = LTHRESH;
1565 
1566         add     %o7,ind_buf,%o7                 ! stack buffer pointer update
1567         fmovdl  %fcc1,DZERO,%f6                 ! (Y1_0) yd = DZERO
1568 
1569         fmuld   KA1_LO,%f4,%f4                  ! (Y0_1) dtmp1 = KA1_LO * s_h;
1570         fand    %f26,MHI32,%f26                 ! (Y1_1) ux = vis_fand(ux, MHI32);
1571 
1572         fmuld   %f62,%f52,%f62                  ! (Y0_1) s = dtmp8 * s;
1573         nop
1574         faddd   %f58,KB2,%f30                   ! (Y0_0) dtmp5 = dtmp4 + KB2;
1575 
1576         nop
1577         add     pz,stridez,pz                   ! pz += stridez;
1578         ldd     [LOGTBL+%o0],%f52               ! (Y0_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
1579         fsubd   %f48,%f10,%f20                  ! (Y0_1) dtmp2 -= s_l;
1580 
1581         sra     %i2,8,%l0                       ! (Y0_0) ind >>= 8;
1582         ldd     [EXPTBL-ind_KB1],KB1            ! (Y0_0) load KB1;
1583         add     px,stridex,px                   ! px += stridex;
1584         faddd   %f34,%f6,%f58                   ! (Y1_0) dtmp0 = (s + yd);
1585 
1586         add     %l0,1021,%l2                    ! (Y0_0) eflag = (ind + 1021);
1587         sub     %g0,%l0,%o5                     ! (Y0_0) gflag = (1022 - ind);
1588         fsubd   %f26,%f14,%f10                  ! (Y1_1) dtmp0 = (ux - ax);
1589 
1590         sra     %l2,31,%l2                      ! (Y0_0) eflag = eflag >> 31;
1591         add     %o5,1022,%o5                    ! (Y0_0) gflag = (1022 - ind);
1592         fmuld   %f30,%f60,%f48                  ! (Y0_0) dtmp6 = dtmp5 * y;
1593         faddd   %f52,%f4,%f52                   ! (Y0_1) dtmp0 += dtmp1;
1594 
1595         sra     %o5,31,%o5                      ! (Y0_0) gflag = gflag >> 31;
1596         and     %l2,54,%o0                      ! (Y0_0) itmp0 = 54 & eflag;
1597         ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y1_1) load KA1_HI;
1598         fsubd   %f62,%f20,%f4                   ! (Y0_1) y = s - dtmp2;
1599 
1600         lda     [py]%asi,%f30                   ! (Y0_1) yd = *py;
1601         sub     %l2,%o5,%l2                     ! (Y0_0) ind = eflag - gflag;
1602         add     %l0,%o0,%l0                     ! (Y0_0) ind = ind + itmp0;
1603         fdtoi   %f58,%f20                       ! (Y1_0) u = (double)(int)dtmp0;
1604 
1605         sra     %i4,8,%o0                       ! (Y1_1) i = (hx >> 8);
1606         and     %o5,52,%o5                      ! (Y0_0) itmp1 = 52 & gflag;
1607         ld      [%fp+tmp3],%f16                 ! (Y1_1) (double)itmp0;
1608         fsubd   %f8,%f14,%f58                   ! (Y1_1) u = x - ax;
1609 
1610         and     %o0,4080,%o0                    ! (Y1_1) i = i & 0xff0;
1611         sub     %l0,%o5,%i4                     ! (Y0_0) ind = ind - itmp1;
1612         st      %f20,[%fp+tmp4]                 ! (Y1_0) ind = (int)dtmp0;
1613         faddd   %f48,KB1,%f14                   ! (Y0_0) dtmp7 = dtmp6 + KB1;
1614 
1615         add     %o2,%i4,%i4                     ! (Y0_0) ind = yisint + ind;
1616         and     %i2,255,%o5                     ! (Y0_0) i = ind & 0xff;
1617         lda     [px]%asi,%l0                    ! (Y1_2) hx = ((unsigned*)px)[0];
1618         faddd   %f4,%f52,%f48                   ! (Y0_1) y += dtmp0;
1619 
1620         sll     %i4,20,%i4                      ! (Y0_0) ind <<= 20;
1621         ldd     [LOGTBL+%o0],%f62               ! (Y1_1) y = *(double *)((char*)__mt_constlog2 + i);
1622         and     %l1,MASK_0x7fffffff,%l1         ! (Y0_1) hy &= 0x7fffffff;
1623         fitod   %f20,%f4                        ! (Y1_0) u = (double)(int)dtmp0;
1624 
1625         lda     [px+4]%asi,%i2                  ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1626         nop
1627         fmuld   %f58,%f22,%f52                  ! (Y1_1) s = u * yd;
1628         fsubd   %f8,%f10,%f10                   ! (Y1_1) s_l = (x - dtmp0);
1629 
1630         sll     %o5,4,%o5                       ! (Y0_0) i = i << 4;
1631         st      %i4,[%fp+tmp2_hi]               ! (Y0_0) *(int*)&dtmp0 = ind;
1632         fmuld   %f14,%f60,%f20                  ! (Y0_0) y = dtmp7 * y;
1633         fitod   %f16,%f14                       ! (Y1_1) (double)itmp0;
1634 
1635         sra     %l1,20,%l1                      ! (Y0_1) expy = hy >> 20;
1636         nop
1637         ldd     [EXPTBL+%o5],%f56               ! (Y0_0) u = *(double*)((char*)__mt_constexp2 + i);
1638         faddd   %f48,%f36,%f8                   ! (Y0_1) dtmp0 = y + m_h;
1639 
1640         add     %o5,8,%o5                       ! (Y0_0) i += 8;
1641         add     %o0,8,%o0                       ! (Y1_1) i += 8;
1642         lda     [py+4]%asi,%f31                 ! (Y0_1) yd = *py;
1643         fsubd   %f34,%f4,%f60                   ! (Y1_0) y = s - u;
1644 
1645         cmp     %l1,959                         ! (Y0_1) if (expy < 0x3fb);
1646         and     MASK_0x000fffff,%l0,%i4         ! (Y1_2) hx &= 0xfffff;
1647         ldd     [EXPTBL-ind_KB5],KB5            ! (Y1_0) load KB5;
1648         fand    %f52,MHI32,%f4                  ! (Y1_1) s_h = vis_fand(s, MHI32);
1649 
1650         ldd     [EXPTBL+%o5],%f16               ! (Y0_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
1651         fmuld   %f56,%f20,%f34                  ! (Y0_0) dtmp1 = u * y;
1652         bl,pn   %icc,.update10                  ! (Y0_1) if (expy < 0x3fb);
1653         faddd   %f62,%f14,%f14                  ! (Y1_1) y += (double)itmp0;
1654 .cont10:
1655         or      MASK_0x3ff00000,%i4,%i4         ! (Y1_2) hx |= 0x3ff00000;
1656         cmp     %l1,1086                        ! (Y0_1) if (expy >= 0x43e);
1657         fand    %f8,MHI32,%f20                  ! (Y0_1) s_h = vis_fand(dtmp0, MHI32);
1658 
1659         fmuld   %f4,%f26,%f8                    ! (Y1_1) dtmp0 = s_h * ux;
1660         st      %i4,[%fp+tmp0_hi]               ! (Y1_2) *(int*)&x = hx;
1661         bge,pn  %icc,.update11                  ! (Y0_1) if (expy >= 0x43e);
1662         faddd   %f60,%f6,%f60                   ! (Y1_0) y = y + yd;
1663 .cont11:
1664         add     %i4,2048,%i4                    ! (Y1_2) hx += 0x800;
1665         ld      [%fp+%o7],%o2                   ! (Y1_0) load yisint
1666         fand    %f30,MHI32,%f6                  ! (Y0_1) s = vis_fand(yd, MHI32);
1667 
1668         st      %i2,[%fp+tmp0_lo]               ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
1669         and     %i4,-4096,%i4                   ! (Y1_2) hx &= 0xfffff000;
1670         fmuld   %f52,%f52,%f26                  ! (Y1_1) y = s * s;
1671         faddd   %f16,%f34,%f16                  ! (Y0_0) dtmp2 = dtmp0 + dtmp1;
1672 
1673         st      %i4,[%fp+tmp1_hi]               ! (Y1_2) *(int*)&ax = hx;
1674         fsubd   %f20,%f36,%f62                  ! (Y0_1) dtmp0 = (s_h - m_h);
1675 
1676         fsubd   %f58,%f8,%f8                    ! (Y1_1) s_l = u - dtmp0;
1677         fmuld   KB5,%f60,%f58                   ! (Y1_0) dtmp0 = KB5 * y;
1678 
1679         ldd     [EXPTBL-ind_KB3],KB3            ! (Y1_0) load KB3;
1680         fmuld   %f20,%f6,%f34                   ! (Y0_1) s = s_h * s;
1681         fsubd   %f30,%f6,%f6                    ! (Y0_1) dtmp0 = (yd - s);
1682 
1683         faddd   %f16,%f56,%f56                  ! (Y0_0) u = dtmp2 + u;
1684         nop
1685         fmuld   KA5,%f26,%f36                   ! (Y1_1) dtmp8 = KA5 * y;
1686 
1687         nop
1688         add     %l2,513,%l2                     ! (Y0_0) ind += 513;
1689         fsubd   %f48,%f62,%f62                  ! (Y0_1) y = y - dtmp0;
1690         fmuld   KA1_HI,%f4,%f48                 ! (Y1_1) yd = KA1_HI * s_h;
1691 
1692         sll     %l2,3,%o5                       ! (Y0_0) ind *= 8;
1693         ldd     [%fp+tmp2_hi],%f16              ! (Y0_0) ld dtmp0;
1694         fmuld   %f4,%f10,%f10                   ! (Y1_1) dtmp1 = s_h * s_l;
1695         faddd   %f58,KB4,%f58                   ! (Y1_0) dtmp1 = dtmp0 + KB4;
1696 
1697         ldd     [EXPTBL-ind_LO],KA1_LO          ! (Y1_1) load KA1_LO;
1698         and     %l0,MASK_0x7fffffff,%l2         ! (Y1_2) hx &= 0x7fffffff;
1699         fmuld   %f6,%f20,%f6                    ! (Y0_1) dtmp0 *= s_h;
1700         fcmped  %fcc0,%f34,HTHRESH              ! (Y0_1) s > HTHRESH
1701 
1702         ldd     [EXPTBL+%o5],%f20               ! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
1703         nop
1704         nop
1705         fpadd32 %f56,%f16,%f56                  ! (Y0_0) u = vis_fpadd32(u, dtmp0);
1706 
1707         nop
1708         cmp     %l0,MASK_0x000fffff             ! (Y1_2) if (hx <= 0xfffff)
1709         fmuld   %f30,%f62,%f30                  ! (Y0_1) dtmp1 = yd * y;
1710         faddd   %f36,KA3,%f62                   ! (Y1_1) dtmp8 = dtmp8 + KA3;
1711 
1712         fmuld   %f58,%f60,%f58                  ! (Y1_0) dtmp2 = dtmp1 * y;
1713         st      %g0,[%fp+%o7]                   ! (Y1_2) yisint = 0;
1714         ble,pn  %icc,.update12                  ! (Y1_2) if (hx <= 0xfffff)
1715         faddd   %f14,%f48,%f36                  ! (Y1_1)  m_h = y + yd;
1716 .cont12:
1717         sra     %l3,20,%l3                      ! (Y0_2) exp = (exp >> 20);
1718         sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
1719         fmuld   %f56,%f20,%f16                  ! (Y0_0) dtmp1 = u * dtmp1;
1720         fmovdg  %fcc0,HTHRESH,%f34              ! (Y0_1) s = HTHRESH
1721 
1722         cmp     %l3,2047                        ! (Y0_2) if (exp >= 0x7ff)
1723         st      %f16,[pz]                       ! (Y0_0) write into memory
1724         fdivd   DONE,%f12,%f20                  ! (Y0_2) yd = DONE / ux;
1725         fsubd   %f8,%f10,%f10                   ! (Y1_1) s_l -= dtmp1;
1726 
1727         sra     %l4,20,%l0                      ! (Y0_2) itmp0 = (hx >> 20);
1728         sub     %l3,2046,%o5                    ! (Y0_2) exp = exp - 2046;
1729         st      %f17,[pz+4]                     ! (Y0_0) write into memory
1730         faddd   %f6,%f30,%f6                    ! (Y0_1) yd = dtmp0 + dtmp1;
1731 
1732         add     %o5,%l0,%o5                     ! (Y0_2) exp += itmp0;
1733         add     py,stridey,py                   ! py += stridey;
1734         ldd     [%fp+tmp0_hi],%f8               ! (Y1_2) *(int*)&x = hx;
1735         fsubd   %f36,%f14,%f30                  ! (Y1_1) dtmp2 = m_h - y;
1736 
1737         sll     %o5,8,%l0                       ! (Y0_2) itmp0 = exp << 8;
1738         ldd     [%fp+tmp1_hi],%f14              ! (Y1_2) *(int*)&ax = hx;
1739         fmuld   KA1,%f22,%f22                   ! (Y1_1) dtmp0 = KA1 * yd;
1740         faddd   %f58,KB3,%f58                   ! (Y1_0) dtmp3 = dtmp2 + KB3;
1741 
1742         add     %o7,4,%o7                       ! stack buffer pointer update
1743         st      %l0,[%fp+tmp3]                  ! (Y0_2) (double)itmp0;
1744         fcmped  %fcc1,%f34,LTHRESH              ! (Y0_1) s < LTHRESH
1745 
1746         and     %o7,15,%o7                      ! stack buffer pointer update
1747         ld      [%fp+tmp4],%l0                  ! (Y1_0) ind = (int)dtmp0;
1748         fmuld   %f62,%f26,%f62                  ! (Y1_1) dtmp8 = dtmp8 * y;
1749         fmovdg  %fcc0,DZERO,%f6                 ! (Y0_1) yd = DZERO
1750 
1751         nop
1752         add     %o7,ind_buf,%o7                 ! stack buffer pointer update
1753         ldd     [EXPTBL-ind_KB2],KB2            ! (Y1_0) load KB2;
1754         faddd   %f8,%f14,%f26                   ! (Y1_2) ux = x + ax;
1755 
1756         fmuld   %f58,%f60,%f58                  ! (Y1_0) dtmp4 = dtmp3 * y;
1757         nop
1758         bge,pn  %icc,.update13                  ! (Y0_2) if (exp >= 0x7ff)
1759         fsubd   %f30,%f48,%f48                  ! (Y1_1) dtmp2 -= yd;
1760 .cont13:
1761         lda     [py]%asi,%l1                    ! (Y1_1) hy = *py;
1762         nop
1763         fmuld   %f22,%f10,%f10                  ! (Y1_1) s_l = dtmp0 * s_l;
1764         fmovdl  %fcc1,LTHRESH,%f34              ! (Y0_1) s = LTHRESH
1765 
1766         nop
1767         nop
1768         fmovdl  %fcc1,DZERO,%f6                 ! (Y0_1) yd = DZERO
1769 
1770         fand    %f12,MHI32,%f12                 ! (Y0_2) ux = vis_fand(ux, MHI32);
1771         nop
1772         nop
1773         fmuld   KA1_LO,%f4,%f4                  ! (Y1_1) dtmp1 = KA1_LO * s_h;
1774 
1775         nop
1776         add     px,stridex,px                   ! px += stridex;
1777         faddd   %f58,KB2,%f30                   ! (Y1_0) dtmp5 = dtmp4 + KB2;
1778         fmuld   %f62,%f52,%f62                  ! (Y1_1) s = dtmp8 * s;
1779 
1780         sra     %l0,8,%i2                       ! (Y1_0) ind >>= 8;
1781         add     pz,stridez,pz                   ! pz += stridez;
1782         ldd     [LOGTBL+%o0],%f52               ! (Y1_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
1783         fsubd   %f48,%f10,%f22                  ! (Y1_1) dtmp2 -= s_l;
1784 
1785         add     %i2,1021,%l3                    ! (Y1_0) eflag = (ind + 1021);
1786         sub     %g0,%i2,%o5                     ! (Y1_0) gflag = (1022 - ind);
1787         ldd     [EXPTBL-ind_KB1],KB1            ! (Y1_0) load KB1;
1788         faddd   %f34,%f6,%f58                   ! (Y0_1) dtmp0 = (s + yd);
1789 
1790         sra     %l3,31,%l3                      ! (Y1_0) eflag = eflag >> 31;
1791         add     %o5,1022,%o5                    ! (Y1_0) gflag = (1022 - ind);
1792         ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y0_2) load KA1_HI;
1793         fsubd   %f12,%f54,%f10                  ! (Y0_2) dtmp0 = (ux - ax);
1794 
1795         sra     %o5,31,%o5                      ! (Y1_0) gflag = gflag >> 31;
1796         and     %l3,54,%o0                      ! (Y1_0) itmp0 = 54 & eflag;
1797         fmuld   %f30,%f60,%f48                  ! (Y1_0) dtmp6 = dtmp5 * y;
1798         faddd   %f52,%f4,%f52                   ! (Y1_1) dtmp0 += dtmp1;
1799 
1800         sra     %l4,8,%l4                       ! (Y0_2) i = (hx >> 8);
1801         add     %i2,%o0,%i2                     ! (Y1_0) ind = ind + itmp0;
1802         fsubd   %f62,%f22,%f4                   ! (Y1_1) y = s - dtmp2;
1803 
1804         lda     [py]%asi,%f30                   ! (Y1_1) yd = *py;
1805         and     %l4,4080,%l4                    ! (Y0_2) i = i & 0xff0;
1806         and     %o5,52,%o0                      ! (Y1_0) itmp1 = 52 & gflag;
1807         fdtoi   %f58,%f22                       ! (Y0_1) (int)dtmp0;
1808 
1809         sub     %l3,%o5,%l3                     ! (Y1_0) ind = eflag - gflag;
1810         sub     %i2,%o0,%i2                     ! (Y1_0) ind = ind - itmp1;
1811         ld      [%fp+tmp3],%f16                 ! (Y0_2) (double)itmp0;
1812         fsubd   %f32,%f54,%f58                  ! (Y0_2) u = x - ax;
1813 
1814         add     %o2,%i2,%i2                     ! (Y1_0) ind = yisint + ind;
1815         and     %l0,255,%o5                     ! (Y1_0) i = ind & 0xff;
1816         st      %f22,[%fp+tmp4]                 ! (Y0_1) ind = (int)dtmp0;
1817         faddd   %f48,KB1,%f54                   ! (Y1_0) dtmp7 = dtmp6 + KB1;
1818 
1819         sll     %i2,20,%o0                      ! (Y1_0) ind <<= 20;
1820         nop
1821         lda     [px]%asi,%l0                    ! (Y0_3) hx = ((unsigned*)px)[0];
1822         faddd   %f4,%f52,%f48                   ! (Y1_1) y += dtmp0;
1823 
1824         and     %l1,MASK_0x7fffffff,%l1         ! (Y1_1) hy &= 0x7fffffff;
1825         nop
1826         st      %o0,[%fp+tmp2_hi]               ! (Y1_0) *(int*)&dtmp0 = ind;
1827         fitod   %f22,%f4                        ! (Y0_1) u = (double)(int)dtmp0;
1828 
1829         lda     [px+4]%asi,%i2                  ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1830         nop
1831         fmuld   %f58,%f20,%f52                  ! (Y0_2) s = u * yd;
1832         fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l = (x - dtmp0);
1833 
1834         sll     %o5,4,%o5                       ! (Y1_0) i = i << 4;
1835         ldd     [LOGTBL+%l4],%f62               ! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
1836         fmuld   %f54,%f60,%f22                  ! (Y1_0) y = dtmp7 * y;
1837         fitod   %f16,%f54                       ! (Y0_2) (double)itmp0;
1838 
1839         sra     %l1,20,%l1                      ! (Y1_1) expy = hy >> 20;
1840         nop
1841         ldd     [EXPTBL+%o5],%f56               ! (Y1_0) u = *(double*)((char*)__mt_constexp2 + i);
1842         faddd   %f48,%f36,%f32                  ! (Y1_1) dtmp0 = y + m_h;
1843 
1844         add     %o5,8,%o5                       ! (Y1_0) i += 8;
1845         add     %l4,8,%o0                       ! (Y0_2) i += 8;
1846         lda     [py+4]%asi,%f31                 ! (Y1_1) yd = *py;
1847         fsubd   %f34,%f4,%f60                   ! (Y0_1) y = s - u;
1848 
1849         cmp     %l1,959                         ! (Y1_1) if (expy < 0x3fb);
1850         and     MASK_0x000fffff,%l0,%l4         ! (Y0_3) hx &= 0xfffff;
1851         fand    %f52,MHI32,%f4                  ! (Y0_2) s_h = vis_fand(s, MHI32);
1852 
1853         ldd     [EXPTBL+%o5],%f16               ! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
1854         fmuld   %f56,%f22,%f34                  ! (Y1_0) dtmp1 = u * y;
1855         bl,pn   %icc,.update14                  ! (Y1_1) if (expy < 0x3fb);
1856         faddd   %f62,%f54,%f54                  ! (Y0_2) y += (double)itmp0;
1857 .cont14:
1858         ldd     [EXPTBL-ind_KB5],KB5            ! (Y0_1) load KB5;
1859         or      MASK_0x3ff00000,%l4,%o5         ! (Y0_3) hx |= 0x3ff00000;
1860         cmp     %l1,1086                        ! (Y1_1) if (expy >= 0x43e);
1861         fand    %f32,MHI32,%f22                 ! (Y1_1) s_h = vis_fand(dtmp0, MHI32);
1862 
1863         fmuld   %f4,%f12,%f32                   ! (Y0_2) dtmp0 = s_h * ux;
1864         st      %o5,[%fp+tmp0_hi]               ! (Y0_3) *(int*)&x = hx;
1865         bge,pn  %icc,.update15                  ! (Y1_1) if (expy >= 0x43e);
1866         faddd   %f60,%f6,%f60                   ! (Y0_1) y = y + yd;
1867 .cont15:
1868         add     %o5,2048,%o5                    ! (Y0_3) hx += 0x800;
1869         nop
1870         ld      [%fp+%o7],%o2                   ! (Y0_1) load yisint
1871         fand    %f30,MHI32,%f6                  ! (Y1_1) s = vis_fand(yd, MHI32);
1872 
1873         and     %o5,-4096,%l4                   ! (Y0_3) hx &= 0xfffff000;
1874         st      %i2,[%fp+tmp0_lo]               ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
1875         fmuld   %f52,%f52,%f12                  ! (Y0_2) y = s * s;
1876         faddd   %f16,%f34,%f16                  ! (Y1_0) dtmp2 = dtmp0 + dtmp1;
1877 
1878         nop
1879         nop
1880         st      %l4,[%fp+tmp1_hi]               ! (Y0_3) *(int*)&ax = hx;
1881         fsubd   %f22,%f36,%f62                  ! (Y1_1) dtmp0 = (s_h - m_h);
1882 
1883         fsubd   %f58,%f32,%f32                  ! (Y0_2) s_l = u - dtmp0;
1884         nop
1885         nop
1886         fmuld   KB5,%f60,%f58                   ! (Y0_1) dtmp0 = KB5 * y;
1887 
1888         ldd     [EXPTBL-ind_KB3],KB3            ! (Y0_1) load KB3;
1889         nop
1890         fmuld   %f22,%f6,%f34                   ! (Y1_1) s = s_h * s;
1891         fsubd   %f30,%f6,%f6                    ! (Y1_1) dtmp0 = (yd - s);
1892 
1893         fmuld   KA5,%f12,%f36                   ! (Y0_2) dtmp8 = KA5 * y;
1894         nop
1895         faddd   %f16,%f56,%f56                  ! (Y1_0) u = dtmp2 + u;
1896 
1897         add     %l3,513,%l3                     ! (Y1_0) ind += 1;
1898         fsubd   %f48,%f62,%f62                  ! (Y1_1) y = y - dtmp0;
1899         fmuld   KA1_HI,%f4,%f48                 ! (Y0_2) yd = KA1_HI * s_h;
1900 
1901         sll     %l3,3,%o5                       ! (Y1_0) ind *= 8;
1902         ldd     [%fp+tmp2_hi],%f16              ! (Y1_0) *(int*)&dtmp0 = ind;
1903         fmuld   %f4,%f10,%f10                   ! (Y0_2) dtmp1 = s_h * s_l;
1904         faddd   %f58,KB4,%f58                   ! (Y0_1) dtmp1 = dtmp0 + KB4;
1905 
1906         ldd     [EXPTBL-ind_LO],KA1_LO          ! (y0_2) load KA1_LO;
1907         and     %l0,MASK_0x7fffffff,%l3         ! (Y0_3) hx &= 0x7fffffff;
1908         fmuld   %f6,%f22,%f6                    ! (Y1_1) dtmp0 *= s_h;
1909         fcmped  %fcc0,%f34,HTHRESH              ! (Y1_1) s > HTHRESH;
1910 
1911         nop
1912         subcc   counter,2,counter               ! update cycle counter
1913         ldd     [EXPTBL+%o5],%f22               ! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
1914         fpadd32 %f56,%f16,%f56                  ! (Y1_0) u = vis_fpadd32(u, dtmp0);
1915 
1916         fmuld   %f30,%f62,%f30                  ! (Y1_1) dtmp1 = yd * y;
1917         nop
1918         nop
1919         faddd   %f36,KA3,%f62                   ! (Y0_2) dtmp8 = dtmp8 + KA3;
1920 
1921         nop
1922         st      %g0,[%fp+%o7]                   ! (Y0_3) yisint = 0;
1923         fmuld   %f58,%f60,%f58                  ! (Y0_1) dtmp2 = dtmp1 * y;
1924         faddd   %f54,%f48,%f36                  ! (Y0_2) m_h = y + yd;
1925 
1926         fmuld   %f56,%f22,%f16                  ! (Y1_0) dtmp1 = u * dtmp1;
1927         nop
1928         st      %f16,[pz]                       ! (Y1_0) write into memory
1929         fmovdg  %fcc0,HTHRESH,%f34              ! (Y1_1) s = HTHRESH;
1930 
1931         fdivd   DONE,%f26,%f22                  ! (Y1_2) yd = DONE / ux;
1932         st      %f17,[pz+4]                     ! (Y1_0) write into memory
1933         bpos,pt %icc,.main_loop
1934         fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l -= dtmp1;
1935 
1936 .tail:
1937         addcc   counter,1,counter
1938         bneg,pn %icc,.end_loop
1939 
1940         faddd   %f58,KB3,%f58                   ! (Y0_0) dtmp3 = dtmp2 + KB3;
1941         ldd     [EXPTBL-ind_KB2],KB2            ! (Y0_0) load KB2;
1942 
1943         ld      [%fp+tmp4],%i2                  ! (Y0_0) ind = (int)dtmp0;
1944         fmuld   %f58,%f60,%f58                  ! (Y0_0) dtmp4 = dtmp3 * y;
1945         faddd   %f58,KB2,%f30                   ! (Y0_0) dtmp5 = dtmp4 + KB2;
1946 
1947         add     pz,stridez,pz                   ! pz += stridez;
1948         ldd     [EXPTBL-ind_KB1],KB1            ! (Y0_0) load KB1;
1949         sra     %i2,8,%l0                       ! (Y0_0) ind >>= 8;
1950 
1951         add     %l0,1021,%l2                    ! (Y0_0) eflag = (ind + 1021);
1952         sub     %g0,%l0,%o5                     ! (Y0_0) gflag = (1022 - ind);
1953         fmuld   %f30,%f60,%f48                  ! (Y0_0) dtmp6 = dtmp5 * y;
1954 
1955         sra     %l2,31,%l2                      ! (Y0_0) eflag = eflag >> 31;
1956         add     %o5,1022,%o5                    ! (Y0_0) gflag = (1022 - ind);
1957 
1958         sra     %o5,31,%o5                      ! (Y0_0) gflag = gflag >> 31;
1959         and     %l2,54,%o0                      ! (Y0_0) itmp0 = 54 & eflag;
1960 
1961         sub     %l2,%o5,%l2                     ! (Y0_0) ind = eflag - gflag;
1962         add     %l0,%o0,%l0                     ! (Y0_0) ind = ind + itmp0;
1963 
1964         and     %o5,52,%o5                      ! (Y0_0) itmp1 = 52 & gflag;
1965         faddd   %f48,KB1,%f14                   ! (Y0_0) dtmp7 = dtmp6 + KB1;
1966 
1967         sub     %l0,%o5,%l0                     ! (Y0_0) ind = ind - itmp1;
1968         and     %i2,255,%i4                     ! (Y0_0) i = ind & 0xff;
1969 
1970         sll     %i4,4,%o5                       ! (Y0_0) i = i << 4;
1971 
1972         ldd     [EXPTBL+%o5],%f56               ! (Y0_0) u = *(double*)((char*)__mt_constexp2 + i);
1973         add     %o2,%l0,%l0                     ! (Y0_0) ind = yisint + ind;
1974         fmuld   %f14,%f60,%f20                  ! (Y0_0) y = dtmp7 * y;
1975 
1976         sll     %l0,20,%i2                      ! (Y0_0) ind <<= 20;
1977 
1978         add     %o5,8,%o5                       ! (Y0_0) i += 8;
1979         st      %i2,[%fp+tmp2_hi]               ! (Y0_0) *(int*)&dtmp0 = ind;
1980 
1981         ldd     [EXPTBL+%o5],%f16               ! (Y0_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
1982         fmuld   %f56,%f20,%f34                  ! (Y0_0) dtmp1 = u * y;
1983 
1984         faddd   %f16,%f34,%f16                  ! (Y0_0) dtmp2 = dtmp0 + dtmp1;
1985 
1986         faddd   %f16,%f56,%f56                  ! (Y0_0) u = dtmp2 + u;
1987         add     %l2,513,%l2                     ! (Y0_0) ind += 513;
1988 
1989         sll     %l2,3,%o5                       ! (Y0_0) ind *= 8;
1990         ldd     [%fp+tmp2_hi],%f16              ! (Y0_0) ld dtmp0;
1991 
1992         ldd     [EXPTBL+%o5],%f20               ! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
1993         fpadd32 %f56,%f16,%f56                  ! (Y0_0) u = vis_fpadd32(u, dtmp0);
1994 
1995         fmuld   %f56,%f20,%f16                  ! (Y0_0) dtmp1 = u * dtmp1;
1996         st      %f16,[pz]                       ! (Y0_0) write into memory
1997         st      %f17,[pz+4]                     ! (Y0_0) write into memory
1998 
1999 .end_loop:
2000         ba      .begin
2001         nop
2002 .end:
2003         ret
2004         restore %g0,0,%o0
2005 
2006         .align  16
2007 .update0:
2008         cmp     %l0,%g0                         ! if (x >= 0);
2009         fzero   %f30
2010 
2011         lda     [py+4]%asi,%l0                  ! ld ly
2012         bge,pt  %icc,.pos0                      ! if (x >= 0);
2013         or      %g0,%g0,%o5                     ! yisint = 0;
2014 
2015         cmp     %o0,1076                        ! if (expy >= 0x434);
2016         bge     .neg0                           ! if (expy >= 0x434);
2017         or      %g0,2,%o5                       ! yisint = 2;
2018 
2019         cmp     %o0,1023                        ! if (expy < 0x3ff);
2020         bl      .neg0                           ! if (expy < 0x3ff);
2021         or      %g0,0,%o5                       ! yisint = 0;
2022 
2023         cmp     %o0,1043                        ! if (expy <= (20 + 0x3ff));
2024         ble     .small0                         ! if (expy <= (20 + 0x3ff));
2025         sub     %o0,1023,%o0                    ! expy - 0x3ff;
2026 
2027         sub     %g0,%o0,%o0
2028         add     %o0,52,%o0                      ! sh = (52 - (expy - 0x3ff);
2029         srl     %l0,%o0,%i4                     ! i0 = (ly >> sh);
2030 
2031         sll     %i4,%o0,%i4                     ! (i0 << sh);
2032 
2033         srl     %l0,%o0,%o0                     ! i0 = (ly >> sh);
2034         cmp     %i4,%l0                         ! if ((i0 << sh) == ly);
2035 
2036         and     %o0,1,%o0                       ! i0 &= 1;
2037 
2038         sub     %g0,%o0,%o0
2039         add     %o0,2,%o0                       ! i0 = 2 - i0;
2040 
2041         move    %icc,%o0,%o5                    ! yisint = i0;
2042 
2043         ba      .neg0
2044         nop
2045 .small0:
2046         sub     %g0,%o0,%o0
2047         cmp     %l0,%g0                         ! if (ly != 0);
2048 
2049         add     %o0,20,%o0                      ! sh = (20 - (expy - 0x3ff);
2050         bne     .neg0                           ! if (ly != 0);
2051         or      %g0,0,%o5                       ! yisint = 0;
2052 
2053         srl     %l1,%o0,%i4                     ! i0 = (hy >> sh);
2054 
2055         sll     %i4,%o0,%i4                     ! (i0 << sh);
2056 
2057         srl     %l1,%o0,%o0                     ! i0 = (hy >> sh);
2058         cmp     %i4,%l1                         ! if ((i0 << sh) == hy);
2059 
2060         and     %o0,1,%o0                       ! i0 &= 1;
2061 
2062         sub     %g0,%o0,%o0
2063         add     %o0,2,%o0                       ! i0 = 2 - i0;
2064 
2065         move    %icc,%o0,%o5                    ! yisint = i0;
2066 .neg0:
2067         orcc    %l3,%i2,%g0                     ! if (x != 0);
2068 
2069         sra     %o2,31,%i4                      ! sy = (*((unsigned*)py)[0]) >> 31;
2070         bne,pt  %icc,3f                         ! if (x != 0);
2071         nop
2072 
2073         cmp     %i4,%g0                         ! if (sy == 0);
2074         be      1f                              ! if (sy == 0);
2075         and     %o5,1,%i4                       ! yisint &= 1;
2076 
2077         fdivd   DONE,%f30,%f30                  ! y0 = DONE / y0;
2078 1:
2079         cmp     %i4,%g0                         ! if ((yisint & 1) == 0);
2080         be      2f                              ! if ((yisint & 1) == 0);
2081         nop
2082 
2083         fnegd   %f30,%f30                       ! y0 = -y0;
2084 2:
2085         st      %f30,[pz]
2086         ba      .update_point
2087         st      %f31,[pz+4]
2088 3:
2089         cmp     %o5,%g0                         ! if (yisint != 0);
2090         bne     .pos0                           ! if (yisint != 0);
2091         nop
2092 
2093         fdivd   DZERO,DZERO,%f30                ! y0 = DZERO / DZERO;
2094         st      %f30,[pz]
2095         ba      .update_point
2096         st      %f31,[pz+4]
2097 .pos0:
2098         orcc    %l3,%i2,%g0                     ! if (x != 0);
2099 
2100         sra     %o2,31,%i4                      ! sy = (*((unsigned*)py)[0]) >> 31;
2101         bne,pt  %icc,.nzero0                    ! if (x != 0);
2102         nop
2103 
2104         cmp     %i4,%g0                         ! if (sy == 0);
2105         be      1f                              ! if (sy == 0);
2106         nop
2107 
2108         fdivd   DONE,%f30,%f30                  ! y0 = DONE / y0;
2109 1:
2110         st      %f30,[pz]
2111         ba      .update_point
2112         st      %f31,[pz+4]
2113 .nzero0:
2114         sll     %o5,11,%o5
2115         cmp     %l3,MASK_0x000fffff             ! if (exp > 0xfffff);
2116 
2117         bg,pt   %icc,.cont0                     ! if (exp > 0xfffff);
2118         st      %o5,[%fp+%o7]
2119 
2120         ldd     [%fp+tmp_mant],%f54
2121 
2122         or      %g0,1074,%o5
2123         fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);
2124 
2125         sll     %o5,20,%o5
2126         fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0];
2127 
2128         std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
2129         fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);
2130 
2131         ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
2132         for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);
2133 
2134         sub     %i2,%o5,%l3                     ! exp -= (1023 + 51) << 20;
2135         and     MASK_0x000fffff,%i2,%l4         ! hx = exp & 0xfffff;
2136         or      MASK_0x3ff00000,%l4,%l4         ! hx |= 0x3ff00000;
2137         add     %l4,2048,%l4                    ! hx += 0x800;
2138         and     %l4,-4096,%l4                   ! hx &= 0xfffff000;
2139 
2140         ba      .cont0
2141         st      %l4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;
2142 
2143         .align  16
2144 .update1:
2145         cmp     counter,0
2146         ble,pt  %icc,.cont1
2147         add     py,stridey,%o5
2148 
2149         stx     px,[%fp+tmp_px]
2150 
2151         orcc    %l2,%i2,%g0                     ! if (x == 0);
2152         bne,pt  %icc,.nzero1                    ! if (x == 0);
2153         stx     %o5,[%fp+tmp_py]
2154 .u1:
2155         st      counter,[%fp+tmp_counter]
2156         ba      .cont1
2157         or      %g0,0,counter
2158 .nzero1:
2159         lda     [%o5]%asi,%l1                   ! ld hy;
2160         cmp     %l0,%g0                         ! if (x >= 0);
2161 
2162         lda     [%o5+4]%asi,%l0                 ! ld ly
2163         bge,pt  %icc,.pos1                      ! if (x >= 0);
2164         or      %g0,%g0,%o5                     ! yisint = 0;
2165 
2166         and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;
2167 
2168         sra     %i2,20,%i2                      ! expy = hy >> 20;
2169 
2170         cmp     %i2,1076                        ! if (expy >= 0x434);
2171         bge     .neg1                           ! if (expy >= 0x434);
2172         or      %g0,2,%o5                       ! yisint = 2;
2173 
2174         cmp     %i2,1023                        ! if (expy < 0x3ff);
2175         bl      .neg1                           ! if (expy < 0x3ff);
2176         or      %g0,0,%o5                       ! yisint = 0;
2177 
2178         cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
2179         ble     .small1                         ! if (expy <= (20 + 0x3ff));
2180         sub     %i2,1023,%i2                    ! expy - 0x3ff;
2181 
2182         sub     %g0,%i2,%i2
2183         add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
2184         srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);
2185 
2186         sll     %l1,%i2,%l1                     ! (i0 << sh);
2187 
2188         srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
2189         cmp     %l1,%l0                         ! if ((i0 << sh) == ly);
2190 
2191         and     %i2,1,%i2                       ! i0 &= 1;
2192 
2193         sub     %g0,%i2,%i2
2194         add     %i2,2,%i2                       ! i0 = 2 - i0;
2195 
2196         move    %icc,%i2,%o5                    ! yisint = i0;
2197 
2198         ba      .neg1
2199         nop
2200 .small1:
2201         sub     %g0,%i2,%i2
2202         cmp     %l0,%g0                         ! if (ly != 0);
2203 
2204         add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
2205         bne     .neg1                           ! if (ly != 0);
2206         or      %g0,0,%o5                       ! yisint = 0;
2207 
2208         srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);
2209 
2210         sll     %l0,%i2,%l0                     ! (i0 << sh);
2211 
2212         srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
2213         cmp     %l0,%l1                         ! if ((i0 << sh) == hy);
2214 
2215         and     %i2,1,%i2                       ! i0 &= 1;
2216 
2217         sub     %g0,%i2,%i2
2218         add     %i2,2,%i2                       ! i0 = 2 - i0;
2219 
2220         move    %icc,%i2,%o5                    ! yisint = i0;
2221 .neg1:
2222         cmp     %o5,%g0
2223         be      .u1
2224         nop
2225 .pos1:
2226         sll     %o5,11,%o5
2227         cmp     %l2,MASK_0x000fffff             ! if (exp > 0xfffff);
2228 
2229         bg,pt   %icc,.cont1                     ! if (exp > 0xfffff);
2230         st      %o5,[%fp+%o7]
2231 
2232         std     %f32,[%fp+tmp5];
2233         std     %f54,[%fp+tmp6];
2234         ldd     [%fp+tmp0_hi],%f32
2235         ldd     [%fp+tmp_mant],%f54
2236 
2237         or      %g0,1074,%o5
2238         fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);
2239 
2240         sll     %o5,20,%o5
2241         fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0];
2242 
2243         std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
2244         fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);
2245 
2246         ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
2247         for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);
2248 
2249         std     %f32,[%fp+tmp0_hi];
2250         sub     %i2,%o5,%l2                     ! exp -= (1023 + 51) << 20;
2251         and     MASK_0x000fffff,%i2,%i4         ! hx = exp & 0xfffff;
2252         ldd     [%fp+tmp5],%f32
2253         or      MASK_0x3ff00000,%i4,%i4         ! hx |= 0x3ff00000;
2254         add     %i4,2048,%i4                    ! hx += 0x800;
2255         ldd     [%fp+tmp6],%f54
2256         and     %i4,-4096,%i4                   ! hx &= 0xfffff000;
2257 
2258         ba      .cont1
2259         st      %i4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;
2260 
2261         .align  16
2262 .update2:
2263         cmp     counter,1
2264         ble,pt  %icc,.cont2
2265         add     py,stridey,%o5
2266 
2267         add     %o5,stridey,%o5
2268         stx     px,[%fp+tmp_px]
2269 
2270         orcc    %l3,%i2,%g0                     ! if (x == 0);
2271         bne,pt  %icc,.nzero2                    ! if (x == 0);
2272         stx     %o5,[%fp+tmp_py]
2273 .u2:
2274         sub     counter,1,counter
2275         st      counter,[%fp+tmp_counter]
2276         ba      .cont2
2277         or      %g0,1,counter
2278 .nzero2:
2279         lda     [%o5]%asi,%l1                   ! ld hy;
2280         cmp     %l0,%g0                         ! if (x >= 0);
2281 
2282         lda     [%o5+4]%asi,%l0                 ! ld ly
2283         bge,pt  %icc,.pos2                      ! if (x >= 0);
2284         or      %g0,%g0,%o5                     ! yisint = 0;
2285 
2286         and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;
2287 
2288         sra     %i2,20,%i2                      ! expy = hy >> 20;
2289 
2290         cmp     %i2,1076                        ! if (expy >= 0x434);
2291         bge     .neg2                           ! if (expy >= 0x434);
2292         or      %g0,2,%o5                       ! yisint = 2;
2293 
2294         cmp     %i2,1023                        ! if (expy < 0x3ff);
2295         bl      .neg2                           ! if (expy < 0x3ff);
2296         or      %g0,0,%o5                       ! yisint = 0;
2297 
2298         cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
2299         ble     .small2                         ! if (expy <= (20 + 0x3ff));
2300         sub     %i2,1023,%i2                    ! expy - 0x3ff;
2301 
2302         sub     %g0,%i2,%i2
2303         add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
2304         srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);
2305 
2306         sll     %l1,%i2,%l1                     ! (i0 << sh);
2307 
2308         srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
2309         cmp     %l1,%l0                         ! if ((i0 << sh) == ly);
2310 
2311         and     %i2,1,%i2                       ! i0 &= 1;
2312 
2313         sub     %g0,%i2,%i2
2314         add     %i2,2,%i2                       ! i0 = 2 - i0;
2315 
2316         move    %icc,%i2,%o5                    ! yisint = i0;
2317 
2318         ba      .neg2
2319         nop
2320 .small2:
2321         sub     %g0,%i2,%i2
2322         cmp     %l0,%g0                         ! if (ly != 0);
2323 
2324         add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
2325         bne     .neg2                           ! if (ly != 0);
2326         or      %g0,0,%o5                       ! yisint = 0;
2327 
2328         srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);
2329 
2330         sll     %l0,%i2,%l0                     ! (i0 << sh);
2331 
2332         srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
2333         cmp     %l0,%l1                         ! if ((i0 << sh) == hy);
2334 
2335         and     %i2,1,%i2                       ! i0 &= 1;
2336 
2337         sub     %g0,%i2,%i2
2338         add     %i2,2,%i2                       ! i0 = 2 - i0;
2339 
2340         move    %icc,%i2,%o5                    ! yisint = i0;
2341 .neg2:
2342         cmp     %o5,%g0
2343         be      .u2
2344         nop
2345 .pos2:
2346         sll     %o5,11,%o5
2347         cmp     %l3,MASK_0x000fffff             ! if (exp > 0xfffff);
2348 
2349         bg,pt   %icc,.cont2                     ! if (exp > 0xfffff);
2350         st      %o5,[%fp+%o7]
2351 
2352         ldd     [%fp+tmp_mant],%f54
2353 
2354         or      %g0,1074,%o5
2355         fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);
2356 
2357         sll     %o5,20,%o5
2358         fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0]
2359 
2360         std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
2361         fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);
2362 
2363         ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
2364         for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);
2365 
2366         sub     %i2,%o5,%l3                     ! exp -= (1023 + 51) << 20;
2367         and     MASK_0x000fffff,%i2,%l4         ! hx = exp & 0xfffff;
2368         or      MASK_0x3ff00000,%l4,%l4         ! hx |= 0x3ff00000;
2369         add     %l4,2048,%l4                    ! hx += 0x800;
2370         and     %l4,-4096,%l4                   ! hx &= 0xfffff000;
2371 
2372         ba      .cont2
2373         st      %l4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;
2374 
2375         .align  16
2376 .update3:
2377         cmp     counter,0
2378         ble,pt  %icc,.cont3
2379         sub     px,stridex,%o5
2380 
2381         ld      [%fp+tmp_counter],%l1
2382 
2383         stx     %o5,[%fp+tmp_px]
2384         add     py,stridey,%o5
2385 
2386         add     %l1,counter,counter
2387         stx     %o5,[%fp+tmp_py]
2388 
2389         st      counter,[%fp+tmp_counter]
2390         ba      .cont3
2391         or      %g0,0,counter
2392 
2393         .align  16
2394 .update4:
2395         cmp     counter,2
2396         ble,pt  %icc,.cont4
2397         add     py,stridey,%o5
2398 
2399         add     %o5,stridey,%o5
2400         add     %o5,stridey,%o5
2401         stx     px,[%fp+tmp_px]
2402 
2403         orcc    %l2,%i2,%g0                     ! if (x == 0);
2404         bne,pt  %icc,.nzero4                    ! if (x == 0);
2405         stx     %o5,[%fp+tmp_py]
2406 .u4:
2407         sub     counter,2,counter
2408         st      counter,[%fp+tmp_counter]
2409         ba      .cont4
2410         or      %g0,2,counter
2411 .nzero4:
2412         lda     [%o5]%asi,%l1                   ! ld hy;
2413         cmp     %l0,%g0                         ! if (x >= 0);
2414 
2415         lda     [%o5+4]%asi,%l0                 ! ld ly
2416         bge,pt  %icc,.pos4                      ! if (x >= 0);
2417         or      %g0,%g0,%o5                     ! yisint = 0;
2418 
2419         and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;
2420 
2421         sra     %i2,20,%i2                      ! expy = hy >> 20;
2422 
2423         cmp     %i2,1076                        ! if (expy >= 0x434);
2424         bge     .neg4                           ! if (expy >= 0x434);
2425         or      %g0,2,%o5                       ! yisint = 2;
2426 
2427         cmp     %i2,1023                        ! if (expy < 0x3ff);
2428         bl      .neg4                           ! if (expy < 0x3ff);
2429         or      %g0,0,%o5                       ! yisint = 2;
2430 
2431         cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
2432         ble     .small4                         ! if (expy <= (20 + 0x3ff));
2433         sub     %i2,1023,%i2                    ! expy - 0x3ff;
2434 
2435         sub     %g0,%i2,%i2
2436         add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
2437         srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);
2438 
2439         sll     %l1,%i2,%l1                     ! (i0 << sh);
2440 
2441         srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
2442         cmp     %l1,%l0                         ! if ((i0 << sh) == ly);
2443 
2444         and     %i2,1,%i2                       ! i0 &= 1;
2445 
2446         sub     %g0,%i2,%i2
2447         add     %i2,2,%i2                       ! i0 = 2 - i0;
2448 
2449         move    %icc,%i2,%o5                    ! yisint = i0;
2450 
2451         ba      .neg4
2452         nop
2453 .small4:
2454         sub     %g0,%i2,%i2
2455         cmp     %l0,%g0                         ! if (ly != 0);
2456 
2457         add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
2458         bne     .neg4                           ! if (ly != 0);
2459         or      %g0,0,%o5                       ! yisint = 0;
2460 
2461         srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);
2462 
2463         sll     %l0,%i2,%l0                     ! (i0 << sh);
2464 
2465         srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
2466         cmp     %l0,%l1                         ! if ((i0 << sh) == hy);
2467 
2468         and     %i2,1,%i2                       ! i0 &= 1;
2469 
2470         sub     %g0,%i2,%i2
2471         add     %i2,2,%i2                       ! i0 = 2 - i0;
2472 
2473         move    %icc,%i2,%o5                    ! yisint = i0;
2474 .neg4:
2475         cmp     %o5,%g0
2476         be      .u4
2477         nop
2478 .pos4:
2479         sll     %o5,11,%o5
2480         cmp     %l2,MASK_0x000fffff             ! if (exp > 0xfffff);
2481 
2482         bg,pt   %icc,.cont4                     ! if (exp > 0xfffff);
2483         st      %o5,[%fp+%o7]
2484 
2485         std     %f32,[%fp+tmp5];
2486         std     %f54,[%fp+tmp6];
2487         ldd     [%fp+tmp0_hi],%f32
2488         ldd     [%fp+tmp_mant],%f54
2489 
2490         or      %g0,1074,%o5
2491         fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);
2492 
2493         sll     %o5,20,%o5
2494         fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0]
2495 
2496         std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
2497         fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);
2498 
2499         ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
2500         for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);
2501 
2502         std     %f32,[%fp+tmp0_hi];
2503         sub     %i2,%o5,%l2                     ! exp -= (1023 + 51) << 20;
2504         and     MASK_0x000fffff,%i2,%i4         ! hx = exp & 0xfffff;
2505         ldd     [%fp+tmp5],%f32
2506         or      MASK_0x3ff00000,%i4,%i4         ! hx |= 0x3ff00000;
2507         add     %i4,2048,%i4                    ! hx += 0x800;
2508         ldd     [%fp+tmp6],%f54
2509         and     %i4,-4096,%i4                   ! hx &= 0xfffff000;
2510 
2511         ba      .cont4
2512         st      %i4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;
2513 
2514         .align  16
2515 .update5:
2516         cmp     counter,1
2517         ble,pt  %icc,.cont5
2518         sub     px,stridex,%o5
2519 
2520         ld      [%fp+tmp_counter],%l1
2521 
2522         stx     %o5,[%fp+tmp_px]
2523         add     py,stridey,%o5
2524 
2525         add     %l1,counter,counter
2526         stx     %o5,[%fp+tmp_py]
2527 
2528         sub     counter,1,counter
2529         st      counter,[%fp+tmp_counter]
2530         ba      .cont5
2531         or      %g0,1,counter
2532 
2533         .align  16
2534 .update6:
2535         cmp     counter,0
2536         ble,pt  %icc,.cont6
2537         fmovd   DONE,%f30
2538 
2539         ld      [%fp+tmp_counter],%o2
2540         sub     px,stridex,%o5
2541 
2542         sub     %o5,stridex,%o5
2543         stx     py,[%fp+tmp_py]
2544 
2545         add     %o2,counter,counter
2546         sub     %o5,stridex,%o5
2547         stx     %o5,[%fp+tmp_px]
2548 
2549         st      counter,[%fp+tmp_counter]
2550         ba      .cont6
2551         or      %g0,0,counter
2552 
2553         .align  16
2554 .update7:
2555         cmp     counter,0
2556         ble,pt  %icc,.cont7
2557         fmovd   DONE,%f30
2558         sub     px,stridex,%o5
2559 
2560         ld      [%fp+tmp_counter],%o2
2561 
2562         sub     %o5,stridex,%o5
2563         stx     py,[%fp+tmp_py]
2564 
2565         add     %o2,counter,counter
2566         sub     %o5,stridex,%o5
2567         stx     %o5,[%fp+tmp_px]
2568 
2569         st      counter,[%fp+tmp_counter]
2570         ba      .cont7
2571         or      %g0,0,counter
2572 
2573         .align  16
2574 .update8:
2575         cmp     counter,2
2576         ble,pt  %icc,.cont8
2577         add     py,stridey,%o5
2578 
2579         add     %o5,stridey,%o5
2580         stx     px,[%fp+tmp_px]
2581 
2582         orcc    %l3,%i2,%g0                     ! if (x == 0);
2583         bne,pt  %icc,.nzero8                    ! if (x == 0);
2584         stx     %o5,[%fp+tmp_py]
2585 .u8:
2586         sub     counter,2,counter
2587         st      counter,[%fp+tmp_counter]
2588         ba      .cont8
2589         or      %g0,2,counter
2590 .nzero8:
2591         lda     [%o5]%asi,%l1                   ! ld hy;
2592         cmp     %l0,%g0                         ! if (x >= 0);
2593 
2594         lda     [%o5+4]%asi,%l0                 ! ld ly
2595         bge,pt  %icc,.pos8                      ! if (x >= 0);
2596         or      %g0,%g0,%o5                     ! yisint = 0;
2597 
2598         and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;
2599 
2600         sra     %i2,20,%i2                      ! expy = hy >> 20;
2601 
2602         cmp     %i2,1076                        ! if (expy >= 0x434);
2603         bge     .pos8                           ! if (expy >= 0x434);
2604         or      %g0,2,%o5                       ! yisint = 2;
2605 
2606         cmp     %i2,1023                        ! if (expy < 0x3ff);
2607         bl      .neg8                           ! if (expy < 0x3ff);
2608         or      %g0,0,%o5                       ! yisint = 0;
2609 
2610         cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
2611         ble     .small8                         ! if (expy <= (20 + 0x3ff));
2612         sub     %i2,1023,%i2                    ! expy - 0x3ff;
2613 
2614         sub     %g0,%i2,%i2
2615         add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
2616         srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);
2617 
2618         sll     %l1,%i2,%l1                     ! (i0 << sh);
2619 
2620         srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
2621         cmp     %l1,%l0                         ! if ((i0 << sh) == ly);
2622 
2623         and     %i2,1,%i2                       ! i0 &= 1;
2624 
2625         sub     %g0,%i2,%i2
2626         add     %i2,2,%i2                       ! i0 = 2 - i0;
2627 
2628         move    %icc,%i2,%o5                    ! yisint = i0;
2629 
2630         ba      .neg8
2631         nop
2632 .small8:
2633         sub     %g0,%i2,%i2
2634         cmp     %l0,%g0                         ! if (ly != 0);
2635 
2636         add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
2637         bne     .neg8                           ! if (ly != 0);
2638         or      %g0,0,%o5                       ! yisint = 0;
2639 
2640         srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);
2641 
2642         sll     %l0,%i2,%l0                     ! (i0 << sh);
2643 
2644         srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
2645         cmp     %l0,%l1                         ! if ((i0 << sh) == hy);
2646 
2647         and     %i2,1,%i2                       ! i0 &= 1;
2648 
2649         sub     %g0,%i2,%i2
2650         add     %i2,2,%i2                       ! i0 = 2 - i0;
2651 
2652         move    %icc,%i2,%o5                    ! yisint = i0;
2653 .neg8:
2654         cmp     %o5,%g0
2655         be      .u8
2656         nop
2657 .pos8:
2658         sll     %o5,11,%o5
2659         cmp     %l3,MASK_0x000fffff             ! if (exp > 0xfffff);
2660 
2661         bg,pt   %icc,.cont8                     ! if (exp > 0xfffff);
2662         st      %o5,[%fp+%o7]
2663 
2664         ldd     [%fp+tmp_mant],%f54
2665 
2666         or      %g0,1074,%o5
2667         fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);
2668 
2669         sll     %o5,20,%o5
2670         fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0]
2671 
2672         std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
2673         fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);
2674 
2675         ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
2676         for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);
2677 
2678         sub     %i2,%o5,%l3                     ! exp -= (1023 + 51) << 20;
2679         and     MASK_0x000fffff,%i2,%l4         ! hx &= 0xfffff;
2680         or      MASK_0x3ff00000,%l4,%l4         ! hx |= 0x3ff00000;
2681         add     %l4,2048,%l4                    ! hx += 0x800;
2682         and     %l4,-4096,%l4                   ! hx &= 0xfffff000;
2683 
2684         ba      .cont8
2685         st      %l4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;
2686 
2687         .align  16
2688 .update9:
2689         cmp     counter,1
2690         ble,pt  %icc,.cont9
2691         sub     px,stridex,%o5
2692 
2693         ld      [%fp+tmp_counter],%l1
2694 
2695         stx     %o5,[%fp+tmp_px]
2696         add     py,stridey,%o5
2697 
2698         add     %l1,counter,counter
2699         stx     %o5,[%fp+tmp_py]
2700 
2701         sub     counter,1,counter
2702         st      counter,[%fp+tmp_counter]
2703         ba      .cont9
2704         or      %g0,1,counter
2705 
2706         .align  16
2707 .update10:
2708         cmp     counter,0
2709         ble,pt  %icc,.cont10
2710         fmovd   DONE,%f30
2711 
2712         ld      [%fp+tmp_counter],%o2
2713         sub     px,stridex,%o5
2714 
2715         sub     %o5,stridex,%o5
2716         stx     py,[%fp+tmp_py]
2717 
2718         add     %o2,counter,counter
2719         sub     %o5,stridex,%o5
2720         stx     %o5,[%fp+tmp_px]
2721 
2722         st      counter,[%fp+tmp_counter]
2723         ba      .cont10
2724         or      %g0,0,counter
2725 
2726         .align  16
2727 .update11:
2728         cmp     counter,0
2729         ble,pt  %icc,.cont11
2730         fmovd   DONE,%f30
2731 
2732         ld      [%fp+tmp_counter],%o2
2733         sub     px,stridex,%o5
2734 
2735         sub     %o5,stridex,%o5
2736         stx     py,[%fp+tmp_py]
2737 
2738         add     %o2,counter,counter
2739         sub     %o5,stridex,%o5
2740         stx     %o5,[%fp+tmp_px]
2741 
2742         st      counter,[%fp+tmp_counter]
2743         ba      .cont11
2744         or      %g0,0,counter
2745 
2746         .align  16
2747 .update12:
2748         cmp     counter,3
2749         ble,pt  %icc,.cont12
2750         add     py,stridey,%o5
2751 
2752         add     %o5,stridey,%o5
2753         stx     px,[%fp+tmp_px]
2754 
2755         add     %o5,stridey,%o5
2756         orcc    %l2,%i2,%g0                     ! if (x == 0);
2757 
2758         bne,pt  %icc,.nzero12                   ! if (x == 0);
2759         stx     %o5,[%fp+tmp_py]
2760 .u12:
2761         sub     counter,3,counter
2762         st      counter,[%fp+tmp_counter]
2763         ba      .cont12
2764         or      %g0,3,counter
2765 .nzero12:
2766         lda     [%o5]%asi,%l1                   ! ld hy;
2767         cmp     %l0,%g0                         ! if (x >= 0);
2768 
2769         lda     [%o5+4]%asi,%l0                 ! ld ly
2770         bge,pt  %icc,.pos12                     ! if (x >= 0);
2771         or      %g0,%g0,%o5                     ! yisint = 0;
2772 
2773         and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;
2774 
2775         sra     %i2,20,%i2                      ! expy = hy >> 20;
2776 
2777         cmp     %i2,1076                        ! if (expy >= 0x434);
2778         bge     .neg12                          ! if (expy >= 0x434);
2779         or      %g0,2,%o5                       ! yisint = 2;
2780 
2781         cmp     %i2,1023                        ! if (expy < 0x3ff);
2782         bl      .neg12                          ! if (expy < 0x3ff);
2783         or      %g0,0,%o5                       ! yisint = 0;
2784 
2785         cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
2786         ble     .small12                        ! if (expy <= (20 + 0x3ff));
2787         sub     %i2,1023,%i2                    ! expy - 0x3ff;
2788 
2789         sub     %g0,%i2,%i2
2790         add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
2791         srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);
2792 
2793         sll     %l1,%i2,%l1                     ! (i0 << sh);
2794 
2795         srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
2796         cmp     %l1,%l0                         ! if ((i0 << sh) == ly);
2797 
2798         and     %i2,1,%i2                       ! i0 &= 1;
2799 
2800         sub     %g0,%i2,%i2
2801         add     %i2,2,%i2                       ! i0 = 2 - i0;
2802 
2803         move    %icc,%i2,%o5                    ! yisint = i0;
2804 
2805         ba      .neg12
2806         nop
2807 .small12:
2808         sub     %g0,%i2,%i2
2809         cmp     %l0,%g0                         ! if (ly != 0);
2810 
2811         add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
2812         bne     .neg12                          ! if (ly != 0);
2813         or      %g0,0,%o5                       ! yisint = 0;
2814 
2815         srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);
2816 
2817         sll     %l0,%i2,%l0                     ! (i0 << sh);
2818 
2819         srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
2820         cmp     %l0,%l1                         ! if ((i0 << sh) == hy);
2821 
2822         and     %i2,1,%i2                       ! i0 &= 1;
2823 
2824         sub     %g0,%i2,%i2
2825         add     %i2,2,%i2                       ! i0 = 2 - i0;
2826 
2827         move    %icc,%i2,%o5                    ! yisint = i0;
2828 .neg12:
2829         cmp     %o5,%g0
2830         be      .u12
2831         nop
2832 .pos12:
2833         sll     %o5,11,%o5
2834         cmp     %l2,MASK_0x000fffff             ! y0 = vis_fand(x, MMANT);
2835 
2836         bg,pt   %icc,.cont12                    ! y0 = vis_fand(x, MMANT);
2837         st      %o5,[%fp+%o7]
2838 
2839         std     %f32,[%fp+tmp5];
2840         std     %f54,[%fp+tmp6];
2841         ldd     [%fp+tmp0_hi],%f32
2842         ldd     [%fp+tmp_mant],%f54
2843 
2844         or      %g0,1074,%o5
2845         fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);
2846 
2847         sll     %o5,20,%o5
2848         fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0]
2849 
2850         std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
2851         fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);
2852 
2853         ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
2854         for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);
2855 
2856         std     %f32,[%fp+tmp0_hi];
2857         sub     %i2,%o5,%l2                     ! exp -= (1023 + 51) << 20;
2858         and     MASK_0x000fffff,%i2,%i4         ! hx &= 0xfffff;
2859         ldd     [%fp+tmp5],%f32
2860         or      MASK_0x3ff00000,%i4,%i4         ! hx |= 0x3ff00000;
2861         add     %i4,2048,%i4                    ! hx += 0x800;
2862         ldd     [%fp+tmp6],%f54
2863         and     %i4,-4096,%i4                   ! hx &= 0xfffff000;
2864 
2865         ba      .cont12
2866         st      %i4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;
2867 
2868         .align  16
2869 .update13:
2870         cmp     counter,2
2871         ble,pt  %icc,.cont13
2872         sub     px,stridex,%o5
2873 
2874         ld      [%fp+tmp_counter],%l1
2875 
2876         stx     %o5,[%fp+tmp_px]
2877         add     py,stridey,%o5
2878 
2879         add     %l1,counter,counter
2880         stx     %o5,[%fp+tmp_py]
2881 
2882         sub     counter,2,counter
2883         st      counter,[%fp+tmp_counter]
2884         ba      .cont13
2885         or      %g0,2,counter
2886 
2887         .align  16
2888 .update14:
2889         cmp     counter,1
2890         ble,pt  %icc,.cont14
2891         fmovd   DONE,%f30
2892 
2893         ld      [%fp+tmp_counter],%o2
2894         sub     px,stridex,%o5
2895 
2896         sub     %o5,stridex,%o5
2897         stx     py,[%fp+tmp_py]
2898 
2899         add     %o2,counter,counter
2900         sub     %o5,stridex,%o5
2901         stx     %o5,[%fp+tmp_px]
2902 
2903         sub     counter,1,counter
2904         st      counter,[%fp+tmp_counter]
2905         ba      .cont14
2906         or      %g0,1,counter
2907 
2908         .align  16
2909 .update15:
2910         cmp     counter,1
2911         ble,pt  %icc,.cont15
2912         fmovd   DONE,%f30
2913 
2914         sub     px,stridex,%o5
2915 
2916         ld      [%fp+tmp_counter],%o2
2917         sub     %o5,stridex,%o5
2918         stx     py,[%fp+tmp_py]
2919 
2920         add     %o2,counter,counter
2921         sub     %o5,stridex,%o5
2922         stx     %o5,[%fp+tmp_px]
2923 
2924         sub     counter,1,counter
2925         st      counter,[%fp+tmp_counter]
2926         ba      .cont15
2927         or      %g0,1,counter
2928 
2929         .align  16
2930 .spec0:
2931         lda     [py+4]%asi,%o5                  ! ld ly;
2932         lda     [px]%asi,%f16                   ! y0 = *px;
2933         lda     [px+4]%asi,%f17                 ! y0 = *px;
2934         orcc    %l1,%o5,%g0                     ! if (hy | ly) != 0;
2935 
2936         bne,pn  %icc,1f
2937         sethi   %hi(0x7ff00000),%o5
2938 
2939         st      DONE_HI,[pz]
2940         ba      .update_point
2941         st      DONE_LO,[pz+4]
2942 1:
2943         cmp     %l3,%o5                         ! if (hx > 0x7ff00000);
2944         bgu,a,pn        %icc,6f                 ! if (hx > 0x7ff00000);
2945         fmuld   %f16,%f16,%f16                  ! *pz = y0 * y0;
2946 
2947         bne,pt  %icc,2f                         ! if (hx != 0x7ff00000);
2948         orcc    %l3,%i2,%g0                     ! if (hx | lx) != 0;
2949 
2950         cmp     %i2,0                           ! if (lx) != 0;
2951         bne,pn  %icc,5f                         ! if (lx) != 0;
2952         srl     %o2,31,%o5                      ! sy;
2953 
2954         st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
2955         ba      3f
2956         cmp     %o5,0                           ! if (sy == 0);
2957 2:
2958         bne,pt  %icc,4f                         ! if (hx | lx) != 0;
2959         srl     %l0,31,%o5                      ! sx;
2960 
2961         st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
2962         srl     %o2,31,%o5                      ! sy;
2963         cmp     %o5,0                           ! if (sy == 0);
2964 3:
2965         be,pt   %icc,.update_point              ! if (sy == 0);
2966         st      %i2,[pz+4]                      ! ((int*)pz)[1] = lx;
2967 
2968         ld      [pz],%f16                       ! *pz;
2969         ld      [pz+4],%f17                     ! *pz;
2970         fdivd   DONE,%f16,%f16                  ! *pz = DONE / *pz;
2971 
2972         st      %f16,[pz]
2973         ba      .update_point
2974         st      %f17,[pz+4]
2975 4:
2976         cmp     %o5,0                           ! if (sx == 0);
2977         bne,a,pt        %icc,1f
2978         nop
2979 
2980         st      DONE_HI,[pz]                    ! *pz = DONE;
2981         ba      .update_point
2982         st      DONE_LO,[pz+4]                  ! *pz = DONE;
2983 1:
2984         fdivd   DZERO,DZERO,%f16                ! *pz = DZERO / DZERO;
2985         st      %f16,[pz]
2986         ba      .update_point
2987         st      %f17,[pz+4]
2988 5:
2989         fmuld   %f16,%f16,%f16                  ! *pz = y0 * y0;
2990 6:
2991         st      %f16,[pz]
2992         ba      .update_point
2993         st      %f17,[pz+4]
2994 
2995         .align  16
2996 .spec1:
2997         lda     [px]%asi,%f14                   ! y0 = *px;
2998         lda     [px+4]%asi,%f15                 ! y0 = *px;
2999         sethi   %hi(0x7ff00000),%o5
3000         lda     [py+4]%asi,%i4                  ! ld ly;
3001         srl     %o2,31,%o2                      ! sy
3002         cmp     %l3,%o5                         ! if (hx >= 0x7ff00000);
3003         bcc,pn  %icc,3f
3004         nop
3005 
3006         cmp     %l1,%o5                         ! if (hy > 0x7ff00000);
3007         bgu,a,pt        %icc,.spec1_nan_inf     ! if (hy > 0x7ff00000);
3008         lda     [py]%asi,%f16                   ! ld y
3009 
3010         bne,a,pt        %icc,1f                 ! if (hy != 0x7ff00000);
3011         cmp     %i2,0                           ! if (lx != 0);
3012 
3013         ba      2f                              ! if (hy == 0x7ff00000);
3014         cmp     %i4,0                           ! if (ly != 0);
3015 1:
3016         bne,pt  %icc,7f                         ! if (lx != 0);
3017         nop
3018 
3019         cmp     %l3,0                           ! if (hx == 0);
3020         be,a,pt %icc,6f                         ! if (hx == 0);
3021         st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
3022 
3023         cmp     %l3,MASK_0x3ff00000             ! if (hx == 0x3ff00000);
3024         be,a,pn %icc,6f                         ! if (hx == 0x3ff00000);
3025         st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
3026 
3027         ba      5f
3028         cmp     %l3,%o5                         ! if (hx != 0x7ff00000);
3029 3:
3030         bgu,a,pt        %icc,.spec1_nan_inf     ! if (hx > 0x7ff00000);
3031         lda     [py]%asi,%f16                   ! ld y
3032 
3033         bne,a,pn        %icc,1f                 ! if (hx != 0x7ff00000);
3034         cmp     %l1,%o5                         ! if (hy > 0x7ff00000);
3035 
3036         cmp     %i2,0                           ! if (lx != 0);
3037         bne,a,pt        %icc,.spec1_nan_inf     ! if (lx != 0);
3038         lda     [py]%asi,%f16                   ! ld y
3039 
3040         cmp     %l1,%o5                         ! if (hy > 0x7ff00000);
3041 1:
3042         bgu,a,pt        %icc,.spec1_nan_inf     ! if (hy > 0x7ff00000);
3043         lda     [py]%asi,%f16                   ! ld y
3044 
3045         bne,pn  %icc,3f                         ! if (hy != 0x7ff00000);
3046         nop
3047 
3048         cmp     %i4,0                           ! if (ly != 0);
3049 2:
3050         bne,a,pn        %icc,.spec1_nan_inf     ! if (ly != 0);
3051         lda     [py]%asi,%f16                   ! ld y
3052 
3053         cmp     %l3,MASK_0x3ff00000             ! if (hx != 0x3ff00000);
3054         bne,pn  %icc,1f                         ! if (hx != 0x3ff00000);
3055         cmp     %i2,0                           ! if (lx != 0);
3056 
3057         bne,pn  %icc,1f                         ! if (lx != 0);
3058         nop
3059 
3060         ld      [py],%f16                       ! ld y
3061         ld      [py+4],%f17                     ! ld y
3062         fzero   %f14
3063         fmuld   %f16,%f14,%f14                  ! *pz = *py * 0.0;
3064         st      %f14,[pz]
3065         ba      .update_point
3066         st      %f15,[pz+4]
3067 1:
3068         sub     %l3,MASK_0x3ff00000,%o7         ! (hx - 0x3ff00000);
3069         srlx    %o7,63,%l2                      ! (hx - 0x3ff00000) >> 63;
3070 
3071         cmp     %l2,%o2                         ! if ((hx < 0x3ff00000) == sy)
3072         be,a,pn %icc,1f                         ! if ((hx < 0x3ff00000) == sy)
3073         st      %l1,[pz]                        ! ((int*)pz)[0] = hy;
3074 
3075         st      DZERO_HI,[pz]                   ! *pz = DZERO;
3076         ba      .update_point
3077         st      DZERO_LO,[pz+4]                 ! *pz = DZERO;
3078 1:
3079         ba      .update_point
3080         st      %i4,[pz+4]                      ! ((int*)pz)[0] = ly;
3081 3:
3082         cmp     %o0,1086                        ! if (expy >= 0x43e);
3083         bge,pn  %icc,4f                         ! if (expy >= 0x43e)
3084         nop
3085 
3086         srl     %l0,31,%l0                      ! sx;
3087         cmp     %l0,0                           ! if (sx == 0);
3088         be,pn   %icc,2f
3089         or      %g0,0,%l4
3090 
3091         cmp     %o0,1076                        ! if (expy >= 0x434);
3092 
3093         bge,pn  %icc,2f                         ! if (expy >= 0x434);
3094         or      %g0,2,%l4                       ! yisint = 2;
3095 
3096         cmp     %o0,1023                        ! if (expy < 0x3ff);
3097         bl,a,pn %icc,2f                         ! if (expy < 0x3ff);
3098         or      %g0,0,%l4                       ! yisint = 0;
3099 
3100         cmp     %o0,1043                        ! if (expy <= (20 + 0x3ff));
3101         ble,pn  %icc,1f
3102         sub     %o0,1023,%l2                    ! (expy - 0x3ff);
3103 
3104         sub     %g0,%l2,%l2                     ! 0 - (expy - 0x3ff);
3105         add     %l2,52,%l2                      ! sh = 52 - (expy - 0x3ff);
3106         srl     %i4,%l2,%o0                     ! i0 = ly >> sh;
3107         sll     %o0,%l2,%l2                     ! i0 << sh;
3108         cmp     %l2,%i4                         ! if ((i0 << sh) != ly);
3109         bne,a,pn        %icc,2f                 ! if ((i0 << sh) != ly);
3110         or      %g0,0,%l4                       ! yisint = 0;
3111 
3112         and     %o0,1,%o0                       ! i0 &= 1;
3113         sub     %g0,%o0,%o0
3114 
3115         ba      2f
3116         add     %o0,2,%l4                       ! yisint = 2 - (i0 & 1);
3117 1:
3118         cmp     %i4,0                           ! if (ly != 0)
3119         bne,a,pn        %icc,2f                 ! if (ly != 0)
3120         or      %g0,0,%l4                       ! yisint = 0;
3121 
3122         sub     %o0,1023,%l2                    ! (expy - 0x3ff);
3123         sub     %g0,%l2,%l2                     ! 0 - (expy - 0x3ff);
3124         add     %l2,20,%l2                      ! sh = 20 - (expy - 0x3ff);
3125         srl     %l1,%l2,%o0                     ! i0 = hy >> sh;
3126         sll     %o0,%l2,%l2                     ! i0 << sh;
3127         cmp     %l2,%l1                         ! if ((i0 << sh) != hy);
3128         bne,a,pn        %icc,2f                 ! if ((i0 << sh) != hy);
3129         or      %g0,0,%l4                       ! yisint = 0;
3130 
3131         and     %o0,1,%o0                       ! i0 &= 1;
3132         sub     %g0,%o0,%o0
3133         add     %o0,2,%l4                       ! yisint = 2 - (i0 & 1);
3134 2:
3135         cmp     %o2,0                           ! if (sy == 0);
3136         sll     %l4,31,%l4                      ! yisint << 31;
3137         be,pt   %icc,1f                         ! if (sy == 0);
3138         add     %l3,%l4,%l3                     ! hx += yisint << 31;
3139 
3140         or      %g0,%l4,%l3                     ! hx = yisint << 31;
3141         or      %g0,0,%i2                       ! lx = 0;
3142 1:
3143         st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
3144         ba      .update_point
3145         st      %i2,[pz+4]                      ! ((int*)pz)[1] = lx;
3146 4:
3147         cmp     %i2,0                           ! if (lx != 0);
3148         bne,pn  %icc,7f                         ! if (lx != 0);
3149         nop
3150 
3151         cmp     %l3,%o5                         ! if (hx != 0x7ff00000);
3152 5:
3153         bne,pn  %icc,7f                         ! if (hx != 0x7ff00000);
3154         nop
3155 
3156         st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
3157 6:
3158         cmp     %o2,0                           ! if (sy == 0);
3159         be,pt   %icc,.update_point
3160         st      %i2,[pz+4]                      ! ((int*)pz)[1] = lx;
3161 
3162         ld      [pz],%f14                       ! ld *pz;
3163         ld      [pz+4],%f15                     ! ld *pz;
3164         fdivd   DONE,%f14,%f14                  ! *pz = DONE / *pz;
3165         st      %f14,[pz]
3166         ba      .update_point
3167         st      %f15,[pz+4]
3168 7:
3169         sub     %l3,MASK_0x3ff00000,%o7         ! hx - 0x3ff00000;
3170         srlx    %o7,63,%l2                      ! (hx - 0x3ff00000) >> 63;
3171         cmp     %l2,%o2                         ! if (hx < 0x3ff00000) == sy);
3172         be,a,pn %icc,1f                         ! if (hx < 0x3ff00000) == sy);
3173         ldd     [EXPTBL-ind_HUGE],%f14          ! y0 = _HUGE;
3174 
3175         ldd     [EXPTBL-ind_TINY],%f14          ! y0 = _TINY;
3176 1:
3177         fmuld   %f14,%f14,%f14                  ! *pz = y0 * y0
3178 
3179         st      %f14,[pz]
3180         ba .update_point
3181         st      %f15,[pz+4]
3182 
3183         .align  16
3184 .spec1_nan_inf:
3185         lda     [py+4]%asi,%f17                 ! ld y
3186         fmuld   %f14,%f16,%f16                  ! *pz = *px * *py
3187         st      %f16,[pz]
3188         ba      .update_point
3189         st      %f17,[pz+4]
3190 
3191 
3192         .align  16
3193 .update_point:
3194         add     px,stridex,px
3195         ba      .begin1
3196         add     py,stridey,py
3197 
3198         .align  64
3199 .stridex_zero:
3200 
3201         sra     stridez,0,stridez
3202         ld      [%i1],%f18                      ! y0 = px[0];
3203         ld      [%i1+4],%f19                    ! y0 = px[0];
3204 
3205         sra     %i4,0,stridey
3206         sethi   %hi(0xffc00),MASK_0x000fffff
3207         ldd     [%l0+80],%f12                   ! ld MMANT
3208 
3209         sllx    stridez,3,stridez
3210         add     MASK_0x000fffff,0x3ff,MASK_0x000fffff
3211         ldd     [%l0+8],%f56                    ! ld  DONE
3212 
3213         sllx    stridey,3,stridey
3214         ldd     [%l0+88],%f14                   ! ld  MROUND
3215 
3216         ldd     [%l0+96],%f16                   ! ld  MHI20
3217         cmp     %o0,MASK_0x000fffff             ! if (exp <= 0xfffff)
3218 
3219         bg,pt   %icc,1f
3220         srl     %o0,20,%o0                      ! exp = (exp >> 20);
3221 
3222         fxtod   %f18,%f18                       ! y0 = (double) ((long long *) & y0)[0];
3223         std     %f18,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & y0)[0];
3224         or      %g0,1074,%i2
3225         ld      [%fp+tmp0_hi],%o0               ! exp = ((unsigned int*) & y0)[0];
3226         srl     %o0,20,%o0                      ! exp = (exp >> 20);
3227         sub     %o0,%i2,%o0                     ! exp -= (1023 + 51) << 20;
3228 1:
3229         ldd     [%l0+24],MHI32
3230         sub     %o0,2046,%l5                    ! exp = exp - 2046;
3231         fand    %f18,%f12,%f18                  ! x = vis_fand(y0, MMANT);
3232 
3233         ldd     [%l0+48],%f10                   ! ld KA1
3234         for     %f18,%f56,%f18                  ! x = vis_for(x, DONE);
3235 
3236         ldd     [EXPTBL-ind_HI],%f28            ! ld KA1_HI
3237         fpadd32 %f18,%f14,%f44                  ! ax = vis_fpadd32(x, MROUND);
3238 
3239         ldd     [%l0+32],%f46                   ! ld KA5
3240         fand    %f44,%f16,%f60                  ! ax = vis_fand(ax, MHI20);
3241 
3242         std     %f60,[%fp+tmp0_hi]              ! itmp0 = (hx >> 20);
3243         faddd   %f18,%f60,%f50                  ! ux = x + ax;
3244 
3245         ldd     [EXPTBL-ind_LO],%f52            ! ld KA1_LO
3246         fsubd   %f18,%f60,%f30                  ! u = x - ax;
3247 
3248         ld      [%fp+tmp0_hi],%i2               ! itmp0 = (hx >> 20);
3249         fdivd   %f56,%f50,%f56                  ! yd = DONE / ux;
3250         fand    %f50,MHI32,%f50                 ! ux = vis_fand(ux, MHI32);
3251 
3252         srl     %i2,20,%l3                      ! itmp0 = (hx >> 20);
3253         ldd     [%l0+40],%f26                   ! ld KA3
3254 
3255         srl     %i2,8,%i2                       ! i = (hx >> 8);
3256         add     %l5,%l3,%l5                     ! exp += itmp0;
3257 
3258         and     %i2,4080,%o3                    ! i = i & 0xff0;
3259         sll     %l5,8,%l3                       ! itmp0 = exp << 8;
3260         st      %l3,[%fp+tmp1_hi]               ! (double)itmp0;
3261         fsubd   %f50,%f60,%f60                  ! dtmp0 = (ux - ax);
3262 
3263         add     %o3,8,%i2
3264         ldd     [%o3+LOGTBL],%f58               ! y = *(double *)((char*)__mt_constlog2 + i);
3265 
3266         ldd     [%i2+LOGTBL],%f20               ! dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
3267 
3268         ld      [%fp+tmp1_hi],%f8               ! (double)itmp0;
3269 
3270         fitod   %f8,%f62                        ! (double)itmp0;
3271 
3272         faddd   %f58,%f62,%f22                  ! y += (double)itmp0;
3273 
3274         fsubd   %f18,%f60,%f62                  ! s_l = (x - dtmp0);
3275         fmuld   %f30,%f56,%f16                  ! s = u * yd;
3276 
3277         fmuld   %f10,%f56,%f8                   ! dtmp0 = KA1 * yd;
3278         fand    %f16,MHI32,%f58                 ! s_h = vis_fand(s, MHI32);
3279 
3280         ldd     [%l0+56],HTHRESH
3281         fmuld   %f16,%f16,%f18                  ! y = s * s;
3282 
3283         ldd     [%l0+64],LTHRESH
3284         fmuld   %f58,%f50,%f60                  ! dtmp0 = s_h * ux;
3285 
3286         ldd     [%l0+72],XKB4
3287         fmuld   %f28,%f58,%f50                  ! yd = KA1_HI * s_h;
3288 
3289         ldd     [EXPTBL-ind_KB1],XKB1
3290         fmuld   %f46,%f18,%f56                  ! dtmp8 = KA5 * y;
3291 
3292         ldd     [EXPTBL-ind_KB2],XKB2
3293         fmuld   %f58,%f62,%f46                  ! dtmp1 = s_h * s_l;
3294         fsubd   %f30,%f60,%f62                  ! s_l = u - dtmp0;
3295 
3296         ldd     [EXPTBL-ind_KB3],XKB3
3297         fmuld   %f52,%f58,%f10                  ! dtmp1 = KA1_LO * s_h;
3298         faddd   %f22,%f50,%f28                  ! m_h = y + yd;
3299 
3300         ldd     [EXPTBL-ind_KB5],XKB5
3301         faddd   %f56,%f26,%f58                  ! dtmp8 = dtmp8 + KA3;
3302 
3303         add     EXPTBL,8,EXPTBL_P8
3304         fsubd   %f62,%f46,%f46                  ! s_l -= dtmp1;
3305 
3306         fsubd   %f28,%f22,%f60                  ! dtmp2 = m_h - y;
3307 
3308         st      %g0,[%fp+tmp0_lo]               ! *((int*)&dtmp0 + 1) = 0;
3309         faddd   %f20,%f10,%f56                  ! dtmp0 += dtmp1;
3310 
3311         st      %g0,[%fp+tmp1_lo]               ! *((int*)&dtmp0 + 1) = 0;
3312         fmuld   %f58,%f18,%f18                  ! dtmp8 = dtmp8 * y;
3313 
3314         st      %g0,[%fp+tmp2_lo]               ! *((int*)&dtmp0 + 1) = 0;
3315         fmuld   %f8,%f46,%f62                   ! s_l = dtmp0 * s_l;
3316 
3317         fsubd   %f60,%f50,%f10                  ! dtmp2 -= yd;
3318 
3319         fmuld   %f18,%f16,%f58                  ! s = dtmp8 * s;
3320 
3321         fsubd   %f10,%f62,%f46                  ! dtmp2 -= s_l;
3322 
3323         fsubd   %f58,%f46,%f50                  ! y = s - dtmp2;
3324 
3325         faddd   %f50,%f56,%f60                  ! y += dtmp0;
3326 
3327         faddd   %f60,%f28,%f18                  ! dtmp0 = y + m_h;
3328 
3329         fand    %f18,MHI32,s_h                  ! s_h = vis_fand(dtmp0, MHI32);
3330 
3331         fsubd   s_h,%f28,%f62                   ! dtmp0 = (s_h - m_h);
3332 
3333         fsubd   %f60,%f62,yr                    ! yr = y - dtmp0;
3334 
3335 .xbegin:
3336         ld      [%fp+tmp_counter],counter
3337         ldx     [%fp+tmp_py],py
3338         st      %g0,[%fp+tmp_counter]
3339 .xbegin1:
3340         subcc   counter,1,counter
3341         bneg,pn %icc,.end
3342         nop
3343 
3344         lda     [py]0x82,%l2                    ! (Y0_3) hy = *py;
3345 
3346         lda     [py]0x82,%f18                   ! (Y0_3) yd = *py;
3347         lda     [py+4]%asi,%f19                 ! (Y0_3) yd = *py;
3348 
3349         sra     %l2,20,%l5                      ! (Y0_3) expy = hy >> 20;
3350 
3351         and     %l5,0x7ff,%l5                   ! (Y0_3) expy &= 0x7ff;
3352 
3353         cmp     %l5,959                         ! (Y0_3) if (expy < 0x3fb);
3354 
3355         bl,pn   %icc,.xspec0                    ! (Y0_3) if (expy < 0x3fb);
3356         nop
3357 
3358         cmp     %l5,1086                        ! (Y0_2) if (expy >= 0x43e);
3359 
3360         bge,pn  %icc,.xspec1                    ! (Y0_2) if (expy >= 0x43e);
3361         nop
3362 
3363         add     py,stridey,py                   ! y += stridey;
3364         fand    %f18,MHI32,%f12                 ! (Y0_2) s = vis_fand(yd, MHI32);
3365 
3366         lda     [py]0x82,%l5                    ! (Y1_2) hy = *py;
3367 
3368         lda     [py]0x82,%f10                   ! (Y1_2) yd = *py;
3369         lda     [py+4]%asi,%f11                 ! (Y1_2) yd = *py;
3370 
3371         sra     %l5,20,%l5                      ! (Y1_2) expy = hy >> 20;
3372 
3373         and     %l5,0x7ff,%l5                   ! (Y1_2) expy &= 0x7ff;
3374 
3375         cmp     %l5,959                         ! (Y1_2) if (expy < 0x3fb);
3376         add     py,stridey,py                   ! y += stridey;
3377         fmuld   s_h,%f12,%f50                   ! (Y0_2) s = s_h * s;
3378         fsubd   %f18,%f12,%f56                  ! (Y0_2) dtmp0 = (yd - s);
3379 
3380         fmuld   %f18,yr,%f26                    ! (Y0_2) dtmp1 = yd * yr;
3381         bl,pn   %icc,.xupdate0                  ! (Y1_2) if (expy < 0x3fb);
3382         nop
3383 .xcont0:
3384         cmp     %l5,1086                        ! (Y1_2) if (expy >= 0x43e);
3385         bge,pn  %icc,.xupdate1                  ! (Y0_2) if (expy >= 0x43e);
3386         nop
3387 .xcont1:
3388         fmuld   %f56,s_h,%f58                   ! (Y0_2) dtmp0 *= s_h;
3389         fand    %f10,MHI32,%f12                 ! (Y1_2) s = vis_fand(yd, MHI32);
3390 
3391         fcmped  %fcc0,%f50,HTHRESH              ! (Y0_2) if (s > HTHRESH);
3392 
3393         faddd   %f58,%f26,%f48                  ! (Y0_2) yd = dtmp0 + dtmp1;
3394 
3395         lda     [py]0x82,%l5                    ! (Y2_2) hy = *py;
3396         fmovdg  %fcc0,HTHRESH,%f50              ! (Y0_2) s = HTHRESH;
3397 
3398         fmovdg  %fcc0,DZERO,%f48                ! (Y0_2) yd = DZERO;
3399 
3400         fcmped  %fcc1,%f50,LTHRESH              ! (Y0_2) if (s < LTHRESH);
3401 
3402         lda     [py]0x82,%f14                   ! (Y2_2) yd = *py;
3403         lda     [py+4]%asi,%f15                 ! (Y2_2) yd = *py;
3404 
3405         sra     %l5,20,%l5                      ! (Y2_2) expy = hy >> 20;
3406 
3407         fmovdl  %fcc1,DZERO,%f48                ! (Y0_2) yd = DZERO;
3408 
3409         add     py,stridey,py                   ! y += stridey;
3410         and     %l5,0x7ff,%l5                   ! (Y2_2) expy &= 0x7ff;
3411         fmovdl  %fcc1,LTHRESH,%f50              ! (Y0_2) s = LTHRESH;
3412 
3413         cmp     %l5,959                         ! (Y2_2) if (expy < 0x3fb);
3414 
3415         fmuld   s_h,%f12,%f16                   ! (Y1_2) s = s_h * s;
3416         bl,pn   %icc,.xupdate2                  ! (Y2_2) if (expy < 0x3fb);
3417         fsubd   %f10,%f12,%f56                  ! (Y1_2) dtmp0 = (yd - s);
3418 .xcont2:
3419         cmp     %l5,1086                        ! (Y2_2) if (expy >= 0x43e);
3420         fmuld   %f10,yr,%f8                     ! (Y1_2) dtmp1 = yd * yr;
3421         faddd   %f50,%f48,%f28                  ! (Y0_2) dtmp0 = (s + yd);
3422 
3423         lda     [py]0x82,%l5                    ! (Y0_3) hy = *py;
3424         bge,pn  %icc,.xupdate3                  ! (Y2_2) if (expy >= 0x43e);
3425         nop
3426 .xcont3:
3427         fmuld   %f56,s_h,%f58                   ! (Y1_2) dtmp0 *= s_h;
3428         fand    %f14,MHI32,%f44                 ! (Y2_2) s = vis_fand(yd, MHI32);
3429 
3430         fcmped  %fcc0,%f16,HTHRESH              ! (Y1_2) if (s > HTHRESH);
3431 
3432         fdtoi   %f28,%f3                        ! (Y0_2) u = (double)(int)dtmp0;
3433 
3434         st      %f3,[%fp+tmp3]                  ! (Y0_2) ind = (int)dtmp0;
3435 
3436         faddd   %f58,%f8,%f10                   ! (Y1_2) yd = dtmp0 + dtmp1;
3437 
3438         lda     [py]0x82,%f18                   ! (Y0_3) yd = *py;
3439         lda     [py+4]%asi,%f19                 ! (Y0_3) yd = *py;
3440         fmovdg  %fcc0,HTHRESH,%f16              ! (Y1_2) s = HTHRESH;
3441 
3442         fitod   %f3,%f58                        ! (Y0_2) u = (double)(int)dtmp0;
3443 
3444         fmovdg  %fcc0,DZERO,%f10                ! (Y1_2) yd = DZERO;
3445 
3446         sra     %l5,20,%l5                      ! (Y0_3) expy = hy >> 20;
3447         fcmped  %fcc1,%f16,LTHRESH              ! (Y1_2) if (s < LTHRESH);
3448 
3449         and     %l5,0x7ff,%l5                   ! (Y0_3) expy &= 0x7ff;
3450         fsubd   %f50,%f58,%f54                  ! (Y0_2) y = s - u;
3451 
3452         cmp     %l5,959                         ! (Y0_3) if (expy < 0x3fb);
3453 
3454         bl,pn   %icc,.xupdate4                  ! (Y0_3) if (expy < 0x3fb);
3455         nop
3456 .xcont4:
3457         fmovdl  %fcc1,DZERO,%f10                ! (Y1_2) yd = DZERO;
3458 
3459         fmovdl  %fcc1,LTHRESH,%f16              ! (Y1_2) s = LTHRESH;
3460 
3461         faddd   %f54,%f48,%f54                  ! (Y0_2) y = y + yd;
3462 
3463         ld      [%fp+tmp3],%o2                  ! (Y0_2) ind = (int)dtmp0;
3464 
3465 
3466         fsubd   %f14,%f44,%f50                  ! (Y2_1) dtmp0 = (yd - s);
3467 
3468         cmp     %l5,1086                        ! (Y0_2) if (expy >= 0x43e);
3469 
3470         fmuld   s_h,%f44,%f44                   ! (Y2_1) s = s_h * s;
3471         bge,pn  %icc,.xupdate5                  ! (Y0_2) if (expy >= 0x43e);
3472         faddd   %f16,%f10,%f22                  ! (Y1_1) dtmp0 = (s + yd);
3473 .xcont5:
3474         sra     %o2,8,%o0                       ! (Y0_1) ind >>= 8;
3475         add     py,stridey,py                   ! y += stridey;
3476         fmuld   %f14,yr,%f20                    ! (Y2_1) dtmp1 = yd * yr;
3477 
3478         add     %o0,1021,%i1                    ! (Y0_1) eflag = (ind + 1021);
3479         fmuld   XKB5,%f54,%f48                  ! (Y0_1) dtmp0 = XKB5 * y;
3480 
3481         sub     %g0,%o0,%o3                     ! (Y0_1) gflag = (1022 - ind);
3482         fmuld   %f50,s_h,%f52                   ! (Y2_1) dtmp0 *= s_h;
3483         fand    %f18,MHI32,%f12                 ! (Y0_2) s = vis_fand(yd, MHI32);
3484 
3485         sra     %i1,31,%o1                      ! (Y0_1) eflag = eflag >> 31;
3486         add     %o3,1022,%l0                    ! (Y0_1) gflag = (1022 - ind);
3487         fcmped  %fcc0,%f44,HTHRESH              ! (Y2_1) if (s > HTHRESH);
3488 
3489         sra     %l0,31,%o4                      ! (Y0_1) gflag = gflag >> 31;
3490         and     %o1,54,%i4                      ! (Y0_1) itmp0 = 54 & eflag;
3491         fdtoi   %f22,%f4                        ! (Y1_1) u = (double)(int)dtmp0;
3492 
3493         add     %o0,%i4,%i2                     ! (Y0_1) ind = ind + itmp0;
3494         and     %o4,52,%l3                      ! (Y0_1) itmp1 = 52 & gflag;
3495         st      %f4,[%fp+tmp4]                  ! (Y1_1) ind = (int)dtmp0;
3496         faddd   %f48,XKB4,%f60                  ! (Y0_1) dtmp1 = dtmp0 + XKB4;
3497 
3498         sub     %i2,%l3,%l2                     ! (Y0_1) ind = ind - itmp1;
3499         sub     %o1,%o4,%o4                     ! (Y0_1) ind = eflag - gflag;
3500         faddd   %f52,%f20,%f62                  ! (Y2_1) yd = dtmp0 + dtmp1;
3501 
3502         sll     %l2,20,%o3                      ! (Y0_1) ind <<= 20;
3503         lda     [py]0x82,%l5                    ! (Y1_2) hy = *py;
3504         fmovdg  %fcc0,HTHRESH,%f44              ! (Y2_1) s = HTHRESH;
3505 
3506         st      %o3,[%fp+tmp0_hi]               ! (Y0_1) *(int*)&dtmp0 = ind;
3507         fitod   %f4,%f48                        ! (Y1_1) u = (double)(int)dtmp0;
3508 
3509         fmuld   %f60,%f54,%f60                  ! (Y0_1) dtmp2 = dtmp1 * y;
3510 
3511         lda     [py]0x82,%f20                   ! (Y1_2) yd = *py;
3512         lda     [py+4]%asi,%f21                 ! (Y1_2) yd = *py;
3513         fmovdg  %fcc0,DZERO,%f62                ! (Y2_1) yd = DZERO;
3514 
3515         fcmped  %fcc1,%f44,LTHRESH              ! (Y2_1) if (s < LTHRESH);
3516 
3517         fsubd   %f16,%f48,%f50                  ! (Y1_1) y = s - u;
3518 
3519         faddd   %f60,XKB3,%f60                  ! (Y0_1) dtmp3 = dtmp2 + XKB3;
3520 
3521         sra     %l5,20,%l5                      ! (Y1_2) expy = hy >> 20;
3522 
3523         fmovdl  %fcc1,DZERO,%f62                ! (Y2_1) yd = DZERO;
3524 
3525         and     %l5,0x7ff,%l5                   ! (Y1_2) expy &= 0x7ff;
3526         fmovdl  %fcc1,LTHRESH,%f44              ! (Y2_1) s = LTHRESH;
3527 
3528         cmp     %l5,959                         ! (Y1_2) if (expy < 0x3fb);
3529         fmuld   %f60,%f54,%f48                  ! (Y0_1) dtmp4 = dtmp3 * y;
3530         faddd   %f50,%f10,%f52                  ! (Y1_1) y = y + yd;
3531 
3532         ld      [%fp+tmp4],%o1                  ! (Y1_1) ind = (int)dtmp0;
3533 
3534         add     py,stridey,py                   ! y += stridey;
3535         fmuld   s_h,%f12,%f50                   ! (Y0_2) s = s_h * s;
3536         fsubd   %f18,%f12,%f56                  ! (Y0_2) dtmp0 = (yd - s);
3537 
3538         fmuld   %f18,yr,%f26                    ! (Y0_2) dtmp1 = yd * yr;
3539         bl,pn   %icc,.xupdate6                  ! (Y1_2) if (expy < 0x3fb);
3540         faddd   %f44,%f62,%f28                  ! (Y2_1) dtmp0 = (s + yd);
3541 .xcont6:
3542         sra     %o1,8,%o3                       ! (Y1_1) ind >>= 8;
3543         cmp     %l5,1086                        ! (Y1_2) if (expy >= 0x43e);
3544         fmuld   XKB5,%f52,%f22                  ! (Y1_1) dtmp0 = XKB5 * y;
3545         faddd   %f48,XKB2,%f14                  ! (Y0_1) dtmp5 = dtmp4 + XKB2;
3546 
3547         add     %o3,1021,%o0                    ! (Y1_1) eflag = (ind + 1021);
3548         bge,pn  %icc,.xupdate7                  ! (Y0_2) if (expy >= 0x43e);
3549         nop
3550 .xcont7:
3551         sub     %g0,%o3,%i2                     ! (Y1_1) gflag = (1022 - ind);
3552         fmuld   %f56,s_h,%f58                   ! (Y0_2) dtmp0 *= s_h;
3553         fand    %f20,MHI32,%f12                 ! (Y1_2) s = vis_fand(yd, MHI32);
3554 
3555         sra     %o0,31,%l3                      ! (Y1_1) eflag = eflag >> 31;
3556         add     %i2,1022,%l2                    ! (Y1_1) gflag = (1022 - ind);
3557         fcmped  %fcc0,%f50,HTHRESH              ! (Y0_2) if (s > HTHRESH);
3558 
3559         sra     %l2,31,%o7                      ! (Y1_1) gflag = gflag >> 31;
3560         and     %l3,54,%i1                      ! (Y1_1) itmp0 = 54 & eflag;
3561         fdtoi   %f28,%f3                        ! (Y2_1) u = (double)(int)dtmp0;
3562 
3563         add     %o3,%i1,%l0                     ! (Y1_1) ind = ind + itmp0;
3564         and     %o7,52,%l1                      ! (Y1_1) itmp1 = 52 & gflag;
3565         st      %f3,[%fp+ind_buf]               ! (Y2_1) ind = (int)dtmp0;
3566         faddd   %f22,XKB4,%f60                  ! (Y1_1) dtmp1 = dtmp0 + XKB4;
3567 
3568         sub     %l0,%l1,%i4                     ! (Y1_1) ind = ind - itmp1;
3569         sub     %l3,%o7,%o7                     ! (Y1_1) ind = eflag - gflag;
3570         faddd   %f58,%f26,%f48                  ! (Y0_2) yd = dtmp0 + dtmp1;
3571 
3572         sll     %i4,20,%i2                      ! (Y1_1) ind <<= 20;
3573         lda     [py]0x82,%l5                    ! (Y2_2) hy = *py;
3574         fmovdg  %fcc0,HTHRESH,%f50              ! (Y0_2) s = HTHRESH;
3575 
3576         st      %i2,[%fp+tmp1_hi]               ! (Y1_1) *(int*)&dtmp0 = ind;
3577         fitod   %f3,%f18                        ! (Y2_1) u = (double)(int)dtmp0;
3578 
3579         fmuld   %f60,%f52,%f60                  ! (Y1_1) dtmp2 = dtmp1 * y;
3580 
3581         fmuld   %f14,%f54,%f56                  ! (Y0_1) dtmp6 = dtmp5 * y;
3582         fmovdg  %fcc0,DZERO,%f48                ! (Y0_2) yd = DZERO;
3583 
3584         fcmped  %fcc1,%f50,LTHRESH              ! (Y0_2) if (s < LTHRESH);
3585 
3586         lda     [py]0x82,%f26                   ! (Y2_2) yd = *py;
3587         lda     [py+4]%asi,%f27                 ! (Y2_2) yd = *py;
3588         fsubd   %f44,%f18,%f18                  ! (Y2_1) y = s - u;
3589 
3590         faddd   %f60,XKB3,%f44                  ! (Y1_1) dtmp3 = dtmp2 + XKB3;
3591 
3592         sra     %l5,20,%l5                      ! (Y2_2) expy = hy >> 20;
3593         and     %o2,255,%o2                     ! (Y0_1) i = ind & 0xff;
3594         faddd   %f56,XKB1,%f58                  ! (Y0_1) dtmp7 = dtmp6 + XKB1;
3595 
3596         sll     %o2,4,%l2                       ! (Y0_1) i = i << 4;
3597         fmovdl  %fcc1,DZERO,%f48                ! (Y0_2) yd = DZERO;
3598 
3599         add     py,stridey,py                   ! y += stridey;
3600         and     %l5,0x7ff,%l5                   ! (Y2_2) expy &= 0x7ff;
3601         fmovdl  %fcc1,LTHRESH,%f50              ! (Y0_2) s = LTHRESH;
3602 
3603         cmp     %l5,959                         ! (Y2_2) if (expy < 0x3fb);
3604         ldd     [EXPTBL+%l2],%f22               ! (Y0_1) u = *(double*)((char*)__mt_constexp2 + i);
3605         faddd   %f18,%f62,%f18                  ! (Y2_1) y = y + yd;
3606         fmuld   %f44,%f52,%f62                  ! (Y1_1) dtmp4 = dtmp3 * y;
3607 
3608         ld      [%fp+ind_buf],%l1               ! (Y2_1) ind = (int)dtmp0;
3609         fmuld   %f58,%f54,%f54                  ! (Y0_1) y = dtmp7 * y;
3610 
3611         fmuld   s_h,%f12,%f16                   ! (Y1_2) s = s_h * s;
3612         bl,pn   %icc,.xupdate8                  ! (Y2_2) if (expy < 0x3fb);
3613         fsubd   %f20,%f12,%f56                  ! (Y1_2) dtmp0 = (yd - s);
3614 .xcont8:
3615         cmp     %l5,1086                        ! (Y2_2) if (expy >= 0x43e);
3616         fmuld   %f20,yr,%f8                     ! (Y1_2) dtmp1 = yd * yr;
3617         faddd   %f50,%f48,%f28                  ! (Y0_2) dtmp0 = (s + yd);
3618 
3619         sra     %l1,8,%o2                       ! (Y2_1) ind >>= 8;
3620         lda     [py]0x82,%l5                    ! (Y0_3) hy = *py;
3621         fmuld   XKB5,%f18,%f20                  ! (Y2_1) dtmp0 = XKB5 * y;
3622         faddd   %f62,XKB2,%f12                  ! (Y1_1) dtmp5 = dtmp4 + XKB2;
3623 
3624         add     %o2,1021,%l0                    ! (Y2_1) eflag = (ind + 1021);
3625         bge,pn  %icc,.xupdate9                  ! (Y2_2) if (expy >= 0x43e);
3626         nop
3627 .xcont9:
3628         sub     %g0,%o2,%l3                     ! (Y2_1) gflag = (1022 - ind);
3629         ldd     [EXPTBL_P8+%l2],%f14            ! (Y0_1) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3630         fmuld   %f56,s_h,%f58                   ! (Y1_2) dtmp0 *= s_h;
3631         fand    %f26,MHI32,%f44                 ! (Y2_2) s = vis_fand(yd, MHI32);
3632 
3633         sra     %l0,31,%o0                      ! (Y2_1) eflag = eflag >> 31;
3634         add     %l3,1022,%i4                    ! (Y2_1) gflag = (1022 - ind);
3635         fmuld   %f22,%f54,%f56                  ! (Y0_1) dtmp1 = u * y;
3636         fcmped  %fcc0,%f16,HTHRESH              ! (Y1_2) if (s > HTHRESH);
3637 
3638         sra     %i4,31,%o5                      ! (Y2_1) gflag = gflag >> 31;
3639         and     %o0,54,%i2                      ! (Y2_1) itmp0 = 54 & eflag;
3640         fdtoi   %f28,%f3                        ! (Y0_2) u = (double)(int)dtmp0;
3641 
3642         add     %o2,%i2,%i1                     ! (Y2_1) ind = ind + itmp0;
3643         and     %o5,52,%l2                      ! (Y2_1) itmp1 = 52 & gflag;
3644         st      %f3,[%fp+tmp3]                  ! (Y0_2) ind = (int)dtmp0;
3645         faddd   %f20,XKB4,%f60                  ! (Y2_1) dtmp1 = dtmp0 + XKB4;
3646 
3647         sub     %i1,%l2,%o3                     ! (Y2_1) ind = ind - itmp1;
3648         sub     %o0,%o5,%o5                     ! (Y2_1) ind = eflag - gflag;
3649         faddd   %f58,%f8,%f10                   ! (Y1_2) yd = dtmp0 + dtmp1;
3650 
3651         sll     %o3,20,%l3                      ! (Y2_1) ind <<= 20;
3652         lda     [py]0x82,%f28                   ! (Y0_3) yd = *py;
3653         lda     [py+4]%asi,%f29                 ! (Y0_3) yd = *py;
3654         fmovdg  %fcc0,HTHRESH,%f16              ! (Y1_2) s = HTHRESH;
3655 
3656         st      %l3,[%fp+tmp2_hi]               ! (Y2_1) *(int*)&dtmp0 = ind;
3657         fitod   %f3,%f58                        ! (Y0_2) u = (double)(int)dtmp0;
3658 
3659         fmuld   %f60,%f18,%f60                  ! (Y2_1) dtmp2 = dtmp1 * y;
3660         faddd   %f14,%f56,%f20                  ! (Y0_1) dtmp2 = dtmp0 + dtmp1;
3661 
3662         fmuld   %f12,%f52,%f56                  ! (Y1_1) dtmp6 = dtmp5 * y;
3663         fmovdg  %fcc0,DZERO,%f10                ! (Y1_2) yd = DZERO;
3664 
3665         sra     %l5,20,%l5                      ! (Y0_3) expy = hy >> 20;
3666         fcmped  %fcc1,%f16,LTHRESH              ! (Y1_2) if (s < LTHRESH);
3667 
3668         and     %l5,0x7ff,%l5                   ! (Y0_3) expy &= 0x7ff;
3669         fsubd   %f50,%f58,%f54                  ! (Y0_2) y = s - u;
3670 
3671         cmp     %l5,959                         ! (Y0_3) if (expy < 0x3fb);
3672         faddd   %f60,XKB3,%f60                  ! (Y2_1) dtmp3 = dtmp2 + XKB3;
3673 
3674         and     %o1,255,%o1                     ! (Y1_1) i = ind & 0xff;
3675         bl,pn   %icc,.xupdate10                 ! (Y0_3) if (expy < 0x3fb);
3676         faddd   %f56,XKB1,%f8                   ! (Y1_1) dtmp7 = dtmp6 + XKB1;
3677 .xcont10:
3678         sll     %o1,4,%l0                       ! (Y1_1) i = i << 4;
3679         fmovdl  %fcc1,DZERO,%f10                ! (Y1_2) yd = DZERO;
3680 
3681         nop
3682         ba      1f
3683         fmovdl  %fcc1,LTHRESH,%f16              ! (Y1_2) s = LTHRESH;
3684 
3685         .align  16
3686 1:
3687         subcc   counter,2,counter
3688         ldd     [EXPTBL+%l0],%f56               ! (Y1_1) u = *(double*)((char*)__mt_constexp2 + i);
3689         fmuld   %f60,%f18,%f58                  ! (Y2_1) dtmp4 = dtmp3 * y;
3690         faddd   %f54,%f48,%f54                  ! (Y0_2) y = y + yd;
3691 
3692         fmuld   %f8,%f52,%f60                   ! (Y1_1) y = dtmp7 * y;
3693         ld      [%fp+tmp3],%o2                  ! (Y0_2) ind = (int)dtmp0;
3694         bneg,pn %icc,.xtail
3695         faddd   %f20,%f22,%f12                  ! (Y0_1) u = dtmp2 + u;
3696 
3697 .xmain_loop:
3698         cmp     %l5,1086                        ! (Y0_2) if (expy >= 0x43e);
3699         add     %o4,513,%o4                     ! (Y0_0) ind += 513;
3700         ldd     [%fp+tmp0_hi],%f52              ! (Y0_0) *(int*)&dtmp0 = ind;
3701         fsubd   %f26,%f44,%f50                  ! (Y2_1) dtmp0 = (yd - s);
3702 
3703         fmuld   s_h,%f44,%f44                   ! (Y2_1) s = s_h * s;
3704         sra     %o2,8,%o0                       ! (Y0_1) ind >>= 8;
3705         bge,pn  %icc,.xupdate11                 ! (Y0_2) if (expy >= 0x43e);
3706         faddd   %f16,%f10,%f22                  ! (Y1_1) dtmp0 = (s + yd);
3707 .xcont11:
3708         sll     %o4,3,%l2                       ! (Y0_0) ind *= 8;
3709         add     py,stridey,py                   ! y += stridey;
3710         fmuld   %f26,yr,%f20                    ! (Y2_1) dtmp1 = yd * yr;
3711         faddd   %f58,XKB2,%f14                  ! (Y2_0) dtmp5 = dtmp4 + XKB2;
3712 
3713         add     %o0,1021,%i1                    ! (Y0_1) eflag = (ind + 1021);
3714         ldd     [%l2+EXPTBL],%f62               ! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
3715         fmuld   XKB5,%f54,%f48                  ! (Y0_1) dtmp0 = XKB5 * y;
3716         fpadd32 %f12,%f52,%f58                  ! (Y0_0) u = vis_fpadd32(u, dtmp0);
3717 
3718         sub     %g0,%o0,%o3                     ! (Y0_1) gflag = (1022 - ind);
3719         ldd     [EXPTBL_P8+%l0],%f8             ! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3720         fand    %f28,MHI32,%f12                 ! (Y0_2) s = vis_fand(yd, MHI32);
3721         fmuld   %f50,s_h,%f52                   ! (Y2_1) dtmp0 *= s_h;
3722 
3723         sra     %i1,31,%o1                      ! (Y0_1) eflag = eflag >> 31;
3724         add     %o3,1022,%l0                    ! (Y0_1) gflag = (1022 - ind);
3725         fmuld   %f56,%f60,%f26                  ! (Y1_0) dtmp1 = u * y;
3726         fcmped  %fcc0,%f44,HTHRESH              ! (Y2_1) if (s > HTHRESH);
3727 
3728         sra     %l0,31,%o4                      ! (Y0_1) gflag = gflag >> 31;
3729         and     %o1,54,%i4                      ! (Y0_1) itmp0 = 54 & eflag;
3730         fmuld   %f58,%f62,%f6                   ! (Y0_0) dtmp1 = u * dtmp1;
3731         fdtoi   %f22,%f4                        ! (Y1_1) u = (double)(int)dtmp0;
3732 
3733         add     %o0,%i4,%i2                     ! (Y0_1) ind = ind + itmp0;
3734         and     %o4,52,%l3                      ! (Y0_1) itmp1 = 52 & gflag;
3735         st      %f4,[%fp+tmp4]                  ! (Y1_1) ind = (int)dtmp0;
3736         faddd   %f48,XKB4,%f60                  ! (Y0_1) dtmp1 = dtmp0 + XKB4;
3737 
3738         sub     %i2,%l3,%l2                     ! (Y0_1) ind = ind - itmp1;
3739         sub     %o1,%o4,%o4                     ! (Y0_1) ind = eflag - gflag;
3740         st      %f6,[pz]                        ! (Y0_0) write into memory
3741         faddd   %f52,%f20,%f62                  ! (Y2_1) yd = dtmp0 + dtmp1;
3742 
3743         sll     %l2,20,%o3                      ! (Y0_1) ind <<= 20;
3744         nop
3745         st      %o3,[%fp+tmp0_hi]               ! (Y0_1) *(int*)&dtmp0 = ind;
3746         fmovdg  %fcc0,HTHRESH,%f44              ! (Y2_1) s = HTHRESH;
3747 
3748         lda     [py]0x82,%l5                    ! (Y1_2) hy = *py;
3749         nop
3750         fitod   %f4,%f48                        ! (Y1_1) u = (double)(int)dtmp0;
3751 
3752         fmuld   %f60,%f54,%f60                  ! (Y0_1) dtmp2 = dtmp1 * y;
3753         nop
3754         st      %f7,[pz+4]                      ! (Y0_0) write into memory
3755         faddd   %f8,%f26,%f26                   ! (Y1_0) dtmp2 = dtmp0 + dtmp1;
3756 
3757         lda     [py]0x82,%f8                    ! (Y1_2) yd = *py;
3758         nop
3759         fmuld   %f14,%f18,%f52                  ! (Y2_0) dtmp6 = dtmp5 * y;
3760         fmovdg  %fcc0,DZERO,%f62                ! (Y2_1) yd = DZERO;
3761 
3762         lda     [py+4]%asi,%f9                  ! (Y1_2) yd = *py;
3763         add     pz,stridez,pz                   ! z += stridez;
3764         fcmped  %fcc1,%f44,LTHRESH              ! (Y2_1) if (s < LTHRESH);
3765 
3766         fsubd   %f16,%f48,%f50                  ! (Y1_1) y = s - u;
3767 
3768         faddd   %f60,XKB3,%f60                  ! (Y0_1) dtmp3 = dtmp2 + XKB3;
3769 
3770         sra     %l5,20,%l5                      ! (Y1_2) expy = hy >> 20;
3771         and     %l1,255,%l1                     ! (Y2_0) i = ind & 0xff;
3772         faddd   %f52,XKB1,%f58                  ! (Y2_0) dtmp7 = dtmp6 + XKB1;
3773 
3774         sll     %l1,4,%l0                       ! (Y2_0) i = i << 4;
3775         fmovdl  %fcc1,DZERO,%f62                ! (Y2_1) yd = DZERO;
3776 
3777         and     %l5,0x7ff,%l5                   ! (Y1_2) expy &= 0x7ff;
3778         nop
3779         fmovdl  %fcc1,LTHRESH,%f44              ! (Y2_1) s = LTHRESH;
3780 
3781         cmp     %l5,959                         ! (Y1_2) if (expy < 0x3fb);
3782         ldd     [EXPTBL+%l0],%f20               ! (Y2_0) u = *(double*)((char*)__mt_constexp2 + i);
3783         fmuld   %f60,%f54,%f48                  ! (Y0_1) dtmp4 = dtmp3 * y;
3784         faddd   %f50,%f10,%f52                  ! (Y1_1) y = y + yd;
3785 
3786         add     %o7,513,%o7                     ! (Y1_0) ind += 513;
3787         ld      [%fp+tmp4],%o1                  ! (Y1_1) ind = (int)dtmp0;
3788         fmuld   %f58,%f18,%f18                  ! (Y2_0) y = dtmp7 * y;
3789         faddd   %f26,%f56,%f58                  ! (Y1_0) u = dtmp2 + u;
3790 
3791         add     py,stridey,py                   ! y += stridey;
3792         ldd     [%fp+tmp1_hi],%f60              ! (Y1_0) *(int*)&dtmp0 = ind;
3793         fmuld   s_h,%f12,%f50                   ! (Y0_2) s = s_h * s;
3794         fsubd   %f28,%f12,%f56                  ! (Y0_2) dtmp0 = (yd - s);
3795 
3796         sll     %o7,3,%l3                       ! (Y1_0) ind *= 8;
3797         fmuld   %f28,yr,%f26                    ! (Y0_2) dtmp1 = yd * yr;
3798         bl,pn   %icc,.xupdate12                 ! (Y1_2) if (expy < 0x3fb);
3799         faddd   %f44,%f62,%f28                  ! (Y2_1) dtmp0 = (s + yd);
3800 .xcont12:
3801         sra     %o1,8,%o3                       ! (Y1_1) ind >>= 8;
3802         cmp     %l5,1086                        ! (Y1_2) if (expy >= 0x43e);
3803         fmuld   XKB5,%f52,%f22                  ! (Y1_1) dtmp0 = XKB5 * y;
3804         faddd   %f48,XKB2,%f14                  ! (Y0_1) dtmp5 = dtmp4 + XKB2;
3805 
3806         add     %o3,1021,%o0                    ! (Y1_1) eflag = (ind + 1021);
3807         ldd     [%l3+EXPTBL],%f48               ! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
3808         bge,pn  %icc,.xupdate13                 ! (Y1_2) if (expy >= 0x43e);
3809         fpadd32 %f58,%f60,%f60                  ! (Y1_0) u = vis_fpadd32(u, dtmp0);
3810 .xcont13:
3811         sub     %g0,%o3,%i2                     ! (Y1_1) gflag = (1022 - ind);
3812         ldd     [EXPTBL_P8+%l0],%f16            ! (Y2_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3813         fmuld   %f56,s_h,%f58                   ! (Y0_2) dtmp0 *= s_h;
3814         fand    %f8,MHI32,%f12                  ! (Y1_2) s = vis_fand(yd, MHI32);
3815 
3816         sra     %o0,31,%l3                      ! (Y1_1) eflag = eflag >> 31;
3817         add     %i2,1022,%l2                    ! (Y1_1) gflag = (1022 - ind);
3818         fmuld   %f20,%f18,%f56                  ! (Y2_0) dtmp1 = u * y;
3819         fcmped  %fcc0,%f50,HTHRESH              ! (Y0_2) if (s > HTHRESH);
3820 
3821         sra     %l2,31,%o7                      ! (Y1_1) gflag = gflag >> 31;
3822         and     %l3,54,%i1                      ! (Y1_1) itmp0 = 54 & eflag;
3823         fmuld   %f60,%f48,%f18                  ! (Y1_0) dtmp1 = u * dtmp1;
3824         fdtoi   %f28,%f3                        ! (Y2_1) u = (double)(int)dtmp0;
3825 
3826         add     %o3,%i1,%l0                     ! (Y1_1) ind = ind + itmp0;
3827         and     %o7,52,%l1                      ! (Y1_1) itmp1 = 52 & gflag;
3828         st      %f3,[%fp+ind_buf]               ! (Y2_1) ind = (int)dtmp0;
3829         faddd   %f22,XKB4,%f60                  ! (Y1_1) dtmp1 = dtmp0 + XKB4;
3830 
3831         sub     %l0,%l1,%i4                     ! (Y1_1) ind = ind - itmp1;
3832         sub     %l3,%o7,%o7                     ! (Y1_1) ind = eflag - gflag;
3833         st      %f18,[pz]                       ! (Y1_0) write into memory
3834         faddd   %f58,%f26,%f48                  ! (Y0_2) yd = dtmp0 + dtmp1;
3835 
3836         sll     %i4,20,%i2                      ! (Y1_1) ind <<= 20;
3837         lda     [py]0x82,%l5                    ! (Y2_2) hy = *py;
3838         fmovdg  %fcc0,HTHRESH,%f50              ! (Y0_2) s = HTHRESH;
3839 
3840         st      %i2,[%fp+tmp1_hi]               ! (Y1_1) *(int*)&dtmp0 = ind;
3841         fitod   %f3,%f10                        ! (Y2_1) u = (double)(int)dtmp0;
3842 
3843         fmuld   %f60,%f52,%f60                  ! (Y1_1) dtmp2 = dtmp1 * y;
3844         st      %f19,[pz+4]                     ! (Y1_0) write into memory
3845         faddd   %f16,%f56,%f28                  ! (Y2_0) dtmp2 = dtmp0 + dtmp1;
3846 
3847         fmuld   %f14,%f54,%f56                  ! (Y0_1) dtmp6 = dtmp5 * y;
3848         fmovdg  %fcc0,DZERO,%f48                ! (Y0_2) yd = DZERO;
3849 
3850         add     pz,stridez,pz                   ! z += stridez;
3851         fcmped  %fcc1,%f50,LTHRESH              ! (Y0_2) if (s < LTHRESH);
3852 
3853         lda     [py]0x82,%f26                   ! (Y2_2) yd = *py;
3854         fsubd   %f44,%f10,%f18                  ! (Y2_1) y = s - u;
3855 
3856         lda     [py+4]%asi,%f27                 ! (Y2_2) yd = *py;
3857         faddd   %f60,XKB3,%f44                  ! (Y1_1) dtmp3 = dtmp2 + XKB3;
3858 
3859         sra     %l5,20,%l5                      ! (Y2_2) expy = hy >> 20;
3860         and     %o2,255,%o2                     ! (Y0_1) i = ind & 0xff;
3861         faddd   %f56,XKB1,%f58                  ! (Y0_1) dtmp7 = dtmp6 + XKB1;
3862 
3863         sll     %o2,4,%l2                       ! (Y0_1) i = i << 4;
3864         fmovdl  %fcc1,DZERO,%f48                ! (Y0_2) yd = DZERO;
3865 
3866         add     py,stridey,py                   ! y += stridey;
3867         and     %l5,0x7ff,%l5                   ! (Y2_2) expy &= 0x7ff;
3868         fmovdl  %fcc1,LTHRESH,%f50              ! (Y0_2) s = LTHRESH;
3869 
3870         cmp     %l5,959                         ! (Y2_2) if (expy < 0x3fb);
3871         ldd     [EXPTBL+%l2],%f22               ! (Y0_1) u = *(double*)((char*)__mt_constexp2 + i);
3872         faddd   %f18,%f62,%f18                  ! (Y2_1) y = y + yd;
3873         fmuld   %f44,%f52,%f62                  ! (Y1_1) dtmp4 = dtmp3 * y;
3874 
3875         add     %o5,513,%o5                     ! (Y2_0) ind += 513;
3876         ld      [%fp+ind_buf],%l1               ! (Y2_1) ind = (int)dtmp0;
3877         fmuld   %f58,%f54,%f54                  ! (Y0_1) y = dtmp7 * y;
3878         faddd   %f28,%f20,%f58                  ! (Y2_0) u = dtmp2 + u;
3879 
3880         ldd     [%fp+tmp2_hi],%f60              ! (Y2_0) *(int*)&dtmp0 = ind;
3881         fmuld   s_h,%f12,%f16                   ! (Y1_2) s = s_h * s;
3882         bl,pn   %icc,.xupdate14                 ! (Y2_2) if (expy < 0x3fb);
3883         fsubd   %f8,%f12,%f56                   ! (Y1_2) dtmp0 = (yd - s);
3884 .xcont14:
3885         sll     %o5,3,%i1                       ! (Y2_0) ind *= 8;
3886         cmp     %l5,1086                        ! (Y2_2) if (expy >= 0x43e);
3887         fmuld   %f8,yr,%f8                      ! (Y1_2) dtmp1 = yd * yr;
3888         faddd   %f50,%f48,%f28                  ! (Y0_2) dtmp0 = (s + yd);
3889 
3890         sra     %l1,8,%o2                       ! (Y2_1) ind >>= 8;
3891         lda     [py]0x82,%l5                    ! (Y0_3) hy = *py;
3892         fmuld   XKB5,%f18,%f20                  ! (Y2_1) dtmp0 = XKB5 * y;
3893         faddd   %f62,XKB2,%f12                  ! (Y1_1) dtmp5 = dtmp4 + XKB2;
3894 
3895         add     %o2,1021,%l0                    ! (Y2_1) eflag = (ind + 1021);
3896         ldd     [%i1+EXPTBL],%f62               ! (Y2_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
3897         bge,pn  %icc,.xupdate15                 ! (Y2_2) if (expy >= 0x43e);
3898         fpadd32 %f58,%f60,%f60                  ! (Y2_0) u = vis_fpadd32(u, dtmp0);
3899 .xcont15:
3900         sub     %g0,%o2,%l3                     ! (Y2_1) gflag = (1022 - ind);
3901         ldd     [EXPTBL_P8+%l2],%f14            ! (Y0_1) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3902         fmuld   %f56,s_h,%f58                   ! (Y1_2) dtmp0 *= s_h;
3903         fand    %f26,MHI32,%f44                 ! (Y2_2) s = vis_fand(yd, MHI32);
3904 
3905         sra     %l0,31,%o0                      ! (Y2_1) eflag = eflag >> 31;
3906         add     %l3,1022,%i4                    ! (Y2_1) gflag = (1022 - ind);
3907         fmuld   %f22,%f54,%f56                  ! (Y0_1) dtmp1 = u * y;
3908         fcmped  %fcc0,%f16,HTHRESH              ! (Y1_2) if (s > HTHRESH);
3909 
3910         sra     %i4,31,%o5                      ! (Y2_1) gflag = gflag >> 31;
3911         and     %o0,54,%i2                      ! (Y2_1) itmp0 = 54 & eflag;
3912         fmuld   %f60,%f62,%f6                   ! (Y2_0) dtmp1 = u * dtmp1;
3913         fdtoi   %f28,%f3                        ! (Y0_2) u = (double)(int)dtmp0;
3914 
3915         add     %o2,%i2,%i1                     ! (Y2_1) ind = ind + itmp0;
3916         and     %o5,52,%l2                      ! (Y2_1) itmp1 = 52 & gflag;
3917         st      %f3,[%fp+tmp3]                  ! (Y0_2) ind = (int)dtmp0;
3918         faddd   %f20,XKB4,%f60                  ! (Y2_1) dtmp1 = dtmp0 + XKB4;
3919 
3920         sub     %i1,%l2,%o3                     ! (Y2_1) ind = ind - itmp1;
3921         sub     %o0,%o5,%o5                     ! (Y2_1) ind = eflag - gflag;
3922         st      %f6,[pz]                        ! (Y2_0) write into memory
3923         faddd   %f58,%f8,%f10                   ! (Y1_2) yd = dtmp0 + dtmp1;
3924 
3925         sll     %o3,20,%l3                      ! (Y2_1) ind <<= 20;
3926         lda     [py]0x82,%f28                   ! (Y0_3) yd = *py;
3927         fmovdg  %fcc0,HTHRESH,%f16              ! (Y1_2) s = HTHRESH;
3928 
3929         lda     [py+4]%asi,%f29                 ! (Y0_3) yd = *py;
3930         fitod   %f3,%f58                        ! (Y0_2) u = (double)(int)dtmp0;
3931 
3932         fmuld   %f60,%f18,%f60                  ! (Y2_1) dtmp2 = dtmp1 * y;
3933         st      %l3,[%fp+tmp2_hi]               ! (Y2_1) *(int*)&dtmp0 = ind;
3934         faddd   %f14,%f56,%f20                  ! (Y0_1) dtmp2 = dtmp0 + dtmp1;
3935 
3936         fmuld   %f12,%f52,%f56                  ! (Y1_1) dtmp6 = dtmp5 * y;
3937         st      %f7,[pz+4]                      ! (Y2_0) write into memory
3938         fmovdg  %fcc0,DZERO,%f10                ! (Y1_2) yd = DZERO;
3939 
3940         sra     %l5,20,%l5                      ! (Y0_3) expy = hy >> 20;
3941         add     pz,stridez,pz                   ! z += stridez;
3942         fcmped  %fcc1,%f16,LTHRESH              ! (Y1_2) if (s < LTHRESH);
3943 
3944         and     %l5,0x7ff,%l5                   ! (Y0_3) expy &= 0x7ff;
3945         fsubd   %f50,%f58,%f54                  ! (Y0_2) y = s - u;
3946 
3947         cmp     %l5,959                         ! (Y0_3) if (expy < 0x3fb);
3948         faddd   %f60,XKB3,%f60                  ! (Y2_1) dtmp3 = dtmp2 + XKB3;
3949 
3950         and     %o1,255,%o1                     ! (Y1_1) i = ind & 0xff;
3951         bl,pn   %icc,.xupdate16                 ! (Y0_3) if (expy < 0x3fb);
3952         faddd   %f56,XKB1,%f8                   ! (Y1_1) dtmp7 = dtmp6 + XKB1;
3953 .xcont16:
3954         sll     %o1,4,%l0                       ! (Y1_1) i = i << 4;
3955         fmovdl  %fcc1,DZERO,%f10                ! (Y1_2) yd = DZERO;
3956 
3957         subcc   counter,3,counter               ! update cycle counter
3958         fmovdl  %fcc1,LTHRESH,%f16              ! (Y1_2) s = LTHRESH;
3959 
3960         ldd     [EXPTBL+%l0],%f56               ! (Y1_1) u = *(double*)((char*)__mt_constexp2 + i);
3961         fmuld   %f60,%f18,%f58                  ! (Y2_1) dtmp4 = dtmp3 * y;
3962         faddd   %f54,%f48,%f54                  ! (Y0_2) y = y + yd;
3963 
3964         fmuld   %f8,%f52,%f60                   ! (Y1_1) y = dtmp7 * y;
3965         ld      [%fp+tmp3],%o2                  ! (Y0_2) ind = (int)dtmp0;
3966         bpos,pt %icc,.xmain_loop
3967         faddd   %f20,%f22,%f12                  ! (Y0_1) u = dtmp2 + u;
3968 
3969 .xtail:
3970         addcc   counter,2,counter
3971         ldd     [%fp+tmp0_hi],%f52              ! (Y0_0) *(int*)&dtmp0 = ind;
3972 
3973         add     %o4,513,%o4                     ! (Y0_0) ind += 513;
3974         bneg,pn %icc,.xend_loop
3975         nop
3976 
3977         sll     %o4,3,%l2                       ! (Y0_0) ind *= 8;
3978 
3979         subcc   counter,1,counter
3980         ldd     [%l2+EXPTBL],%f62               ! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
3981         fpadd32 %f12,%f52,%f58                  ! (Y0_0) u = vis_fpadd32(u, dtmp0);
3982 
3983         ldd     [EXPTBL_P8+%l0],%f8             ! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
3984 
3985         fmuld   %f56,%f60,%f26                  ! (Y1_0) dtmp1 = u * y;
3986 
3987         fmuld   %f58,%f62,%f6                   ! (Y0_0) dtmp1 = u * dtmp1;
3988 
3989         st      %f6,[pz]                        ! (Y0_0) write into memory
3990         st      %f7,[pz+4]                      ! (Y0_0) write into memory
3991         bneg,pn %icc,.xend_loop
3992         add     pz,stridez,pz                   ! z += stridez;
3993 
3994         faddd   %f8,%f26,%f26                   ! (Y1_0) dtmp2 = dtmp0 + dtmp1;
3995 
3996         add     %o7,513,%o7                     ! (Y1_0) ind += 513;
3997         faddd   %f26,%f56,%f58                  ! (Y1_0) u = dtmp2 + u;
3998 
3999         ldd     [%fp+tmp1_hi],%f60              ! (Y1_0) *(int*)&dtmp0 = ind;
4000 
4001         sll     %o7,3,%l3                       ! (Y1_0) ind *= 8;
4002 
4003         ldd     [%l3+EXPTBL],%f48               ! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
4004         fpadd32 %f58,%f60,%f60                  ! (Y1_0) u = vis_fpadd32(u, dtmp0);
4005 
4006         fmuld   %f60,%f48,%f18                  ! (Y1_0) dtmp1 = u * dtmp1;
4007 
4008         st      %f18,[pz]                       ! (Y1_0) write into memory
4009         st      %f19,[pz+4]                     ! (Y1_0) write into memory
4010         add     pz,stridez,pz                   ! z += stridez;
4011 
4012 .xend_loop:
4013         ba      .xbegin
4014         nop
4015 
4016         .align  16
4017 .xupdate0:
4018         cmp     counter,0
4019         sub     py,stridey,%i2
4020         ble,pt  %icc,.xcont0
4021         fmovd   DZERO,%f10
4022 
4023         stx     %i2,[%fp+tmp_py]
4024 
4025         st      counter,[%fp+tmp_counter]
4026         ba      .xcont0
4027         or      %g0,0,counter
4028 
4029         .align  16
4030 .xupdate1:
4031         cmp     counter,0
4032         sub     py,stridey,%i2
4033         ble,pt  %icc,.xcont1
4034         fmovd   DZERO,%f10
4035 
4036         stx     %i2,[%fp+tmp_py]
4037 
4038         st      counter,[%fp+tmp_counter]
4039         ba      .xcont1
4040         or      %g0,0,counter
4041 
4042         .align  16
4043 .xupdate2:
4044         cmp     counter,1
4045         sub     py,stridey,%l3
4046         ble,pt  %icc,.xcont2
4047         fmovd   DZERO,%f14
4048 
4049         stx     %l3,[%fp+tmp_py]
4050         sub     counter,1,counter
4051 
4052         st      counter,[%fp+tmp_counter]
4053         ba      .xcont2
4054         or      %g0,1,counter
4055 
4056         .align  16
4057 .xupdate3:
4058         cmp     counter,1
4059         sub     py,stridey,%l3
4060         ble,pt  %icc,.xcont3
4061         fmovd   DZERO,%f14
4062 
4063         stx     %l3,[%fp+tmp_py]
4064         sub     counter,1,counter
4065 
4066         st      counter,[%fp+tmp_counter]
4067         ba      .xcont3
4068         or      %g0,1,counter
4069 
4070         .align  16
4071 .xupdate4:
4072         cmp     counter,2
4073         ble,pt  %icc,.xcont4
4074         fmovd   DZERO,%f18
4075 
4076         stx     py,[%fp+tmp_py]
4077         sub     counter,2,counter
4078 
4079         st      counter,[%fp+tmp_counter]
4080         ba      .xcont4
4081         or      %g0,2,counter
4082 
4083         .align  16
4084 .xupdate5:
4085         cmp     counter,2
4086         ble,pt  %icc,.xcont5
4087         fmovd   DZERO,%f18
4088 
4089         stx     py,[%fp+tmp_py]
4090         sub     counter,2,counter
4091 
4092         st      counter,[%fp+tmp_counter]
4093         ba      .xcont5
4094         or      %g0,2,counter
4095 
4096         .align  16
4097 .xupdate6:
4098         cmp     counter,3
4099         sub     py,stridey,%i2
4100         ble,pt  %icc,.xcont6
4101         fmovd   DZERO,%f20
4102 
4103         stx     %i2,[%fp+tmp_py]
4104         sub     counter,3,counter
4105 
4106         st      counter,[%fp+tmp_counter]
4107         ba      .xcont6
4108         or      %g0,3,counter
4109 
4110         .align  16
4111 .xupdate7:
4112         cmp     counter,3
4113         sub     py,stridey,%i2
4114         ble,pt  %icc,.xcont7
4115         fmovd   DZERO,%f20
4116 
4117         stx     %i2,[%fp+tmp_py]
4118         sub     counter,3,counter
4119 
4120         st      counter,[%fp+tmp_counter]
4121         ba      .xcont7
4122         or      %g0,3,counter
4123 
4124         .align  16
4125 .xupdate8:
4126         cmp     counter,4
4127         sub     py,stridey,%l3
4128         ble,pt  %icc,.xcont8
4129         fmovd   DZERO,%f26
4130 
4131         stx     %l3,[%fp+tmp_py]
4132         sub     counter,4,counter
4133 
4134         st      counter,[%fp+tmp_counter]
4135         ba      .xcont8
4136         or      %g0,4,counter
4137 
4138         .align  16
4139 .xupdate9:
4140         cmp     counter,4
4141         sub     py,stridey,%l3
4142         ble,pt  %icc,.xcont9
4143         fmovd   DZERO,%f26
4144 
4145         stx     %l3,[%fp+tmp_py]
4146         sub     counter,4,counter
4147 
4148         st      counter,[%fp+tmp_counter]
4149         ba      .xcont9
4150         or      %g0,4,counter
4151 
4152         .align  16
4153 .xupdate10:
4154         cmp     counter,5
4155         ble,pt  %icc,.xcont10
4156         fmovd   DZERO,%f28
4157 
4158         stx     py,[%fp+tmp_py]
4159         sub     counter,5,counter
4160 
4161         st      counter,[%fp+tmp_counter]
4162         ba      .xcont10
4163         or      %g0,5,counter
4164 
4165         .align  16
4166 .xupdate11:
4167         cmp     counter,3
4168         ble,pt  %icc,.xcont11
4169         fmovd   DZERO,%f28
4170 
4171         stx     py,[%fp+tmp_py]
4172         sub     counter,3,counter
4173 
4174         st      counter,[%fp+tmp_counter]
4175         ba      .xcont11
4176         or      %g0,3,counter
4177 
4178         .align  16
4179 .xupdate12:
4180         cmp     counter,4
4181         sub     py,stridey,%i2
4182         ble,pt  %icc,.xcont12
4183         fmovd   DZERO,%f8
4184 
4185         stx     %i2,[%fp+tmp_py]
4186         sub     counter,4,counter
4187 
4188         st      counter,[%fp+tmp_counter]
4189         ba      .xcont12
4190         or      %g0,4,counter
4191 
4192         .align  16
4193 .xupdate13:
4194         cmp     counter,4
4195         sub     py,stridey,%i2
4196         ble,pt  %icc,.xcont13
4197         fmovd   DZERO,%f8
4198 
4199         stx     %i2,[%fp+tmp_py]
4200         sub     counter,4,counter
4201 
4202         st      counter,[%fp+tmp_counter]
4203         ba      .xcont13
4204         or      %g0,4,counter
4205 
4206         .align  16
4207 .xupdate14:
4208         cmp     counter,5
4209         sub     py,stridey,%l3
4210         ble,pt  %icc,.xcont14
4211         fmovd   DZERO,%f26
4212 
4213         stx     %l3,[%fp+tmp_py]
4214         sub     counter,5,counter
4215 
4216         st      counter,[%fp+tmp_counter]
4217         ba      .xcont14
4218         or      %g0,5,counter
4219 
4220         .align  16
4221 .xupdate15:
4222         cmp     counter,5
4223         sub     py,stridey,%l3
4224         ble,pt  %icc,.xcont15
4225         fmovd   DZERO,%f26
4226 
4227         stx     %l3,[%fp+tmp_py]
4228         sub     counter,5,counter
4229 
4230         st      counter,[%fp+tmp_counter]
4231         ba      .xcont15
4232         or      %g0,5,counter
4233 
4234         .align  16
4235 .xupdate16:
4236         cmp     counter,6
4237         ble,pt  %icc,.xcont16
4238         fmovd   DZERO,%f28
4239 
4240         stx     py,[%fp+tmp_py]
4241         sub     counter,6,counter
4242 
4243         st      counter,[%fp+tmp_counter]
4244         ba      .xcont16
4245         or      %g0,6,counter
4246 
4247         .align  16
4248 .xspec0:
4249         add     EXPTBL,4095,%l0
4250         add     %l0,1,%l0
4251         ldd     [%l0+8],%f20                    ! ld  DONE
4252         st      %f20,[pz]                       ! *pz = DONE;
4253         ba      .xupdate_point
4254         st      %f21,[pz+4]                     ! *pz = DONE;
4255 
4256         .align  16
4257 .xspec1:
4258         ldx     [%fp+tmp_px],%l1
4259         sethi   %hi(0x7ffffc00),MASK_0x7fffffff
4260 
4261         sethi   %hi(0x7ff00000),%o3
4262         add     MASK_0x7fffffff,0x3ff,MASK_0x7fffffff
4263 
4264         and     %l2,MASK_0x7fffffff,%o2         ! if (hy &= 0x7fffffff);
4265         sethi   %hi(0x3ff00000),MASK_0x3ff00000
4266 
4267         cmp     %o2,%o3                         ! if (hy != 0x7ff00000);
4268         bne,pn  %icc,2f                         ! if (hy != 0x7ff00000);
4269         nop
4270 
4271         ld      [py+4],%l3                      ! ld ly;
4272         cmp     %l3,0                           ! if (ly != 0);
4273         bne,a,pt        %icc,3f                 ! if (ly != 0);
4274         nop
4275 
4276         ld      [%l1],%i1                       ! ld hx;
4277         cmp     %i1,MASK_0x3ff00000             ! if (hx != 0x3ff00000);
4278         bne,a,pn        %icc,1f                 ! if (hx != 0x3ff00000);
4279         srl     %l2,31,%o7                      ! sy = hy >> 31;
4280 
4281         ld      [%l1+4],%i2                     ! ld lx;
4282         cmp     %i2,0                           ! if (lx != 0);
4283         bne,pn  %icc,1f                         ! if (lx != 0);
4284         srl     %l2,31,%o7                      ! sy = hy >> 31;
4285 
4286         fzero   %f28
4287         fmuld   %f18,%f28,%f28                  ! *pz = *py * 0.0;
4288         st      %f28,[pz]
4289         ba      .xupdate_point
4290         st      %f29,[pz+4]
4291 1:
4292         sub     %i1,MASK_0x3ff00000,%o0         ! hx - 0x3ff00000;
4293         srlx    %o0,63,%o0                      ! (hx - 0x3ff00000) >> 63;
4294 
4295         cmp     %o0,%o7                         ! if ((hx < 0x3ff00000) == sy);
4296         be,pn   %icc,1f                         ! if ((hx < 0x3ff00000) == sy);
4297 
4298         st      DZERO_HI,[pz]
4299         ba      .xupdate_point
4300         st      DZERO_LO,[pz+4]
4301 1:
4302         st      %o2,[pz]                        ! ((int*)pz)[0] = hy;
4303         ba      .xupdate_point
4304         st      %l3,[pz+4]                      ! ((int*)pz)[1] = ly;
4305 2:
4306         bl,a,pn %icc,1f                         ! if (hy < 0x7ff00000);
4307         ld      [%l1+4],%i2                     ! ld lx;
4308 3:
4309         ld      [%l1],%f20                      ! x = *px;
4310         ld      [%l1+4],%f21                    ! x = *px;
4311         fmuld   %f20,%f18,%f28                  ! *pz = *px * *py;
4312         st      %f28,[pz]
4313         ba      .xupdate_point
4314         st      %f29,[pz+4]
4315 1:
4316         ld      [%l1],%i1                       ! ld hx;
4317         cmp     %i2,0                           ! if (lx != 0);
4318         bne,pn  %icc,1f                         ! if (lx != 0);
4319         nop
4320 
4321         cmp     %i1,MASK_0x3ff00000             ! if (hx != 0x3ff00000);
4322         add     EXPTBL,4095,%l0
4323         bne,pn  %icc,1f                         ! if (hx != 0x3ff00000);
4324         add     %l0,1,%l0
4325 
4326         ldd     [%l0+8],%f20                    ! ld  DONE
4327         st      %f20,[pz]                       ! *pz = DONE;
4328         ba      .xupdate_point
4329         st      %f21,[pz+4]                     ! *pz = DONE;
4330 1:
4331         srl     %l2,31,%o7                      ! sy = hy >> 31;
4332         sub     %i1,MASK_0x3ff00000,%o0         ! hx - 0x3ff00000;
4333 
4334         srlx    %o0,63,%o0                      ! (hx - 0x3ff00000) >> 63;
4335 
4336         cmp     %o0,%o7                         ! if (hx < 0x3ff00000) == sy);
4337         be,a,pn %icc,1f                         ! if (hx < 0x3ff00000) == sy);
4338         ldd     [EXPTBL-ind_HUGE],%f20          ! y0 = _HUGE;
4339 
4340         ldd     [EXPTBL-ind_TINY],%f20          ! y0 = _TINY;
4341 1:
4342         fmuld   %f20,%f20,%f20                  ! *pz = y0 * y0
4343         st      %f20,[pz]
4344         ba      .xupdate_point
4345         st      %f21,[pz+4]
4346 
4347 .xupdate_point:
4348         add     py,stridey,py
4349         ba      .xbegin1
4350         add     pz,stridez,pz
4351 
4352         SET_SIZE(__vpow)
4353