--- /dev/null	Sat May 10 12:09:59 2014
+++ new/usr/src/lib/libmvec/common/vis/__vpow.S	Sat May 10 12:09:59 2014
@@ -0,0 +1,4353 @@
+/*
+ * 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)
+
