/*
 * 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)