root/usr/src/lib/libmvec/common/vis/__vpow.S
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
 */
/*
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

        .file   "__vpow.S"

#include "libm.h"

        RO_DATA
        .align  64

.CONST_TBL:

! __mt_constlog2[2*i] = high order rounded 32 bits log2(1+i/256)*256, i = [0, 255]
! __mt_constlog2[2*i+1] = low order least bits log2(1+i/256)*256, i = [0, 255]

        .word   0x00000000,     0x00000000,     0x00000000,     0x00000000,
        .word   0x3ff709c4,     0x00000000,     0x3e9b5eab,     0x1dd2b66f,
        .word   0x4006fe51,     0x00000000,     0xbea2443d,     0xeba01c72,
        .word   0x40113631,     0x00000000,     0x3e97a97b,     0x0c4bb41a,
        .word   0x4016e797,     0x00000000,     0xbebe8f4b,     0x759d6476,
        .word   0x401c9364,     0x00000000,     0xbeb15ebc,     0x1e666460,
        .word   0x40211cd2,     0x00000000,     0xbeb57665,     0xf6893f5d,
        .word   0x4023ed31,     0x00000000,     0xbecae5e9,     0x7677f62d,
        .word   0x4026bad3,     0x00000000,     0x3ecd63bf,     0x61cc4d82,
        .word   0x402985c0,     0x00000000,     0xbebe5b57,     0x35cfaf8e,
        .word   0x402c4dfb,     0x00000000,     0xbec1bd55,     0x2842c1c2,
        .word   0x402f138a,     0x00000000,     0xbecf336b,     0x18178cbe,
        .word   0x4030eb39,     0x00000000,     0xbed81758,     0x19530c23,
        .word   0x40324b5b,     0x00000000,     0x3edf84d6,     0x8f2268b4,
        .word   0x4033aa30,     0x00000000,     0xbec16c07,     0x1e93fd97,
        .word   0x403507b8,     0x00000000,     0x3ecb019d,     0xdb6a796a,
        .word   0x403663f7,     0x00000000,     0xbe94dbb3,     0xa60cceb2,
        .word   0x4037beef,     0x00000000,     0xbeda51d7,     0x5fb0ef94,
        .word   0x403918a1,     0x00000000,     0x3edb918c,     0xd6ab9c8d,
        .word   0x403a7112,     0x00000000,     0xbec065bd,     0xb60a5dd4,
        .word   0x403bc842,     0x00000000,     0x3ed02b6a,     0xee98ecb1,
        .word   0x403d1e35,     0x00000000,     0xbebca47d,     0x25b2f4c7,
        .word   0x403e72ec,     0x00000000,     0x3eb17fa5,     0xb21cbdb6,
        .word   0x403fc66a,     0x00000000,     0x3eae1601,     0x49209a69,
        .word   0x40408c59,     0x00000000,     0xbeecc961,     0x871a7611,
        .word   0x404134e2,     0x00000000,     0xbee2ddbe,     0x74803297,
        .word   0x4041dcd2,     0x00000000,     0xbeea2ab5,     0x212856eb,
        .word   0x40428429,     0x00000000,     0x3ee2c1e9,     0x8fe35da3,
        .word   0x40432aea,     0x00000000,     0xbecd8751,     0xe5e0ae0d,
        .word   0x4043d114,     0x00000000,     0x3eeb66a2,     0x98fc02ce,
        .word   0x404476aa,     0x00000000,     0xbea9f022,     0xcb3b1c5b,
        .word   0x40451bac,     0x00000000,     0xbeebe168,     0xdd6dd3fe,
        .word   0x4045c01a,     0x00000000,     0x3edcfdeb,     0x43cfd006,
        .word   0x404663f7,     0x00000000,     0xbea4dbb3,     0xa60cceb2,
        .word   0x40470743,     0x00000000,     0xbed5887e,     0xc06b1ff2,
        .word   0x4047a9ff,     0x00000000,     0xbedc17d1,     0x108740d9,
        .word   0x40484c2c,     0x00000000,     0xbed7e87e,     0x268116ee,
        .word   0x4048edcb,     0x00000000,     0xbec7cad4,     0x944a32be,
        .word   0x40498edd,     0x00000000,     0x3eadf9c3,     0x7c0beb3a,
        .word   0x404a2f63,     0x00000000,     0x3ed1905c,     0x35651c43,
        .word   0x404acf5e,     0x00000000,     0x3ed6da76,     0x49f7f08f,
        .word   0x404b6ecf,     0x00000000,     0x3ec75f95,     0xe96bed8d,
        .word   0x404c0db7,     0x00000000,     0xbed91359,     0x08df8ec9,
        .word   0x404cac16,     0x00000000,     0x3ede3b86,     0xe44b6265,
        .word   0x404d49ee,     0x00000000,     0x3ee30c96,     0x5bf23d2d,
        .word   0x404de740,     0x00000000,     0xbecc4eb7,     0xf11e41be,
        .word   0x404e840c,     0x00000000,     0xbec8b195,     0xb338360c,
        .word   0x404f2053,     0x00000000,     0x3edc9047,     0x93a3ba95,
        .word   0x404fbc17,     0x00000000,     0xbee1bf65,     0xfd7715ca,
        .word   0x40502bac,     0x00000000,     0xbef76cbe,     0x67113a18,
        .word   0x4050790b,     0x00000000,     0xbee227e7,     0xfb487e73,
        .word   0x4050c629,     0x00000000,     0x3efd550a,     0xa3a93ec8,
        .word   0x40511308,     0x00000000,     0xbee2967a,     0x451a7b48,
        .word   0x40515fa6,     0x00000000,     0x3efdaec2,     0x3fd65f8e,
        .word   0x4051ac06,     0x00000000,     0xbef35b83,     0xe3eb5ce3,
        .word   0x4051f826,     0x00000000,     0xbec24ee3,     0xd9a82f2e,
        .word   0x40524408,     0x00000000,     0xbef53c7e,     0x319f6e92,
        .word   0x40528fab,     0x00000000,     0x3eead993,     0x41b181d1,
        .word   0x4052db11,     0x00000000,     0xbead932a,     0x8487642e,
        .word   0x40532639,     0x00000000,     0x3ef8daca,     0x0d66b8f9,
        .word   0x40537125,     0x00000000,     0xbee8ad99,     0x09933766,
        .word   0x4053bbd4,     0x00000000,     0xbef7d788,     0xc15a9f3d,
        .word   0x40540646,     0x00000000,     0x3eed8d82,     0x24bad97a,
        .word   0x4054507d,     0x00000000,     0xbe922b03,     0xc6b2a5f6,
        .word   0x40549a78,     0x00000000,     0x3ef2f346,     0xe2bf924b,
        .word   0x4054e439,     0x00000000,     0xbeffc5c1,     0x258110a4,
        .word   0x40552dbe,     0x00000000,     0xbead9b4a,     0x641184f9,
        .word   0x40557709,     0x00000000,     0x3edb3378,     0xcab10782,
        .word   0x4055c01a,     0x00000000,     0x3eecfdeb,     0x43cfd006,
        .word   0x405608f2,     0x00000000,     0xbef2f5ad,     0xd49a43fc,
        .word   0x40565190,     0x00000000,     0xbedb9884,     0x591add87,
        .word   0x405699f5,     0x00000000,     0x3ee2466a,     0x5c3462a4,
        .word   0x4056e222,     0x00000000,     0xbee93179,     0x90d43957,
        .word   0x40572a16,     0x00000000,     0x3eebe5e0,     0xc14a1a6d,
        .word   0x405771d3,     0x00000000,     0xbef16041,     0x3106e405,
        .word   0x4057b958,     0x00000000,     0xbef4eb95,     0x4eea2724,
        .word   0x405800a5,     0x00000000,     0x3ef8c587,     0x150cabae,
        .word   0x405847bc,     0x00000000,     0x3ee9ec30,     0xc6e3e04a,
        .word   0x40588e9c,     0x00000000,     0x3efcb82c,     0x89692d99,
        .word   0x4058d546,     0x00000000,     0x3efced70,     0xdc6acf42,
        .word   0x40591bbb,     0x00000000,     0xbefdb83a,     0x3dd2d353,
        .word   0x405961f9,     0x00000000,     0x3eb49d02,     0x6e33d676,
        .word   0x4059a802,     0x00000000,     0x3eec8f11,     0x979a5db7,
        .word   0x4059edd6,     0x00000000,     0x3efd66c9,     0x77e236c7,
        .word   0x405a3376,     0x00000000,     0x3ec4fec0,     0xa13af882,
        .word   0x405a78e1,     0x00000000,     0x3ef1bdef,     0xbd14a081,
        .word   0x405abe18,     0x00000000,     0x3efe5fc7,     0xd238691d,
        .word   0x405b031c,     0x00000000,     0xbed01f9b,     0xcb999fe9,
        .word   0x405b47ec,     0x00000000,     0xbec18efa,     0xbeb7d722,
        .word   0x405b8c89,     0x00000000,     0xbee203bc,     0xc3346511,
        .word   0x405bd0f3,     0x00000000,     0xbed6186f,     0xcf54bbd3,
        .word   0x405c152a,     0x00000000,     0x3efb0932,     0xb9700973,
        .word   0x405c5930,     0x00000000,     0xbef4b5a9,     0x2a606047,
        .word   0x405c9d03,     0x00000000,     0xbec26b70,     0x98590071,
        .word   0x405ce0a5,     0x00000000,     0xbefb7169,     0xe0cda8bd,
        .word   0x405d2415,     0x00000000,     0xbeebfa06,     0xc156f521,
        .word   0x405d6754,     0x00000000,     0xbedfcd15,     0xf101c142,
        .word   0x405daa62,     0x00000000,     0x3ee10327,     0xdc8093a5,
        .word   0x405ded40,     0x00000000,     0xbee5dee4,     0xd9d8a273,
        .word   0x405e2fed,     0x00000000,     0x3eee84b9,     0x4c06f913,
        .word   0x405e726b,     0x00000000,     0xbef7862a,     0xcb7ceb98,
        .word   0x405eb4b8,     0x00000000,     0x3ef1f456,     0xf394f972,
        .word   0x405ef6d6,     0x00000000,     0x3efcca38,     0x881f4780,
        .word   0x405f38c5,     0x00000000,     0x3ef9ef31,     0x50343f8e,
        .word   0x405f7a85,     0x00000000,     0x3efa32c1,     0xb3b3864c,
        .word   0x405fbc17,     0x00000000,     0xbef1bf65,     0xfd7715ca,
        .word   0x405ffd7a,     0x00000000,     0xbef95f00,     0x19518ce0,
        .word   0x40601f57,     0x00000000,     0x3ef3b932,     0x6ff91960,
        .word   0x40603fdb,     0x00000000,     0xbf0d1a19,     0xa0331af3,
        .word   0x40606047,     0x00000000,     0x3ee9f24e,     0xb23e991f,
        .word   0x4060809d,     0x00000000,     0xbedb011f,     0x855b4988,
        .word   0x4060a0dc,     0x00000000,     0x3efa7c70,     0xfde006c7,
        .word   0x4060c105,     0x00000000,     0x3e9ac754,     0xcb104aea,
        .word   0x4060e117,     0x00000000,     0x3f0d535f,     0x0444ebab,
        .word   0x40610114,     0x00000000,     0xbf03ab0d,     0xc56138c9,
        .word   0x406120fa,     0x00000000,     0xbef630f3,     0xfc695a97,
        .word   0x406140ca,     0x00000000,     0xbec5786a,     0xf187a96b,
        .word   0x40616084,     0x00000000,     0x3f012578,     0x0181e2b3,
        .word   0x40618029,     0x00000000,     0xbef846b4,     0x4ad8a38b,
        .word   0x40619fb8,     0x00000000,     0xbf01c336,     0xf7a3a78f,
        .word   0x4061bf31,     0x00000000,     0x3eee95d0,     0x0de3b514,
        .word   0x4061de95,     0x00000000,     0x3eed9cbb,     0xa6187a4d,
        .word   0x4061fde4,     0x00000000,     0xbef678bf,     0x6cdedf51,
        .word   0x40621d1d,     0x00000000,     0x3f06edb5,     0x668c543d,
        .word   0x40623c42,     0x00000000,     0xbef5ec6c,     0x1bfbf89a,
        .word   0x40625b51,     0x00000000,     0x3f062dcf,     0x4115a1a3,
        .word   0x40627a4c,     0x00000000,     0x3ec6172f,     0xe015e13c,
        .word   0x40629932,     0x00000000,     0xbed30dd5,     0x3f5c184c,
        .word   0x4062b803,     0x00000000,     0x3f01cfde,     0xb43cfd00,
        .word   0x4062d6c0,     0x00000000,     0x3ee35013,     0x8064a94e,
        .word   0x4062f568,     0x00000000,     0x3f0d7acf,     0xc98509e3,
        .word   0x406313fd,     0x00000000,     0xbf0d7932,     0x43718371,
        .word   0x4063327c,     0x00000000,     0x3f0aad27,     0x29b21ae5,
        .word   0x406350e8,     0x00000000,     0x3ef92b83,     0xec743665,
        .word   0x40636f40,     0x00000000,     0xbec249ba,     0x76fee235,
        .word   0x40638d84,     0x00000000,     0xbeefd0a2,     0xf6d7e41e,
        .word   0x4063abb4,     0x00000000,     0xbec57f7a,     0x64ccd537,
        .word   0x4063c9d0,     0x00000000,     0x3f09242b,     0x8488b305,
        .word   0x4063e7d9,     0x00000000,     0x3efbcfb8,     0x0b357154,
        .word   0x406405cf,     0x00000000,     0xbf0cb1c2,     0xd10504b4,
        .word   0x406423b0,     0x00000000,     0x3f0fa61a,     0xaa59c1d8,
        .word   0x4064417f,     0x00000000,     0x3ef26410,     0xb256d8d7,
        .word   0x40645f3b,     0x00000000,     0xbf09d77e,     0x31d6ca00,
        .word   0x40647ce3,     0x00000000,     0xbeda5fb4,     0xf23978de,
        .word   0x40649a78,     0x00000000,     0x3f02f346,     0xe2bf924b,
        .word   0x4064b7fb,     0x00000000,     0xbf0106da,     0x1aa0e9e7,
        .word   0x4064d56a,     0x00000000,     0x3f06ccf3,     0xb1129b7c,
        .word   0x4064f2c7,     0x00000000,     0x3f006a7c,     0xcf9dd420,
        .word   0x40651012,     0x00000000,     0xbf0e3dd5,     0xc1c885ae,
        .word   0x40652d49,     0x00000000,     0x3f00b91e,     0x4253bd27,
        .word   0x40654a6f,     0x00000000,     0xbf0cd6af,     0x1c9393cd,
        .word   0x40656781,     0x00000000,     0x3f0ee1ac,     0x0b1ec5ea,
        .word   0x40658482,     0x00000000,     0x3ef34c4e,     0x99e1c6c6,
        .word   0x4065a171,     0x00000000,     0xbf06d01c,     0xa8f50e5f,
        .word   0x4065be4d,     0x00000000,     0x3ed96a28,     0x6955d67e,
        .word   0x4065db17,     0x00000000,     0x3f0d4210,     0x4f127092,
        .word   0x4065f7d0,     0x00000000,     0xbed7c3ec,     0xa28e69ca,
        .word   0x40661477,     0x00000000,     0xbf07f393,     0xbdd98c47,
        .word   0x4066310c,     0x00000000,     0xbf0c2ab3,     0xedefe569,
        .word   0x40664d8f,     0x00000000,     0xbef44732,     0x0833c207,
        .word   0x40666a01,     0x00000000,     0xbf0c6e1d,     0xcd0cb449,
        .word   0x40668661,     0x00000000,     0xbefb4848,     0x3c643a24,
        .word   0x4066a2b0,     0x00000000,     0xbf08697c,     0x3d7dfd9b,
        .word   0x4066beed,     0x00000000,     0x3ef12866,     0xd705c554,
        .word   0x4066db19,     0x00000000,     0x3f0a9d86,     0x52765f7c,
        .word   0x4066f735,     0x00000000,     0xbf0d0e8e,     0x7a165e04,
        .word   0x4067133f,     0x00000000,     0xbf093aa4,     0xe106ba60,
        .word   0x40672f38,     0x00000000,     0xbf04bace,     0x940d18ba,
        .word   0x40674b20,     0x00000000,     0xbef4d8fc,     0x561c8d44,
        .word   0x406766f7,     0x00000000,     0x3ef5931e,     0xf6e6f15b,
        .word   0x406782be,     0x00000000,     0xbf000896,     0x6a210de0,
        .word   0x40679e74,     0x00000000,     0xbf05dbfe,     0x780eccdb,
        .word   0x4067ba19,     0x00000000,     0xbecb2bf4,     0x6fd85522,
        .word   0x4067d5ae,     0x00000000,     0xbefd2fc3,     0xaddfdee2,
        .word   0x4067f132,     0x00000000,     0x3ef0c167,     0x8ae89767,
        .word   0x40680ca6,     0x00000000,     0x3ef034a6,     0xfc6488d1,
        .word   0x4068280a,     0x00000000,     0xbef520c7,     0xc69211fe,
        .word   0x4068435d,     0x00000000,     0x3f05328d,     0xdcedf39e,
        .word   0x40685ea1,     0x00000000,     0xbf03d361,     0x367bde41,
        .word   0x406879d4,     0x00000000,     0xbebc2624,     0x7a0cdfbb,
        .word   0x406894f7,     0x00000000,     0x3f02c1bb,     0xe2d01ba9,
        .word   0x4068b00b,     0x00000000,     0xbf043a4a,     0xd5c7a4dd,
        .word   0x4068cb0e,     0x00000000,     0x3efda59d,     0xded9b445,
        .word   0x4068e602,     0x00000000,     0x3eb11eb3,     0x043f5602,
        .word   0x406900e6,     0x00000000,     0x3ee60002,     0xccfe43f5,
        .word   0x40691bbb,     0x00000000,     0xbf0db83a,     0x3dd2d353,
        .word   0x4069367f,     0x00000000,     0x3f0b682a,     0xcba73219,
        .word   0x40695135,     0x00000000,     0xbef53d8e,     0x8e4c59c3,
        .word   0x40696bdb,     0x00000000,     0xbef6a9a5,     0x050809db,
        .word   0x40698671,     0x00000000,     0x3f0db68e,     0x0ba15359,
        .word   0x4069a0f9,     0x00000000,     0xbef6278f,     0xd810b546,
        .word   0x4069bb71,     0x00000000,     0xbec528c6,     0xcdef4d8d,
        .word   0x4069d5da,     0x00000000,     0xbeb57f7a,     0x64ccd537,
        .word   0x4069f034,     0x00000000,     0xbee33716,     0xa9ae332f,
        .word   0x406a0a7f,     0x00000000,     0xbef2d9f7,     0x698ce769,
        .word   0x406a24bb,     0x00000000,     0xbef48c02,     0x44aa8cfc,
        .word   0x406a3ee8,     0x00000000,     0xbed8e3cf,     0xc25f0ce6,
        .word   0x406a5906,     0x00000000,     0x3f0044c5,     0x590979a0,
        .word   0x406a7316,     0x00000000,     0xbef7e86f,     0x9c2154fb,
        .word   0x406a8d17,     0x00000000,     0xbf03a076,     0x2ed351cd,
        .word   0x406aa709,     0x00000000,     0xbed4ffd6,     0x59064390,
        .word   0x406ac0ed,     0x00000000,     0xbf04d9bb,     0x3135f0b1,
        .word   0x406adac2,     0x00000000,     0xbee8ee37,     0xcd2ea9d3,
        .word   0x406af489,     0x00000000,     0xbf02ba1b,     0x4a95229c,
        .word   0x406b0e41,     0x00000000,     0x3ef35e64,     0x35ebd377,
        .word   0x406b27eb,     0x00000000,     0x3f02fe3c,     0x2291b5ad,
        .word   0x406b4187,     0x00000000,     0x3efa5480,     0x45ecbc5d,
        .word   0x406b5b15,     0x00000000,     0xbedee0d3,     0x3432f2c3,
        .word   0x406b7495,     0x00000000,     0xbf0c2ab3,     0x496d2d24,
        .word   0x406b8e06,     0x00000000,     0x3ef04439,     0x848e9d1e,
        .word   0x406ba76a,     0x00000000,     0xbf03186d,     0xa6fc41e0,
        .word   0x406bc0bf,     0x00000000,     0x3f05fc8d,     0x8164754e,
        .word   0x406bda07,     0x00000000,     0x3eecc67e,     0x6db516de,
        .word   0x406bf341,     0x00000000,     0x3ee14464,     0xa6bcdf48,
        .word   0x406c0c6d,     0x00000000,     0x3f011f17,     0x74d8b66a,
        .word   0x406c258c,     0x00000000,     0xbefd4cdb,     0xebaa4121,
        .word   0x406c3e9d,     0x00000000,     0xbf074797,     0xeab3259d,
        .word   0x406c57a0,     0x00000000,     0xbee44a49,     0xa82ed669,
        .word   0x406c7096,     0x00000000,     0xbf045b87,     0x8e27d0d9,
        .word   0x406c897e,     0x00000000,     0xbec7c929,     0xc9e33277,
        .word   0x406ca259,     0x00000000,     0xbef1ab66,     0x74e5008e,
        .word   0x406cbb26,     0x00000000,     0x3f09333f,     0x3d6bb35f,
        .word   0x406cd3e7,     0x00000000,     0xbf07cd5d,     0xbe4f6f23,
        .word   0x406cec9a,     0x00000000,     0xbf0848eb,     0x7f40a752,
        .word   0x406d053f,     0x00000000,     0x3f0b4982,     0x259cc626,
        .word   0x406d1dd8,     0x00000000,     0x3ee9b4c3,     0xf0c92723,
        .word   0x406d3664,     0x00000000,     0xbf036033,     0x8ab5a1f2,
        .word   0x406d4ee2,     0x00000000,     0x3f015971,     0x8aacb6ec,
        .word   0x406d6754,     0x00000000,     0xbeefcd15,     0xf101c142,
        .word   0x406d7fb9,     0x00000000,     0xbf0bd935,     0x64ee1bf6,
        .word   0x406d9810,     0x00000000,     0x3f090f59,     0x8530f102,
        .word   0x406db05b,     0x00000000,     0x3f0a28be,     0xd929effb,
        .word   0x406dc89a,     0x00000000,     0xbf053002,     0xa4e86631,
        .word   0x406de0cb,     0x00000000,     0x3efcb99c,     0x5233429f,
        .word   0x406df8f0,     0x00000000,     0x3ef04357,     0x9625f7a4,
        .word   0x406e1108,     0x00000000,     0x3f0b6bdd,     0x258a7b23,
        .word   0x406e2914,     0x00000000,     0x3ef70700,     0xa00fdd55,
        .word   0x406e4113,     0x00000000,     0x3f0bab95,     0x4f46b93f,
        .word   0x406e5906,     0x00000000,     0x3efe4411,     0x672b0c89,
        .word   0x406e70ed,     0x00000000,     0xbf06e041,     0xe4467502,
        .word   0x406e88c7,     0x00000000,     0xbf032765,     0x63557797,
        .word   0x406ea094,     0x00000000,     0x3f0d7b8f,     0x0e7b8e75,
        .word   0x406eb856,     0x00000000,     0xbeccd5dc,     0x13cad28e,
        .word   0x406ed00b,     0x00000000,     0x3f0222fb,     0x08d5c3f2,
        .word   0x406ee7b4,     0x00000000,     0x3f0c6cea,     0x541f5b70,
        .word   0x406eff52,     0x00000000,     0xbf0fd40b,     0x070e6c33,
        .word   0x406f16e3,     0x00000000,     0xbf0f8922,     0x73f1379b,
        .word   0x406f2e68,     0x00000000,     0xbf0fa051,     0xeebd4f74,
        .word   0x406f45e1,     0x00000000,     0xbf0d0c3e,     0x6aac6ca9,
        .word   0x406f5d4e,     0x00000000,     0xbf04c432,     0x5068bc88,
        .word   0x406f74af,     0x00000000,     0xbede20a0,     0xa450bc93,
        .word   0x406f8c04,     0x00000000,     0x3f08f3a3,     0x1a23946e,
        .word   0x406fa34e,     0x00000000,     0x3ee177c2,     0x3362928c,
        .word   0x406fba8c,     0x00000000,     0x3ec71513,     0x7cfebaa0,
        .word   0x406fd1be,     0x00000000,     0x3f031fca,     0xbe50ac88,
        .word   0x406fe8e5,     0x00000000,     0xbedd485c,     0xbfb44c3b,
!
        .word   0x01a56e1f,     0xc2f8f359,     ! _TINY = 1.0e-300
        .word   0x7e37e43c,     0x8800759c,     ! _HUGE = 1.0e+300
        .word   0x3f6d94ae,     0x0bf85de6,     ! KA1_LO  = (1.41052154268147309568e-05*256)
        .word   0x40871540,     0x00000000,     ! KA1_HI  = (2.8853759765625e+00*256)
        .word   0x3cd5d528,     0x93bc7fec,     ! KB5     = 1.21195555854068860923e-15
        .word   0x3e2c6b08,     0xd71f5d1e,     ! KB3     = 3.30830268126604677436e-09
        .word   0x3ecebfbd,     0xff82c4ed,     ! KB2     = 3.66556559691003767877e-06
        .word   0x3f662e42,     0xfefa39ef,     ! KB1     = 2.70760617406228636578e-03
!
! __mt_constexp2[2*i] = high order bits 2^(i/256), i = [0, 255]
! __mt_constexp2[2*i+1] = least bits 2^(i/256), i = [0, 255]

        .word   0x3ff00000,     0x00000000,     0x00000000,     0x00000000,
        .word   0x3ff00b1a,     0xfa5abcbf,     0xbc84f6b2,     0xa7609f71,
        .word   0x3ff0163d,     0xa9fb3335,     0x3c9b6129,     0x9ab8cdb7,
        .word   0x3ff02168,     0x143b0281,     0xbc82bf31,     0x0fc54eb6,
        .word   0x3ff02c9a,     0x3e778061,     0xbc719083,     0x535b085d,
        .word   0x3ff037d4,     0x2e11bbcc,     0x3c656811,     0xeeade11a,
        .word   0x3ff04315,     0xe86e7f85,     0xbc90a31c,     0x1977c96e,
        .word   0x3ff04e5f,     0x72f654b1,     0x3c84c379,     0x3aa0d08c,
        .word   0x3ff059b0,     0xd3158574,     0x3c8d73e2,     0xa475b465,
        .word   0x3ff0650a,     0x0e3c1f89,     0xbc95cb7b,     0x5799c397,
        .word   0x3ff0706b,     0x29ddf6de,     0xbc8c91df,     0xe2b13c27,
        .word   0x3ff07bd4,     0x2b72a836,     0x3c832334,     0x54458700,
        .word   0x3ff08745,     0x18759bc8,     0x3c6186be,     0x4bb284ff,
        .word   0x3ff092bd,     0xf66607e0,     0xbc968063,     0x800a3fd1,
        .word   0x3ff09e3e,     0xcac6f383,     0x3c914878,     0x18316136,
        .word   0x3ff0a9c7,     0x9b1f3919,     0x3c85d16c,     0x873d1d38,
        .word   0x3ff0b558,     0x6cf9890f,     0x3c98a62e,     0x4adc610b,
        .word   0x3ff0c0f1,     0x45e46c85,     0x3c94f989,     0x06d21cef,
        .word   0x3ff0cc92,     0x2b7247f7,     0x3c901edc,     0x16e24f71,
        .word   0x3ff0d83b,     0x23395dec,     0xbc9bc14d,     0xe43f316a,
        .word   0x3ff0e3ec,     0x32d3d1a2,     0x3c403a17,     0x27c57b52,
        .word   0x3ff0efa5,     0x5fdfa9c5,     0xbc949db9,     0xbc54021b,
        .word   0x3ff0fb66,     0xaffed31b,     0xbc6b9bed,     0xc44ebd7b,
        .word   0x3ff10730,     0x28d7233e,     0x3c8d46eb,     0x1692fdd5,
        .word   0x3ff11301,     0xd0125b51,     0xbc96c510,     0x39449b3a,
        .word   0x3ff11edb,     0xab5e2ab6,     0xbc9ca454,     0xf703fb72,
        .word   0x3ff12abd,     0xc06c31cc,     0xbc51b514,     0xb36ca5c7,
        .word   0x3ff136a8,     0x14f204ab,     0xbc67108f,     0xba48dcf0,
        .word   0x3ff1429a,     0xaea92de0,     0xbc932fbf,     0x9af1369e,
        .word   0x3ff14e95,     0x934f312e,     0xbc8b91e8,     0x39bf44ab,
        .word   0x3ff15a98,     0xc8a58e51,     0x3c82406a,     0xb9eeab0a,
        .word   0x3ff166a4,     0x5471c3c2,     0x3c58f23b,     0x82ea1a32,
        .word   0x3ff172b8,     0x3c7d517b,     0xbc819041,     0xb9d78a76,
        .word   0x3ff17ed4,     0x8695bbc0,     0x3c709e3f,     0xe2ac5a64,
        .word   0x3ff18af9,     0x388c8dea,     0xbc911023,     0xd1970f6c,
        .word   0x3ff19726,     0x58375d2f,     0x3c94aadd,     0x85f17e08,
        .word   0x3ff1a35b,     0xeb6fcb75,     0x3c8e5b4c,     0x7b4968e4,
        .word   0x3ff1af99,     0xf8138a1c,     0x3c97bf85,     0xa4b69280,
        .word   0x3ff1bbe0,     0x84045cd4,     0xbc995386,     0x352ef607,
        .word   0x3ff1c82f,     0x95281c6b,     0x3c900977,     0x8010f8c9,
        .word   0x3ff1d487,     0x3168b9aa,     0x3c9e016e,     0x00a2643c,
        .word   0x3ff1e0e7,     0x5eb44027,     0xbc96fdd8,     0x088cb6de,
        .word   0x3ff1ed50,     0x22fcd91d,     0xbc91df98,     0x027bb78c,
        .word   0x3ff1f9c1,     0x8438ce4d,     0xbc9bf524,     0xa097af5c,
        .word   0x3ff2063b,     0x88628cd6,     0x3c8dc775,     0x814a8495,
        .word   0x3ff212be,     0x3578a819,     0x3c93592d,     0x2cfcaac9,
        .word   0x3ff21f49,     0x917ddc96,     0x3c82a97e,     0x9494a5ee,
        .word   0x3ff22bdd,     0xa27912d1,     0x3c8d34fb,     0x5577d69f,
        .word   0x3ff2387a,     0x6e756238,     0x3c99b07e,     0xb6c70573,
        .word   0x3ff2451f,     0xfb82140a,     0x3c8acfcc,     0x911ca996,
        .word   0x3ff251ce,     0x4fb2a63f,     0x3c8ac155,     0xbef4f4a4,
        .word   0x3ff25e85,     0x711ece75,     0x3c93e1a2,     0x4ac31b2c,
        .word   0x3ff26b45,     0x65e27cdd,     0x3c82bd33,     0x9940e9d9,
        .word   0x3ff2780e,     0x341ddf29,     0x3c9e067c,     0x05f9e76c,
        .word   0x3ff284df,     0xe1f56381,     0xbc9a4c3a,     0x8c3f0d7e,
        .word   0x3ff291ba,     0x7591bb70,     0xbc82cc72,     0x28401cbd,
        .word   0x3ff29e9d,     0xf51fdee1,     0x3c8612e8,     0xafad1255,
        .word   0x3ff2ab8a,     0x66d10f13,     0xbc995743,     0x191690a7,
        .word   0x3ff2b87f,     0xd0dad990,     0xbc410adc,     0xd6381aa4,
        .word   0x3ff2c57e,     0x39771b2f,     0xbc950145,     0xa6eb5124,
        .word   0x3ff2d285,     0xa6e4030b,     0x3c900247,     0x54db41d5,
        .word   0x3ff2df96,     0x1f641589,     0x3c9d16cf,     0xfbbce198,
        .word   0x3ff2ecaf,     0xa93e2f56,     0x3c71ca0f,     0x45d52383,
        .word   0x3ff2f9d2,     0x4abd886b,     0xbc653c55,     0x532bda93,
        .word   0x3ff306fe,     0x0a31b715,     0x3c86f46a,     0xd23182e4,
        .word   0x3ff31432,     0xedeeb2fd,     0x3c8959a3,     0xf3f3fcd1,
        .word   0x3ff32170,     0xfc4cd831,     0x3c8a9ce7,     0x8e18047c,
        .word   0x3ff32eb8,     0x3ba8ea32,     0xbc9c45e8,     0x3cb4f318,
        .word   0x3ff33c08,     0xb26416ff,     0x3c932721,     0x843659a6,
        .word   0x3ff34962,     0x66e3fa2d,     0xbc835a75,     0x930881a4,
        .word   0x3ff356c5,     0x5f929ff1,     0xbc8b5cee,     0x5c4e4628,
        .word   0x3ff36431,     0xa2de883b,     0xbc8c3144,     0xa06cb85e,
        .word   0x3ff371a7,     0x373aa9cb,     0xbc963aea,     0xbf42eae2,
        .word   0x3ff37f26,     0x231e754a,     0xbc99f5ca,     0x9eceb23c,
        .word   0x3ff38cae,     0x6d05d866,     0xbc9e958d,     0x3c9904bd,
        .word   0x3ff39a40,     0x1b7140ef,     0xbc99a9a5,     0xfc8e2934,
        .word   0x3ff3a7db,     0x34e59ff7,     0xbc75e436,     0xd661f5e3,
        .word   0x3ff3b57f,     0xbfec6cf4,     0x3c954c66,     0xe26fff18,
        .word   0x3ff3c32d,     0xc313a8e5,     0xbc9efff8,     0x375d29c3,
        .word   0x3ff3d0e5,     0x44ede173,     0x3c7fe8d0,     0x8c284c71,
        .word   0x3ff3dea6,     0x4c123422,     0x3c8ada09,     0x11f09ebc,
        .word   0x3ff3ec70,     0xdf1c5175,     0xbc8af663,     0x7b8c9bca,
        .word   0x3ff3fa45,     0x04ac801c,     0xbc97d023,     0xf956f9f3,
        .word   0x3ff40822,     0xc367a024,     0x3c8bddf8,     0xb6f4d048,
        .word   0x3ff4160a,     0x21f72e2a,     0xbc5ef369,     0x1c309278,
        .word   0x3ff423fb,     0x2709468a,     0xbc98462d,     0xc0b314dd,
        .word   0x3ff431f5,     0xd950a897,     0xbc81c7dd,     0xe35f7999,
        .word   0x3ff43ffa,     0x3f84b9d4,     0x3c8880be,     0x9704c003,
        .word   0x3ff44e08,     0x6061892d,     0x3c489b7a,     0x04ef80d0,
        .word   0x3ff45c20,     0x42a7d232,     0xbc686419,     0x82fb1f8e,
        .word   0x3ff46a41,     0xed1d0057,     0x3c9c944b,     0xd1648a76,
        .word   0x3ff4786d,     0x668b3237,     0xbc9c20f0,     0xed445733,
        .word   0x3ff486a2,     0xb5c13cd0,     0x3c73c1a3,     0xb69062f0,
        .word   0x3ff494e1,     0xe192aed2,     0xbc83b289,     0x5e499ea0,
        .word   0x3ff4a32a,     0xf0d7d3de,     0x3c99cb62,     0xf3d1be56,
        .word   0x3ff4b17d,     0xea6db7d7,     0xbc8125b8,     0x7f2897f0,
        .word   0x3ff4bfda,     0xd5362a27,     0x3c7d4397,     0xafec42e2,
        .word   0x3ff4ce41,     0xb817c114,     0x3c905e29,     0x690abd5d,
        .word   0x3ff4dcb2,     0x99fddd0d,     0x3c98ecdb,     0xbc6a7833,
        .word   0x3ff4eb2d,     0x81d8abff,     0xbc95257d,     0x2e5d7a52,
        .word   0x3ff4f9b2,     0x769d2ca7,     0xbc94b309,     0xd25957e3,
        .word   0x3ff50841,     0x7f4531ee,     0x3c7a249b,     0x49b7465f,
        .word   0x3ff516da,     0xa2cf6642,     0xbc8f7685,     0x69bd93ef,
        .word   0x3ff5257d,     0xe83f4eef,     0xbc7c998d,     0x43efef71,
        .word   0x3ff5342b,     0x569d4f82,     0xbc807abe,     0x1db13cad,
        .word   0x3ff542e2,     0xf4f6ad27,     0x3c87926d,     0x192d5f7e,
        .word   0x3ff551a4,     0xca5d920f,     0xbc8d689c,     0xefede59b,
        .word   0x3ff56070,     0xdde910d2,     0xbc90fb6e,     0x168eebf0,
        .word   0x3ff56f47,     0x36b527da,     0x3c99bb2c,     0x011d93ad,
        .word   0x3ff57e27,     0xdbe2c4cf,     0xbc90b98c,     0x8a57b9c4,
        .word   0x3ff58d12,     0xd497c7fd,     0x3c8295e1,     0x5b9a1de8,
        .word   0x3ff59c08,     0x27ff07cc,     0xbc97e2ce,     0xe467e60f,
        .word   0x3ff5ab07,     0xdd485429,     0x3c96324c,     0x054647ad,
        .word   0x3ff5ba11,     0xfba87a03,     0xbc9b77a1,     0x4c233e1a,
        .word   0x3ff5c926,     0x8a5946b7,     0x3c3c4b1b,     0x816986a2,
        .word   0x3ff5d845,     0x90998b93,     0xbc9cd6a7,     0xa8b45643,
        .word   0x3ff5e76f,     0x15ad2148,     0x3c9ba6f9,     0x3080e65e,
        .word   0x3ff5f6a3,     0x20dceb71,     0xbc89eadd,     0xe3cdcf92,
        .word   0x3ff605e1,     0xb976dc09,     0xbc93e242,     0x9b56de47,
        .word   0x3ff6152a,     0xe6cdf6f4,     0x3c9e4b3e,     0x4ab84c27,
        .word   0x3ff6247e,     0xb03a5585,     0xbc9383c1,     0x7e40b497,
        .word   0x3ff633dd,     0x1d1929fd,     0x3c984710,     0xbeb964e5,
        .word   0x3ff64346,     0x34ccc320,     0xbc8c483c,     0x759d8933,
        .word   0x3ff652b9,     0xfebc8fb7,     0xbc9ae3d5,     0xc9a73e09,
        .word   0x3ff66238,     0x82552225,     0xbc9bb609,     0x87591c34,
        .word   0x3ff671c1,     0xc70833f6,     0xbc8e8732,     0x586c6134,
        .word   0x3ff68155,     0xd44ca973,     0x3c6038ae,     0x44f73e65,
        .word   0x3ff690f4,     0xb19e9538,     0x3c8804bd,     0x9aeb445d,
        .word   0x3ff6a09e,     0x667f3bcd,     0xbc9bdd34,     0x13b26456,
        .word   0x3ff6b052,     0xfa75173e,     0x3c7a38f5,     0x2c9a9d0e,
        .word   0x3ff6c012,     0x750bdabf,     0xbc728956,     0x67ff0b0d,
        .word   0x3ff6cfdc,     0xddd47645,     0x3c9c7aa9,     0xb6f17309,
        .word   0x3ff6dfb2,     0x3c651a2f,     0xbc6bbe3a,     0x683c88ab,
        .word   0x3ff6ef92,     0x98593ae5,     0xbc90b974,     0x9e1ac8b2,
        .word   0x3ff6ff7d,     0xf9519484,     0xbc883c0f,     0x25860ef6,
        .word   0x3ff70f74,     0x66f42e87,     0x3c59d644,     0xd45aa65f,
        .word   0x3ff71f75,     0xe8ec5f74,     0xbc816e47,     0x86887a99,
        .word   0x3ff72f82,     0x86ead08a,     0xbc920aa0,     0x2cd62c72,
        .word   0x3ff73f9a,     0x48a58174,     0xbc90a8d9,     0x6c65d53c,
        .word   0x3ff74fbd,     0x35d7cbfd,     0x3c9047fd,     0x618a6e1c,
        .word   0x3ff75feb,     0x564267c9,     0xbc902459,     0x57316dd3,
        .word   0x3ff77024,     0xb1ab6e09,     0x3c9b7877,     0x169147f8,
        .word   0x3ff78069,     0x4fde5d3f,     0x3c9866b8,     0x0a02162d,
        .word   0x3ff790b9,     0x38ac1cf6,     0x3c9349a8,     0x62aadd3e,
        .word   0x3ff7a114,     0x73eb0187,     0xbc841577,     0xee04992f,
        .word   0x3ff7b17b,     0x0976cfdb,     0xbc9bebb5,     0x8468dc88,
        .word   0x3ff7c1ed,     0x0130c132,     0x3c9f124c,     0xd1164dd6,
        .word   0x3ff7d26a,     0x62ff86f0,     0x3c91bddb,     0xfb72b8b4,
        .word   0x3ff7e2f3,     0x36cf4e62,     0x3c705d02,     0xba15797e,
        .word   0x3ff7f387,     0x8491c491,     0xbc807f11,     0xcf9311ae,
        .word   0x3ff80427,     0x543e1a12,     0xbc927c86,     0x626d972b,
        .word   0x3ff814d2,     0xadd106d9,     0x3c946437,     0x0d151d4d,
        .word   0x3ff82589,     0x994cce13,     0xbc9d4c1d,     0xd41532d8,
        .word   0x3ff8364c,     0x1eb941f7,     0x3c999b9a,     0x31df2bd5,
        .word   0x3ff8471a,     0x4623c7ad,     0xbc88d684,     0xa341cdfb,
        .word   0x3ff857f4,     0x179f5b21,     0xbc5ba748,     0xf8b216d0,
        .word   0x3ff868d9,     0x9b4492ed,     0xbc9fc6f8,     0x9bd4f6ba,
        .word   0x3ff879ca,     0xd931a436,     0x3c85d2d7,     0xd2db47bd,
        .word   0x3ff88ac7,     0xd98a6699,     0x3c9994c2,     0xf37cb53a,
        .word   0x3ff89bd0,     0xa478580f,     0x3c9d5395,     0x4475202a,
        .word   0x3ff8ace5,     0x422aa0db,     0x3c96e9f1,     0x56864b27,
        .word   0x3ff8be05,     0xbad61778,     0x3c9ecb5e,     0xfc43446e,
        .word   0x3ff8cf32,     0x16b5448c,     0xbc70d55e,     0x32e9e3aa,
        .word   0x3ff8e06a,     0x5e0866d9,     0xbc97114a,     0x6fc9b2e6,
        .word   0x3ff8f1ae,     0x99157736,     0x3c85cc13,     0xa2e3976c,
        .word   0x3ff902fe,     0xd0282c8a,     0x3c9592ca,     0x85fe3fd2,
        .word   0x3ff9145b,     0x0b91ffc6,     0xbc9dd679,     0x2e582524,
        .word   0x3ff925c3,     0x53aa2fe2,     0xbc83455f,     0xa639db7f,
        .word   0x3ff93737,     0xb0cdc5e5,     0xbc675fc7,     0x81b57ebc,
        .word   0x3ff948b8,     0x2b5f98e5,     0xbc8dc3d6,     0x797d2d99,
        .word   0x3ff95a44,     0xcbc8520f,     0xbc764b7c,     0x96a5f039,
        .word   0x3ff96bdd,     0x9a7670b3,     0xbc5ba596,     0x7f19c896,
        .word   0x3ff97d82,     0x9fde4e50,     0xbc9d185b,     0x7c1b85d1,
        .word   0x3ff98f33,     0xe47a22a2,     0x3c7cabda,     0xa24c78ec,
        .word   0x3ff9a0f1,     0x70ca07ba,     0xbc9173bd,     0x91cee632,
        .word   0x3ff9b2bb,     0x4d53fe0d,     0xbc9dd84e,     0x4df6d518,
        .word   0x3ff9c491,     0x82a3f090,     0x3c7c7c46,     0xb071f2be,
        .word   0x3ff9d674,     0x194bb8d5,     0xbc9516be,     0xa3dd8233,
        .word   0x3ff9e863,     0x19e32323,     0x3c7824ca,     0x78e64c6e,
        .word   0x3ff9fa5e,     0x8d07f29e,     0xbc84a9ce,     0xaaf1face,
        .word   0x3ffa0c66,     0x7b5de565,     0xbc935949,     0x5d1cd533,
        .word   0x3ffa1e7a,     0xed8eb8bb,     0x3c9c6618,     0xee8be70e,
        .word   0x3ffa309b,     0xec4a2d33,     0x3c96305c,     0x7ddc36ab,
        .word   0x3ffa42c9,     0x80460ad8,     0xbc9aa780,     0x589fb120,
        .word   0x3ffa5503,     0xb23e255d,     0xbc9d2f6e,     0xdb8d41e1,
        .word   0x3ffa674a,     0x8af46052,     0x3c650f56,     0x30670366,
        .word   0x3ffa799e,     0x1330b358,     0x3c9bcb7e,     0xcac563c7,
        .word   0x3ffa8bfe,     0x53c12e59,     0xbc94f867,     0xb2ba15a9,
        .word   0x3ffa9e6b,     0x5579fdbf,     0x3c90fac9,     0x0ef7fd31,
        .word   0x3ffab0e5,     0x21356eba,     0x3c889c31,     0xdae94545,
        .word   0x3ffac36b,     0xbfd3f37a,     0xbc8f9234,     0xcae76cd0,
        .word   0x3ffad5ff,     0x3a3c2774,     0x3c97ef3b,     0xb6b1b8e5,
        .word   0x3ffae89f,     0x995ad3ad,     0x3c97a1cd,     0x345dcc81,
        .word   0x3ffafb4c,     0xe622f2ff,     0xbc94b2fc,     0x0f315ecd,
        .word   0x3ffb0e07,     0x298db666,     0xbc9bdef5,     0x4c80e425,
        .word   0x3ffb20ce,     0x6c9a8952,     0x3c94dd02,     0x4a0756cc,
        .word   0x3ffb33a2,     0xb84f15fb,     0xbc62805e,     0x3084d708,
        .word   0x3ffb4684,     0x15b749b1,     0xbc7f763d,     0xe9df7c90,
        .word   0x3ffb5972,     0x8de5593a,     0xbc9c71df,     0xbbba6de3,
        .word   0x3ffb6c6e,     0x29f1c52a,     0x3c92a8f3,     0x52883f6e,
        .word   0x3ffb7f76,     0xf2fb5e47,     0xbc75584f,     0x7e54ac3b,
        .word   0x3ffb928c,     0xf22749e4,     0xbc9b7216,     0x54cb65c6,
        .word   0x3ffba5b0,     0x30a1064a,     0xbc9efcd3,     0x0e54292e,
        .word   0x3ffbb8e0,     0xb79a6f1f,     0xbc3f52d1,     0xc9696205,
        .word   0x3ffbcc1e,     0x904bc1d2,     0x3c823dd0,     0x7a2d9e84,
        .word   0x3ffbdf69,     0xc3f3a207,     0xbc3c2623,     0x60ea5b52,
        .word   0x3ffbf2c2,     0x5bd71e09,     0xbc9efdca,     0x3f6b9c73,
        .word   0x3ffc0628,     0x6141b33d,     0xbc8d8a5a,     0xa1fbca34,
        .word   0x3ffc199b,     0xdd85529c,     0x3c811065,     0x895048dd,
        .word   0x3ffc2d1c,     0xd9fa652c,     0xbc96e516,     0x17c8a5d7,
        .word   0x3ffc40ab,     0x5fffd07a,     0x3c9b4537,     0xe083c60a,
        .word   0x3ffc5447,     0x78fafb22,     0x3c912f07,     0x2493b5af,
        .word   0x3ffc67f1,     0x2e57d14b,     0x3c92884d,     0xff483cad,
        .word   0x3ffc7ba8,     0x8988c933,     0xbc8e76bb,     0xbe255559,
        .word   0x3ffc8f6d,     0x9406e7b5,     0x3c71acbc,     0x48805c44,
        .word   0x3ffca340,     0x5751c4db,     0xbc87f2be,     0xd10d08f5,
        .word   0x3ffcb720,     0xdcef9069,     0x3c7503cb,     0xd1e949db,
        .word   0x3ffccb0f,     0x2e6d1675,     0xbc7d220f,     0x86009092,
        .word   0x3ffcdf0b,     0x555dc3fa,     0xbc8dd83b,     0x53829d72,
        .word   0x3ffcf315,     0x5b5bab74,     0xbc9a08e9,     0xb86dff57,
        .word   0x3ffd072d,     0x4a07897c,     0xbc9cbc37,     0x43797a9c,
        .word   0x3ffd1b53,     0x2b08c968,     0x3c955636,     0x219a36ee,
        .word   0x3ffd2f87,     0x080d89f2,     0xbc9d487b,     0x719d8578,
        .word   0x3ffd43c8,     0xeacaa1d6,     0x3c93db53,     0xbf5a1614,
        .word   0x3ffd5818,     0xdcfba487,     0x3c82ed02,     0xd75b3707,
        .word   0x3ffd6c76,     0xe862e6d3,     0x3c5fe87a,     0x4a8165a0,
        .word   0x3ffd80e3,     0x16c98398,     0xbc911ec1,     0x8beddfe8,
        .word   0x3ffd955d,     0x71ff6075,     0x3c9a052d,     0xbb9af6be,
        .word   0x3ffda9e6,     0x03db3285,     0x3c9c2300,     0x696db532,
        .word   0x3ffdbe7c,     0xd63a8315,     0xbc9b76f1,     0x926b8be4,
        .word   0x3ffdd321,     0xf301b460,     0x3c92da57,     0x78f018c3,
        .word   0x3ffde7d5,     0x641c0658,     0xbc9ca552,     0x8e79ba8f,
        .word   0x3ffdfc97,     0x337b9b5f,     0xbc91a5cd,     0x4f184b5c,
        .word   0x3ffe1167,     0x6b197d17,     0xbc72b529,     0xbd5c7f44,
        .word   0x3ffe2646,     0x14f5a129,     0xbc97b627,     0x817a1496,
        .word   0x3ffe3b33,     0x3b16ee12,     0xbc99f4a4,     0x31fdc68b,
        .word   0x3ffe502e,     0xe78b3ff6,     0x3c839e89,     0x80a9cc8f,
        .word   0x3ffe6539,     0x24676d76,     0xbc863ff8,     0x7522b735,
        .word   0x3ffe7a51,     0xfbc74c83,     0x3c92d522,     0xca0c8de2,
        .word   0x3ffe8f79,     0x77cdb740,     0xbc910894,     0x80b054b1,
        .word   0x3ffea4af,     0xa2a490da,     0xbc9e9c23,     0x179c2893,
        .word   0x3ffeb9f4,     0x867cca6e,     0x3c94832f,     0x2293e4f2,
        .word   0x3ffecf48,     0x2d8e67f1,     0xbc9c93f3,     0xb411ad8c,
        .word   0x3ffee4aa,     0xa2188510,     0x3c91c68d,     0xa487568d,
        .word   0x3ffefa1b,     0xee615a27,     0x3c9dc7f4,     0x86a4b6b0,
        .word   0x3fff0f9c,     0x1cb6412a,     0xbc932200,     0x65181d45,
        .word   0x3fff252b,     0x376bba97,     0x3c93a1a5,     0xbf0d8e43,
        .word   0x3fff3ac9,     0x48dd7274,     0xbc795a5a,     0x3ed837de,
        .word   0x3fff5076,     0x5b6e4540,     0x3c99d3e1,     0x2dd8a18b,
        .word   0x3fff6632,     0x798844f8,     0x3c9fa37b,     0x3539343e,
        .word   0x3fff7bfd,     0xad9cbe14,     0xbc9dbb12,     0xd006350a,
        .word   0x3fff91d8,     0x02243c89,     0xbc612ea8,     0xa779f689,
        .word   0x3fffa7c1,     0x819e90d8,     0x3c874853,     0xf3a5931e,
        .word   0x3fffbdba,     0x3692d514,     0xbc796773,     0x15098eb6,
        .word   0x3fffd3c2,     0x2b8f71f1,     0x3c62eb74,     0x966579e7,
        .word   0x3fffe9d9,     0x6b2a23d9,     0x3c74a603,     0x7442fde3,
!
        .word   0x3c900000,     0x00000000,     ! 2**(-54) = 5.551115123125782702e-17
        .word   0x3ff00000,     0x00000000,     ! DONE = 1.0
        .word   0x43300000,     0x00000000,     ! DVAIN52 = 2**52 = 4.503599627370496e15
        .word   0xffffffff,     0x00000000,     ! MHI32   = 0xffffffff00000000
        .word   0x4062776d,     0x8ce329bd,     ! KA5     = (5.77078604860893737986e-01*256)
        .word   0x406ec709,     0xdc39fc99,     ! KA3     = (9.61796693925765549423e-01*256)
        .word   0x40871547,     0x652b82fe,     ! KA1     = (2.885390081777926774e+00*256)
        .word   0x41100000,     0x00000000,     ! HTHRESH = 262144.0
        .word   0xc110cc00,     0x00000000,     ! LTHRESH = -275200.0
        .word   0x3d83b2ab,     0xc07c93d0,     ! KB4     = 2.23939573811855104311e-12
        .word   0x000fffff,     0xffffffff,     ! MMANT
        .word   0x00000800,     0x00000000,     ! MROUND
        .word   0xfffff000,     0x00000000,     ! MHI20

! local storage indices
#define tmp0_lo         STACK_BIAS-4
#define tmp0_hi         STACK_BIAS-8
#define tmp1_lo         STACK_BIAS-12
#define tmp1_hi         STACK_BIAS-16
#define tmp2_lo         STACK_BIAS-20
#define tmp2_hi         STACK_BIAS-24
#define tmp3            STACK_BIAS-28
#define tmp4            STACK_BIAS-32
#define ind_buf         STACK_BIAS-48
#define tmp_counter     STACK_BIAS-56
#define tmp_px          STACK_BIAS-64
#define tmp_py          STACK_BIAS-72
#define tmp_mant        STACK_BIAS-80
#define tmp5            STACK_BIAS-88
#define tmp6            STACK_BIAS-96

! sizeof temp storage - must be a multiple of 16 for V9
#define tmps            96

#define LOGTBL          %g5
#define EXPTBL          %g1
#define EXPTBL_P8       %l4

#define MASK_0x7fffffff %o4
#define MASK_0x000fffff %o3
#define MASK_0x3ff00000 %o1

#define counter         %i0
#define px              %i1
#define stridex         %l5
#define py              %i3
#define stridey         %l6
#define pz              %i5
#define stridez         %l7

#define HTHRESH         %f0
#define LTHRESH         %f2

#define MHI32           %f38
#define KA1_LO          %f40
#define KA1_HI          %f40

#define KB1             %f42
#define KB2             %f42
#define KB3             %f42
#define KB4             %f44
#define KB5             %f42

#define KA1             %f46
#define KA3             %f28
#define KA5             %f50

#define DZERO           %f24
#define DZERO_HI        %f24
#define DZERO_LO        %f25
#define DONE            %f18
#define DONE_HI         %f18
#define DONE_LO         %f19

#define XKB1            %f42
#define XKB2            %f40
#define XKB3            %f32
#define XKB4            %f36
#define XKB5            %f34

#define s_h             %f46
#define yr              %f30

#define ind_TINY        64
#define ind_HUGE        56
#define ind_LO          48
#define ind_HI          40
#define ind_KB5         32
#define ind_KB3         24
#define ind_KB2         16
#define ind_KB1         8

!--------------------------------------------------------------------
!               !!!!!   vpow algorithm  !!!!!
!
!  hx = ((unsigned*)px)[0];
!  lx = ((unsigned*)px)[1];
!  hy = ((unsigned*)py)[0];
!  ly = ((unsigned*)py)[1];
!  sx = hx >> 31;
!  sy = hy >> 31;
!  hx &= 0x7fffffff;
!  hy &= 0x7fffffff;
!  y0 = *px;
!
!  if (hy < 0x3bf00000) {                                               /* |Y| < 2^(-64) */
!    if ((hy | ly) == 0) {                                              /* pow(X,0)      */
!      *pz = DONE;
!      goto next;
!    }
!    if (hx > 0x7ff00000 || (hx == 0x7ff00000 && lx != 0)) {            /* |X| = Nan     */
!      *pz = y0 * y0;
!      goto next;
!    }
!    else if ((hx | lx) == 0 || (hx == 0x7ff00000 && lx == 0)) {        /* X = 0 or Inf  */
!      ((int*)pz)[0] = hx;
!      ((int*)pz)[1] = lx;
!      if (sy) *pz = DONE / *pz;
!      goto next;
!    }
!    else *pz = (sx) ? DZERO / DZERO : DONE;
!      goto next;
!  }
!  yisint = 0; /* Y - non-integer */
!  expy = hy >> 20; /* Y exponent */
!
!  if (hx >= 0x7ff00000 || expy >= 0x43e) {                     /* X=Inf,Nan or |Y|>2^63,Inf,Nan */
!    if (hx > 0x7ff00000 || (hx == 0x7ff00000 && lx != 0) ||
!        hy > 0x7ff00000 || (hy == 0x7ff00000 && ly != 0))
!      *pz = y0 * *py; /* |X| or |Y| = Nan */
!      goto next;
!    if (hy == 0x7ff00000 && (ly == 0)) { /* |Y| = Inf */
!      if (hx == 0x3ff00000 && (lx == 0))
!        *pz = *py - *py; /* +-1 ** +-Inf */
!      else if ((hx < 0x3ff00000) != sy)
!        *pz = DZERO;
!      else {
!        ((int*)pz)[0] = hy;
!        ((int*)pz)[1] = ly;
!      }
!      goto next;
!    }
!    if (expy < 0x43e) {                                                /* |Y| < 2^63   */
!      if (sx) {                                                        /* X = -Inf     */
!        if (expy >= 0x434)                                             /* |Y| >= 2^53  */
!          yisint##I = 2;                                               /* Y - even     */
!        else {
!          if (expy >= 0x3ff) {                                         /* |Y| >= 1     */
!            if (expy > (20 + 0x3ff)) {
!              i0 = ly >> (52 - (expy - 0x3ff));
!              if ((i0 << (52 - (expy - 0x3ff))) == ly) yisint = 2 - (i0 & 1);
!            }
!            else if (ly == 0) {
!              i0 = hy >> (20 - (expy - 0x3ff));
!              if ((i0 << (20 - (expy - 0x3ff))) == hy) yisint = 2 - (i0 & 1);
!            }
!          }
!        }
!      }
!      if (sy) hx = lx = 0;
!      hx += yisint << 31;
!      ((int*)pz)[0] = hx;
!      ((int*)pz)[1] = lx;
!      goto next;
!    }
!    else {                                                             /* |Y| >= 2^63     */
!      if (lx == 0 &&                                                   /* |X| = 0, 1, Inf */
!         (hx == 0 || hx == 0x3ff00000 || hx == 0x7ff00000)) {
!        ((int*)pz)[0] = hx;
!        ((int*)pz)[1] = lx;
!        if (sy) *pz = DONE / *pz;
!      }
!      else {
!        y0 = ((hx < 0x3ff00000) != sy) ? _TINY : _HUGE;
!        *pz = y0 * y0;
!      }
!      goto next;
!    }
!  }
!  if (sx || (hx | lx) == 0) {                                          /* X <= 0      */
!    if (expy >= 0x434)                                                 /* |Y| >= 2^53 */
!      yisint = 2;                                                      /* Y - even    */
!    else {
!      if (expy >= 0x3ff) {                                             /* |Y| >= 1    */
!        if (expy > (20 + 0x3ff)) {
!          i0 = ly >> (52 - (expy - 0x3ff));
!          if ((i0 << (52 - (expy - 0x3ff))) == ly) yisint = 2 - (i0 & 1);
!        }
!        else if (ly == 0) {
!          i0 = hy >> (20 - (expy - 0x3ff));
!          if ((i0 << (20 - (expy - 0x3ff))) == hy) yisint = 2 - (i0 & 1);
!        }
!      }
!    }
!    if ((hx | lx) == 0) {                                              /* X == 0  */
!      y0 = DZERO;
!      if (sy) y0 = DONE / y0;
!      if (sx & yisint) y0 = -y0;
!      *pz = y0;
!      goto next;
!    }
!    if (yisint == 0) {                                                 /* pow(neg,non-integer) */
!      *pz = DZERO / DZERO;                                             /* NaN */
!      goto next;
!    }
!  }
!
!  *((int*)&x + 1) = ((unsigned*)px)[1];
!  *((int*)&ax + 1) = 0;
!  exp = hx;
!  hx &= 0xfffff;
!  hx |= 0x3ff00000;
!  *(int*)&x = hx;
!  hx += 0x800;
!  hx &= 0xfffff000;
!  *(int*)&ax = hx;
!  if (exp <= 0xfffff) {
!    y0 = vis_fand(x, MMANT);
!    ax = (double) ((long long *) & y0)[0];
!    x = vis_fand(ax, MMANT);
!    x = vis_for(x, DONE);
!    exp = ((unsigned int*) & ax)[0];
!    exp -= (1023 + 51) << 20;
!    hx = exp & 0xfffff;
!    hx |= 0x3ff00000;
!    hx += 0x800;
!    *(int*)&ax = hx;
!  }
!  exp = (exp >> 20);
!  exp = exp - 2046;
!  ux = x + ax;
!  yd = DONE / ux;
!  u = x - ax;
!  s = u * yd;
!  ux = vis_fand(ux, MHI32);
!  y = s * s;
!  s_h = vis_fand(s, MHI32);
!  dtmp8 = KA5 * y;
!  dtmp8 = dtmp8 + KA3;
!  dtmp8 = dtmp8 * y;
!  s = dtmp8 * s;
!  dtmp0 = (ux - ax);
!  s_l = (x - dtmp0);
!  dtmp0 = s_h * ux;
!  dtmp1 = s_h * s_l;
!  s_l = u - dtmp0;
!  s_l -= dtmp1;
!  dtmp0 = KA1 * yd;
!  s_l = dtmp0 * s_l;
!  i = (hx >> 8);
!  i = i & 0xff0;
!  itmp0 = (hx >> 20);
!  exp += itmp0;
!  yd = KA1_HI * s_h;
!  y = *(double *)((char*)__mt_constlog2 + i);
!  itmp0 = exp << 8;
!  y += (double)itmp0;
!  m_h = y + yd;
!  dtmp2 = m_h - y;
!  dtmp2 -= yd;
!  dtmp2 -= s_l;
!  y = s - dtmp2;
!  dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
!  dtmp1 = KA1_LO * s_h;
!  dtmp0 += dtmp1;
!  y += dtmp0;
!  dtmp0 = y + m_h;
!  s_h = vis_fand(dtmp0, MHI32);
!  dtmp0 = (s_h - m_h);
!  y = y - dtmp0;
!  yd = *py;
!  s = vis_fand(yd, MHI32);
!  dtmp0 = (yd - s);
!  dtmp1 = yd * y;
!  dtmp0 *= s_h;
!  yd = dtmp0 + dtmp1;
!  s = s_h * s;
!  if (s > HTHRESH) {s = HTHRESH; yd = DZERO;}
!  if (s < LTHRESH) {s = LTHRESH; yd = DZERO;}
!  dtmp0 = (s + yd);
!  ind = (int)dtmp0;
!  i = ind & 0xff;
!  i = i << 4;
!  u = (double)(int)dtmp0;
!  ind >>= 8;
!  y = s - u;
!  y = y + yd;
!  u = *(double*)((char*)__mt_constexp2 + i);
!  dtmp0 = KB5 * y;
!  dtmp1 = dtmp0 + KB4;
!  dtmp2 = dtmp1 * y;
!  dtmp3 = dtmp2 + KB3;
!  dtmp4 = dtmp3 * y;
!  dtmp5 = dtmp4 + KB2;
!  dtmp6 = dtmp5 * y;
!  dtmp7 = dtmp6 + KB1;
!  y = dtmp7 * y;
!  eflag = (ind + 1021);
!  eflag = eflag >> 31;
!  gflag = (1022 - ind);
!  gflag = gflag >> 31;
!  dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
!  dtmp1 = u * y;
!  dtmp2 = dtmp0 + dtmp1;
!  u = dtmp2 + u;
!  ind = yisint + ind;
!  itmp0 = 54 & eflag;
!  itmp1 = 52 & gflag;
!  ind = ind + itmp0;
!  ind = ind - itmp1;
!  ind <<= 20;
!  *(int*)&dtmp0 = ind;
!  *((int*)&dtmp0 + 1) = 0;
!  u = vis_fpadd32(u, dtmp0);
!  ind = eflag - gflag;
!  ind += 1;
!  ind *= 8;
!  dtmp1 = (*(double*)((char*)lconst + ind);
!  dtmp1 = u * dtmp1;
!  *pz = dtmp1;
!--------------------------------------------------------------------
!               !!!!!   vpowx algorithm !!!!! (x > 0 and x != Inf, NaN)
!
!                   /* perform s_h + yr = 256*log2(x) */
!
!  exp = ((unsigned*)px)[0];
!  y0 = px[0];
!  if (exp <= 0xfffff) {
!    y0 = (double) ((long long *) & y0)[0];
!    exp = ((unsigned int*) & y0)[0];
!    exp -= (1023 + 51) << 20;
!  }
!  x = vis_fand(y0, MMANT);
!  x = vis_for(x, DONE);
!  ax = vis_fpadd32(x, MROUND);
!  ax = vis_fand(ax, MHI20);
!  hx = *(int*)&ax;
!  exp = (exp >> 20);
!  exp = exp - 2046;
!  ux = x + ax;
!  yd = DONE / ux;
!  u = x - ax;
!  s = u * yd;
!  ux = vis_fand(ux, MHI32);
!  y = s * s;
!  s_h = vis_fand(s, MHI32);
!  dtmp8 = KA5 * y;
!  dtmp8 = dtmp8 + KA3;
!  dtmp8 = dtmp8 * y;
!  s = dtmp8 * s;
!  dtmp0 = (ux - ax);
!  s_l = (x - dtmp0);
!  dtmp0 = s_h * ux;
!  dtmp1 = s_h * s_l;
!  s_l = u - dtmp0;
!  s_l -= dtmp1;
!  dtmp0 = KA1 * yd;
!  s_l = dtmp0 * s_l;
!  i = (hx >> 8);
!  i = i & 0xff0;
!  itmp0 = (hx >> 20);
!  exp += itmp0;
!  yd = KA1_HI * s_h;
!  y = *(double *)((char*)__mt_constlog2 + i);
!  itmp0 = exp << 8;
!  y += (double)itmp0;
!  m_h = y + yd;
!  dtmp2 = m_h - y;
!  dtmp2 -= yd;
!  dtmp2 -= s_l;
!  y = s - dtmp2;
!  dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
!  dtmp1 = KA1_LO * s_h;
!  dtmp0 += dtmp1;
!  y += dtmp0;
!  dtmp0 = y + m_h;
!  s_h = vis_fand(dtmp0, MHI32);
!  dtmp0 = (s_h - m_h);
!  yr = y - dtmp0;
!
!  hy = ((unsigned*)py)[0];
!  ly = ((unsigned*)py)[1];
!  hx = ((unsigned*)px)[0];
!  lx = ((unsigned*)px)[1];
!  sy = hy >> 31;
!  hy &= 0x7fffffff;
!
!  if (hy < 0x3bf00000) {/* |Y| < 2^(-64) */
!    *pz = DONE;
!    goto next;
!  }
!
!  if (hy >= 0x43e00000) {                      /* |Y|>2^63,Inf,Nan */
!    if (hy == 0x7ff00000 && (ly == 0)) {       /* |Y| = Inf */
!      if (hx == 0x3ff00000 && (lx == 0))
!        *pz = *py - *py;                       /* 1 ** +-Inf */
!      else if ((hx < 0x3ff00000) != sy)
!        *pz = DZERO;
!      else {
!        ((int*)pz)[0] = hy;
!        ((int*)pz)[1] = ly;
!      }
!      goto next;
!    }
!    if (hy >= 0x7ff00000) {
!      *pz = *px + *py;                         /* |Y| = Nan */
!      goto next;
!    }
!                                               /* |Y| >= 2^63   */
!    if (lx == 0 && (hx == 0x3ff00000)) {       /*  X = 1 */
!      *pz = DONE;
!    }
!    else {
!      y0 = ((hx < 0x3ff00000) != sy) ? _TINY : _HUGE;
!      *pz = y0 * y0;
!    }
!    goto next;
!  }
!
!  yd = *py;
!  s = vis_fand(yd, MHI32);
!  dtmp0 = (yd - s);
!  dtmp1 = yd * yr;
!  dtmp0 *= s_h;
!  yd = dtmp0 + dtmp1;
!  s = s_h * s;
!  if (s > HTHRESH) {s = HTHRESH; yd = DZERO;}
!  if (s < LTHRESH) {s = LTHRESH; yd = DZERO;}
!  dtmp0 = (s + yd);
!  ind = (int)dtmp0;
!  i = ind & 0xff;
!  i = i << 4;
!  u = (double)(int)dtmp0;
!  ind >>= 8;
!  y = s - u;
!  y = y + yd;
!  u = *(double*)((char*)__mt_constexp2 + i);
!  dtmp0 = XKB5 * y;
!  dtmp1 = dtmp0 + XKB4;
!  dtmp2 = dtmp1 * y;
!  dtmp3 = dtmp2 + XKB3;
!  dtmp4 = dtmp3 * y;
!  dtmp5 = dtmp4 + XKB2;
!  dtmp6 = dtmp5 * y;
!  dtmp7 = dtmp6 + XKB1;
!  y = dtmp7 * y;
!  eflag = (ind + 1021);
!  eflag = eflag >> 31;
!  gflag = (1022 - ind);
!  gflag = gflag >> 31;
!  dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
!  dtmp1 = u * y;
!  dtmp2 = dtmp0 + dtmp1;
!  u = dtmp2 + u;
!  itmp0 = 54 & eflag;
!  itmp1 = 52 & gflag;
!  ind = ind + itmp0;
!  ind = ind - itmp1;
!  ind <<= 20;
!  *(int*)&dtmp0 = ind;
!  *((int*)&dtmp0 + 1) = 0;
!  u = vis_fpadd32(u, dtmp0);
!  ind = eflag - gflag;
!  ind += 1;
!  ind *= 8;
!  dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
!  dtmp1 = u * dtmp1;
!  *pz = dtmp1;
!--------------------------------------------------------------------

        ENTRY(__vpow)
        save    %sp,-SA(MINFRAME)-tmps,%sp
        PIC_SETUP(l7)
        PIC_SET(l7,.CONST_TBL,g5)
        wr      %g0,0x82,%asi                   ! set %asi for non-faulting loads

        cmp     counter,0
        ble,pn  %icc,.end

#ifdef  __sparcv9
        ldx     [%fp+STACK_BIAS+176],stridez
#else
        ld      [%fp+STACK_BIAS+92],stridez
#endif

        ld      [px],%o0
        add     LOGTBL,4095,EXPTBL
        st      counter,[%fp+tmp_counter]
        add     EXPTBL,65,EXPTBL
        sra     %i2,0,stridex
        stx     px,[%fp+tmp_px]
        add     EXPTBL,4095,%l0
        fzero   DZERO
        stx     py,[%fp+tmp_py]

        cmp     stridex,0
        bne,pt  %icc,.common_case
        add     %l0,1,%l0

        cmp     %o0,0
        ble,pt  %icc,.common_case
        sethi   %hi(0x7f800000),%o1

        cmp     %o0,%o1
        bl,pn   %icc,.stridex_zero
        nop

.common_case:
        sra     stridez,0,stridez
        ldd     [%l0+8],DONE
        ldd     [%l0+24],MHI32
        sra     %i4,0,stridey
        ldd     [%l0+32],KA5
        sethi   %hi(0x7ffffc00),MASK_0x7fffffff
        ldd     [%l0+40],KA3
        sethi   %hi(0xffc00),MASK_0x000fffff
        ldd     [%l0+48],KA1
        sethi   %hi(0x3ff00000),MASK_0x3ff00000
        ldd     [%l0+56],HTHRESH
        sllx    stridex,3,stridex
        add     MASK_0x7fffffff,0x3ff,MASK_0x7fffffff
        ldd     [%l0+64],LTHRESH
        sllx    stridey,3,stridey
        add     MASK_0x000fffff,0x3ff,MASK_0x000fffff
        ldd     [%l0+72],KB4
        sllx    stridez,3,stridez
        st      %g0,[%fp+tmp1_lo]               ! *((int*)&ax + 1) = 0;
        sub     %g0,1,%o2
        st      %g0,[%fp+tmp2_lo]               ! (Y0_0) *((int*)&dtmp0 + 1) = 0;
        st      MASK_0x000fffff,[%fp+tmp_mant]
        sub     pz,stridez,pz
        st      %o2,[%fp+tmp_mant+4]

.begin:
        ld      [%fp+tmp_counter],counter
        ldx     [%fp+tmp_px],px
        ldx     [%fp+tmp_py],py
        st      %g0,[%fp+tmp_counter]
.begin1:
        subcc   counter,1,counter
        bneg,pn %icc,.end
        or      %g0,ind_buf,%o7

        lda     [py]%asi,%o2                    ! (Y0_1) hy = *py;

        and     %o2,MASK_0x7fffffff,%l1         ! (Y0_3) hy &= 0x7fffffff;
        lda     [px]%asi,%l0                    ! (Y0_3) hx = ((unsigned*)px)[0];

        sra     %l1,20,%o0                      ! (Y0_3) expy = hy >> 20;
        lda     [px+4]%asi,%i2                  ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];

        and     MASK_0x000fffff,%l0,%o5         ! (Y0_3) hx &= 0xfffff;

        or      MASK_0x3ff00000,%o5,%o5         ! (Y0_3) hx |= 0x3ff00000;

        st      %o5,[%fp+tmp0_hi]               ! (Y0_3) *(int*)&x = hx;

        add     %o5,2048,%o5                    ! (Y0_3) hx += 0x800;

        st      %i2,[%fp+tmp0_lo]               ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
        and     %o5,-4096,%l4                   ! (Y0_3) hx &= 0xfffff000;

        add     pz,stridez,pz
        st      %l4,[%fp+tmp1_hi]               ! (Y0_3) *(int*)&ax = hx;

        and     %l0,MASK_0x7fffffff,%l3         ! (Y0_3) hx &= 0x7fffffff;

        sra     %l3,20,%l2                      ! (Y0_3) exp = (exp >> 20);

        cmp     %o0,959                         ! (Y0_3) if (expy < 0x3fb);
        bl,pn   %icc,.spec0                     ! (Y0_3) if (expy < 0x3fb);
        st      %g0,[%fp+%o7]                   ! (Y0_3) yisint = 0;

        cmp     %o0,1086                        ! (Y0_3) if (expy >= 0x43e);
        bge,pn  %icc,.spec1                     ! (Y0_3) if (expy >= 0x43e);
        nop

        cmp     %l2,2047                        ! (Y0_2) if (exp >= 0x7ff)
        bge,pn  %icc,.spec1                     ! (Y0_2) if (exp >= 0x7ff)
        nop

        cmp     %l0,MASK_0x000fffff             ! (Y0_2) if (hx <= 0xfffff)

        ldd     [%fp+tmp0_hi],%f32              ! (Y0_2) *(int*)&x = hx;
        ble,pn  %icc,.update0                   ! (Y0_2) if (hx <= 0xfffff)
        nop
.cont0:
        sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
        sub     pz,stridez,pz
        ldd     [%fp+tmp1_hi],%f54              ! (Y0_2) *(int*)&ax = hx;

        add     %o7,4,%o7                       ! stack buffer pointer update
        faddd   %f32,%f54,%f12                  ! (Y0_2) ux = x + ax;

        and     %o7,15,%o7                      ! stack buffer pointer update

        add     %o7,ind_buf,%o7                 ! stack buffer pointer update
        add     px,stridex,px                   ! px += stridex;

        lda     [px]%asi,%l0                    ! (Y1_2) hx = ((unsigned*)px)[0];

        lda     [px+4]%asi,%i2                  ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
        and     MASK_0x000fffff,%l0,%i4         ! (Y1_2) hx &= 0xfffff;

        st      %g0,[%fp+%o7]                   ! (Y1_2) yisint = 0;
        or      MASK_0x3ff00000,%i4,%i4         ! (Y1_2) hx |= 0x3ff00000;

        st      %i4,[%fp+tmp0_hi]               ! (Y1_2) *(int*)&x = hx;
        add     %i4,2048,%i4                    ! (Y1_2) hx += 0x800;

        st      %i2,[%fp+tmp0_lo]               ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
        and     %i4,-4096,%i4                   ! (Y1_2) hx &= 0xfffff000;

        st      %i4,[%fp+tmp1_hi]               ! (Y1_2) *(int*)&ax = hx;
        and     %l0,MASK_0x7fffffff,%l2         ! (Y1_2) hx &= 0x7fffffff;
        cmp     %l0,MASK_0x000fffff             ! (Y1_2) if (hx <= 0xfffff)

        ble,pn  %icc,.update1                   ! (Y1_2) if (hx <= 0xfffff)
        nop
.cont1:
        sub     %o7,ind_buf,%o7                 ! stack buffer pointer update

        add     %o7,4,%o7                       ! stack buffer pointer update
        fdivd   DONE,%f12,%f20                  ! (Y0_2) yd = DONE / ux;

        and     %o7,15,%o7                      ! stack buffer pointer update

        sra     %l3,20,%l3                      ! (Y0_2) exp = (exp >> 20);
        add     %o7,ind_buf,%o7                 ! stack buffer pointer update
        ldd     [%fp+tmp0_hi],%f8               ! (Y1_2) *(int*)&x = hx;

        ldd     [%fp+tmp1_hi],%f14              ! (Y1_2) *(int*)&ax = hx;
        sra     %l4,20,%l0                      ! (Y0_2) itmp0 = (hx >> 20);
        sub     %l3,2046,%o5                    ! (Y0_2) exp = exp - 2046;

        add     %o5,%l0,%o5                     ! (Y0_2) exp += itmp0;

        sll     %o5,8,%l0                       ! (Y0_2) itmp0 = exp << 8;
        st      %l0,[%fp+tmp3]                  ! (Y0_2) (double)itmp0;
        faddd   %f8,%f14,%f26                   ! (Y1_2) ux = x + ax;

        fand    %f12,MHI32,%f12                 ! (Y0_2) ux = vis_fand(ux, MHI32);
        add     px,stridex,px                   ! px += stridex;

        ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y0_2) load KA1_HI;
        fsubd   %f12,%f54,%f10                  ! (Y0_2) dtmp0 = (ux - ax);

        ld      [%fp+tmp3],%f16                 ! (Y0_2) (double)itmp0;
        fsubd   %f32,%f54,%f58                  ! (Y0_2) u = x - ax;

        sra     %l4,8,%l4                       ! (Y0_2) i = (hx >> 8);

        and     %l4,4080,%l4                    ! (Y0_2) i = i & 0xff0;

        ldd     [LOGTBL+%l4],%f62               ! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
        fmuld   %f58,%f20,%f52                  ! (Y0_2) s = u * yd;
        fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l = (x - dtmp0);

        fitod   %f16,%f54                       ! (Y0_2) (double)itmp0;
        add     %l4,8,%o0                       ! (Y0_2) i += 8;

        lda     [px]%asi,%l0                    ! (Y0_3) hx = ((unsigned*)px)[0];
        fand    %f52,MHI32,%f4                  ! (Y0_2) s_h = vis_fand(s, MHI32);

        faddd   %f62,%f54,%f54                  ! (Y0_2) y += (double)itmp0;
        lda     [px+4]%asi,%i2                  ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
        fmuld   %f4,%f12,%f32                   ! (Y0_2) dtmp0 = s_h * ux;

        and     MASK_0x000fffff,%l0,%o5         ! (Y0_3) hx &= 0xfffff;
        fmuld   %f52,%f52,%f12                  ! (Y0_2) y = s * s;

        or      MASK_0x3ff00000,%o5,%o5         ! (Y0_3) hx |= 0x3ff00000;

        st      %o5,[%fp+tmp0_hi]               ! (Y0_3) *(int*)&x = hx;
        fsubd   %f58,%f32,%f32                  ! (Y0_2) s_l = u - dtmp0;

        add     %o5,2048,%o5                    ! (Y0_3) hx += 0x800;

        st      %i2,[%fp+tmp0_lo]               ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
        and     %o5,-4096,%l4                   ! (Y0_3) hx &= 0xfffff000;
        fmuld   KA5,%f12,%f36                   ! (Y0_2) dtmp8 = KA5 * y;

        st      %l4,[%fp+tmp1_hi]               ! (Y0_3) *(int*)&ax = hx;
        fmuld   KA1_HI,%f4,%f48                 ! (Y0_2) yd = KA1_HI * s_h;

        fmuld   %f4,%f10,%f10                   ! (Y0_2) dtmp1 = s_h * s_l;
        ldd     [EXPTBL-ind_LO],KA1_LO          ! (y0_2) load KA1_LO;
        and     %l0,MASK_0x7fffffff,%l3         ! (Y0_3) hx &= 0x7fffffff;
        faddd   %f36,KA3,%f62                   ! (Y0_2) dtmp8 = dtmp8 + KA3;

        st      %g0,[%fp+%o7]                   ! (Y0_3) yisint = 0;
        faddd   %f54,%f48,%f36                  ! (Y0_2) m_h = y + yd;

        fdivd   DONE,%f26,%f22                  ! (Y1_2) yd = DONE / ux;
        fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l -= dtmp1;

        cmp     %l0,MASK_0x000fffff             ! (Y0_2) if (hx <= 0xfffff)

        sra     %l2,20,%l2                      ! (Y1_1) exp = (exp >> 20);
        ldd     [%fp+tmp0_hi],%f32              ! (Y0_2) *(int*)&x = hx;
        ble,pn  %icc,.update2                   ! (Y0_2) if (hx <= 0xfffff)
        fsubd   %f36,%f54,%f30                  ! (Y0_1) dtmp2 = m_h - y;
.cont2:
        cmp     %l2,2047                        ! (Y1_1) if (exp >= 0x7ff)
        sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
        ldd     [%fp+tmp1_hi],%f54              ! (Y0_2) *(int*)&ax = hx;

        sra     %i4,20,%l0                      ! (Y1_1) itmp0 = (hx >> 20);
        sub     %l2,2046,%o5                    ! (Y1_1) exp = exp - 2046;
        fmuld   KA1,%f20,%f20                   ! (Y0_1) dtmp0 = KA1 * yd;

        add     %o5,%l0,%o5                     ! (Y1_1) exp += itmp0;
        fmuld   %f62,%f12,%f62                  ! (Y0_1) dtmp8 = dtmp8 * y;

        sll     %o5,8,%l0                       ! (Y1_1) itmp0 = exp << 8;
        add     %o7,4,%o7                       ! stack buffer pointer update
        st      %l0,[%fp+tmp3]                  ! (Y1_1) (double)itmp0;
        faddd   %f32,%f54,%f12                  ! (Y0_2) ux = x + ax;

        bge,pn  %icc,.update3                   ! (Y1_1) if (exp >= 0x7ff)
        fsubd   %f30,%f48,%f48                  ! (Y0_1) dtmp2 -= yd;
.cont3:
        and     %o7,15,%o7                      ! stack buffer pointer update
        fmuld   %f20,%f10,%f10                  ! (Y0_1) s_l = dtmp0 * s_l;

        add     %o7,ind_buf,%o7                 ! stack buffer pointer update
        fmuld   KA1_LO,%f4,%f4                  ! (Y0_1) dtmp1 = KA1_LO * s_h;
        fand    %f26,MHI32,%f26                 ! (Y1_1) ux = vis_fand(ux, MHI32);

        fmuld   %f62,%f52,%f62                  ! (Y0_1) s = dtmp8 * s;
        ldd     [LOGTBL+%o0],%f52               ! (Y0_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
        fsubd   %f48,%f10,%f20                  ! (Y0_1) dtmp2 -= s_l;

        add     px,stridex,px                   ! px += stridex;
        fsubd   %f26,%f14,%f10                  ! (Y1_1) dtmp0 = (ux - ax);

        faddd   %f52,%f4,%f52                   ! (Y0_1) dtmp0 += dtmp1;

        ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y1_1) load KA1_HI;
        fsubd   %f62,%f20,%f4                   ! (Y0_1) y = s - dtmp2;

        ld      [%fp+tmp3],%f16                 ! (Y1_1) (double)itmp0;
        fsubd   %f8,%f14,%f58                   ! (Y1_1) u = x - ax;

        sra     %i4,8,%o0                       ! (Y1_1) i = (hx >> 8);

        faddd   %f4,%f52,%f48                   ! (Y0_1) y += dtmp0;
        and     %o0,4080,%o0                    ! (Y1_1) i = i & 0xff0;

        ldd     [LOGTBL+%o0],%f62               ! (Y1_1) y = *(double *)((char*)__mt_constlog2 + i);
        fmuld   %f58,%f22,%f52                  ! (Y1_1) s = u * yd;
        fsubd   %f8,%f10,%f10                   ! (Y1_1) s_l = (x - dtmp0);

        lda     [py]%asi,%f30                   ! (Y0_1) yd = *py;
        fitod   %f16,%f14                       ! (Y1_1) (double)itmp0;

        lda     [py+4]%asi,%f31                 ! (Y0_1) yd = *py;
        faddd   %f48,%f36,%f8                   ! (Y0_1) dtmp0 = y + m_h;

        add     %o0,8,%o0                       ! (Y1_1) i += 8;
        lda     [px]%asi,%l0                    ! (Y1_2) hx = ((unsigned*)px)[0];
        fand    %f52,MHI32,%f4                  ! (Y1_1) s_h = vis_fand(s, MHI32);

        faddd   %f62,%f14,%f14                  ! (Y1_1) y += (double)itmp0;

        lda     [px+4]%asi,%i2                  ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
        fand    %f8,MHI32,%f20                  ! (Y0_1) s_h = vis_fand(dtmp0, MHI32);
        fmuld   %f4,%f26,%f8                    ! (Y1_1) dtmp0 = s_h * ux;

        fand    %f30,MHI32,%f6                  ! (Y0_1) s = vis_fand(yd, MHI32);
        and     MASK_0x000fffff,%l0,%i4         ! (Y1_2) hx &= 0xfffff;
        fmuld   %f52,%f52,%f26                  ! (Y1_1) y = s * s;

        st      %g0,[%fp+%o7]                   ! (Y1_2) yisint = 0;
        or      MASK_0x3ff00000,%i4,%i4         ! (Y1_2) hx |= 0x3ff00000;
        fsubd   %f20,%f36,%f62                  ! (Y0_1) dtmp0 = (s_h - m_h);

        st      %i4,[%fp+tmp0_hi]               ! (Y1_2) *(int*)&x = hx;
        fsubd   %f58,%f8,%f8                    ! (Y1_1) s_l = u - dtmp0;

        add     %i4,2048,%i4                    ! (Y1_2) hx += 0x800;
        fmuld   %f20,%f6,%f34                   ! (Y0_1) s = s_h * s;
        fsubd   %f30,%f6,%f6                    ! (Y0_1) dtmp0 = (yd - s);

        st      %i2,[%fp+tmp0_lo]               ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
        and     %i4,-4096,%i4                   ! (Y1_2) hx &= 0xfffff000;
        fmuld   KA5,%f26,%f36                   ! (Y1_1) dtmp8 = KA5 * y;

        st      %i4,[%fp+tmp1_hi]               ! (Y1_2) *(int*)&ax = hx;
        fsubd   %f48,%f62,%f62                  ! (Y0_1) y = y - dtmp0;
        fmuld   KA1_HI,%f4,%f48                 ! (Y1_1) yd = KA1_HI * s_h;

        fmuld   %f4,%f10,%f10                   ! (Y1_1) dtmp1 = s_h * s_l;

        ldd     [EXPTBL-ind_LO],KA1_LO          ! (Y1_1) load KA1_LO;
        and     %l0,MASK_0x7fffffff,%l2         ! (Y1_2) hx &= 0x7fffffff;
        fmuld   %f6,%f20,%f6                    ! (Y0_1) dtmp0 *= s_h;
        fcmped  %fcc0,%f34,HTHRESH              ! (Y0_1) s > HTHRESH

        cmp     %l0,MASK_0x000fffff             ! (Y1_2) if (hx <= 0xfffff)
        fmuld   %f30,%f62,%f30                  ! (Y0_1) dtmp1 = yd * y;
        faddd   %f36,KA3,%f62                   ! (Y1_1) dtmp8 = dtmp8 + KA3;

        ble,pn  %icc,.update4                   ! (Y1_2) if (hx <= 0xfffff)
        faddd   %f14,%f48,%f36                  ! (Y1_1)  m_h = y + yd;
.cont4:
        sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
        fmovdg  %fcc0,HTHRESH,%f34              ! (Y0_1) s = HTHRESH

        add     %o7,4,%o7                       ! stack buffer pointer update
        fdivd   DONE,%f12,%f20                  ! (Y0_2) yd = DONE / ux;
        fsubd   %f8,%f10,%f10                   ! (Y1_1) s_l -= dtmp1;

        and     %o7,15,%o7                      ! stack buffer pointer update
        faddd   %f6,%f30,%f6                    ! (Y0_1) yd = dtmp0 + dtmp1;

        sra     %l3,20,%l3                      ! (Y0_2) exp = (exp >> 20);
        add     %o7,ind_buf,%o7                 ! stack buffer pointer update
        ldd     [%fp+tmp0_hi],%f8               ! (Y1_2) *(int*)&x = hx;
        fsubd   %f36,%f14,%f30                  ! (Y1_1) dtmp2 = m_h - y;

        cmp     %l3,2047                        ! (Y0_2) if (exp >= 0x7ff)
        ldd     [%fp+tmp1_hi],%f14              ! (Y1_2) *(int*)&ax = hx;
        fmuld   KA1,%f22,%f22                   ! (Y1_1) dtmp0 = KA1 * yd;

        sra     %l4,20,%l0                      ! (Y0_2) itmp0 = (hx >> 20);
        sub     %l3,2046,%o5                    ! (Y0_2) exp = exp - 2046;
        fcmped  %fcc1,%f34,LTHRESH              ! (Y0_1) s < LTHRESH

        add     %o5,%l0,%o5                     ! (Y0_2) exp += itmp0;
        add     py,stridey,py                   ! py += stridey;
        fmuld   %f62,%f26,%f62                  ! (Y1_1) dtmp8 = dtmp8 * y;
        fmovdg  %fcc0,DZERO,%f6                 ! (Y0_1) yd = DZERO

        sll     %o5,8,%l0                       ! (Y0_2) itmp0 = exp << 8;
        st      %l0,[%fp+tmp3]                  ! (Y0_2) (double)itmp0;
        faddd   %f8,%f14,%f26                   ! (Y1_2) ux = x + ax;

        bge,pn  %icc,.update5                   ! (Y0_2) if (exp >= 0x7ff)
        fsubd   %f30,%f48,%f48                  ! (Y1_1) dtmp2 -= yd;
.cont5:
        lda     [py]%asi,%l1                    ! (Y1_1) hy = *py;
        fmuld   %f22,%f10,%f10                  ! (Y1_1) s_l = dtmp0 * s_l;
        fmovdl  %fcc1,LTHRESH,%f34              ! (Y0_1) s = LTHRESH

        fmovdl  %fcc1,DZERO,%f6                 ! (Y0_1) yd = DZERO

        fand    %f12,MHI32,%f12                 ! (Y0_2) ux = vis_fand(ux, MHI32);
        fmuld   KA1_LO,%f4,%f4                  ! (Y1_1) dtmp1 = KA1_LO * s_h;

        fmuld   %f62,%f52,%f62                  ! (Y1_1) s = dtmp8 * s;
        ldd     [LOGTBL+%o0],%f52               ! (Y1_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
        fsubd   %f48,%f10,%f22                  ! (Y1_1) dtmp2 -= s_l;

        add     px,stridex,px                   ! px += stridex;
        faddd   %f34,%f6,%f58                   ! (Y0_1) dtmp0 = (s + yd);

        and     %l1,MASK_0x7fffffff,%l1         ! (Y1_1) hy &= 0x7fffffff;
        ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y0_2) load KA1_HI;
        fsubd   %f12,%f54,%f10                  ! (Y0_2) dtmp0 = (ux - ax);

        faddd   %f52,%f4,%f52                   ! (Y1_1) dtmp0 += dtmp1;

        fsubd   %f62,%f22,%f4                   ! (Y1_1) y = s - dtmp2;

        fdtoi   %f58,%f17                       ! (Y0_1) (int)dtmp0;

        ld      [%fp+tmp3],%f16                 ! (Y0_2) (double)itmp0;
        fsubd   %f32,%f54,%f58                  ! (Y0_2) u = x - ax;
        sra     %l4,8,%l4                       ! (Y0_2) i = (hx >> 8);

        sra     %l1,20,%l1                      ! (Y1_1) expy = hy >> 20;
        ldd     [EXPTBL-ind_KB5],KB5                    ! (Y0_1) load KB5;
        faddd   %f4,%f52,%f48                   ! (Y1_1) y += dtmp0;

        and     %l4,4080,%l4                    ! (Y0_2) i = i & 0xff0;
        st      %f17,[%fp+tmp4]                 ! (Y0_1) ind = (int)dtmp0;
        fitod   %f17,%f4                        ! (Y0_1) u = (double)(int)dtmp0;

        ldd     [LOGTBL+%l4],%f62               ! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
        fmuld   %f58,%f20,%f52                  ! (Y0_2) s = u * yd;
        fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l = (x - dtmp0);

        lda     [py]%asi,%f30                   ! (Y1_1) yd = *py;
        fitod   %f16,%f54                       ! (Y0_2) (double)itmp0;

        lda     [py+4]%asi,%f31                 ! (Y1_1) yd = *py;
        faddd   %f48,%f36,%f32                  ! (Y1_1) dtmp0 = y + m_h;

        add     %l4,8,%o0                       ! (Y0_2) i += 8;
        fsubd   %f34,%f4,%f60                   ! (Y0_1) y = s - u;

        cmp     %l1,959                         ! (Y1_1) if (expy < 0x3fb);
        lda     [px]%asi,%l0                    ! (Y0_3) hx = ((unsigned*)px)[0];
        fand    %f52,MHI32,%f4                  ! (Y0_2) s_h = vis_fand(s, MHI32);

        bl,pn   %icc,.update6                   ! (Y1_1) if (expy < 0x3fb);
        faddd   %f62,%f54,%f54                  ! (Y0_2) y += (double)itmp0;
.cont6:
        cmp     %l1,1086                        ! (Y1_1) if (expy >= 0x43e);
        lda     [px+4]%asi,%i2                  ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
        fand    %f32,MHI32,%f22                 ! (Y1_1) s_h = vis_fand(dtmp0, MHI32);

        fmuld   %f4,%f12,%f32                   ! (Y0_2) dtmp0 = s_h * ux;
        bge,pn  %icc,.update7                   ! (Y1_1) if (expy >= 0x43e);
        faddd   %f60,%f6,%f60                   ! (Y0_1) y = y + yd;
.cont7:
        ld      [%fp+%o7],%o2                   ! (Y0_1) load yisint
        fand    %f30,MHI32,%f6                  ! (Y1_1) s = vis_fand(yd, MHI32);

        and     MASK_0x000fffff,%l0,%o5         ! (Y0_3) hx &= 0xfffff;
        fmuld   %f52,%f52,%f12                  ! (Y0_2) y = s * s;

        or      MASK_0x3ff00000,%o5,%o5         ! (Y0_3) hx |= 0x3ff00000;
        fsubd   %f22,%f36,%f62                  ! (Y1_1) dtmp0 = (s_h - m_h);

        st      %o5,[%fp+tmp0_hi]               ! (Y0_3) *(int*)&x = hx;
        fsubd   %f58,%f32,%f32                  ! (Y0_2) s_l = u - dtmp0;
        fmuld   KB5,%f60,%f58                   ! (Y0_1) dtmp0 = KB5 * y;

        ldd     [EXPTBL-ind_KB3],KB3            ! (Y0_1) load KB3;
        add     %o5,2048,%o5                    ! (Y0_3) hx += 0x800;
        fmuld   %f22,%f6,%f34                   ! (Y1_1) s = s_h * s;
        fsubd   %f30,%f6,%f6                    ! (Y1_1) dtmp0 = (yd - s);

        st      %i2,[%fp+tmp0_lo]               ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
        and     %o5,-4096,%l4                   ! (Y0_3) hx &= 0xfffff000;
        fmuld   KA5,%f12,%f36                   ! (Y0_2) dtmp8 = KA5 * y;

        st      %l4,[%fp+tmp1_hi]               ! (Y0_3) *(int*)&ax = hx;
        fsubd   %f48,%f62,%f62                  ! (Y1_1) y = y - dtmp0;
        fmuld   KA1_HI,%f4,%f48                 ! (Y0_2) yd = KA1_HI * s_h;

        subcc   counter,1,counter
        fmuld   %f4,%f10,%f10                   ! (Y0_2) dtmp1 = s_h * s_l;
        faddd   %f58,KB4,%f58                   ! (Y0_1) dtmp1 = dtmp0 + KB4;

        ldd     [EXPTBL-ind_LO],KA1_LO          ! (y0_2) load KA1_LO;
        and     %l0,MASK_0x7fffffff,%l3         ! (Y0_3) hx &= 0x7fffffff;
        fmuld   %f6,%f22,%f6                    ! (Y1_1) dtmp0 *= s_h;
        fcmped  %fcc0,%f34,HTHRESH              ! (Y1_1) s > HTHRESH;

        fmuld   %f30,%f62,%f30                  ! (Y1_1) dtmp1 = yd * y;
        ba      1f
        faddd   %f36,KA3,%f62                   ! (Y0_2) dtmp8 = dtmp8 + KA3;

        .align  16
1:
        st      %g0,[%fp+%o7]                   ! (Y0_3) yisint = 0;
        fmuld   %f58,%f60,%f58                  ! (Y0_1) dtmp2 = dtmp1 * y;
        bneg,pn %icc,.tail
        faddd   %f54,%f48,%f36                  ! (Y0_2) m_h = y + yd;

        nop
        fmovdg  %fcc0,HTHRESH,%f34              ! (Y1_1) s = HTHRESH;

        fdivd   DONE,%f26,%f22                  ! (Y1_2) yd = DONE / ux;
        fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l -= dtmp1;

.main_loop:
        cmp     %l0,MASK_0x000fffff             ! (Y0_2) if (hx <= 0xfffff)
        add     py,stridey,py                   ! py += stridey;
        faddd   %f6,%f30,%f6                    ! (Y1_0) yd = dtmp0 + dtmp1;

        sra     %l2,20,%l2                      ! (Y1_1) exp = (exp >> 20);
        ldd     [%fp+tmp0_hi],%f32              ! (Y0_2) *(int*)&x = hx;
        ble,pn  %icc,.update8                   ! (Y0_2) if (hx <= 0xfffff)
        fsubd   %f36,%f54,%f30                  ! (Y0_1) dtmp2 = m_h - y;
.cont8:
        cmp     %l2,2047                        ! (Y1_1) if (exp >= 0x7ff)
        sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
        ldd     [%fp+tmp1_hi],%f54              ! (Y0_2) *(int*)&ax = hx;
        faddd   %f58,KB3,%f58                   ! (Y0_0) dtmp3 = dtmp2 + KB3;

        sra     %i4,20,%l0                      ! (Y1_1) itmp0 = (hx >> 20);
        sub     %l2,2046,%o5                    ! (Y1_1) exp = exp - 2046;
        fmuld   KA1,%f20,%f20                   ! (Y0_1) dtmp0 = KA1 * yd;
        fcmped  %fcc1,%f34,LTHRESH              ! (Y1_0) s < LTHRESH;

        ldd     [EXPTBL-ind_KB2],KB2            ! (Y0_0) load KB2;
        add     %o5,%l0,%o5                     ! (Y1_1) exp += itmp0;
        fmuld   %f62,%f12,%f62                  ! (Y0_1) dtmp8 = dtmp8 * y;
        fmovdg  %fcc0,DZERO,%f6                 ! (Y1_0) yd = DZERO

        sll     %o5,8,%l0                       ! (Y1_1) itmp0 = exp << 8;
        add     %o7,4,%o7                       ! stack buffer pointer update
        st      %l0,[%fp+tmp3]                  ! (Y1_1) (double)itmp0;
        faddd   %f32,%f54,%f12                  ! (Y0_2) ux = x + ax;

        ld      [%fp+tmp4],%i2                  ! (Y0_0) ind = (int)dtmp0;
        fsubd   %f30,%f48,%f48                  ! (Y0_1) dtmp2 -= yd;
        bge,pn  %icc,.update9                   ! (Y1_1) if (exp >= 0x7ff)
        fmuld   %f58,%f60,%f58                  ! (Y0_0) dtmp4 = dtmp3 * y;
.cont9:
        lda     [py]%asi,%l1                    ! (Y0_1) hy = *py;
        and     %o7,15,%o7                      ! stack buffer pointer update
        fmuld   %f20,%f10,%f10                  ! (Y0_1) s_l = dtmp0 * s_l;
        fmovdl  %fcc1,LTHRESH,%f34              ! (Y1_0) s = LTHRESH;

        add     %o7,ind_buf,%o7                 ! stack buffer pointer update
        fmovdl  %fcc1,DZERO,%f6                 ! (Y1_0) yd = DZERO

        fmuld   KA1_LO,%f4,%f4                  ! (Y0_1) dtmp1 = KA1_LO * s_h;
        fand    %f26,MHI32,%f26                 ! (Y1_1) ux = vis_fand(ux, MHI32);

        fmuld   %f62,%f52,%f62                  ! (Y0_1) s = dtmp8 * s;
        nop
        faddd   %f58,KB2,%f30                   ! (Y0_0) dtmp5 = dtmp4 + KB2;

        nop
        add     pz,stridez,pz                   ! pz += stridez;
        ldd     [LOGTBL+%o0],%f52               ! (Y0_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
        fsubd   %f48,%f10,%f20                  ! (Y0_1) dtmp2 -= s_l;

        sra     %i2,8,%l0                       ! (Y0_0) ind >>= 8;
        ldd     [EXPTBL-ind_KB1],KB1            ! (Y0_0) load KB1;
        add     px,stridex,px                   ! px += stridex;
        faddd   %f34,%f6,%f58                   ! (Y1_0) dtmp0 = (s + yd);

        add     %l0,1021,%l2                    ! (Y0_0) eflag = (ind + 1021);
        sub     %g0,%l0,%o5                     ! (Y0_0) gflag = (1022 - ind);
        fsubd   %f26,%f14,%f10                  ! (Y1_1) dtmp0 = (ux - ax);

        sra     %l2,31,%l2                      ! (Y0_0) eflag = eflag >> 31;
        add     %o5,1022,%o5                    ! (Y0_0) gflag = (1022 - ind);
        fmuld   %f30,%f60,%f48                  ! (Y0_0) dtmp6 = dtmp5 * y;
        faddd   %f52,%f4,%f52                   ! (Y0_1) dtmp0 += dtmp1;

        sra     %o5,31,%o5                      ! (Y0_0) gflag = gflag >> 31;
        and     %l2,54,%o0                      ! (Y0_0) itmp0 = 54 & eflag;
        ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y1_1) load KA1_HI;
        fsubd   %f62,%f20,%f4                   ! (Y0_1) y = s - dtmp2;

        lda     [py]%asi,%f30                   ! (Y0_1) yd = *py;
        sub     %l2,%o5,%l2                     ! (Y0_0) ind = eflag - gflag;
        add     %l0,%o0,%l0                     ! (Y0_0) ind = ind + itmp0;
        fdtoi   %f58,%f20                       ! (Y1_0) u = (double)(int)dtmp0;

        sra     %i4,8,%o0                       ! (Y1_1) i = (hx >> 8);
        and     %o5,52,%o5                      ! (Y0_0) itmp1 = 52 & gflag;
        ld      [%fp+tmp3],%f16                 ! (Y1_1) (double)itmp0;
        fsubd   %f8,%f14,%f58                   ! (Y1_1) u = x - ax;

        and     %o0,4080,%o0                    ! (Y1_1) i = i & 0xff0;
        sub     %l0,%o5,%i4                     ! (Y0_0) ind = ind - itmp1;
        st      %f20,[%fp+tmp4]                 ! (Y1_0) ind = (int)dtmp0;
        faddd   %f48,KB1,%f14                   ! (Y0_0) dtmp7 = dtmp6 + KB1;

        add     %o2,%i4,%i4                     ! (Y0_0) ind = yisint + ind;
        and     %i2,255,%o5                     ! (Y0_0) i = ind & 0xff;
        lda     [px]%asi,%l0                    ! (Y1_2) hx = ((unsigned*)px)[0];
        faddd   %f4,%f52,%f48                   ! (Y0_1) y += dtmp0;

        sll     %i4,20,%i4                      ! (Y0_0) ind <<= 20;
        ldd     [LOGTBL+%o0],%f62               ! (Y1_1) y = *(double *)((char*)__mt_constlog2 + i);
        and     %l1,MASK_0x7fffffff,%l1         ! (Y0_1) hy &= 0x7fffffff;
        fitod   %f20,%f4                        ! (Y1_0) u = (double)(int)dtmp0;

        lda     [px+4]%asi,%i2                  ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
        nop
        fmuld   %f58,%f22,%f52                  ! (Y1_1) s = u * yd;
        fsubd   %f8,%f10,%f10                   ! (Y1_1) s_l = (x - dtmp0);

        sll     %o5,4,%o5                       ! (Y0_0) i = i << 4;
        st      %i4,[%fp+tmp2_hi]               ! (Y0_0) *(int*)&dtmp0 = ind;
        fmuld   %f14,%f60,%f20                  ! (Y0_0) y = dtmp7 * y;
        fitod   %f16,%f14                       ! (Y1_1) (double)itmp0;

        sra     %l1,20,%l1                      ! (Y0_1) expy = hy >> 20;
        nop
        ldd     [EXPTBL+%o5],%f56               ! (Y0_0) u = *(double*)((char*)__mt_constexp2 + i);
        faddd   %f48,%f36,%f8                   ! (Y0_1) dtmp0 = y + m_h;

        add     %o5,8,%o5                       ! (Y0_0) i += 8;
        add     %o0,8,%o0                       ! (Y1_1) i += 8;
        lda     [py+4]%asi,%f31                 ! (Y0_1) yd = *py;
        fsubd   %f34,%f4,%f60                   ! (Y1_0) y = s - u;

        cmp     %l1,959                         ! (Y0_1) if (expy < 0x3fb);
        and     MASK_0x000fffff,%l0,%i4         ! (Y1_2) hx &= 0xfffff;
        ldd     [EXPTBL-ind_KB5],KB5            ! (Y1_0) load KB5;
        fand    %f52,MHI32,%f4                  ! (Y1_1) s_h = vis_fand(s, MHI32);

        ldd     [EXPTBL+%o5],%f16               ! (Y0_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
        fmuld   %f56,%f20,%f34                  ! (Y0_0) dtmp1 = u * y;
        bl,pn   %icc,.update10                  ! (Y0_1) if (expy < 0x3fb);
        faddd   %f62,%f14,%f14                  ! (Y1_1) y += (double)itmp0;
.cont10:
        or      MASK_0x3ff00000,%i4,%i4         ! (Y1_2) hx |= 0x3ff00000;
        cmp     %l1,1086                        ! (Y0_1) if (expy >= 0x43e);
        fand    %f8,MHI32,%f20                  ! (Y0_1) s_h = vis_fand(dtmp0, MHI32);

        fmuld   %f4,%f26,%f8                    ! (Y1_1) dtmp0 = s_h * ux;
        st      %i4,[%fp+tmp0_hi]               ! (Y1_2) *(int*)&x = hx;
        bge,pn  %icc,.update11                  ! (Y0_1) if (expy >= 0x43e);
        faddd   %f60,%f6,%f60                   ! (Y1_0) y = y + yd;
.cont11:
        add     %i4,2048,%i4                    ! (Y1_2) hx += 0x800;
        ld      [%fp+%o7],%o2                   ! (Y1_0) load yisint
        fand    %f30,MHI32,%f6                  ! (Y0_1) s = vis_fand(yd, MHI32);

        st      %i2,[%fp+tmp0_lo]               ! (Y1_2) *((int*)&x + 1) = ((unsigned*)px)[1];
        and     %i4,-4096,%i4                   ! (Y1_2) hx &= 0xfffff000;
        fmuld   %f52,%f52,%f26                  ! (Y1_1) y = s * s;
        faddd   %f16,%f34,%f16                  ! (Y0_0) dtmp2 = dtmp0 + dtmp1;

        st      %i4,[%fp+tmp1_hi]               ! (Y1_2) *(int*)&ax = hx;
        fsubd   %f20,%f36,%f62                  ! (Y0_1) dtmp0 = (s_h - m_h);

        fsubd   %f58,%f8,%f8                    ! (Y1_1) s_l = u - dtmp0;
        fmuld   KB5,%f60,%f58                   ! (Y1_0) dtmp0 = KB5 * y;

        ldd     [EXPTBL-ind_KB3],KB3            ! (Y1_0) load KB3;
        fmuld   %f20,%f6,%f34                   ! (Y0_1) s = s_h * s;
        fsubd   %f30,%f6,%f6                    ! (Y0_1) dtmp0 = (yd - s);

        faddd   %f16,%f56,%f56                  ! (Y0_0) u = dtmp2 + u;
        nop
        fmuld   KA5,%f26,%f36                   ! (Y1_1) dtmp8 = KA5 * y;

        nop
        add     %l2,513,%l2                     ! (Y0_0) ind += 513;
        fsubd   %f48,%f62,%f62                  ! (Y0_1) y = y - dtmp0;
        fmuld   KA1_HI,%f4,%f48                 ! (Y1_1) yd = KA1_HI * s_h;

        sll     %l2,3,%o5                       ! (Y0_0) ind *= 8;
        ldd     [%fp+tmp2_hi],%f16              ! (Y0_0) ld dtmp0;
        fmuld   %f4,%f10,%f10                   ! (Y1_1) dtmp1 = s_h * s_l;
        faddd   %f58,KB4,%f58                   ! (Y1_0) dtmp1 = dtmp0 + KB4;

        ldd     [EXPTBL-ind_LO],KA1_LO          ! (Y1_1) load KA1_LO;
        and     %l0,MASK_0x7fffffff,%l2         ! (Y1_2) hx &= 0x7fffffff;
        fmuld   %f6,%f20,%f6                    ! (Y0_1) dtmp0 *= s_h;
        fcmped  %fcc0,%f34,HTHRESH              ! (Y0_1) s > HTHRESH

        ldd     [EXPTBL+%o5],%f20               ! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
        nop
        nop
        fpadd32 %f56,%f16,%f56                  ! (Y0_0) u = vis_fpadd32(u, dtmp0);

        nop
        cmp     %l0,MASK_0x000fffff             ! (Y1_2) if (hx <= 0xfffff)
        fmuld   %f30,%f62,%f30                  ! (Y0_1) dtmp1 = yd * y;
        faddd   %f36,KA3,%f62                   ! (Y1_1) dtmp8 = dtmp8 + KA3;

        fmuld   %f58,%f60,%f58                  ! (Y1_0) dtmp2 = dtmp1 * y;
        st      %g0,[%fp+%o7]                   ! (Y1_2) yisint = 0;
        ble,pn  %icc,.update12                  ! (Y1_2) if (hx <= 0xfffff)
        faddd   %f14,%f48,%f36                  ! (Y1_1)  m_h = y + yd;
.cont12:
        sra     %l3,20,%l3                      ! (Y0_2) exp = (exp >> 20);
        sub     %o7,ind_buf,%o7                 ! stack buffer pointer update
        fmuld   %f56,%f20,%f16                  ! (Y0_0) dtmp1 = u * dtmp1;
        fmovdg  %fcc0,HTHRESH,%f34              ! (Y0_1) s = HTHRESH

        cmp     %l3,2047                        ! (Y0_2) if (exp >= 0x7ff)
        st      %f16,[pz]                       ! (Y0_0) write into memory
        fdivd   DONE,%f12,%f20                  ! (Y0_2) yd = DONE / ux;
        fsubd   %f8,%f10,%f10                   ! (Y1_1) s_l -= dtmp1;

        sra     %l4,20,%l0                      ! (Y0_2) itmp0 = (hx >> 20);
        sub     %l3,2046,%o5                    ! (Y0_2) exp = exp - 2046;
        st      %f17,[pz+4]                     ! (Y0_0) write into memory
        faddd   %f6,%f30,%f6                    ! (Y0_1) yd = dtmp0 + dtmp1;

        add     %o5,%l0,%o5                     ! (Y0_2) exp += itmp0;
        add     py,stridey,py                   ! py += stridey;
        ldd     [%fp+tmp0_hi],%f8               ! (Y1_2) *(int*)&x = hx;
        fsubd   %f36,%f14,%f30                  ! (Y1_1) dtmp2 = m_h - y;

        sll     %o5,8,%l0                       ! (Y0_2) itmp0 = exp << 8;
        ldd     [%fp+tmp1_hi],%f14              ! (Y1_2) *(int*)&ax = hx;
        fmuld   KA1,%f22,%f22                   ! (Y1_1) dtmp0 = KA1 * yd;
        faddd   %f58,KB3,%f58                   ! (Y1_0) dtmp3 = dtmp2 + KB3;

        add     %o7,4,%o7                       ! stack buffer pointer update
        st      %l0,[%fp+tmp3]                  ! (Y0_2) (double)itmp0;
        fcmped  %fcc1,%f34,LTHRESH              ! (Y0_1) s < LTHRESH

        and     %o7,15,%o7                      ! stack buffer pointer update
        ld      [%fp+tmp4],%l0                  ! (Y1_0) ind = (int)dtmp0;
        fmuld   %f62,%f26,%f62                  ! (Y1_1) dtmp8 = dtmp8 * y;
        fmovdg  %fcc0,DZERO,%f6                 ! (Y0_1) yd = DZERO

        nop
        add     %o7,ind_buf,%o7                 ! stack buffer pointer update
        ldd     [EXPTBL-ind_KB2],KB2            ! (Y1_0) load KB2;
        faddd   %f8,%f14,%f26                   ! (Y1_2) ux = x + ax;

        fmuld   %f58,%f60,%f58                  ! (Y1_0) dtmp4 = dtmp3 * y;
        nop
        bge,pn  %icc,.update13                  ! (Y0_2) if (exp >= 0x7ff)
        fsubd   %f30,%f48,%f48                  ! (Y1_1) dtmp2 -= yd;
.cont13:
        lda     [py]%asi,%l1                    ! (Y1_1) hy = *py;
        nop
        fmuld   %f22,%f10,%f10                  ! (Y1_1) s_l = dtmp0 * s_l;
        fmovdl  %fcc1,LTHRESH,%f34              ! (Y0_1) s = LTHRESH

        nop
        nop
        fmovdl  %fcc1,DZERO,%f6                 ! (Y0_1) yd = DZERO

        fand    %f12,MHI32,%f12                 ! (Y0_2) ux = vis_fand(ux, MHI32);
        nop
        nop
        fmuld   KA1_LO,%f4,%f4                  ! (Y1_1) dtmp1 = KA1_LO * s_h;

        nop
        add     px,stridex,px                   ! px += stridex;
        faddd   %f58,KB2,%f30                   ! (Y1_0) dtmp5 = dtmp4 + KB2;
        fmuld   %f62,%f52,%f62                  ! (Y1_1) s = dtmp8 * s;

        sra     %l0,8,%i2                       ! (Y1_0) ind >>= 8;
        add     pz,stridez,pz                   ! pz += stridez;
        ldd     [LOGTBL+%o0],%f52               ! (Y1_1) dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);
        fsubd   %f48,%f10,%f22                  ! (Y1_1) dtmp2 -= s_l;

        add     %i2,1021,%l3                    ! (Y1_0) eflag = (ind + 1021);
        sub     %g0,%i2,%o5                     ! (Y1_0) gflag = (1022 - ind);
        ldd     [EXPTBL-ind_KB1],KB1            ! (Y1_0) load KB1;
        faddd   %f34,%f6,%f58                   ! (Y0_1) dtmp0 = (s + yd);

        sra     %l3,31,%l3                      ! (Y1_0) eflag = eflag >> 31;
        add     %o5,1022,%o5                    ! (Y1_0) gflag = (1022 - ind);
        ldd     [EXPTBL-ind_HI],KA1_HI          ! (Y0_2) load KA1_HI;
        fsubd   %f12,%f54,%f10                  ! (Y0_2) dtmp0 = (ux - ax);

        sra     %o5,31,%o5                      ! (Y1_0) gflag = gflag >> 31;
        and     %l3,54,%o0                      ! (Y1_0) itmp0 = 54 & eflag;
        fmuld   %f30,%f60,%f48                  ! (Y1_0) dtmp6 = dtmp5 * y;
        faddd   %f52,%f4,%f52                   ! (Y1_1) dtmp0 += dtmp1;

        sra     %l4,8,%l4                       ! (Y0_2) i = (hx >> 8);
        add     %i2,%o0,%i2                     ! (Y1_0) ind = ind + itmp0;
        fsubd   %f62,%f22,%f4                   ! (Y1_1) y = s - dtmp2;

        lda     [py]%asi,%f30                   ! (Y1_1) yd = *py;
        and     %l4,4080,%l4                    ! (Y0_2) i = i & 0xff0;
        and     %o5,52,%o0                      ! (Y1_0) itmp1 = 52 & gflag;
        fdtoi   %f58,%f22                       ! (Y0_1) (int)dtmp0;

        sub     %l3,%o5,%l3                     ! (Y1_0) ind = eflag - gflag;
        sub     %i2,%o0,%i2                     ! (Y1_0) ind = ind - itmp1;
        ld      [%fp+tmp3],%f16                 ! (Y0_2) (double)itmp0;
        fsubd   %f32,%f54,%f58                  ! (Y0_2) u = x - ax;

        add     %o2,%i2,%i2                     ! (Y1_0) ind = yisint + ind;
        and     %l0,255,%o5                     ! (Y1_0) i = ind & 0xff;
        st      %f22,[%fp+tmp4]                 ! (Y0_1) ind = (int)dtmp0;
        faddd   %f48,KB1,%f54                   ! (Y1_0) dtmp7 = dtmp6 + KB1;

        sll     %i2,20,%o0                      ! (Y1_0) ind <<= 20;
        nop
        lda     [px]%asi,%l0                    ! (Y0_3) hx = ((unsigned*)px)[0];
        faddd   %f4,%f52,%f48                   ! (Y1_1) y += dtmp0;

        and     %l1,MASK_0x7fffffff,%l1         ! (Y1_1) hy &= 0x7fffffff;
        nop
        st      %o0,[%fp+tmp2_hi]               ! (Y1_0) *(int*)&dtmp0 = ind;
        fitod   %f22,%f4                        ! (Y0_1) u = (double)(int)dtmp0;

        lda     [px+4]%asi,%i2                  ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
        nop
        fmuld   %f58,%f20,%f52                  ! (Y0_2) s = u * yd;
        fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l = (x - dtmp0);

        sll     %o5,4,%o5                       ! (Y1_0) i = i << 4;
        ldd     [LOGTBL+%l4],%f62               ! (Y0_2) y = *(double *)((char*)__mt_constlog2 + i);
        fmuld   %f54,%f60,%f22                  ! (Y1_0) y = dtmp7 * y;
        fitod   %f16,%f54                       ! (Y0_2) (double)itmp0;

        sra     %l1,20,%l1                      ! (Y1_1) expy = hy >> 20;
        nop
        ldd     [EXPTBL+%o5],%f56               ! (Y1_0) u = *(double*)((char*)__mt_constexp2 + i);
        faddd   %f48,%f36,%f32                  ! (Y1_1) dtmp0 = y + m_h;

        add     %o5,8,%o5                       ! (Y1_0) i += 8;
        add     %l4,8,%o0                       ! (Y0_2) i += 8;
        lda     [py+4]%asi,%f31                 ! (Y1_1) yd = *py;
        fsubd   %f34,%f4,%f60                   ! (Y0_1) y = s - u;

        cmp     %l1,959                         ! (Y1_1) if (expy < 0x3fb);
        and     MASK_0x000fffff,%l0,%l4         ! (Y0_3) hx &= 0xfffff;
        fand    %f52,MHI32,%f4                  ! (Y0_2) s_h = vis_fand(s, MHI32);

        ldd     [EXPTBL+%o5],%f16               ! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
        fmuld   %f56,%f22,%f34                  ! (Y1_0) dtmp1 = u * y;
        bl,pn   %icc,.update14                  ! (Y1_1) if (expy < 0x3fb);
        faddd   %f62,%f54,%f54                  ! (Y0_2) y += (double)itmp0;
.cont14:
        ldd     [EXPTBL-ind_KB5],KB5            ! (Y0_1) load KB5;
        or      MASK_0x3ff00000,%l4,%o5         ! (Y0_3) hx |= 0x3ff00000;
        cmp     %l1,1086                        ! (Y1_1) if (expy >= 0x43e);
        fand    %f32,MHI32,%f22                 ! (Y1_1) s_h = vis_fand(dtmp0, MHI32);

        fmuld   %f4,%f12,%f32                   ! (Y0_2) dtmp0 = s_h * ux;
        st      %o5,[%fp+tmp0_hi]               ! (Y0_3) *(int*)&x = hx;
        bge,pn  %icc,.update15                  ! (Y1_1) if (expy >= 0x43e);
        faddd   %f60,%f6,%f60                   ! (Y0_1) y = y + yd;
.cont15:
        add     %o5,2048,%o5                    ! (Y0_3) hx += 0x800;
        nop
        ld      [%fp+%o7],%o2                   ! (Y0_1) load yisint
        fand    %f30,MHI32,%f6                  ! (Y1_1) s = vis_fand(yd, MHI32);

        and     %o5,-4096,%l4                   ! (Y0_3) hx &= 0xfffff000;
        st      %i2,[%fp+tmp0_lo]               ! (Y0_3) *((int*)&x + 1) = ((unsigned*)px)[1];
        fmuld   %f52,%f52,%f12                  ! (Y0_2) y = s * s;
        faddd   %f16,%f34,%f16                  ! (Y1_0) dtmp2 = dtmp0 + dtmp1;

        nop
        nop
        st      %l4,[%fp+tmp1_hi]               ! (Y0_3) *(int*)&ax = hx;
        fsubd   %f22,%f36,%f62                  ! (Y1_1) dtmp0 = (s_h - m_h);

        fsubd   %f58,%f32,%f32                  ! (Y0_2) s_l = u - dtmp0;
        nop
        nop
        fmuld   KB5,%f60,%f58                   ! (Y0_1) dtmp0 = KB5 * y;

        ldd     [EXPTBL-ind_KB3],KB3            ! (Y0_1) load KB3;
        nop
        fmuld   %f22,%f6,%f34                   ! (Y1_1) s = s_h * s;
        fsubd   %f30,%f6,%f6                    ! (Y1_1) dtmp0 = (yd - s);

        fmuld   KA5,%f12,%f36                   ! (Y0_2) dtmp8 = KA5 * y;
        nop
        faddd   %f16,%f56,%f56                  ! (Y1_0) u = dtmp2 + u;

        add     %l3,513,%l3                     ! (Y1_0) ind += 1;
        fsubd   %f48,%f62,%f62                  ! (Y1_1) y = y - dtmp0;
        fmuld   KA1_HI,%f4,%f48                 ! (Y0_2) yd = KA1_HI * s_h;

        sll     %l3,3,%o5                       ! (Y1_0) ind *= 8;
        ldd     [%fp+tmp2_hi],%f16              ! (Y1_0) *(int*)&dtmp0 = ind;
        fmuld   %f4,%f10,%f10                   ! (Y0_2) dtmp1 = s_h * s_l;
        faddd   %f58,KB4,%f58                   ! (Y0_1) dtmp1 = dtmp0 + KB4;

        ldd     [EXPTBL-ind_LO],KA1_LO          ! (y0_2) load KA1_LO;
        and     %l0,MASK_0x7fffffff,%l3         ! (Y0_3) hx &= 0x7fffffff;
        fmuld   %f6,%f22,%f6                    ! (Y1_1) dtmp0 *= s_h;
        fcmped  %fcc0,%f34,HTHRESH              ! (Y1_1) s > HTHRESH;

        nop
        subcc   counter,2,counter               ! update cycle counter
        ldd     [EXPTBL+%o5],%f22               ! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
        fpadd32 %f56,%f16,%f56                  ! (Y1_0) u = vis_fpadd32(u, dtmp0);

        fmuld   %f30,%f62,%f30                  ! (Y1_1) dtmp1 = yd * y;
        nop
        nop
        faddd   %f36,KA3,%f62                   ! (Y0_2) dtmp8 = dtmp8 + KA3;

        nop
        st      %g0,[%fp+%o7]                   ! (Y0_3) yisint = 0;
        fmuld   %f58,%f60,%f58                  ! (Y0_1) dtmp2 = dtmp1 * y;
        faddd   %f54,%f48,%f36                  ! (Y0_2) m_h = y + yd;

        fmuld   %f56,%f22,%f16                  ! (Y1_0) dtmp1 = u * dtmp1;
        nop
        st      %f16,[pz]                       ! (Y1_0) write into memory
        fmovdg  %fcc0,HTHRESH,%f34              ! (Y1_1) s = HTHRESH;

        fdivd   DONE,%f26,%f22                  ! (Y1_2) yd = DONE / ux;
        st      %f17,[pz+4]                     ! (Y1_0) write into memory
        bpos,pt %icc,.main_loop
        fsubd   %f32,%f10,%f10                  ! (Y0_2) s_l -= dtmp1;

.tail:
        addcc   counter,1,counter
        bneg,pn %icc,.end_loop

        faddd   %f58,KB3,%f58                   ! (Y0_0) dtmp3 = dtmp2 + KB3;
        ldd     [EXPTBL-ind_KB2],KB2            ! (Y0_0) load KB2;

        ld      [%fp+tmp4],%i2                  ! (Y0_0) ind = (int)dtmp0;
        fmuld   %f58,%f60,%f58                  ! (Y0_0) dtmp4 = dtmp3 * y;
        faddd   %f58,KB2,%f30                   ! (Y0_0) dtmp5 = dtmp4 + KB2;

        add     pz,stridez,pz                   ! pz += stridez;
        ldd     [EXPTBL-ind_KB1],KB1            ! (Y0_0) load KB1;
        sra     %i2,8,%l0                       ! (Y0_0) ind >>= 8;

        add     %l0,1021,%l2                    ! (Y0_0) eflag = (ind + 1021);
        sub     %g0,%l0,%o5                     ! (Y0_0) gflag = (1022 - ind);
        fmuld   %f30,%f60,%f48                  ! (Y0_0) dtmp6 = dtmp5 * y;

        sra     %l2,31,%l2                      ! (Y0_0) eflag = eflag >> 31;
        add     %o5,1022,%o5                    ! (Y0_0) gflag = (1022 - ind);

        sra     %o5,31,%o5                      ! (Y0_0) gflag = gflag >> 31;
        and     %l2,54,%o0                      ! (Y0_0) itmp0 = 54 & eflag;

        sub     %l2,%o5,%l2                     ! (Y0_0) ind = eflag - gflag;
        add     %l0,%o0,%l0                     ! (Y0_0) ind = ind + itmp0;

        and     %o5,52,%o5                      ! (Y0_0) itmp1 = 52 & gflag;
        faddd   %f48,KB1,%f14                   ! (Y0_0) dtmp7 = dtmp6 + KB1;

        sub     %l0,%o5,%l0                     ! (Y0_0) ind = ind - itmp1;
        and     %i2,255,%i4                     ! (Y0_0) i = ind & 0xff;

        sll     %i4,4,%o5                       ! (Y0_0) i = i << 4;

        ldd     [EXPTBL+%o5],%f56               ! (Y0_0) u = *(double*)((char*)__mt_constexp2 + i);
        add     %o2,%l0,%l0                     ! (Y0_0) ind = yisint + ind;
        fmuld   %f14,%f60,%f20                  ! (Y0_0) y = dtmp7 * y;

        sll     %l0,20,%i2                      ! (Y0_0) ind <<= 20;

        add     %o5,8,%o5                       ! (Y0_0) i += 8;
        st      %i2,[%fp+tmp2_hi]               ! (Y0_0) *(int*)&dtmp0 = ind;

        ldd     [EXPTBL+%o5],%f16               ! (Y0_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
        fmuld   %f56,%f20,%f34                  ! (Y0_0) dtmp1 = u * y;

        faddd   %f16,%f34,%f16                  ! (Y0_0) dtmp2 = dtmp0 + dtmp1;

        faddd   %f16,%f56,%f56                  ! (Y0_0) u = dtmp2 + u;
        add     %l2,513,%l2                     ! (Y0_0) ind += 513;

        sll     %l2,3,%o5                       ! (Y0_0) ind *= 8;
        ldd     [%fp+tmp2_hi],%f16              ! (Y0_0) ld dtmp0;

        ldd     [EXPTBL+%o5],%f20               ! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
        fpadd32 %f56,%f16,%f56                  ! (Y0_0) u = vis_fpadd32(u, dtmp0);

        fmuld   %f56,%f20,%f16                  ! (Y0_0) dtmp1 = u * dtmp1;
        st      %f16,[pz]                       ! (Y0_0) write into memory
        st      %f17,[pz+4]                     ! (Y0_0) write into memory

.end_loop:
        ba      .begin
        nop
.end:
        ret
        restore %g0,0,%o0

        .align  16
.update0:
        cmp     %l0,%g0                         ! if (x >= 0);
        fzero   %f30

        lda     [py+4]%asi,%l0                  ! ld ly
        bge,pt  %icc,.pos0                      ! if (x >= 0);
        or      %g0,%g0,%o5                     ! yisint = 0;

        cmp     %o0,1076                        ! if (expy >= 0x434);
        bge     .neg0                           ! if (expy >= 0x434);
        or      %g0,2,%o5                       ! yisint = 2;

        cmp     %o0,1023                        ! if (expy < 0x3ff);
        bl      .neg0                           ! if (expy < 0x3ff);
        or      %g0,0,%o5                       ! yisint = 0;

        cmp     %o0,1043                        ! if (expy <= (20 + 0x3ff));
        ble     .small0                         ! if (expy <= (20 + 0x3ff));
        sub     %o0,1023,%o0                    ! expy - 0x3ff;

        sub     %g0,%o0,%o0
        add     %o0,52,%o0                      ! sh = (52 - (expy - 0x3ff);
        srl     %l0,%o0,%i4                     ! i0 = (ly >> sh);

        sll     %i4,%o0,%i4                     ! (i0 << sh);

        srl     %l0,%o0,%o0                     ! i0 = (ly >> sh);
        cmp     %i4,%l0                         ! if ((i0 << sh) == ly);

        and     %o0,1,%o0                       ! i0 &= 1;

        sub     %g0,%o0,%o0
        add     %o0,2,%o0                       ! i0 = 2 - i0;

        move    %icc,%o0,%o5                    ! yisint = i0;

        ba      .neg0
        nop
.small0:
        sub     %g0,%o0,%o0
        cmp     %l0,%g0                         ! if (ly != 0);

        add     %o0,20,%o0                      ! sh = (20 - (expy - 0x3ff);
        bne     .neg0                           ! if (ly != 0);
        or      %g0,0,%o5                       ! yisint = 0;

        srl     %l1,%o0,%i4                     ! i0 = (hy >> sh);

        sll     %i4,%o0,%i4                     ! (i0 << sh);

        srl     %l1,%o0,%o0                     ! i0 = (hy >> sh);
        cmp     %i4,%l1                         ! if ((i0 << sh) == hy);

        and     %o0,1,%o0                       ! i0 &= 1;

        sub     %g0,%o0,%o0
        add     %o0,2,%o0                       ! i0 = 2 - i0;

        move    %icc,%o0,%o5                    ! yisint = i0;
.neg0:
        orcc    %l3,%i2,%g0                     ! if (x != 0);

        sra     %o2,31,%i4                      ! sy = (*((unsigned*)py)[0]) >> 31;
        bne,pt  %icc,3f                         ! if (x != 0);
        nop

        cmp     %i4,%g0                         ! if (sy == 0);
        be      1f                              ! if (sy == 0);
        and     %o5,1,%i4                       ! yisint &= 1;

        fdivd   DONE,%f30,%f30                  ! y0 = DONE / y0;
1:
        cmp     %i4,%g0                         ! if ((yisint & 1) == 0);
        be      2f                              ! if ((yisint & 1) == 0);
        nop

        fnegd   %f30,%f30                       ! y0 = -y0;
2:
        st      %f30,[pz]
        ba      .update_point
        st      %f31,[pz+4]
3:
        cmp     %o5,%g0                         ! if (yisint != 0);
        bne     .pos0                           ! if (yisint != 0);
        nop

        fdivd   DZERO,DZERO,%f30                ! y0 = DZERO / DZERO;
        st      %f30,[pz]
        ba      .update_point
        st      %f31,[pz+4]
.pos0:
        orcc    %l3,%i2,%g0                     ! if (x != 0);

        sra     %o2,31,%i4                      ! sy = (*((unsigned*)py)[0]) >> 31;
        bne,pt  %icc,.nzero0                    ! if (x != 0);
        nop

        cmp     %i4,%g0                         ! if (sy == 0);
        be      1f                              ! if (sy == 0);
        nop

        fdivd   DONE,%f30,%f30                  ! y0 = DONE / y0;
1:
        st      %f30,[pz]
        ba      .update_point
        st      %f31,[pz+4]
.nzero0:
        sll     %o5,11,%o5
        cmp     %l3,MASK_0x000fffff             ! if (exp > 0xfffff);

        bg,pt   %icc,.cont0                     ! if (exp > 0xfffff);
        st      %o5,[%fp+%o7]

        ldd     [%fp+tmp_mant],%f54

        or      %g0,1074,%o5
        fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);

        sll     %o5,20,%o5
        fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0];

        std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
        fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);

        ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
        for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);

        sub     %i2,%o5,%l3                     ! exp -= (1023 + 51) << 20;
        and     MASK_0x000fffff,%i2,%l4         ! hx = exp & 0xfffff;
        or      MASK_0x3ff00000,%l4,%l4         ! hx |= 0x3ff00000;
        add     %l4,2048,%l4                    ! hx += 0x800;
        and     %l4,-4096,%l4                   ! hx &= 0xfffff000;

        ba      .cont0
        st      %l4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;

        .align  16
.update1:
        cmp     counter,0
        ble,pt  %icc,.cont1
        add     py,stridey,%o5

        stx     px,[%fp+tmp_px]

        orcc    %l2,%i2,%g0                     ! if (x == 0);
        bne,pt  %icc,.nzero1                    ! if (x == 0);
        stx     %o5,[%fp+tmp_py]
.u1:
        st      counter,[%fp+tmp_counter]
        ba      .cont1
        or      %g0,0,counter
.nzero1:
        lda     [%o5]%asi,%l1                   ! ld hy;
        cmp     %l0,%g0                         ! if (x >= 0);

        lda     [%o5+4]%asi,%l0                 ! ld ly
        bge,pt  %icc,.pos1                      ! if (x >= 0);
        or      %g0,%g0,%o5                     ! yisint = 0;

        and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;

        sra     %i2,20,%i2                      ! expy = hy >> 20;

        cmp     %i2,1076                        ! if (expy >= 0x434);
        bge     .neg1                           ! if (expy >= 0x434);
        or      %g0,2,%o5                       ! yisint = 2;

        cmp     %i2,1023                        ! if (expy < 0x3ff);
        bl      .neg1                           ! if (expy < 0x3ff);
        or      %g0,0,%o5                       ! yisint = 0;

        cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
        ble     .small1                         ! if (expy <= (20 + 0x3ff));
        sub     %i2,1023,%i2                    ! expy - 0x3ff;

        sub     %g0,%i2,%i2
        add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
        srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);

        sll     %l1,%i2,%l1                     ! (i0 << sh);

        srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
        cmp     %l1,%l0                         ! if ((i0 << sh) == ly);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;

        ba      .neg1
        nop
.small1:
        sub     %g0,%i2,%i2
        cmp     %l0,%g0                         ! if (ly != 0);

        add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
        bne     .neg1                           ! if (ly != 0);
        or      %g0,0,%o5                       ! yisint = 0;

        srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);

        sll     %l0,%i2,%l0                     ! (i0 << sh);

        srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
        cmp     %l0,%l1                         ! if ((i0 << sh) == hy);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;
.neg1:
        cmp     %o5,%g0
        be      .u1
        nop
.pos1:
        sll     %o5,11,%o5
        cmp     %l2,MASK_0x000fffff             ! if (exp > 0xfffff);

        bg,pt   %icc,.cont1                     ! if (exp > 0xfffff);
        st      %o5,[%fp+%o7]

        std     %f32,[%fp+tmp5];
        std     %f54,[%fp+tmp6];
        ldd     [%fp+tmp0_hi],%f32
        ldd     [%fp+tmp_mant],%f54

        or      %g0,1074,%o5
        fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);

        sll     %o5,20,%o5
        fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0];

        std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
        fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);

        ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
        for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);

        std     %f32,[%fp+tmp0_hi];
        sub     %i2,%o5,%l2                     ! exp -= (1023 + 51) << 20;
        and     MASK_0x000fffff,%i2,%i4         ! hx = exp & 0xfffff;
        ldd     [%fp+tmp5],%f32
        or      MASK_0x3ff00000,%i4,%i4         ! hx |= 0x3ff00000;
        add     %i4,2048,%i4                    ! hx += 0x800;
        ldd     [%fp+tmp6],%f54
        and     %i4,-4096,%i4                   ! hx &= 0xfffff000;

        ba      .cont1
        st      %i4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;

        .align  16
.update2:
        cmp     counter,1
        ble,pt  %icc,.cont2
        add     py,stridey,%o5

        add     %o5,stridey,%o5
        stx     px,[%fp+tmp_px]

        orcc    %l3,%i2,%g0                     ! if (x == 0);
        bne,pt  %icc,.nzero2                    ! if (x == 0);
        stx     %o5,[%fp+tmp_py]
.u2:
        sub     counter,1,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont2
        or      %g0,1,counter
.nzero2:
        lda     [%o5]%asi,%l1                   ! ld hy;
        cmp     %l0,%g0                         ! if (x >= 0);

        lda     [%o5+4]%asi,%l0                 ! ld ly
        bge,pt  %icc,.pos2                      ! if (x >= 0);
        or      %g0,%g0,%o5                     ! yisint = 0;

        and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;

        sra     %i2,20,%i2                      ! expy = hy >> 20;

        cmp     %i2,1076                        ! if (expy >= 0x434);
        bge     .neg2                           ! if (expy >= 0x434);
        or      %g0,2,%o5                       ! yisint = 2;

        cmp     %i2,1023                        ! if (expy < 0x3ff);
        bl      .neg2                           ! if (expy < 0x3ff);
        or      %g0,0,%o5                       ! yisint = 0;

        cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
        ble     .small2                         ! if (expy <= (20 + 0x3ff));
        sub     %i2,1023,%i2                    ! expy - 0x3ff;

        sub     %g0,%i2,%i2
        add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
        srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);

        sll     %l1,%i2,%l1                     ! (i0 << sh);

        srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
        cmp     %l1,%l0                         ! if ((i0 << sh) == ly);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;

        ba      .neg2
        nop
.small2:
        sub     %g0,%i2,%i2
        cmp     %l0,%g0                         ! if (ly != 0);

        add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
        bne     .neg2                           ! if (ly != 0);
        or      %g0,0,%o5                       ! yisint = 0;

        srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);

        sll     %l0,%i2,%l0                     ! (i0 << sh);

        srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
        cmp     %l0,%l1                         ! if ((i0 << sh) == hy);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;
.neg2:
        cmp     %o5,%g0
        be      .u2
        nop
.pos2:
        sll     %o5,11,%o5
        cmp     %l3,MASK_0x000fffff             ! if (exp > 0xfffff);

        bg,pt   %icc,.cont2                     ! if (exp > 0xfffff);
        st      %o5,[%fp+%o7]

        ldd     [%fp+tmp_mant],%f54

        or      %g0,1074,%o5
        fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);

        sll     %o5,20,%o5
        fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0]

        std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
        fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);

        ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
        for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);

        sub     %i2,%o5,%l3                     ! exp -= (1023 + 51) << 20;
        and     MASK_0x000fffff,%i2,%l4         ! hx = exp & 0xfffff;
        or      MASK_0x3ff00000,%l4,%l4         ! hx |= 0x3ff00000;
        add     %l4,2048,%l4                    ! hx += 0x800;
        and     %l4,-4096,%l4                   ! hx &= 0xfffff000;

        ba      .cont2
        st      %l4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;

        .align  16
.update3:
        cmp     counter,0
        ble,pt  %icc,.cont3
        sub     px,stridex,%o5

        ld      [%fp+tmp_counter],%l1

        stx     %o5,[%fp+tmp_px]
        add     py,stridey,%o5

        add     %l1,counter,counter
        stx     %o5,[%fp+tmp_py]

        st      counter,[%fp+tmp_counter]
        ba      .cont3
        or      %g0,0,counter

        .align  16
.update4:
        cmp     counter,2
        ble,pt  %icc,.cont4
        add     py,stridey,%o5

        add     %o5,stridey,%o5
        add     %o5,stridey,%o5
        stx     px,[%fp+tmp_px]

        orcc    %l2,%i2,%g0                     ! if (x == 0);
        bne,pt  %icc,.nzero4                    ! if (x == 0);
        stx     %o5,[%fp+tmp_py]
.u4:
        sub     counter,2,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont4
        or      %g0,2,counter
.nzero4:
        lda     [%o5]%asi,%l1                   ! ld hy;
        cmp     %l0,%g0                         ! if (x >= 0);

        lda     [%o5+4]%asi,%l0                 ! ld ly
        bge,pt  %icc,.pos4                      ! if (x >= 0);
        or      %g0,%g0,%o5                     ! yisint = 0;

        and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;

        sra     %i2,20,%i2                      ! expy = hy >> 20;

        cmp     %i2,1076                        ! if (expy >= 0x434);
        bge     .neg4                           ! if (expy >= 0x434);
        or      %g0,2,%o5                       ! yisint = 2;

        cmp     %i2,1023                        ! if (expy < 0x3ff);
        bl      .neg4                           ! if (expy < 0x3ff);
        or      %g0,0,%o5                       ! yisint = 2;

        cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
        ble     .small4                         ! if (expy <= (20 + 0x3ff));
        sub     %i2,1023,%i2                    ! expy - 0x3ff;

        sub     %g0,%i2,%i2
        add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
        srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);

        sll     %l1,%i2,%l1                     ! (i0 << sh);

        srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
        cmp     %l1,%l0                         ! if ((i0 << sh) == ly);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;

        ba      .neg4
        nop
.small4:
        sub     %g0,%i2,%i2
        cmp     %l0,%g0                         ! if (ly != 0);

        add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
        bne     .neg4                           ! if (ly != 0);
        or      %g0,0,%o5                       ! yisint = 0;

        srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);

        sll     %l0,%i2,%l0                     ! (i0 << sh);

        srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
        cmp     %l0,%l1                         ! if ((i0 << sh) == hy);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;
.neg4:
        cmp     %o5,%g0
        be      .u4
        nop
.pos4:
        sll     %o5,11,%o5
        cmp     %l2,MASK_0x000fffff             ! if (exp > 0xfffff);

        bg,pt   %icc,.cont4                     ! if (exp > 0xfffff);
        st      %o5,[%fp+%o7]

        std     %f32,[%fp+tmp5];
        std     %f54,[%fp+tmp6];
        ldd     [%fp+tmp0_hi],%f32
        ldd     [%fp+tmp_mant],%f54

        or      %g0,1074,%o5
        fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);

        sll     %o5,20,%o5
        fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0]

        std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
        fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);

        ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
        for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);

        std     %f32,[%fp+tmp0_hi];
        sub     %i2,%o5,%l2                     ! exp -= (1023 + 51) << 20;
        and     MASK_0x000fffff,%i2,%i4         ! hx = exp & 0xfffff;
        ldd     [%fp+tmp5],%f32
        or      MASK_0x3ff00000,%i4,%i4         ! hx |= 0x3ff00000;
        add     %i4,2048,%i4                    ! hx += 0x800;
        ldd     [%fp+tmp6],%f54
        and     %i4,-4096,%i4                   ! hx &= 0xfffff000;

        ba      .cont4
        st      %i4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;

        .align  16
.update5:
        cmp     counter,1
        ble,pt  %icc,.cont5
        sub     px,stridex,%o5

        ld      [%fp+tmp_counter],%l1

        stx     %o5,[%fp+tmp_px]
        add     py,stridey,%o5

        add     %l1,counter,counter
        stx     %o5,[%fp+tmp_py]

        sub     counter,1,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont5
        or      %g0,1,counter

        .align  16
.update6:
        cmp     counter,0
        ble,pt  %icc,.cont6
        fmovd   DONE,%f30

        ld      [%fp+tmp_counter],%o2
        sub     px,stridex,%o5

        sub     %o5,stridex,%o5
        stx     py,[%fp+tmp_py]

        add     %o2,counter,counter
        sub     %o5,stridex,%o5
        stx     %o5,[%fp+tmp_px]

        st      counter,[%fp+tmp_counter]
        ba      .cont6
        or      %g0,0,counter

        .align  16
.update7:
        cmp     counter,0
        ble,pt  %icc,.cont7
        fmovd   DONE,%f30
        sub     px,stridex,%o5

        ld      [%fp+tmp_counter],%o2

        sub     %o5,stridex,%o5
        stx     py,[%fp+tmp_py]

        add     %o2,counter,counter
        sub     %o5,stridex,%o5
        stx     %o5,[%fp+tmp_px]

        st      counter,[%fp+tmp_counter]
        ba      .cont7
        or      %g0,0,counter

        .align  16
.update8:
        cmp     counter,2
        ble,pt  %icc,.cont8
        add     py,stridey,%o5

        add     %o5,stridey,%o5
        stx     px,[%fp+tmp_px]

        orcc    %l3,%i2,%g0                     ! if (x == 0);
        bne,pt  %icc,.nzero8                    ! if (x == 0);
        stx     %o5,[%fp+tmp_py]
.u8:
        sub     counter,2,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont8
        or      %g0,2,counter
.nzero8:
        lda     [%o5]%asi,%l1                   ! ld hy;
        cmp     %l0,%g0                         ! if (x >= 0);

        lda     [%o5+4]%asi,%l0                 ! ld ly
        bge,pt  %icc,.pos8                      ! if (x >= 0);
        or      %g0,%g0,%o5                     ! yisint = 0;

        and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;

        sra     %i2,20,%i2                      ! expy = hy >> 20;

        cmp     %i2,1076                        ! if (expy >= 0x434);
        bge     .pos8                           ! if (expy >= 0x434);
        or      %g0,2,%o5                       ! yisint = 2;

        cmp     %i2,1023                        ! if (expy < 0x3ff);
        bl      .neg8                           ! if (expy < 0x3ff);
        or      %g0,0,%o5                       ! yisint = 0;

        cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
        ble     .small8                         ! if (expy <= (20 + 0x3ff));
        sub     %i2,1023,%i2                    ! expy - 0x3ff;

        sub     %g0,%i2,%i2
        add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
        srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);

        sll     %l1,%i2,%l1                     ! (i0 << sh);

        srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
        cmp     %l1,%l0                         ! if ((i0 << sh) == ly);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;

        ba      .neg8
        nop
.small8:
        sub     %g0,%i2,%i2
        cmp     %l0,%g0                         ! if (ly != 0);

        add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
        bne     .neg8                           ! if (ly != 0);
        or      %g0,0,%o5                       ! yisint = 0;

        srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);

        sll     %l0,%i2,%l0                     ! (i0 << sh);

        srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
        cmp     %l0,%l1                         ! if ((i0 << sh) == hy);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;
.neg8:
        cmp     %o5,%g0
        be      .u8
        nop
.pos8:
        sll     %o5,11,%o5
        cmp     %l3,MASK_0x000fffff             ! if (exp > 0xfffff);

        bg,pt   %icc,.cont8                     ! if (exp > 0xfffff);
        st      %o5,[%fp+%o7]

        ldd     [%fp+tmp_mant],%f54

        or      %g0,1074,%o5
        fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);

        sll     %o5,20,%o5
        fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0]

        std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
        fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);

        ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
        for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);

        sub     %i2,%o5,%l3                     ! exp -= (1023 + 51) << 20;
        and     MASK_0x000fffff,%i2,%l4         ! hx &= 0xfffff;
        or      MASK_0x3ff00000,%l4,%l4         ! hx |= 0x3ff00000;
        add     %l4,2048,%l4                    ! hx += 0x800;
        and     %l4,-4096,%l4                   ! hx &= 0xfffff000;

        ba      .cont8
        st      %l4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;

        .align  16
.update9:
        cmp     counter,1
        ble,pt  %icc,.cont9
        sub     px,stridex,%o5

        ld      [%fp+tmp_counter],%l1

        stx     %o5,[%fp+tmp_px]
        add     py,stridey,%o5

        add     %l1,counter,counter
        stx     %o5,[%fp+tmp_py]

        sub     counter,1,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont9
        or      %g0,1,counter

        .align  16
.update10:
        cmp     counter,0
        ble,pt  %icc,.cont10
        fmovd   DONE,%f30

        ld      [%fp+tmp_counter],%o2
        sub     px,stridex,%o5

        sub     %o5,stridex,%o5
        stx     py,[%fp+tmp_py]

        add     %o2,counter,counter
        sub     %o5,stridex,%o5
        stx     %o5,[%fp+tmp_px]

        st      counter,[%fp+tmp_counter]
        ba      .cont10
        or      %g0,0,counter

        .align  16
.update11:
        cmp     counter,0
        ble,pt  %icc,.cont11
        fmovd   DONE,%f30

        ld      [%fp+tmp_counter],%o2
        sub     px,stridex,%o5

        sub     %o5,stridex,%o5
        stx     py,[%fp+tmp_py]

        add     %o2,counter,counter
        sub     %o5,stridex,%o5
        stx     %o5,[%fp+tmp_px]

        st      counter,[%fp+tmp_counter]
        ba      .cont11
        or      %g0,0,counter

        .align  16
.update12:
        cmp     counter,3
        ble,pt  %icc,.cont12
        add     py,stridey,%o5

        add     %o5,stridey,%o5
        stx     px,[%fp+tmp_px]

        add     %o5,stridey,%o5
        orcc    %l2,%i2,%g0                     ! if (x == 0);

        bne,pt  %icc,.nzero12                   ! if (x == 0);
        stx     %o5,[%fp+tmp_py]
.u12:
        sub     counter,3,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont12
        or      %g0,3,counter
.nzero12:
        lda     [%o5]%asi,%l1                   ! ld hy;
        cmp     %l0,%g0                         ! if (x >= 0);

        lda     [%o5+4]%asi,%l0                 ! ld ly
        bge,pt  %icc,.pos12                     ! if (x >= 0);
        or      %g0,%g0,%o5                     ! yisint = 0;

        and     %l1,MASK_0x7fffffff,%i2         ! hy &= 0x7fffffff;

        sra     %i2,20,%i2                      ! expy = hy >> 20;

        cmp     %i2,1076                        ! if (expy >= 0x434);
        bge     .neg12                          ! if (expy >= 0x434);
        or      %g0,2,%o5                       ! yisint = 2;

        cmp     %i2,1023                        ! if (expy < 0x3ff);
        bl      .neg12                          ! if (expy < 0x3ff);
        or      %g0,0,%o5                       ! yisint = 0;

        cmp     %i2,1043                        ! if (expy <= (20 + 0x3ff));
        ble     .small12                        ! if (expy <= (20 + 0x3ff));
        sub     %i2,1023,%i2                    ! expy - 0x3ff;

        sub     %g0,%i2,%i2
        add     %i2,52,%i2                      ! sh = (52 - (expy - 0x3ff);
        srl     %l0,%i2,%l1                     ! i0 = (ly >> sh);

        sll     %l1,%i2,%l1                     ! (i0 << sh);

        srl     %l0,%i2,%i2                     ! i0 = (ly >> sh);
        cmp     %l1,%l0                         ! if ((i0 << sh) == ly);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;

        ba      .neg12
        nop
.small12:
        sub     %g0,%i2,%i2
        cmp     %l0,%g0                         ! if (ly != 0);

        add     %i2,20,%i2                      ! sh = (20 - (expy - 0x3ff);
        bne     .neg12                          ! if (ly != 0);
        or      %g0,0,%o5                       ! yisint = 0;

        srl     %l1,%i2,%l0                     ! i0 = (hy >> sh);

        sll     %l0,%i2,%l0                     ! (i0 << sh);

        srl     %l1,%i2,%i2                     ! i0 = (hy >> sh);
        cmp     %l0,%l1                         ! if ((i0 << sh) == hy);

        and     %i2,1,%i2                       ! i0 &= 1;

        sub     %g0,%i2,%i2
        add     %i2,2,%i2                       ! i0 = 2 - i0;

        move    %icc,%i2,%o5                    ! yisint = i0;
.neg12:
        cmp     %o5,%g0
        be      .u12
        nop
.pos12:
        sll     %o5,11,%o5
        cmp     %l2,MASK_0x000fffff             ! y0 = vis_fand(x, MMANT);

        bg,pt   %icc,.cont12                    ! y0 = vis_fand(x, MMANT);
        st      %o5,[%fp+%o7]

        std     %f32,[%fp+tmp5];
        std     %f54,[%fp+tmp6];
        ldd     [%fp+tmp0_hi],%f32
        ldd     [%fp+tmp_mant],%f54

        or      %g0,1074,%o5
        fand    %f32,%f54,%f32                  ! y0 = vis_fand(x, MMANT);

        sll     %o5,20,%o5
        fxtod   %f32,%f32                       ! ax = (double) ((long long *) & y0)[0]

        std     %f32,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & ax)[0];
        fand    %f32,%f54,%f32                  ! x = vis_fand(ax, MMANT);

        ld      [%fp+tmp0_hi],%i2               ! exp = ((unsigned int*) & ax)[0];
        for     %f32,DONE,%f32                  ! x = vis_for(x, DONE);

        std     %f32,[%fp+tmp0_hi];
        sub     %i2,%o5,%l2                     ! exp -= (1023 + 51) << 20;
        and     MASK_0x000fffff,%i2,%i4         ! hx &= 0xfffff;
        ldd     [%fp+tmp5],%f32
        or      MASK_0x3ff00000,%i4,%i4         ! hx |= 0x3ff00000;
        add     %i4,2048,%i4                    ! hx += 0x800;
        ldd     [%fp+tmp6],%f54
        and     %i4,-4096,%i4                   ! hx &= 0xfffff000;

        ba      .cont12
        st      %i4,[%fp+tmp1_hi]               ! *(int*)&ax = hx;

        .align  16
.update13:
        cmp     counter,2
        ble,pt  %icc,.cont13
        sub     px,stridex,%o5

        ld      [%fp+tmp_counter],%l1

        stx     %o5,[%fp+tmp_px]
        add     py,stridey,%o5

        add     %l1,counter,counter
        stx     %o5,[%fp+tmp_py]

        sub     counter,2,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont13
        or      %g0,2,counter

        .align  16
.update14:
        cmp     counter,1
        ble,pt  %icc,.cont14
        fmovd   DONE,%f30

        ld      [%fp+tmp_counter],%o2
        sub     px,stridex,%o5

        sub     %o5,stridex,%o5
        stx     py,[%fp+tmp_py]

        add     %o2,counter,counter
        sub     %o5,stridex,%o5
        stx     %o5,[%fp+tmp_px]

        sub     counter,1,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont14
        or      %g0,1,counter

        .align  16
.update15:
        cmp     counter,1
        ble,pt  %icc,.cont15
        fmovd   DONE,%f30

        sub     px,stridex,%o5

        ld      [%fp+tmp_counter],%o2
        sub     %o5,stridex,%o5
        stx     py,[%fp+tmp_py]

        add     %o2,counter,counter
        sub     %o5,stridex,%o5
        stx     %o5,[%fp+tmp_px]

        sub     counter,1,counter
        st      counter,[%fp+tmp_counter]
        ba      .cont15
        or      %g0,1,counter

        .align  16
.spec0:
        lda     [py+4]%asi,%o5                  ! ld ly;
        lda     [px]%asi,%f16                   ! y0 = *px;
        lda     [px+4]%asi,%f17                 ! y0 = *px;
        orcc    %l1,%o5,%g0                     ! if (hy | ly) != 0;

        bne,pn  %icc,1f
        sethi   %hi(0x7ff00000),%o5

        st      DONE_HI,[pz]
        ba      .update_point
        st      DONE_LO,[pz+4]
1:
        cmp     %l3,%o5                         ! if (hx > 0x7ff00000);
        bgu,a,pn        %icc,6f                 ! if (hx > 0x7ff00000);
        fmuld   %f16,%f16,%f16                  ! *pz = y0 * y0;

        bne,pt  %icc,2f                         ! if (hx != 0x7ff00000);
        orcc    %l3,%i2,%g0                     ! if (hx | lx) != 0;

        cmp     %i2,0                           ! if (lx) != 0;
        bne,pn  %icc,5f                         ! if (lx) != 0;
        srl     %o2,31,%o5                      ! sy;

        st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
        ba      3f
        cmp     %o5,0                           ! if (sy == 0);
2:
        bne,pt  %icc,4f                         ! if (hx | lx) != 0;
        srl     %l0,31,%o5                      ! sx;

        st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
        srl     %o2,31,%o5                      ! sy;
        cmp     %o5,0                           ! if (sy == 0);
3:
        be,pt   %icc,.update_point              ! if (sy == 0);
        st      %i2,[pz+4]                      ! ((int*)pz)[1] = lx;

        ld      [pz],%f16                       ! *pz;
        ld      [pz+4],%f17                     ! *pz;
        fdivd   DONE,%f16,%f16                  ! *pz = DONE / *pz;

        st      %f16,[pz]
        ba      .update_point
        st      %f17,[pz+4]
4:
        cmp     %o5,0                           ! if (sx == 0);
        bne,a,pt        %icc,1f
        nop

        st      DONE_HI,[pz]                    ! *pz = DONE;
        ba      .update_point
        st      DONE_LO,[pz+4]                  ! *pz = DONE;
1:
        fdivd   DZERO,DZERO,%f16                ! *pz = DZERO / DZERO;
        st      %f16,[pz]
        ba      .update_point
        st      %f17,[pz+4]
5:
        fmuld   %f16,%f16,%f16                  ! *pz = y0 * y0;
6:
        st      %f16,[pz]
        ba      .update_point
        st      %f17,[pz+4]

        .align  16
.spec1:
        lda     [px]%asi,%f14                   ! y0 = *px;
        lda     [px+4]%asi,%f15                 ! y0 = *px;
        sethi   %hi(0x7ff00000),%o5
        lda     [py+4]%asi,%i4                  ! ld ly;
        srl     %o2,31,%o2                      ! sy
        cmp     %l3,%o5                         ! if (hx >= 0x7ff00000);
        bcc,pn  %icc,3f
        nop

        cmp     %l1,%o5                         ! if (hy > 0x7ff00000);
        bgu,a,pt        %icc,.spec1_nan_inf     ! if (hy > 0x7ff00000);
        lda     [py]%asi,%f16                   ! ld y

        bne,a,pt        %icc,1f                 ! if (hy != 0x7ff00000);
        cmp     %i2,0                           ! if (lx != 0);

        ba      2f                              ! if (hy == 0x7ff00000);
        cmp     %i4,0                           ! if (ly != 0);
1:
        bne,pt  %icc,7f                         ! if (lx != 0);
        nop

        cmp     %l3,0                           ! if (hx == 0);
        be,a,pt %icc,6f                         ! if (hx == 0);
        st      %l3,[pz]                        ! ((int*)pz)[0] = hx;

        cmp     %l3,MASK_0x3ff00000             ! if (hx == 0x3ff00000);
        be,a,pn %icc,6f                         ! if (hx == 0x3ff00000);
        st      %l3,[pz]                        ! ((int*)pz)[0] = hx;

        ba      5f
        cmp     %l3,%o5                         ! if (hx != 0x7ff00000);
3:
        bgu,a,pt        %icc,.spec1_nan_inf     ! if (hx > 0x7ff00000);
        lda     [py]%asi,%f16                   ! ld y

        bne,a,pn        %icc,1f                 ! if (hx != 0x7ff00000);
        cmp     %l1,%o5                         ! if (hy > 0x7ff00000);

        cmp     %i2,0                           ! if (lx != 0);
        bne,a,pt        %icc,.spec1_nan_inf     ! if (lx != 0);
        lda     [py]%asi,%f16                   ! ld y

        cmp     %l1,%o5                         ! if (hy > 0x7ff00000);
1:
        bgu,a,pt        %icc,.spec1_nan_inf     ! if (hy > 0x7ff00000);
        lda     [py]%asi,%f16                   ! ld y

        bne,pn  %icc,3f                         ! if (hy != 0x7ff00000);
        nop

        cmp     %i4,0                           ! if (ly != 0);
2:
        bne,a,pn        %icc,.spec1_nan_inf     ! if (ly != 0);
        lda     [py]%asi,%f16                   ! ld y

        cmp     %l3,MASK_0x3ff00000             ! if (hx != 0x3ff00000);
        bne,pn  %icc,1f                         ! if (hx != 0x3ff00000);
        cmp     %i2,0                           ! if (lx != 0);

        bne,pn  %icc,1f                         ! if (lx != 0);
        nop

        ld      [py],%f16                       ! ld y
        ld      [py+4],%f17                     ! ld y
        fzero   %f14
        fmuld   %f16,%f14,%f14                  ! *pz = *py * 0.0;
        st      %f14,[pz]
        ba      .update_point
        st      %f15,[pz+4]
1:
        sub     %l3,MASK_0x3ff00000,%o7         ! (hx - 0x3ff00000);
        srlx    %o7,63,%l2                      ! (hx - 0x3ff00000) >> 63;

        cmp     %l2,%o2                         ! if ((hx < 0x3ff00000) == sy)
        be,a,pn %icc,1f                         ! if ((hx < 0x3ff00000) == sy)
        st      %l1,[pz]                        ! ((int*)pz)[0] = hy;

        st      DZERO_HI,[pz]                   ! *pz = DZERO;
        ba      .update_point
        st      DZERO_LO,[pz+4]                 ! *pz = DZERO;
1:
        ba      .update_point
        st      %i4,[pz+4]                      ! ((int*)pz)[0] = ly;
3:
        cmp     %o0,1086                        ! if (expy >= 0x43e);
        bge,pn  %icc,4f                         ! if (expy >= 0x43e)
        nop

        srl     %l0,31,%l0                      ! sx;
        cmp     %l0,0                           ! if (sx == 0);
        be,pn   %icc,2f
        or      %g0,0,%l4

        cmp     %o0,1076                        ! if (expy >= 0x434);

        bge,pn  %icc,2f                         ! if (expy >= 0x434);
        or      %g0,2,%l4                       ! yisint = 2;

        cmp     %o0,1023                        ! if (expy < 0x3ff);
        bl,a,pn %icc,2f                         ! if (expy < 0x3ff);
        or      %g0,0,%l4                       ! yisint = 0;

        cmp     %o0,1043                        ! if (expy <= (20 + 0x3ff));
        ble,pn  %icc,1f
        sub     %o0,1023,%l2                    ! (expy - 0x3ff);

        sub     %g0,%l2,%l2                     ! 0 - (expy - 0x3ff);
        add     %l2,52,%l2                      ! sh = 52 - (expy - 0x3ff);
        srl     %i4,%l2,%o0                     ! i0 = ly >> sh;
        sll     %o0,%l2,%l2                     ! i0 << sh;
        cmp     %l2,%i4                         ! if ((i0 << sh) != ly);
        bne,a,pn        %icc,2f                 ! if ((i0 << sh) != ly);
        or      %g0,0,%l4                       ! yisint = 0;

        and     %o0,1,%o0                       ! i0 &= 1;
        sub     %g0,%o0,%o0

        ba      2f
        add     %o0,2,%l4                       ! yisint = 2 - (i0 & 1);
1:
        cmp     %i4,0                           ! if (ly != 0)
        bne,a,pn        %icc,2f                 ! if (ly != 0)
        or      %g0,0,%l4                       ! yisint = 0;

        sub     %o0,1023,%l2                    ! (expy - 0x3ff);
        sub     %g0,%l2,%l2                     ! 0 - (expy - 0x3ff);
        add     %l2,20,%l2                      ! sh = 20 - (expy - 0x3ff);
        srl     %l1,%l2,%o0                     ! i0 = hy >> sh;
        sll     %o0,%l2,%l2                     ! i0 << sh;
        cmp     %l2,%l1                         ! if ((i0 << sh) != hy);
        bne,a,pn        %icc,2f                 ! if ((i0 << sh) != hy);
        or      %g0,0,%l4                       ! yisint = 0;

        and     %o0,1,%o0                       ! i0 &= 1;
        sub     %g0,%o0,%o0
        add     %o0,2,%l4                       ! yisint = 2 - (i0 & 1);
2:
        cmp     %o2,0                           ! if (sy == 0);
        sll     %l4,31,%l4                      ! yisint << 31;
        be,pt   %icc,1f                         ! if (sy == 0);
        add     %l3,%l4,%l3                     ! hx += yisint << 31;

        or      %g0,%l4,%l3                     ! hx = yisint << 31;
        or      %g0,0,%i2                       ! lx = 0;
1:
        st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
        ba      .update_point
        st      %i2,[pz+4]                      ! ((int*)pz)[1] = lx;
4:
        cmp     %i2,0                           ! if (lx != 0);
        bne,pn  %icc,7f                         ! if (lx != 0);
        nop

        cmp     %l3,%o5                         ! if (hx != 0x7ff00000);
5:
        bne,pn  %icc,7f                         ! if (hx != 0x7ff00000);
        nop

        st      %l3,[pz]                        ! ((int*)pz)[0] = hx;
6:
        cmp     %o2,0                           ! if (sy == 0);
        be,pt   %icc,.update_point
        st      %i2,[pz+4]                      ! ((int*)pz)[1] = lx;

        ld      [pz],%f14                       ! ld *pz;
        ld      [pz+4],%f15                     ! ld *pz;
        fdivd   DONE,%f14,%f14                  ! *pz = DONE / *pz;
        st      %f14,[pz]
        ba      .update_point
        st      %f15,[pz+4]
7:
        sub     %l3,MASK_0x3ff00000,%o7         ! hx - 0x3ff00000;
        srlx    %o7,63,%l2                      ! (hx - 0x3ff00000) >> 63;
        cmp     %l2,%o2                         ! if (hx < 0x3ff00000) == sy);
        be,a,pn %icc,1f                         ! if (hx < 0x3ff00000) == sy);
        ldd     [EXPTBL-ind_HUGE],%f14          ! y0 = _HUGE;

        ldd     [EXPTBL-ind_TINY],%f14          ! y0 = _TINY;
1:
        fmuld   %f14,%f14,%f14                  ! *pz = y0 * y0

        st      %f14,[pz]
        ba .update_point
        st      %f15,[pz+4]

        .align  16
.spec1_nan_inf:
        lda     [py+4]%asi,%f17                 ! ld y
        fmuld   %f14,%f16,%f16                  ! *pz = *px * *py
        st      %f16,[pz]
        ba      .update_point
        st      %f17,[pz+4]


        .align  16
.update_point:
        add     px,stridex,px
        ba      .begin1
        add     py,stridey,py

        .align  64
.stridex_zero:

        sra     stridez,0,stridez
        ld      [%i1],%f18                      ! y0 = px[0];
        ld      [%i1+4],%f19                    ! y0 = px[0];

        sra     %i4,0,stridey
        sethi   %hi(0xffc00),MASK_0x000fffff
        ldd     [%l0+80],%f12                   ! ld MMANT

        sllx    stridez,3,stridez
        add     MASK_0x000fffff,0x3ff,MASK_0x000fffff
        ldd     [%l0+8],%f56                    ! ld  DONE

        sllx    stridey,3,stridey
        ldd     [%l0+88],%f14                   ! ld  MROUND

        ldd     [%l0+96],%f16                   ! ld  MHI20
        cmp     %o0,MASK_0x000fffff             ! if (exp <= 0xfffff)

        bg,pt   %icc,1f
        srl     %o0,20,%o0                      ! exp = (exp >> 20);

        fxtod   %f18,%f18                       ! y0 = (double) ((long long *) & y0)[0];
        std     %f18,[%fp+tmp0_hi]              ! exp = ((unsigned int*) & y0)[0];
        or      %g0,1074,%i2
        ld      [%fp+tmp0_hi],%o0               ! exp = ((unsigned int*) & y0)[0];
        srl     %o0,20,%o0                      ! exp = (exp >> 20);
        sub     %o0,%i2,%o0                     ! exp -= (1023 + 51) << 20;
1:
        ldd     [%l0+24],MHI32
        sub     %o0,2046,%l5                    ! exp = exp - 2046;
        fand    %f18,%f12,%f18                  ! x = vis_fand(y0, MMANT);

        ldd     [%l0+48],%f10                   ! ld KA1
        for     %f18,%f56,%f18                  ! x = vis_for(x, DONE);

        ldd     [EXPTBL-ind_HI],%f28            ! ld KA1_HI
        fpadd32 %f18,%f14,%f44                  ! ax = vis_fpadd32(x, MROUND);

        ldd     [%l0+32],%f46                   ! ld KA5
        fand    %f44,%f16,%f60                  ! ax = vis_fand(ax, MHI20);

        std     %f60,[%fp+tmp0_hi]              ! itmp0 = (hx >> 20);
        faddd   %f18,%f60,%f50                  ! ux = x + ax;

        ldd     [EXPTBL-ind_LO],%f52            ! ld KA1_LO
        fsubd   %f18,%f60,%f30                  ! u = x - ax;

        ld      [%fp+tmp0_hi],%i2               ! itmp0 = (hx >> 20);
        fdivd   %f56,%f50,%f56                  ! yd = DONE / ux;
        fand    %f50,MHI32,%f50                 ! ux = vis_fand(ux, MHI32);

        srl     %i2,20,%l3                      ! itmp0 = (hx >> 20);
        ldd     [%l0+40],%f26                   ! ld KA3

        srl     %i2,8,%i2                       ! i = (hx >> 8);
        add     %l5,%l3,%l5                     ! exp += itmp0;

        and     %i2,4080,%o3                    ! i = i & 0xff0;
        sll     %l5,8,%l3                       ! itmp0 = exp << 8;
        st      %l3,[%fp+tmp1_hi]               ! (double)itmp0;
        fsubd   %f50,%f60,%f60                  ! dtmp0 = (ux - ax);

        add     %o3,8,%i2
        ldd     [%o3+LOGTBL],%f58               ! y = *(double *)((char*)__mt_constlog2 + i);

        ldd     [%i2+LOGTBL],%f20               ! dtmp0 = *(double *)((char*)__mt_constlog2 + i + 8);

        ld      [%fp+tmp1_hi],%f8               ! (double)itmp0;

        fitod   %f8,%f62                        ! (double)itmp0;

        faddd   %f58,%f62,%f22                  ! y += (double)itmp0;

        fsubd   %f18,%f60,%f62                  ! s_l = (x - dtmp0);
        fmuld   %f30,%f56,%f16                  ! s = u * yd;

        fmuld   %f10,%f56,%f8                   ! dtmp0 = KA1 * yd;
        fand    %f16,MHI32,%f58                 ! s_h = vis_fand(s, MHI32);

        ldd     [%l0+56],HTHRESH
        fmuld   %f16,%f16,%f18                  ! y = s * s;

        ldd     [%l0+64],LTHRESH
        fmuld   %f58,%f50,%f60                  ! dtmp0 = s_h * ux;

        ldd     [%l0+72],XKB4
        fmuld   %f28,%f58,%f50                  ! yd = KA1_HI * s_h;

        ldd     [EXPTBL-ind_KB1],XKB1
        fmuld   %f46,%f18,%f56                  ! dtmp8 = KA5 * y;

        ldd     [EXPTBL-ind_KB2],XKB2
        fmuld   %f58,%f62,%f46                  ! dtmp1 = s_h * s_l;
        fsubd   %f30,%f60,%f62                  ! s_l = u - dtmp0;

        ldd     [EXPTBL-ind_KB3],XKB3
        fmuld   %f52,%f58,%f10                  ! dtmp1 = KA1_LO * s_h;
        faddd   %f22,%f50,%f28                  ! m_h = y + yd;

        ldd     [EXPTBL-ind_KB5],XKB5
        faddd   %f56,%f26,%f58                  ! dtmp8 = dtmp8 + KA3;

        add     EXPTBL,8,EXPTBL_P8
        fsubd   %f62,%f46,%f46                  ! s_l -= dtmp1;

        fsubd   %f28,%f22,%f60                  ! dtmp2 = m_h - y;

        st      %g0,[%fp+tmp0_lo]               ! *((int*)&dtmp0 + 1) = 0;
        faddd   %f20,%f10,%f56                  ! dtmp0 += dtmp1;

        st      %g0,[%fp+tmp1_lo]               ! *((int*)&dtmp0 + 1) = 0;
        fmuld   %f58,%f18,%f18                  ! dtmp8 = dtmp8 * y;

        st      %g0,[%fp+tmp2_lo]               ! *((int*)&dtmp0 + 1) = 0;
        fmuld   %f8,%f46,%f62                   ! s_l = dtmp0 * s_l;

        fsubd   %f60,%f50,%f10                  ! dtmp2 -= yd;

        fmuld   %f18,%f16,%f58                  ! s = dtmp8 * s;

        fsubd   %f10,%f62,%f46                  ! dtmp2 -= s_l;

        fsubd   %f58,%f46,%f50                  ! y = s - dtmp2;

        faddd   %f50,%f56,%f60                  ! y += dtmp0;

        faddd   %f60,%f28,%f18                  ! dtmp0 = y + m_h;

        fand    %f18,MHI32,s_h                  ! s_h = vis_fand(dtmp0, MHI32);

        fsubd   s_h,%f28,%f62                   ! dtmp0 = (s_h - m_h);

        fsubd   %f60,%f62,yr                    ! yr = y - dtmp0;

.xbegin:
        ld      [%fp+tmp_counter],counter
        ldx     [%fp+tmp_py],py
        st      %g0,[%fp+tmp_counter]
.xbegin1:
        subcc   counter,1,counter
        bneg,pn %icc,.end
        nop

        lda     [py]0x82,%l2                    ! (Y0_3) hy = *py;

        lda     [py]0x82,%f18                   ! (Y0_3) yd = *py;
        lda     [py+4]%asi,%f19                 ! (Y0_3) yd = *py;

        sra     %l2,20,%l5                      ! (Y0_3) expy = hy >> 20;

        and     %l5,0x7ff,%l5                   ! (Y0_3) expy &= 0x7ff;

        cmp     %l5,959                         ! (Y0_3) if (expy < 0x3fb);

        bl,pn   %icc,.xspec0                    ! (Y0_3) if (expy < 0x3fb);
        nop

        cmp     %l5,1086                        ! (Y0_2) if (expy >= 0x43e);

        bge,pn  %icc,.xspec1                    ! (Y0_2) if (expy >= 0x43e);
        nop

        add     py,stridey,py                   ! y += stridey;
        fand    %f18,MHI32,%f12                 ! (Y0_2) s = vis_fand(yd, MHI32);

        lda     [py]0x82,%l5                    ! (Y1_2) hy = *py;

        lda     [py]0x82,%f10                   ! (Y1_2) yd = *py;
        lda     [py+4]%asi,%f11                 ! (Y1_2) yd = *py;

        sra     %l5,20,%l5                      ! (Y1_2) expy = hy >> 20;

        and     %l5,0x7ff,%l5                   ! (Y1_2) expy &= 0x7ff;

        cmp     %l5,959                         ! (Y1_2) if (expy < 0x3fb);
        add     py,stridey,py                   ! y += stridey;
        fmuld   s_h,%f12,%f50                   ! (Y0_2) s = s_h * s;
        fsubd   %f18,%f12,%f56                  ! (Y0_2) dtmp0 = (yd - s);

        fmuld   %f18,yr,%f26                    ! (Y0_2) dtmp1 = yd * yr;
        bl,pn   %icc,.xupdate0                  ! (Y1_2) if (expy < 0x3fb);
        nop
.xcont0:
        cmp     %l5,1086                        ! (Y1_2) if (expy >= 0x43e);
        bge,pn  %icc,.xupdate1                  ! (Y0_2) if (expy >= 0x43e);
        nop
.xcont1:
        fmuld   %f56,s_h,%f58                   ! (Y0_2) dtmp0 *= s_h;
        fand    %f10,MHI32,%f12                 ! (Y1_2) s = vis_fand(yd, MHI32);

        fcmped  %fcc0,%f50,HTHRESH              ! (Y0_2) if (s > HTHRESH);

        faddd   %f58,%f26,%f48                  ! (Y0_2) yd = dtmp0 + dtmp1;

        lda     [py]0x82,%l5                    ! (Y2_2) hy = *py;
        fmovdg  %fcc0,HTHRESH,%f50              ! (Y0_2) s = HTHRESH;

        fmovdg  %fcc0,DZERO,%f48                ! (Y0_2) yd = DZERO;

        fcmped  %fcc1,%f50,LTHRESH              ! (Y0_2) if (s < LTHRESH);

        lda     [py]0x82,%f14                   ! (Y2_2) yd = *py;
        lda     [py+4]%asi,%f15                 ! (Y2_2) yd = *py;

        sra     %l5,20,%l5                      ! (Y2_2) expy = hy >> 20;

        fmovdl  %fcc1,DZERO,%f48                ! (Y0_2) yd = DZERO;

        add     py,stridey,py                   ! y += stridey;
        and     %l5,0x7ff,%l5                   ! (Y2_2) expy &= 0x7ff;
        fmovdl  %fcc1,LTHRESH,%f50              ! (Y0_2) s = LTHRESH;

        cmp     %l5,959                         ! (Y2_2) if (expy < 0x3fb);

        fmuld   s_h,%f12,%f16                   ! (Y1_2) s = s_h * s;
        bl,pn   %icc,.xupdate2                  ! (Y2_2) if (expy < 0x3fb);
        fsubd   %f10,%f12,%f56                  ! (Y1_2) dtmp0 = (yd - s);
.xcont2:
        cmp     %l5,1086                        ! (Y2_2) if (expy >= 0x43e);
        fmuld   %f10,yr,%f8                     ! (Y1_2) dtmp1 = yd * yr;
        faddd   %f50,%f48,%f28                  ! (Y0_2) dtmp0 = (s + yd);

        lda     [py]0x82,%l5                    ! (Y0_3) hy = *py;
        bge,pn  %icc,.xupdate3                  ! (Y2_2) if (expy >= 0x43e);
        nop
.xcont3:
        fmuld   %f56,s_h,%f58                   ! (Y1_2) dtmp0 *= s_h;
        fand    %f14,MHI32,%f44                 ! (Y2_2) s = vis_fand(yd, MHI32);

        fcmped  %fcc0,%f16,HTHRESH              ! (Y1_2) if (s > HTHRESH);

        fdtoi   %f28,%f3                        ! (Y0_2) u = (double)(int)dtmp0;

        st      %f3,[%fp+tmp3]                  ! (Y0_2) ind = (int)dtmp0;

        faddd   %f58,%f8,%f10                   ! (Y1_2) yd = dtmp0 + dtmp1;

        lda     [py]0x82,%f18                   ! (Y0_3) yd = *py;
        lda     [py+4]%asi,%f19                 ! (Y0_3) yd = *py;
        fmovdg  %fcc0,HTHRESH,%f16              ! (Y1_2) s = HTHRESH;

        fitod   %f3,%f58                        ! (Y0_2) u = (double)(int)dtmp0;

        fmovdg  %fcc0,DZERO,%f10                ! (Y1_2) yd = DZERO;

        sra     %l5,20,%l5                      ! (Y0_3) expy = hy >> 20;
        fcmped  %fcc1,%f16,LTHRESH              ! (Y1_2) if (s < LTHRESH);

        and     %l5,0x7ff,%l5                   ! (Y0_3) expy &= 0x7ff;
        fsubd   %f50,%f58,%f54                  ! (Y0_2) y = s - u;

        cmp     %l5,959                         ! (Y0_3) if (expy < 0x3fb);

        bl,pn   %icc,.xupdate4                  ! (Y0_3) if (expy < 0x3fb);
        nop
.xcont4:
        fmovdl  %fcc1,DZERO,%f10                ! (Y1_2) yd = DZERO;

        fmovdl  %fcc1,LTHRESH,%f16              ! (Y1_2) s = LTHRESH;

        faddd   %f54,%f48,%f54                  ! (Y0_2) y = y + yd;

        ld      [%fp+tmp3],%o2                  ! (Y0_2) ind = (int)dtmp0;


        fsubd   %f14,%f44,%f50                  ! (Y2_1) dtmp0 = (yd - s);

        cmp     %l5,1086                        ! (Y0_2) if (expy >= 0x43e);

        fmuld   s_h,%f44,%f44                   ! (Y2_1) s = s_h * s;
        bge,pn  %icc,.xupdate5                  ! (Y0_2) if (expy >= 0x43e);
        faddd   %f16,%f10,%f22                  ! (Y1_1) dtmp0 = (s + yd);
.xcont5:
        sra     %o2,8,%o0                       ! (Y0_1) ind >>= 8;
        add     py,stridey,py                   ! y += stridey;
        fmuld   %f14,yr,%f20                    ! (Y2_1) dtmp1 = yd * yr;

        add     %o0,1021,%i1                    ! (Y0_1) eflag = (ind + 1021);
        fmuld   XKB5,%f54,%f48                  ! (Y0_1) dtmp0 = XKB5 * y;

        sub     %g0,%o0,%o3                     ! (Y0_1) gflag = (1022 - ind);
        fmuld   %f50,s_h,%f52                   ! (Y2_1) dtmp0 *= s_h;
        fand    %f18,MHI32,%f12                 ! (Y0_2) s = vis_fand(yd, MHI32);

        sra     %i1,31,%o1                      ! (Y0_1) eflag = eflag >> 31;
        add     %o3,1022,%l0                    ! (Y0_1) gflag = (1022 - ind);
        fcmped  %fcc0,%f44,HTHRESH              ! (Y2_1) if (s > HTHRESH);

        sra     %l0,31,%o4                      ! (Y0_1) gflag = gflag >> 31;
        and     %o1,54,%i4                      ! (Y0_1) itmp0 = 54 & eflag;
        fdtoi   %f22,%f4                        ! (Y1_1) u = (double)(int)dtmp0;

        add     %o0,%i4,%i2                     ! (Y0_1) ind = ind + itmp0;
        and     %o4,52,%l3                      ! (Y0_1) itmp1 = 52 & gflag;
        st      %f4,[%fp+tmp4]                  ! (Y1_1) ind = (int)dtmp0;
        faddd   %f48,XKB4,%f60                  ! (Y0_1) dtmp1 = dtmp0 + XKB4;

        sub     %i2,%l3,%l2                     ! (Y0_1) ind = ind - itmp1;
        sub     %o1,%o4,%o4                     ! (Y0_1) ind = eflag - gflag;
        faddd   %f52,%f20,%f62                  ! (Y2_1) yd = dtmp0 + dtmp1;

        sll     %l2,20,%o3                      ! (Y0_1) ind <<= 20;
        lda     [py]0x82,%l5                    ! (Y1_2) hy = *py;
        fmovdg  %fcc0,HTHRESH,%f44              ! (Y2_1) s = HTHRESH;

        st      %o3,[%fp+tmp0_hi]               ! (Y0_1) *(int*)&dtmp0 = ind;
        fitod   %f4,%f48                        ! (Y1_1) u = (double)(int)dtmp0;

        fmuld   %f60,%f54,%f60                  ! (Y0_1) dtmp2 = dtmp1 * y;

        lda     [py]0x82,%f20                   ! (Y1_2) yd = *py;
        lda     [py+4]%asi,%f21                 ! (Y1_2) yd = *py;
        fmovdg  %fcc0,DZERO,%f62                ! (Y2_1) yd = DZERO;

        fcmped  %fcc1,%f44,LTHRESH              ! (Y2_1) if (s < LTHRESH);

        fsubd   %f16,%f48,%f50                  ! (Y1_1) y = s - u;

        faddd   %f60,XKB3,%f60                  ! (Y0_1) dtmp3 = dtmp2 + XKB3;

        sra     %l5,20,%l5                      ! (Y1_2) expy = hy >> 20;

        fmovdl  %fcc1,DZERO,%f62                ! (Y2_1) yd = DZERO;

        and     %l5,0x7ff,%l5                   ! (Y1_2) expy &= 0x7ff;
        fmovdl  %fcc1,LTHRESH,%f44              ! (Y2_1) s = LTHRESH;

        cmp     %l5,959                         ! (Y1_2) if (expy < 0x3fb);
        fmuld   %f60,%f54,%f48                  ! (Y0_1) dtmp4 = dtmp3 * y;
        faddd   %f50,%f10,%f52                  ! (Y1_1) y = y + yd;

        ld      [%fp+tmp4],%o1                  ! (Y1_1) ind = (int)dtmp0;

        add     py,stridey,py                   ! y += stridey;
        fmuld   s_h,%f12,%f50                   ! (Y0_2) s = s_h * s;
        fsubd   %f18,%f12,%f56                  ! (Y0_2) dtmp0 = (yd - s);

        fmuld   %f18,yr,%f26                    ! (Y0_2) dtmp1 = yd * yr;
        bl,pn   %icc,.xupdate6                  ! (Y1_2) if (expy < 0x3fb);
        faddd   %f44,%f62,%f28                  ! (Y2_1) dtmp0 = (s + yd);
.xcont6:
        sra     %o1,8,%o3                       ! (Y1_1) ind >>= 8;
        cmp     %l5,1086                        ! (Y1_2) if (expy >= 0x43e);
        fmuld   XKB5,%f52,%f22                  ! (Y1_1) dtmp0 = XKB5 * y;
        faddd   %f48,XKB2,%f14                  ! (Y0_1) dtmp5 = dtmp4 + XKB2;

        add     %o3,1021,%o0                    ! (Y1_1) eflag = (ind + 1021);
        bge,pn  %icc,.xupdate7                  ! (Y0_2) if (expy >= 0x43e);
        nop
.xcont7:
        sub     %g0,%o3,%i2                     ! (Y1_1) gflag = (1022 - ind);
        fmuld   %f56,s_h,%f58                   ! (Y0_2) dtmp0 *= s_h;
        fand    %f20,MHI32,%f12                 ! (Y1_2) s = vis_fand(yd, MHI32);

        sra     %o0,31,%l3                      ! (Y1_1) eflag = eflag >> 31;
        add     %i2,1022,%l2                    ! (Y1_1) gflag = (1022 - ind);
        fcmped  %fcc0,%f50,HTHRESH              ! (Y0_2) if (s > HTHRESH);

        sra     %l2,31,%o7                      ! (Y1_1) gflag = gflag >> 31;
        and     %l3,54,%i1                      ! (Y1_1) itmp0 = 54 & eflag;
        fdtoi   %f28,%f3                        ! (Y2_1) u = (double)(int)dtmp0;

        add     %o3,%i1,%l0                     ! (Y1_1) ind = ind + itmp0;
        and     %o7,52,%l1                      ! (Y1_1) itmp1 = 52 & gflag;
        st      %f3,[%fp+ind_buf]               ! (Y2_1) ind = (int)dtmp0;
        faddd   %f22,XKB4,%f60                  ! (Y1_1) dtmp1 = dtmp0 + XKB4;

        sub     %l0,%l1,%i4                     ! (Y1_1) ind = ind - itmp1;
        sub     %l3,%o7,%o7                     ! (Y1_1) ind = eflag - gflag;
        faddd   %f58,%f26,%f48                  ! (Y0_2) yd = dtmp0 + dtmp1;

        sll     %i4,20,%i2                      ! (Y1_1) ind <<= 20;
        lda     [py]0x82,%l5                    ! (Y2_2) hy = *py;
        fmovdg  %fcc0,HTHRESH,%f50              ! (Y0_2) s = HTHRESH;

        st      %i2,[%fp+tmp1_hi]               ! (Y1_1) *(int*)&dtmp0 = ind;
        fitod   %f3,%f18                        ! (Y2_1) u = (double)(int)dtmp0;

        fmuld   %f60,%f52,%f60                  ! (Y1_1) dtmp2 = dtmp1 * y;

        fmuld   %f14,%f54,%f56                  ! (Y0_1) dtmp6 = dtmp5 * y;
        fmovdg  %fcc0,DZERO,%f48                ! (Y0_2) yd = DZERO;

        fcmped  %fcc1,%f50,LTHRESH              ! (Y0_2) if (s < LTHRESH);

        lda     [py]0x82,%f26                   ! (Y2_2) yd = *py;
        lda     [py+4]%asi,%f27                 ! (Y2_2) yd = *py;
        fsubd   %f44,%f18,%f18                  ! (Y2_1) y = s - u;

        faddd   %f60,XKB3,%f44                  ! (Y1_1) dtmp3 = dtmp2 + XKB3;

        sra     %l5,20,%l5                      ! (Y2_2) expy = hy >> 20;
        and     %o2,255,%o2                     ! (Y0_1) i = ind & 0xff;
        faddd   %f56,XKB1,%f58                  ! (Y0_1) dtmp7 = dtmp6 + XKB1;

        sll     %o2,4,%l2                       ! (Y0_1) i = i << 4;
        fmovdl  %fcc1,DZERO,%f48                ! (Y0_2) yd = DZERO;

        add     py,stridey,py                   ! y += stridey;
        and     %l5,0x7ff,%l5                   ! (Y2_2) expy &= 0x7ff;
        fmovdl  %fcc1,LTHRESH,%f50              ! (Y0_2) s = LTHRESH;

        cmp     %l5,959                         ! (Y2_2) if (expy < 0x3fb);
        ldd     [EXPTBL+%l2],%f22               ! (Y0_1) u = *(double*)((char*)__mt_constexp2 + i);
        faddd   %f18,%f62,%f18                  ! (Y2_1) y = y + yd;
        fmuld   %f44,%f52,%f62                  ! (Y1_1) dtmp4 = dtmp3 * y;

        ld      [%fp+ind_buf],%l1               ! (Y2_1) ind = (int)dtmp0;
        fmuld   %f58,%f54,%f54                  ! (Y0_1) y = dtmp7 * y;

        fmuld   s_h,%f12,%f16                   ! (Y1_2) s = s_h * s;
        bl,pn   %icc,.xupdate8                  ! (Y2_2) if (expy < 0x3fb);
        fsubd   %f20,%f12,%f56                  ! (Y1_2) dtmp0 = (yd - s);
.xcont8:
        cmp     %l5,1086                        ! (Y2_2) if (expy >= 0x43e);
        fmuld   %f20,yr,%f8                     ! (Y1_2) dtmp1 = yd * yr;
        faddd   %f50,%f48,%f28                  ! (Y0_2) dtmp0 = (s + yd);

        sra     %l1,8,%o2                       ! (Y2_1) ind >>= 8;
        lda     [py]0x82,%l5                    ! (Y0_3) hy = *py;
        fmuld   XKB5,%f18,%f20                  ! (Y2_1) dtmp0 = XKB5 * y;
        faddd   %f62,XKB2,%f12                  ! (Y1_1) dtmp5 = dtmp4 + XKB2;

        add     %o2,1021,%l0                    ! (Y2_1) eflag = (ind + 1021);
        bge,pn  %icc,.xupdate9                  ! (Y2_2) if (expy >= 0x43e);
        nop
.xcont9:
        sub     %g0,%o2,%l3                     ! (Y2_1) gflag = (1022 - ind);
        ldd     [EXPTBL_P8+%l2],%f14            ! (Y0_1) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
        fmuld   %f56,s_h,%f58                   ! (Y1_2) dtmp0 *= s_h;
        fand    %f26,MHI32,%f44                 ! (Y2_2) s = vis_fand(yd, MHI32);

        sra     %l0,31,%o0                      ! (Y2_1) eflag = eflag >> 31;
        add     %l3,1022,%i4                    ! (Y2_1) gflag = (1022 - ind);
        fmuld   %f22,%f54,%f56                  ! (Y0_1) dtmp1 = u * y;
        fcmped  %fcc0,%f16,HTHRESH              ! (Y1_2) if (s > HTHRESH);

        sra     %i4,31,%o5                      ! (Y2_1) gflag = gflag >> 31;
        and     %o0,54,%i2                      ! (Y2_1) itmp0 = 54 & eflag;
        fdtoi   %f28,%f3                        ! (Y0_2) u = (double)(int)dtmp0;

        add     %o2,%i2,%i1                     ! (Y2_1) ind = ind + itmp0;
        and     %o5,52,%l2                      ! (Y2_1) itmp1 = 52 & gflag;
        st      %f3,[%fp+tmp3]                  ! (Y0_2) ind = (int)dtmp0;
        faddd   %f20,XKB4,%f60                  ! (Y2_1) dtmp1 = dtmp0 + XKB4;

        sub     %i1,%l2,%o3                     ! (Y2_1) ind = ind - itmp1;
        sub     %o0,%o5,%o5                     ! (Y2_1) ind = eflag - gflag;
        faddd   %f58,%f8,%f10                   ! (Y1_2) yd = dtmp0 + dtmp1;

        sll     %o3,20,%l3                      ! (Y2_1) ind <<= 20;
        lda     [py]0x82,%f28                   ! (Y0_3) yd = *py;
        lda     [py+4]%asi,%f29                 ! (Y0_3) yd = *py;
        fmovdg  %fcc0,HTHRESH,%f16              ! (Y1_2) s = HTHRESH;

        st      %l3,[%fp+tmp2_hi]               ! (Y2_1) *(int*)&dtmp0 = ind;
        fitod   %f3,%f58                        ! (Y0_2) u = (double)(int)dtmp0;

        fmuld   %f60,%f18,%f60                  ! (Y2_1) dtmp2 = dtmp1 * y;
        faddd   %f14,%f56,%f20                  ! (Y0_1) dtmp2 = dtmp0 + dtmp1;

        fmuld   %f12,%f52,%f56                  ! (Y1_1) dtmp6 = dtmp5 * y;
        fmovdg  %fcc0,DZERO,%f10                ! (Y1_2) yd = DZERO;

        sra     %l5,20,%l5                      ! (Y0_3) expy = hy >> 20;
        fcmped  %fcc1,%f16,LTHRESH              ! (Y1_2) if (s < LTHRESH);

        and     %l5,0x7ff,%l5                   ! (Y0_3) expy &= 0x7ff;
        fsubd   %f50,%f58,%f54                  ! (Y0_2) y = s - u;

        cmp     %l5,959                         ! (Y0_3) if (expy < 0x3fb);
        faddd   %f60,XKB3,%f60                  ! (Y2_1) dtmp3 = dtmp2 + XKB3;

        and     %o1,255,%o1                     ! (Y1_1) i = ind & 0xff;
        bl,pn   %icc,.xupdate10                 ! (Y0_3) if (expy < 0x3fb);
        faddd   %f56,XKB1,%f8                   ! (Y1_1) dtmp7 = dtmp6 + XKB1;
.xcont10:
        sll     %o1,4,%l0                       ! (Y1_1) i = i << 4;
        fmovdl  %fcc1,DZERO,%f10                ! (Y1_2) yd = DZERO;

        nop
        ba      1f
        fmovdl  %fcc1,LTHRESH,%f16              ! (Y1_2) s = LTHRESH;

        .align  16
1:
        subcc   counter,2,counter
        ldd     [EXPTBL+%l0],%f56               ! (Y1_1) u = *(double*)((char*)__mt_constexp2 + i);
        fmuld   %f60,%f18,%f58                  ! (Y2_1) dtmp4 = dtmp3 * y;
        faddd   %f54,%f48,%f54                  ! (Y0_2) y = y + yd;

        fmuld   %f8,%f52,%f60                   ! (Y1_1) y = dtmp7 * y;
        ld      [%fp+tmp3],%o2                  ! (Y0_2) ind = (int)dtmp0;
        bneg,pn %icc,.xtail
        faddd   %f20,%f22,%f12                  ! (Y0_1) u = dtmp2 + u;

.xmain_loop:
        cmp     %l5,1086                        ! (Y0_2) if (expy >= 0x43e);
        add     %o4,513,%o4                     ! (Y0_0) ind += 513;
        ldd     [%fp+tmp0_hi],%f52              ! (Y0_0) *(int*)&dtmp0 = ind;
        fsubd   %f26,%f44,%f50                  ! (Y2_1) dtmp0 = (yd - s);

        fmuld   s_h,%f44,%f44                   ! (Y2_1) s = s_h * s;
        sra     %o2,8,%o0                       ! (Y0_1) ind >>= 8;
        bge,pn  %icc,.xupdate11                 ! (Y0_2) if (expy >= 0x43e);
        faddd   %f16,%f10,%f22                  ! (Y1_1) dtmp0 = (s + yd);
.xcont11:
        sll     %o4,3,%l2                       ! (Y0_0) ind *= 8;
        add     py,stridey,py                   ! y += stridey;
        fmuld   %f26,yr,%f20                    ! (Y2_1) dtmp1 = yd * yr;
        faddd   %f58,XKB2,%f14                  ! (Y2_0) dtmp5 = dtmp4 + XKB2;

        add     %o0,1021,%i1                    ! (Y0_1) eflag = (ind + 1021);
        ldd     [%l2+EXPTBL],%f62               ! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
        fmuld   XKB5,%f54,%f48                  ! (Y0_1) dtmp0 = XKB5 * y;
        fpadd32 %f12,%f52,%f58                  ! (Y0_0) u = vis_fpadd32(u, dtmp0);

        sub     %g0,%o0,%o3                     ! (Y0_1) gflag = (1022 - ind);
        ldd     [EXPTBL_P8+%l0],%f8             ! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
        fand    %f28,MHI32,%f12                 ! (Y0_2) s = vis_fand(yd, MHI32);
        fmuld   %f50,s_h,%f52                   ! (Y2_1) dtmp0 *= s_h;

        sra     %i1,31,%o1                      ! (Y0_1) eflag = eflag >> 31;
        add     %o3,1022,%l0                    ! (Y0_1) gflag = (1022 - ind);
        fmuld   %f56,%f60,%f26                  ! (Y1_0) dtmp1 = u * y;
        fcmped  %fcc0,%f44,HTHRESH              ! (Y2_1) if (s > HTHRESH);

        sra     %l0,31,%o4                      ! (Y0_1) gflag = gflag >> 31;
        and     %o1,54,%i4                      ! (Y0_1) itmp0 = 54 & eflag;
        fmuld   %f58,%f62,%f6                   ! (Y0_0) dtmp1 = u * dtmp1;
        fdtoi   %f22,%f4                        ! (Y1_1) u = (double)(int)dtmp0;

        add     %o0,%i4,%i2                     ! (Y0_1) ind = ind + itmp0;
        and     %o4,52,%l3                      ! (Y0_1) itmp1 = 52 & gflag;
        st      %f4,[%fp+tmp4]                  ! (Y1_1) ind = (int)dtmp0;
        faddd   %f48,XKB4,%f60                  ! (Y0_1) dtmp1 = dtmp0 + XKB4;

        sub     %i2,%l3,%l2                     ! (Y0_1) ind = ind - itmp1;
        sub     %o1,%o4,%o4                     ! (Y0_1) ind = eflag - gflag;
        st      %f6,[pz]                        ! (Y0_0) write into memory
        faddd   %f52,%f20,%f62                  ! (Y2_1) yd = dtmp0 + dtmp1;

        sll     %l2,20,%o3                      ! (Y0_1) ind <<= 20;
        nop
        st      %o3,[%fp+tmp0_hi]               ! (Y0_1) *(int*)&dtmp0 = ind;
        fmovdg  %fcc0,HTHRESH,%f44              ! (Y2_1) s = HTHRESH;

        lda     [py]0x82,%l5                    ! (Y1_2) hy = *py;
        nop
        fitod   %f4,%f48                        ! (Y1_1) u = (double)(int)dtmp0;

        fmuld   %f60,%f54,%f60                  ! (Y0_1) dtmp2 = dtmp1 * y;
        nop
        st      %f7,[pz+4]                      ! (Y0_0) write into memory
        faddd   %f8,%f26,%f26                   ! (Y1_0) dtmp2 = dtmp0 + dtmp1;

        lda     [py]0x82,%f8                    ! (Y1_2) yd = *py;
        nop
        fmuld   %f14,%f18,%f52                  ! (Y2_0) dtmp6 = dtmp5 * y;
        fmovdg  %fcc0,DZERO,%f62                ! (Y2_1) yd = DZERO;

        lda     [py+4]%asi,%f9                  ! (Y1_2) yd = *py;
        add     pz,stridez,pz                   ! z += stridez;
        fcmped  %fcc1,%f44,LTHRESH              ! (Y2_1) if (s < LTHRESH);

        fsubd   %f16,%f48,%f50                  ! (Y1_1) y = s - u;

        faddd   %f60,XKB3,%f60                  ! (Y0_1) dtmp3 = dtmp2 + XKB3;

        sra     %l5,20,%l5                      ! (Y1_2) expy = hy >> 20;
        and     %l1,255,%l1                     ! (Y2_0) i = ind & 0xff;
        faddd   %f52,XKB1,%f58                  ! (Y2_0) dtmp7 = dtmp6 + XKB1;

        sll     %l1,4,%l0                       ! (Y2_0) i = i << 4;
        fmovdl  %fcc1,DZERO,%f62                ! (Y2_1) yd = DZERO;

        and     %l5,0x7ff,%l5                   ! (Y1_2) expy &= 0x7ff;
        nop
        fmovdl  %fcc1,LTHRESH,%f44              ! (Y2_1) s = LTHRESH;

        cmp     %l5,959                         ! (Y1_2) if (expy < 0x3fb);
        ldd     [EXPTBL+%l0],%f20               ! (Y2_0) u = *(double*)((char*)__mt_constexp2 + i);
        fmuld   %f60,%f54,%f48                  ! (Y0_1) dtmp4 = dtmp3 * y;
        faddd   %f50,%f10,%f52                  ! (Y1_1) y = y + yd;

        add     %o7,513,%o7                     ! (Y1_0) ind += 513;
        ld      [%fp+tmp4],%o1                  ! (Y1_1) ind = (int)dtmp0;
        fmuld   %f58,%f18,%f18                  ! (Y2_0) y = dtmp7 * y;
        faddd   %f26,%f56,%f58                  ! (Y1_0) u = dtmp2 + u;

        add     py,stridey,py                   ! y += stridey;
        ldd     [%fp+tmp1_hi],%f60              ! (Y1_0) *(int*)&dtmp0 = ind;
        fmuld   s_h,%f12,%f50                   ! (Y0_2) s = s_h * s;
        fsubd   %f28,%f12,%f56                  ! (Y0_2) dtmp0 = (yd - s);

        sll     %o7,3,%l3                       ! (Y1_0) ind *= 8;
        fmuld   %f28,yr,%f26                    ! (Y0_2) dtmp1 = yd * yr;
        bl,pn   %icc,.xupdate12                 ! (Y1_2) if (expy < 0x3fb);
        faddd   %f44,%f62,%f28                  ! (Y2_1) dtmp0 = (s + yd);
.xcont12:
        sra     %o1,8,%o3                       ! (Y1_1) ind >>= 8;
        cmp     %l5,1086                        ! (Y1_2) if (expy >= 0x43e);
        fmuld   XKB5,%f52,%f22                  ! (Y1_1) dtmp0 = XKB5 * y;
        faddd   %f48,XKB2,%f14                  ! (Y0_1) dtmp5 = dtmp4 + XKB2;

        add     %o3,1021,%o0                    ! (Y1_1) eflag = (ind + 1021);
        ldd     [%l3+EXPTBL],%f48               ! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
        bge,pn  %icc,.xupdate13                 ! (Y1_2) if (expy >= 0x43e);
        fpadd32 %f58,%f60,%f60                  ! (Y1_0) u = vis_fpadd32(u, dtmp0);
.xcont13:
        sub     %g0,%o3,%i2                     ! (Y1_1) gflag = (1022 - ind);
        ldd     [EXPTBL_P8+%l0],%f16            ! (Y2_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
        fmuld   %f56,s_h,%f58                   ! (Y0_2) dtmp0 *= s_h;
        fand    %f8,MHI32,%f12                  ! (Y1_2) s = vis_fand(yd, MHI32);

        sra     %o0,31,%l3                      ! (Y1_1) eflag = eflag >> 31;
        add     %i2,1022,%l2                    ! (Y1_1) gflag = (1022 - ind);
        fmuld   %f20,%f18,%f56                  ! (Y2_0) dtmp1 = u * y;
        fcmped  %fcc0,%f50,HTHRESH              ! (Y0_2) if (s > HTHRESH);

        sra     %l2,31,%o7                      ! (Y1_1) gflag = gflag >> 31;
        and     %l3,54,%i1                      ! (Y1_1) itmp0 = 54 & eflag;
        fmuld   %f60,%f48,%f18                  ! (Y1_0) dtmp1 = u * dtmp1;
        fdtoi   %f28,%f3                        ! (Y2_1) u = (double)(int)dtmp0;

        add     %o3,%i1,%l0                     ! (Y1_1) ind = ind + itmp0;
        and     %o7,52,%l1                      ! (Y1_1) itmp1 = 52 & gflag;
        st      %f3,[%fp+ind_buf]               ! (Y2_1) ind = (int)dtmp0;
        faddd   %f22,XKB4,%f60                  ! (Y1_1) dtmp1 = dtmp0 + XKB4;

        sub     %l0,%l1,%i4                     ! (Y1_1) ind = ind - itmp1;
        sub     %l3,%o7,%o7                     ! (Y1_1) ind = eflag - gflag;
        st      %f18,[pz]                       ! (Y1_0) write into memory
        faddd   %f58,%f26,%f48                  ! (Y0_2) yd = dtmp0 + dtmp1;

        sll     %i4,20,%i2                      ! (Y1_1) ind <<= 20;
        lda     [py]0x82,%l5                    ! (Y2_2) hy = *py;
        fmovdg  %fcc0,HTHRESH,%f50              ! (Y0_2) s = HTHRESH;

        st      %i2,[%fp+tmp1_hi]               ! (Y1_1) *(int*)&dtmp0 = ind;
        fitod   %f3,%f10                        ! (Y2_1) u = (double)(int)dtmp0;

        fmuld   %f60,%f52,%f60                  ! (Y1_1) dtmp2 = dtmp1 * y;
        st      %f19,[pz+4]                     ! (Y1_0) write into memory
        faddd   %f16,%f56,%f28                  ! (Y2_0) dtmp2 = dtmp0 + dtmp1;

        fmuld   %f14,%f54,%f56                  ! (Y0_1) dtmp6 = dtmp5 * y;
        fmovdg  %fcc0,DZERO,%f48                ! (Y0_2) yd = DZERO;

        add     pz,stridez,pz                   ! z += stridez;
        fcmped  %fcc1,%f50,LTHRESH              ! (Y0_2) if (s < LTHRESH);

        lda     [py]0x82,%f26                   ! (Y2_2) yd = *py;
        fsubd   %f44,%f10,%f18                  ! (Y2_1) y = s - u;

        lda     [py+4]%asi,%f27                 ! (Y2_2) yd = *py;
        faddd   %f60,XKB3,%f44                  ! (Y1_1) dtmp3 = dtmp2 + XKB3;

        sra     %l5,20,%l5                      ! (Y2_2) expy = hy >> 20;
        and     %o2,255,%o2                     ! (Y0_1) i = ind & 0xff;
        faddd   %f56,XKB1,%f58                  ! (Y0_1) dtmp7 = dtmp6 + XKB1;

        sll     %o2,4,%l2                       ! (Y0_1) i = i << 4;
        fmovdl  %fcc1,DZERO,%f48                ! (Y0_2) yd = DZERO;

        add     py,stridey,py                   ! y += stridey;
        and     %l5,0x7ff,%l5                   ! (Y2_2) expy &= 0x7ff;
        fmovdl  %fcc1,LTHRESH,%f50              ! (Y0_2) s = LTHRESH;

        cmp     %l5,959                         ! (Y2_2) if (expy < 0x3fb);
        ldd     [EXPTBL+%l2],%f22               ! (Y0_1) u = *(double*)((char*)__mt_constexp2 + i);
        faddd   %f18,%f62,%f18                  ! (Y2_1) y = y + yd;
        fmuld   %f44,%f52,%f62                  ! (Y1_1) dtmp4 = dtmp3 * y;

        add     %o5,513,%o5                     ! (Y2_0) ind += 513;
        ld      [%fp+ind_buf],%l1               ! (Y2_1) ind = (int)dtmp0;
        fmuld   %f58,%f54,%f54                  ! (Y0_1) y = dtmp7 * y;
        faddd   %f28,%f20,%f58                  ! (Y2_0) u = dtmp2 + u;

        ldd     [%fp+tmp2_hi],%f60              ! (Y2_0) *(int*)&dtmp0 = ind;
        fmuld   s_h,%f12,%f16                   ! (Y1_2) s = s_h * s;
        bl,pn   %icc,.xupdate14                 ! (Y2_2) if (expy < 0x3fb);
        fsubd   %f8,%f12,%f56                   ! (Y1_2) dtmp0 = (yd - s);
.xcont14:
        sll     %o5,3,%i1                       ! (Y2_0) ind *= 8;
        cmp     %l5,1086                        ! (Y2_2) if (expy >= 0x43e);
        fmuld   %f8,yr,%f8                      ! (Y1_2) dtmp1 = yd * yr;
        faddd   %f50,%f48,%f28                  ! (Y0_2) dtmp0 = (s + yd);

        sra     %l1,8,%o2                       ! (Y2_1) ind >>= 8;
        lda     [py]0x82,%l5                    ! (Y0_3) hy = *py;
        fmuld   XKB5,%f18,%f20                  ! (Y2_1) dtmp0 = XKB5 * y;
        faddd   %f62,XKB2,%f12                  ! (Y1_1) dtmp5 = dtmp4 + XKB2;

        add     %o2,1021,%l0                    ! (Y2_1) eflag = (ind + 1021);
        ldd     [%i1+EXPTBL],%f62               ! (Y2_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
        bge,pn  %icc,.xupdate15                 ! (Y2_2) if (expy >= 0x43e);
        fpadd32 %f58,%f60,%f60                  ! (Y2_0) u = vis_fpadd32(u, dtmp0);
.xcont15:
        sub     %g0,%o2,%l3                     ! (Y2_1) gflag = (1022 - ind);
        ldd     [EXPTBL_P8+%l2],%f14            ! (Y0_1) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);
        fmuld   %f56,s_h,%f58                   ! (Y1_2) dtmp0 *= s_h;
        fand    %f26,MHI32,%f44                 ! (Y2_2) s = vis_fand(yd, MHI32);

        sra     %l0,31,%o0                      ! (Y2_1) eflag = eflag >> 31;
        add     %l3,1022,%i4                    ! (Y2_1) gflag = (1022 - ind);
        fmuld   %f22,%f54,%f56                  ! (Y0_1) dtmp1 = u * y;
        fcmped  %fcc0,%f16,HTHRESH              ! (Y1_2) if (s > HTHRESH);

        sra     %i4,31,%o5                      ! (Y2_1) gflag = gflag >> 31;
        and     %o0,54,%i2                      ! (Y2_1) itmp0 = 54 & eflag;
        fmuld   %f60,%f62,%f6                   ! (Y2_0) dtmp1 = u * dtmp1;
        fdtoi   %f28,%f3                        ! (Y0_2) u = (double)(int)dtmp0;

        add     %o2,%i2,%i1                     ! (Y2_1) ind = ind + itmp0;
        and     %o5,52,%l2                      ! (Y2_1) itmp1 = 52 & gflag;
        st      %f3,[%fp+tmp3]                  ! (Y0_2) ind = (int)dtmp0;
        faddd   %f20,XKB4,%f60                  ! (Y2_1) dtmp1 = dtmp0 + XKB4;

        sub     %i1,%l2,%o3                     ! (Y2_1) ind = ind - itmp1;
        sub     %o0,%o5,%o5                     ! (Y2_1) ind = eflag - gflag;
        st      %f6,[pz]                        ! (Y2_0) write into memory
        faddd   %f58,%f8,%f10                   ! (Y1_2) yd = dtmp0 + dtmp1;

        sll     %o3,20,%l3                      ! (Y2_1) ind <<= 20;
        lda     [py]0x82,%f28                   ! (Y0_3) yd = *py;
        fmovdg  %fcc0,HTHRESH,%f16              ! (Y1_2) s = HTHRESH;

        lda     [py+4]%asi,%f29                 ! (Y0_3) yd = *py;
        fitod   %f3,%f58                        ! (Y0_2) u = (double)(int)dtmp0;

        fmuld   %f60,%f18,%f60                  ! (Y2_1) dtmp2 = dtmp1 * y;
        st      %l3,[%fp+tmp2_hi]               ! (Y2_1) *(int*)&dtmp0 = ind;
        faddd   %f14,%f56,%f20                  ! (Y0_1) dtmp2 = dtmp0 + dtmp1;

        fmuld   %f12,%f52,%f56                  ! (Y1_1) dtmp6 = dtmp5 * y;
        st      %f7,[pz+4]                      ! (Y2_0) write into memory
        fmovdg  %fcc0,DZERO,%f10                ! (Y1_2) yd = DZERO;

        sra     %l5,20,%l5                      ! (Y0_3) expy = hy >> 20;
        add     pz,stridez,pz                   ! z += stridez;
        fcmped  %fcc1,%f16,LTHRESH              ! (Y1_2) if (s < LTHRESH);

        and     %l5,0x7ff,%l5                   ! (Y0_3) expy &= 0x7ff;
        fsubd   %f50,%f58,%f54                  ! (Y0_2) y = s - u;

        cmp     %l5,959                         ! (Y0_3) if (expy < 0x3fb);
        faddd   %f60,XKB3,%f60                  ! (Y2_1) dtmp3 = dtmp2 + XKB3;

        and     %o1,255,%o1                     ! (Y1_1) i = ind & 0xff;
        bl,pn   %icc,.xupdate16                 ! (Y0_3) if (expy < 0x3fb);
        faddd   %f56,XKB1,%f8                   ! (Y1_1) dtmp7 = dtmp6 + XKB1;
.xcont16:
        sll     %o1,4,%l0                       ! (Y1_1) i = i << 4;
        fmovdl  %fcc1,DZERO,%f10                ! (Y1_2) yd = DZERO;

        subcc   counter,3,counter               ! update cycle counter
        fmovdl  %fcc1,LTHRESH,%f16              ! (Y1_2) s = LTHRESH;

        ldd     [EXPTBL+%l0],%f56               ! (Y1_1) u = *(double*)((char*)__mt_constexp2 + i);
        fmuld   %f60,%f18,%f58                  ! (Y2_1) dtmp4 = dtmp3 * y;
        faddd   %f54,%f48,%f54                  ! (Y0_2) y = y + yd;

        fmuld   %f8,%f52,%f60                   ! (Y1_1) y = dtmp7 * y;
        ld      [%fp+tmp3],%o2                  ! (Y0_2) ind = (int)dtmp0;
        bpos,pt %icc,.xmain_loop
        faddd   %f20,%f22,%f12                  ! (Y0_1) u = dtmp2 + u;

.xtail:
        addcc   counter,2,counter
        ldd     [%fp+tmp0_hi],%f52              ! (Y0_0) *(int*)&dtmp0 = ind;

        add     %o4,513,%o4                     ! (Y0_0) ind += 513;
        bneg,pn %icc,.xend_loop
        nop

        sll     %o4,3,%l2                       ! (Y0_0) ind *= 8;

        subcc   counter,1,counter
        ldd     [%l2+EXPTBL],%f62               ! (Y0_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
        fpadd32 %f12,%f52,%f58                  ! (Y0_0) u = vis_fpadd32(u, dtmp0);

        ldd     [EXPTBL_P8+%l0],%f8             ! (Y1_0) dtmp0 = *(double*)((char*)__mt_constexp2 + i + 8);

        fmuld   %f56,%f60,%f26                  ! (Y1_0) dtmp1 = u * y;

        fmuld   %f58,%f62,%f6                   ! (Y0_0) dtmp1 = u * dtmp1;

        st      %f6,[pz]                        ! (Y0_0) write into memory
        st      %f7,[pz+4]                      ! (Y0_0) write into memory
        bneg,pn %icc,.xend_loop
        add     pz,stridez,pz                   ! z += stridez;

        faddd   %f8,%f26,%f26                   ! (Y1_0) dtmp2 = dtmp0 + dtmp1;

        add     %o7,513,%o7                     ! (Y1_0) ind += 513;
        faddd   %f26,%f56,%f58                  ! (Y1_0) u = dtmp2 + u;

        ldd     [%fp+tmp1_hi],%f60              ! (Y1_0) *(int*)&dtmp0 = ind;

        sll     %o7,3,%l3                       ! (Y1_0) ind *= 8;

        ldd     [%l3+EXPTBL],%f48               ! (Y1_0) dtmp1 = (*(double*)((char*)__mt_constexp2 + ind);
        fpadd32 %f58,%f60,%f60                  ! (Y1_0) u = vis_fpadd32(u, dtmp0);

        fmuld   %f60,%f48,%f18                  ! (Y1_0) dtmp1 = u * dtmp1;

        st      %f18,[pz]                       ! (Y1_0) write into memory
        st      %f19,[pz+4]                     ! (Y1_0) write into memory
        add     pz,stridez,pz                   ! z += stridez;

.xend_loop:
        ba      .xbegin
        nop

        .align  16
.xupdate0:
        cmp     counter,0
        sub     py,stridey,%i2
        ble,pt  %icc,.xcont0
        fmovd   DZERO,%f10

        stx     %i2,[%fp+tmp_py]

        st      counter,[%fp+tmp_counter]
        ba      .xcont0
        or      %g0,0,counter

        .align  16
.xupdate1:
        cmp     counter,0
        sub     py,stridey,%i2
        ble,pt  %icc,.xcont1
        fmovd   DZERO,%f10

        stx     %i2,[%fp+tmp_py]

        st      counter,[%fp+tmp_counter]
        ba      .xcont1
        or      %g0,0,counter

        .align  16
.xupdate2:
        cmp     counter,1
        sub     py,stridey,%l3
        ble,pt  %icc,.xcont2
        fmovd   DZERO,%f14

        stx     %l3,[%fp+tmp_py]
        sub     counter,1,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont2
        or      %g0,1,counter

        .align  16
.xupdate3:
        cmp     counter,1
        sub     py,stridey,%l3
        ble,pt  %icc,.xcont3
        fmovd   DZERO,%f14

        stx     %l3,[%fp+tmp_py]
        sub     counter,1,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont3
        or      %g0,1,counter

        .align  16
.xupdate4:
        cmp     counter,2
        ble,pt  %icc,.xcont4
        fmovd   DZERO,%f18

        stx     py,[%fp+tmp_py]
        sub     counter,2,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont4
        or      %g0,2,counter

        .align  16
.xupdate5:
        cmp     counter,2
        ble,pt  %icc,.xcont5
        fmovd   DZERO,%f18

        stx     py,[%fp+tmp_py]
        sub     counter,2,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont5
        or      %g0,2,counter

        .align  16
.xupdate6:
        cmp     counter,3
        sub     py,stridey,%i2
        ble,pt  %icc,.xcont6
        fmovd   DZERO,%f20

        stx     %i2,[%fp+tmp_py]
        sub     counter,3,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont6
        or      %g0,3,counter

        .align  16
.xupdate7:
        cmp     counter,3
        sub     py,stridey,%i2
        ble,pt  %icc,.xcont7
        fmovd   DZERO,%f20

        stx     %i2,[%fp+tmp_py]
        sub     counter,3,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont7
        or      %g0,3,counter

        .align  16
.xupdate8:
        cmp     counter,4
        sub     py,stridey,%l3
        ble,pt  %icc,.xcont8
        fmovd   DZERO,%f26

        stx     %l3,[%fp+tmp_py]
        sub     counter,4,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont8
        or      %g0,4,counter

        .align  16
.xupdate9:
        cmp     counter,4
        sub     py,stridey,%l3
        ble,pt  %icc,.xcont9
        fmovd   DZERO,%f26

        stx     %l3,[%fp+tmp_py]
        sub     counter,4,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont9
        or      %g0,4,counter

        .align  16
.xupdate10:
        cmp     counter,5
        ble,pt  %icc,.xcont10
        fmovd   DZERO,%f28

        stx     py,[%fp+tmp_py]
        sub     counter,5,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont10
        or      %g0,5,counter

        .align  16
.xupdate11:
        cmp     counter,3
        ble,pt  %icc,.xcont11
        fmovd   DZERO,%f28

        stx     py,[%fp+tmp_py]
        sub     counter,3,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont11
        or      %g0,3,counter

        .align  16
.xupdate12:
        cmp     counter,4
        sub     py,stridey,%i2
        ble,pt  %icc,.xcont12
        fmovd   DZERO,%f8

        stx     %i2,[%fp+tmp_py]
        sub     counter,4,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont12
        or      %g0,4,counter

        .align  16
.xupdate13:
        cmp     counter,4
        sub     py,stridey,%i2
        ble,pt  %icc,.xcont13
        fmovd   DZERO,%f8

        stx     %i2,[%fp+tmp_py]
        sub     counter,4,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont13
        or      %g0,4,counter

        .align  16
.xupdate14:
        cmp     counter,5
        sub     py,stridey,%l3
        ble,pt  %icc,.xcont14
        fmovd   DZERO,%f26

        stx     %l3,[%fp+tmp_py]
        sub     counter,5,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont14
        or      %g0,5,counter

        .align  16
.xupdate15:
        cmp     counter,5
        sub     py,stridey,%l3
        ble,pt  %icc,.xcont15
        fmovd   DZERO,%f26

        stx     %l3,[%fp+tmp_py]
        sub     counter,5,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont15
        or      %g0,5,counter

        .align  16
.xupdate16:
        cmp     counter,6
        ble,pt  %icc,.xcont16
        fmovd   DZERO,%f28

        stx     py,[%fp+tmp_py]
        sub     counter,6,counter

        st      counter,[%fp+tmp_counter]
        ba      .xcont16
        or      %g0,6,counter

        .align  16
.xspec0:
        add     EXPTBL,4095,%l0
        add     %l0,1,%l0
        ldd     [%l0+8],%f20                    ! ld  DONE
        st      %f20,[pz]                       ! *pz = DONE;
        ba      .xupdate_point
        st      %f21,[pz+4]                     ! *pz = DONE;

        .align  16
.xspec1:
        ldx     [%fp+tmp_px],%l1
        sethi   %hi(0x7ffffc00),MASK_0x7fffffff

        sethi   %hi(0x7ff00000),%o3
        add     MASK_0x7fffffff,0x3ff,MASK_0x7fffffff

        and     %l2,MASK_0x7fffffff,%o2         ! if (hy &= 0x7fffffff);
        sethi   %hi(0x3ff00000),MASK_0x3ff00000

        cmp     %o2,%o3                         ! if (hy != 0x7ff00000);
        bne,pn  %icc,2f                         ! if (hy != 0x7ff00000);
        nop

        ld      [py+4],%l3                      ! ld ly;
        cmp     %l3,0                           ! if (ly != 0);
        bne,a,pt        %icc,3f                 ! if (ly != 0);
        nop

        ld      [%l1],%i1                       ! ld hx;
        cmp     %i1,MASK_0x3ff00000             ! if (hx != 0x3ff00000);
        bne,a,pn        %icc,1f                 ! if (hx != 0x3ff00000);
        srl     %l2,31,%o7                      ! sy = hy >> 31;

        ld      [%l1+4],%i2                     ! ld lx;
        cmp     %i2,0                           ! if (lx != 0);
        bne,pn  %icc,1f                         ! if (lx != 0);
        srl     %l2,31,%o7                      ! sy = hy >> 31;

        fzero   %f28
        fmuld   %f18,%f28,%f28                  ! *pz = *py * 0.0;
        st      %f28,[pz]
        ba      .xupdate_point
        st      %f29,[pz+4]
1:
        sub     %i1,MASK_0x3ff00000,%o0         ! hx - 0x3ff00000;
        srlx    %o0,63,%o0                      ! (hx - 0x3ff00000) >> 63;

        cmp     %o0,%o7                         ! if ((hx < 0x3ff00000) == sy);
        be,pn   %icc,1f                         ! if ((hx < 0x3ff00000) == sy);

        st      DZERO_HI,[pz]
        ba      .xupdate_point
        st      DZERO_LO,[pz+4]
1:
        st      %o2,[pz]                        ! ((int*)pz)[0] = hy;
        ba      .xupdate_point
        st      %l3,[pz+4]                      ! ((int*)pz)[1] = ly;
2:
        bl,a,pn %icc,1f                         ! if (hy < 0x7ff00000);
        ld      [%l1+4],%i2                     ! ld lx;
3:
        ld      [%l1],%f20                      ! x = *px;
        ld      [%l1+4],%f21                    ! x = *px;
        fmuld   %f20,%f18,%f28                  ! *pz = *px * *py;
        st      %f28,[pz]
        ba      .xupdate_point
        st      %f29,[pz+4]
1:
        ld      [%l1],%i1                       ! ld hx;
        cmp     %i2,0                           ! if (lx != 0);
        bne,pn  %icc,1f                         ! if (lx != 0);
        nop

        cmp     %i1,MASK_0x3ff00000             ! if (hx != 0x3ff00000);
        add     EXPTBL,4095,%l0
        bne,pn  %icc,1f                         ! if (hx != 0x3ff00000);
        add     %l0,1,%l0

        ldd     [%l0+8],%f20                    ! ld  DONE
        st      %f20,[pz]                       ! *pz = DONE;
        ba      .xupdate_point
        st      %f21,[pz+4]                     ! *pz = DONE;
1:
        srl     %l2,31,%o7                      ! sy = hy >> 31;
        sub     %i1,MASK_0x3ff00000,%o0         ! hx - 0x3ff00000;

        srlx    %o0,63,%o0                      ! (hx - 0x3ff00000) >> 63;

        cmp     %o0,%o7                         ! if (hx < 0x3ff00000) == sy);
        be,a,pn %icc,1f                         ! if (hx < 0x3ff00000) == sy);
        ldd     [EXPTBL-ind_HUGE],%f20          ! y0 = _HUGE;

        ldd     [EXPTBL-ind_TINY],%f20          ! y0 = _TINY;
1:
        fmuld   %f20,%f20,%f20                  ! *pz = y0 * y0
        st      %f20,[pz]
        ba      .xupdate_point
        st      %f21,[pz+4]

.xupdate_point:
        add     py,stridey,py
        ba      .xbegin1
        add     pz,stridez,pz

        SET_SIZE(__vpow)