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