testCases.c revision 1.2 1 1.2 ross /* $NetBSD: testCases.c,v 1.2 2001/03/13 06:45:24 ross Exp $ */
2 1.1 ross
3 1.1 ross /*
4 1.1 ross ===============================================================================
5 1.1 ross
6 1.1 ross This C source file is part of TestFloat, Release 2a, a package of programs
7 1.1 ross for testing the correctness of floating-point arithmetic complying to the
8 1.1 ross IEC/IEEE Standard for Floating-Point.
9 1.1 ross
10 1.1 ross Written by John R. Hauser. More information is available through the Web
11 1.1 ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
12 1.1 ross
13 1.1 ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
14 1.1 ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
15 1.1 ross TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
16 1.1 ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
17 1.1 ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
18 1.1 ross
19 1.1 ross Derivative works are acceptable, even for commercial purposes, so long as
20 1.1 ross (1) they include prominent notice that the work is derivative, and (2) they
21 1.1 ross include prominent notice akin to these four paragraphs for those parts of
22 1.1 ross this code that are retained.
23 1.1 ross
24 1.1 ross ===============================================================================
25 1.1 ross */
26 1.1 ross
27 1.2 ross #include <stdlib.h>
28 1.2 ross
29 1.1 ross #include "milieu.h"
30 1.1 ross #include "fail.h"
31 1.1 ross #include "softfloat.h"
32 1.1 ross #include "testCases.h"
33 1.2 ross #include "random.h"
34 1.1 ross
35 1.1 ross typedef struct {
36 1.1 ross int16 expNum, term1Num, term2Num;
37 1.1 ross flag done;
38 1.1 ross } sequenceT;
39 1.1 ross
40 1.1 ross enum {
41 1.1 ross int32NumP1 = 124
42 1.1 ross };
43 1.1 ross
44 1.1 ross static const uint32 int32P1[ int32NumP1 ] = {
45 1.1 ross 0x00000000,
46 1.1 ross 0x00000001,
47 1.1 ross 0x00000002,
48 1.1 ross 0x00000004,
49 1.1 ross 0x00000008,
50 1.1 ross 0x00000010,
51 1.1 ross 0x00000020,
52 1.1 ross 0x00000040,
53 1.1 ross 0x00000080,
54 1.1 ross 0x00000100,
55 1.1 ross 0x00000200,
56 1.1 ross 0x00000400,
57 1.1 ross 0x00000800,
58 1.1 ross 0x00001000,
59 1.1 ross 0x00002000,
60 1.1 ross 0x00004000,
61 1.1 ross 0x00008000,
62 1.1 ross 0x00010000,
63 1.1 ross 0x00020000,
64 1.1 ross 0x00040000,
65 1.1 ross 0x00080000,
66 1.1 ross 0x00100000,
67 1.1 ross 0x00200000,
68 1.1 ross 0x00400000,
69 1.1 ross 0x00800000,
70 1.1 ross 0x01000000,
71 1.1 ross 0x02000000,
72 1.1 ross 0x04000000,
73 1.1 ross 0x08000000,
74 1.1 ross 0x10000000,
75 1.1 ross 0x20000000,
76 1.1 ross 0x40000000,
77 1.1 ross 0x80000000,
78 1.1 ross 0xC0000000,
79 1.1 ross 0xE0000000,
80 1.1 ross 0xF0000000,
81 1.1 ross 0xF8000000,
82 1.1 ross 0xFC000000,
83 1.1 ross 0xFE000000,
84 1.1 ross 0xFF000000,
85 1.1 ross 0xFF800000,
86 1.1 ross 0xFFC00000,
87 1.1 ross 0xFFE00000,
88 1.1 ross 0xFFF00000,
89 1.1 ross 0xFFF80000,
90 1.1 ross 0xFFFC0000,
91 1.1 ross 0xFFFE0000,
92 1.1 ross 0xFFFF0000,
93 1.1 ross 0xFFFF8000,
94 1.1 ross 0xFFFFC000,
95 1.1 ross 0xFFFFE000,
96 1.1 ross 0xFFFFF000,
97 1.1 ross 0xFFFFF800,
98 1.1 ross 0xFFFFFC00,
99 1.1 ross 0xFFFFFE00,
100 1.1 ross 0xFFFFFF00,
101 1.1 ross 0xFFFFFF80,
102 1.1 ross 0xFFFFFFC0,
103 1.1 ross 0xFFFFFFE0,
104 1.1 ross 0xFFFFFFF0,
105 1.1 ross 0xFFFFFFF8,
106 1.1 ross 0xFFFFFFFC,
107 1.1 ross 0xFFFFFFFE,
108 1.1 ross 0xFFFFFFFF,
109 1.1 ross 0xFFFFFFFD,
110 1.1 ross 0xFFFFFFFB,
111 1.1 ross 0xFFFFFFF7,
112 1.1 ross 0xFFFFFFEF,
113 1.1 ross 0xFFFFFFDF,
114 1.1 ross 0xFFFFFFBF,
115 1.1 ross 0xFFFFFF7F,
116 1.1 ross 0xFFFFFEFF,
117 1.1 ross 0xFFFFFDFF,
118 1.1 ross 0xFFFFFBFF,
119 1.1 ross 0xFFFFF7FF,
120 1.1 ross 0xFFFFEFFF,
121 1.1 ross 0xFFFFDFFF,
122 1.1 ross 0xFFFFBFFF,
123 1.1 ross 0xFFFF7FFF,
124 1.1 ross 0xFFFEFFFF,
125 1.1 ross 0xFFFDFFFF,
126 1.1 ross 0xFFFBFFFF,
127 1.1 ross 0xFFF7FFFF,
128 1.1 ross 0xFFEFFFFF,
129 1.1 ross 0xFFDFFFFF,
130 1.1 ross 0xFFBFFFFF,
131 1.1 ross 0xFF7FFFFF,
132 1.1 ross 0xFEFFFFFF,
133 1.1 ross 0xFDFFFFFF,
134 1.1 ross 0xFBFFFFFF,
135 1.1 ross 0xF7FFFFFF,
136 1.1 ross 0xEFFFFFFF,
137 1.1 ross 0xDFFFFFFF,
138 1.1 ross 0xBFFFFFFF,
139 1.1 ross 0x7FFFFFFF,
140 1.1 ross 0x3FFFFFFF,
141 1.1 ross 0x1FFFFFFF,
142 1.1 ross 0x0FFFFFFF,
143 1.1 ross 0x07FFFFFF,
144 1.1 ross 0x03FFFFFF,
145 1.1 ross 0x01FFFFFF,
146 1.1 ross 0x00FFFFFF,
147 1.1 ross 0x007FFFFF,
148 1.1 ross 0x003FFFFF,
149 1.1 ross 0x001FFFFF,
150 1.1 ross 0x000FFFFF,
151 1.1 ross 0x0007FFFF,
152 1.1 ross 0x0003FFFF,
153 1.1 ross 0x0001FFFF,
154 1.1 ross 0x0000FFFF,
155 1.1 ross 0x00007FFF,
156 1.1 ross 0x00003FFF,
157 1.1 ross 0x00001FFF,
158 1.1 ross 0x00000FFF,
159 1.1 ross 0x000007FF,
160 1.1 ross 0x000003FF,
161 1.1 ross 0x000001FF,
162 1.1 ross 0x000000FF,
163 1.1 ross 0x0000007F,
164 1.1 ross 0x0000003F,
165 1.1 ross 0x0000001F,
166 1.1 ross 0x0000000F,
167 1.1 ross 0x00000007,
168 1.1 ross 0x00000003
169 1.1 ross };
170 1.1 ross
171 1.1 ross static int32 int32NextP1( sequenceT *sequencePtr )
172 1.1 ross {
173 1.1 ross uint8 termNum;
174 1.1 ross int32 z;
175 1.1 ross
176 1.1 ross termNum = sequencePtr->term1Num;
177 1.1 ross z = int32P1[ termNum ];
178 1.1 ross ++termNum;
179 1.1 ross if ( int32NumP1 <= termNum ) {
180 1.1 ross termNum = 0;
181 1.1 ross sequencePtr->done = TRUE;
182 1.1 ross }
183 1.1 ross sequencePtr->term1Num = termNum;
184 1.1 ross return (sbits32) z;
185 1.1 ross
186 1.1 ross }
187 1.1 ross
188 1.1 ross static const int32 int32NumP2 = ( int32NumP1 * int32NumP1 + int32NumP1 ) / 2;
189 1.1 ross
190 1.1 ross static int32 int32NextP2( sequenceT *sequencePtr )
191 1.1 ross {
192 1.1 ross uint8 term1Num, term2Num;
193 1.1 ross int32 z;
194 1.1 ross
195 1.1 ross term2Num = sequencePtr->term2Num;
196 1.1 ross term1Num = sequencePtr->term1Num;
197 1.1 ross z = int32P1[ term1Num ] + int32P1[ term2Num ];
198 1.1 ross ++term2Num;
199 1.1 ross if ( int32NumP1 <= term2Num ) {
200 1.1 ross ++term1Num;
201 1.1 ross if ( int32NumP1 <= term1Num ) {
202 1.1 ross term1Num = 0;
203 1.1 ross sequencePtr->done = TRUE;
204 1.1 ross }
205 1.1 ross term2Num = term1Num;
206 1.1 ross sequencePtr->term1Num = term1Num;
207 1.1 ross }
208 1.1 ross sequencePtr->term2Num = term2Num;
209 1.1 ross return (sbits32) z;
210 1.1 ross
211 1.1 ross }
212 1.1 ross
213 1.1 ross static int32 int32RandomP3( void )
214 1.1 ross {
215 1.1 ross
216 1.1 ross return
217 1.1 ross (sbits32) (
218 1.1 ross int32P1[ randomUint8() % int32NumP1 ]
219 1.1 ross + int32P1[ randomUint8() % int32NumP1 ]
220 1.1 ross + int32P1[ randomUint8() % int32NumP1 ]
221 1.1 ross );
222 1.1 ross
223 1.1 ross }
224 1.1 ross
225 1.1 ross enum {
226 1.1 ross int32NumPInfWeightMasks = 29
227 1.1 ross };
228 1.1 ross
229 1.1 ross static const uint32 int32PInfWeightMasks[ int32NumPInfWeightMasks ] = {
230 1.1 ross 0xFFFFFFFF,
231 1.1 ross 0x7FFFFFFF,
232 1.1 ross 0x3FFFFFFF,
233 1.1 ross 0x1FFFFFFF,
234 1.1 ross 0x0FFFFFFF,
235 1.1 ross 0x07FFFFFF,
236 1.1 ross 0x03FFFFFF,
237 1.1 ross 0x01FFFFFF,
238 1.1 ross 0x00FFFFFF,
239 1.1 ross 0x007FFFFF,
240 1.1 ross 0x003FFFFF,
241 1.1 ross 0x001FFFFF,
242 1.1 ross 0x000FFFFF,
243 1.1 ross 0x0007FFFF,
244 1.1 ross 0x0003FFFF,
245 1.1 ross 0x0001FFFF,
246 1.1 ross 0x0000FFFF,
247 1.1 ross 0x00007FFF,
248 1.1 ross 0x00003FFF,
249 1.1 ross 0x00001FFF,
250 1.1 ross 0x00000FFF,
251 1.1 ross 0x000007FF,
252 1.1 ross 0x000003FF,
253 1.1 ross 0x000001FF,
254 1.1 ross 0x000000FF,
255 1.1 ross 0x0000007F,
256 1.1 ross 0x0000003F,
257 1.1 ross 0x0000001F,
258 1.1 ross 0x0000000F
259 1.1 ross };
260 1.1 ross
261 1.1 ross static const uint32 int32PInfWeightOffsets[ int32NumPInfWeightMasks ] = {
262 1.1 ross 0x00000000,
263 1.1 ross 0xC0000000,
264 1.1 ross 0xE0000000,
265 1.1 ross 0xF0000000,
266 1.1 ross 0xF8000000,
267 1.1 ross 0xFC000000,
268 1.1 ross 0xFE000000,
269 1.1 ross 0xFF000000,
270 1.1 ross 0xFF800000,
271 1.1 ross 0xFFC00000,
272 1.1 ross 0xFFE00000,
273 1.1 ross 0xFFF00000,
274 1.1 ross 0xFFF80000,
275 1.1 ross 0xFFFC0000,
276 1.1 ross 0xFFFE0000,
277 1.1 ross 0xFFFF0000,
278 1.1 ross 0xFFFF8000,
279 1.1 ross 0xFFFFC000,
280 1.1 ross 0xFFFFE000,
281 1.1 ross 0xFFFFF000,
282 1.1 ross 0xFFFFF800,
283 1.1 ross 0xFFFFFC00,
284 1.1 ross 0xFFFFFE00,
285 1.1 ross 0xFFFFFF00,
286 1.1 ross 0xFFFFFF80,
287 1.1 ross 0xFFFFFFC0,
288 1.1 ross 0xFFFFFFE0,
289 1.1 ross 0xFFFFFFF0,
290 1.1 ross 0xFFFFFFF8
291 1.1 ross };
292 1.1 ross
293 1.1 ross static int32 int32RandomPInf( void )
294 1.1 ross {
295 1.1 ross int8 weightMaskNum;
296 1.1 ross
297 1.1 ross weightMaskNum = randomUint8() % int32NumPInfWeightMasks;
298 1.1 ross return
299 1.1 ross (sbits32) (
300 1.1 ross ( randomUint32() & int32PInfWeightMasks[ weightMaskNum ] )
301 1.1 ross + int32PInfWeightOffsets[ weightMaskNum ]
302 1.1 ross );
303 1.1 ross
304 1.1 ross }
305 1.1 ross
306 1.1 ross #ifdef BITS64
307 1.1 ross
308 1.1 ross enum {
309 1.1 ross int64NumP1 = 252
310 1.1 ross };
311 1.1 ross
312 1.1 ross static const uint64 int64P1[ int64NumP1 ] = {
313 1.1 ross LIT64( 0x0000000000000000 ),
314 1.1 ross LIT64( 0x0000000000000001 ),
315 1.1 ross LIT64( 0x0000000000000002 ),
316 1.1 ross LIT64( 0x0000000000000004 ),
317 1.1 ross LIT64( 0x0000000000000008 ),
318 1.1 ross LIT64( 0x0000000000000010 ),
319 1.1 ross LIT64( 0x0000000000000020 ),
320 1.1 ross LIT64( 0x0000000000000040 ),
321 1.1 ross LIT64( 0x0000000000000080 ),
322 1.1 ross LIT64( 0x0000000000000100 ),
323 1.1 ross LIT64( 0x0000000000000200 ),
324 1.1 ross LIT64( 0x0000000000000400 ),
325 1.1 ross LIT64( 0x0000000000000800 ),
326 1.1 ross LIT64( 0x0000000000001000 ),
327 1.1 ross LIT64( 0x0000000000002000 ),
328 1.1 ross LIT64( 0x0000000000004000 ),
329 1.1 ross LIT64( 0x0000000000008000 ),
330 1.1 ross LIT64( 0x0000000000010000 ),
331 1.1 ross LIT64( 0x0000000000020000 ),
332 1.1 ross LIT64( 0x0000000000040000 ),
333 1.1 ross LIT64( 0x0000000000080000 ),
334 1.1 ross LIT64( 0x0000000000100000 ),
335 1.1 ross LIT64( 0x0000000000200000 ),
336 1.1 ross LIT64( 0x0000000000400000 ),
337 1.1 ross LIT64( 0x0000000000800000 ),
338 1.1 ross LIT64( 0x0000000001000000 ),
339 1.1 ross LIT64( 0x0000000002000000 ),
340 1.1 ross LIT64( 0x0000000004000000 ),
341 1.1 ross LIT64( 0x0000000008000000 ),
342 1.1 ross LIT64( 0x0000000010000000 ),
343 1.1 ross LIT64( 0x0000000020000000 ),
344 1.1 ross LIT64( 0x0000000040000000 ),
345 1.1 ross LIT64( 0x0000000080000000 ),
346 1.1 ross LIT64( 0x0000000100000000 ),
347 1.1 ross LIT64( 0x0000000200000000 ),
348 1.1 ross LIT64( 0x0000000400000000 ),
349 1.1 ross LIT64( 0x0000000800000000 ),
350 1.1 ross LIT64( 0x0000001000000000 ),
351 1.1 ross LIT64( 0x0000002000000000 ),
352 1.1 ross LIT64( 0x0000004000000000 ),
353 1.1 ross LIT64( 0x0000008000000000 ),
354 1.1 ross LIT64( 0x0000010000000000 ),
355 1.1 ross LIT64( 0x0000020000000000 ),
356 1.1 ross LIT64( 0x0000040000000000 ),
357 1.1 ross LIT64( 0x0000080000000000 ),
358 1.1 ross LIT64( 0x0000100000000000 ),
359 1.1 ross LIT64( 0x0000200000000000 ),
360 1.1 ross LIT64( 0x0000400000000000 ),
361 1.1 ross LIT64( 0x0000800000000000 ),
362 1.1 ross LIT64( 0x0001000000000000 ),
363 1.1 ross LIT64( 0x0002000000000000 ),
364 1.1 ross LIT64( 0x0004000000000000 ),
365 1.1 ross LIT64( 0x0008000000000000 ),
366 1.1 ross LIT64( 0x0010000000000000 ),
367 1.1 ross LIT64( 0x0020000000000000 ),
368 1.1 ross LIT64( 0x0040000000000000 ),
369 1.1 ross LIT64( 0x0080000000000000 ),
370 1.1 ross LIT64( 0x0100000000000000 ),
371 1.1 ross LIT64( 0x0200000000000000 ),
372 1.1 ross LIT64( 0x0400000000000000 ),
373 1.1 ross LIT64( 0x0800000000000000 ),
374 1.1 ross LIT64( 0x1000000000000000 ),
375 1.1 ross LIT64( 0x2000000000000000 ),
376 1.1 ross LIT64( 0x4000000000000000 ),
377 1.1 ross LIT64( 0x8000000000000000 ),
378 1.1 ross LIT64( 0xC000000000000000 ),
379 1.1 ross LIT64( 0xE000000000000000 ),
380 1.1 ross LIT64( 0xF000000000000000 ),
381 1.1 ross LIT64( 0xF800000000000000 ),
382 1.1 ross LIT64( 0xFC00000000000000 ),
383 1.1 ross LIT64( 0xFE00000000000000 ),
384 1.1 ross LIT64( 0xFF00000000000000 ),
385 1.1 ross LIT64( 0xFF80000000000000 ),
386 1.1 ross LIT64( 0xFFC0000000000000 ),
387 1.1 ross LIT64( 0xFFE0000000000000 ),
388 1.1 ross LIT64( 0xFFF0000000000000 ),
389 1.1 ross LIT64( 0xFFF8000000000000 ),
390 1.1 ross LIT64( 0xFFFC000000000000 ),
391 1.1 ross LIT64( 0xFFFE000000000000 ),
392 1.1 ross LIT64( 0xFFFF000000000000 ),
393 1.1 ross LIT64( 0xFFFF800000000000 ),
394 1.1 ross LIT64( 0xFFFFC00000000000 ),
395 1.1 ross LIT64( 0xFFFFE00000000000 ),
396 1.1 ross LIT64( 0xFFFFF00000000000 ),
397 1.1 ross LIT64( 0xFFFFF80000000000 ),
398 1.1 ross LIT64( 0xFFFFFC0000000000 ),
399 1.1 ross LIT64( 0xFFFFFE0000000000 ),
400 1.1 ross LIT64( 0xFFFFFF0000000000 ),
401 1.1 ross LIT64( 0xFFFFFF8000000000 ),
402 1.1 ross LIT64( 0xFFFFFFC000000000 ),
403 1.1 ross LIT64( 0xFFFFFFE000000000 ),
404 1.1 ross LIT64( 0xFFFFFFF000000000 ),
405 1.1 ross LIT64( 0xFFFFFFF800000000 ),
406 1.1 ross LIT64( 0xFFFFFFFC00000000 ),
407 1.1 ross LIT64( 0xFFFFFFFE00000000 ),
408 1.1 ross LIT64( 0xFFFFFFFF00000000 ),
409 1.1 ross LIT64( 0xFFFFFFFF80000000 ),
410 1.1 ross LIT64( 0xFFFFFFFFC0000000 ),
411 1.1 ross LIT64( 0xFFFFFFFFE0000000 ),
412 1.1 ross LIT64( 0xFFFFFFFFF0000000 ),
413 1.1 ross LIT64( 0xFFFFFFFFF8000000 ),
414 1.1 ross LIT64( 0xFFFFFFFFFC000000 ),
415 1.1 ross LIT64( 0xFFFFFFFFFE000000 ),
416 1.1 ross LIT64( 0xFFFFFFFFFF000000 ),
417 1.1 ross LIT64( 0xFFFFFFFFFF800000 ),
418 1.1 ross LIT64( 0xFFFFFFFFFFC00000 ),
419 1.1 ross LIT64( 0xFFFFFFFFFFE00000 ),
420 1.1 ross LIT64( 0xFFFFFFFFFFF00000 ),
421 1.1 ross LIT64( 0xFFFFFFFFFFF80000 ),
422 1.1 ross LIT64( 0xFFFFFFFFFFFC0000 ),
423 1.1 ross LIT64( 0xFFFFFFFFFFFE0000 ),
424 1.1 ross LIT64( 0xFFFFFFFFFFFF0000 ),
425 1.1 ross LIT64( 0xFFFFFFFFFFFF8000 ),
426 1.1 ross LIT64( 0xFFFFFFFFFFFFC000 ),
427 1.1 ross LIT64( 0xFFFFFFFFFFFFE000 ),
428 1.1 ross LIT64( 0xFFFFFFFFFFFFF000 ),
429 1.1 ross LIT64( 0xFFFFFFFFFFFFF800 ),
430 1.1 ross LIT64( 0xFFFFFFFFFFFFFC00 ),
431 1.1 ross LIT64( 0xFFFFFFFFFFFFFE00 ),
432 1.1 ross LIT64( 0xFFFFFFFFFFFFFF00 ),
433 1.1 ross LIT64( 0xFFFFFFFFFFFFFF80 ),
434 1.1 ross LIT64( 0xFFFFFFFFFFFFFFC0 ),
435 1.1 ross LIT64( 0xFFFFFFFFFFFFFFE0 ),
436 1.1 ross LIT64( 0xFFFFFFFFFFFFFFF0 ),
437 1.1 ross LIT64( 0xFFFFFFFFFFFFFFF8 ),
438 1.1 ross LIT64( 0xFFFFFFFFFFFFFFFC ),
439 1.1 ross LIT64( 0xFFFFFFFFFFFFFFFE ),
440 1.1 ross LIT64( 0xFFFFFFFFFFFFFFFF ),
441 1.1 ross LIT64( 0xFFFFFFFFFFFFFFFD ),
442 1.1 ross LIT64( 0xFFFFFFFFFFFFFFFB ),
443 1.1 ross LIT64( 0xFFFFFFFFFFFFFFF7 ),
444 1.1 ross LIT64( 0xFFFFFFFFFFFFFFEF ),
445 1.1 ross LIT64( 0xFFFFFFFFFFFFFFDF ),
446 1.1 ross LIT64( 0xFFFFFFFFFFFFFFBF ),
447 1.1 ross LIT64( 0xFFFFFFFFFFFFFF7F ),
448 1.1 ross LIT64( 0xFFFFFFFFFFFFFEFF ),
449 1.1 ross LIT64( 0xFFFFFFFFFFFFFDFF ),
450 1.1 ross LIT64( 0xFFFFFFFFFFFFFBFF ),
451 1.1 ross LIT64( 0xFFFFFFFFFFFFF7FF ),
452 1.1 ross LIT64( 0xFFFFFFFFFFFFEFFF ),
453 1.1 ross LIT64( 0xFFFFFFFFFFFFDFFF ),
454 1.1 ross LIT64( 0xFFFFFFFFFFFFBFFF ),
455 1.1 ross LIT64( 0xFFFFFFFFFFFF7FFF ),
456 1.1 ross LIT64( 0xFFFFFFFFFFFEFFFF ),
457 1.1 ross LIT64( 0xFFFFFFFFFFFDFFFF ),
458 1.1 ross LIT64( 0xFFFFFFFFFFFBFFFF ),
459 1.1 ross LIT64( 0xFFFFFFFFFFF7FFFF ),
460 1.1 ross LIT64( 0xFFFFFFFFFFEFFFFF ),
461 1.1 ross LIT64( 0xFFFFFFFFFFDFFFFF ),
462 1.1 ross LIT64( 0xFFFFFFFFFFBFFFFF ),
463 1.1 ross LIT64( 0xFFFFFFFFFF7FFFFF ),
464 1.1 ross LIT64( 0xFFFFFFFFFEFFFFFF ),
465 1.1 ross LIT64( 0xFFFFFFFFFDFFFFFF ),
466 1.1 ross LIT64( 0xFFFFFFFFFBFFFFFF ),
467 1.1 ross LIT64( 0xFFFFFFFFF7FFFFFF ),
468 1.1 ross LIT64( 0xFFFFFFFFEFFFFFFF ),
469 1.1 ross LIT64( 0xFFFFFFFFDFFFFFFF ),
470 1.1 ross LIT64( 0xFFFFFFFFBFFFFFFF ),
471 1.1 ross LIT64( 0xFFFFFFFF7FFFFFFF ),
472 1.1 ross LIT64( 0xFFFFFFFEFFFFFFFF ),
473 1.1 ross LIT64( 0xFFFFFFFDFFFFFFFF ),
474 1.1 ross LIT64( 0xFFFFFFFBFFFFFFFF ),
475 1.1 ross LIT64( 0xFFFFFFF7FFFFFFFF ),
476 1.1 ross LIT64( 0xFFFFFFEFFFFFFFFF ),
477 1.1 ross LIT64( 0xFFFFFFDFFFFFFFFF ),
478 1.1 ross LIT64( 0xFFFFFFBFFFFFFFFF ),
479 1.1 ross LIT64( 0xFFFFFF7FFFFFFFFF ),
480 1.1 ross LIT64( 0xFFFFFEFFFFFFFFFF ),
481 1.1 ross LIT64( 0xFFFFFDFFFFFFFFFF ),
482 1.1 ross LIT64( 0xFFFFFBFFFFFFFFFF ),
483 1.1 ross LIT64( 0xFFFFF7FFFFFFFFFF ),
484 1.1 ross LIT64( 0xFFFFEFFFFFFFFFFF ),
485 1.1 ross LIT64( 0xFFFFDFFFFFFFFFFF ),
486 1.1 ross LIT64( 0xFFFFBFFFFFFFFFFF ),
487 1.1 ross LIT64( 0xFFFF7FFFFFFFFFFF ),
488 1.1 ross LIT64( 0xFFFEFFFFFFFFFFFF ),
489 1.1 ross LIT64( 0xFFFDFFFFFFFFFFFF ),
490 1.1 ross LIT64( 0xFFFBFFFFFFFFFFFF ),
491 1.1 ross LIT64( 0xFFF7FFFFFFFFFFFF ),
492 1.1 ross LIT64( 0xFFEFFFFFFFFFFFFF ),
493 1.1 ross LIT64( 0xFFDFFFFFFFFFFFFF ),
494 1.1 ross LIT64( 0xFFBFFFFFFFFFFFFF ),
495 1.1 ross LIT64( 0xFF7FFFFFFFFFFFFF ),
496 1.1 ross LIT64( 0xFEFFFFFFFFFFFFFF ),
497 1.1 ross LIT64( 0xFDFFFFFFFFFFFFFF ),
498 1.1 ross LIT64( 0xFBFFFFFFFFFFFFFF ),
499 1.1 ross LIT64( 0xF7FFFFFFFFFFFFFF ),
500 1.1 ross LIT64( 0xEFFFFFFFFFFFFFFF ),
501 1.1 ross LIT64( 0xDFFFFFFFFFFFFFFF ),
502 1.1 ross LIT64( 0xBFFFFFFFFFFFFFFF ),
503 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFF ),
504 1.1 ross LIT64( 0x3FFFFFFFFFFFFFFF ),
505 1.1 ross LIT64( 0x1FFFFFFFFFFFFFFF ),
506 1.1 ross LIT64( 0x0FFFFFFFFFFFFFFF ),
507 1.1 ross LIT64( 0x07FFFFFFFFFFFFFF ),
508 1.1 ross LIT64( 0x03FFFFFFFFFFFFFF ),
509 1.1 ross LIT64( 0x01FFFFFFFFFFFFFF ),
510 1.1 ross LIT64( 0x00FFFFFFFFFFFFFF ),
511 1.1 ross LIT64( 0x007FFFFFFFFFFFFF ),
512 1.1 ross LIT64( 0x003FFFFFFFFFFFFF ),
513 1.1 ross LIT64( 0x001FFFFFFFFFFFFF ),
514 1.1 ross LIT64( 0x000FFFFFFFFFFFFF ),
515 1.1 ross LIT64( 0x0007FFFFFFFFFFFF ),
516 1.1 ross LIT64( 0x0003FFFFFFFFFFFF ),
517 1.1 ross LIT64( 0x0001FFFFFFFFFFFF ),
518 1.1 ross LIT64( 0x0000FFFFFFFFFFFF ),
519 1.1 ross LIT64( 0x00007FFFFFFFFFFF ),
520 1.1 ross LIT64( 0x00003FFFFFFFFFFF ),
521 1.1 ross LIT64( 0x00001FFFFFFFFFFF ),
522 1.1 ross LIT64( 0x00000FFFFFFFFFFF ),
523 1.1 ross LIT64( 0x000007FFFFFFFFFF ),
524 1.1 ross LIT64( 0x000003FFFFFFFFFF ),
525 1.1 ross LIT64( 0x000001FFFFFFFFFF ),
526 1.1 ross LIT64( 0x000000FFFFFFFFFF ),
527 1.1 ross LIT64( 0x0000007FFFFFFFFF ),
528 1.1 ross LIT64( 0x0000003FFFFFFFFF ),
529 1.1 ross LIT64( 0x0000001FFFFFFFFF ),
530 1.1 ross LIT64( 0x0000000FFFFFFFFF ),
531 1.1 ross LIT64( 0x00000007FFFFFFFF ),
532 1.1 ross LIT64( 0x00000003FFFFFFFF ),
533 1.1 ross LIT64( 0x00000001FFFFFFFF ),
534 1.1 ross LIT64( 0x00000000FFFFFFFF ),
535 1.1 ross LIT64( 0x000000007FFFFFFF ),
536 1.1 ross LIT64( 0x000000003FFFFFFF ),
537 1.1 ross LIT64( 0x000000001FFFFFFF ),
538 1.1 ross LIT64( 0x000000000FFFFFFF ),
539 1.1 ross LIT64( 0x0000000007FFFFFF ),
540 1.1 ross LIT64( 0x0000000003FFFFFF ),
541 1.1 ross LIT64( 0x0000000001FFFFFF ),
542 1.1 ross LIT64( 0x0000000000FFFFFF ),
543 1.1 ross LIT64( 0x00000000007FFFFF ),
544 1.1 ross LIT64( 0x00000000003FFFFF ),
545 1.1 ross LIT64( 0x00000000001FFFFF ),
546 1.1 ross LIT64( 0x00000000000FFFFF ),
547 1.1 ross LIT64( 0x000000000007FFFF ),
548 1.1 ross LIT64( 0x000000000003FFFF ),
549 1.1 ross LIT64( 0x000000000001FFFF ),
550 1.1 ross LIT64( 0x000000000000FFFF ),
551 1.1 ross LIT64( 0x0000000000007FFF ),
552 1.1 ross LIT64( 0x0000000000003FFF ),
553 1.1 ross LIT64( 0x0000000000001FFF ),
554 1.1 ross LIT64( 0x0000000000000FFF ),
555 1.1 ross LIT64( 0x00000000000007FF ),
556 1.1 ross LIT64( 0x00000000000003FF ),
557 1.1 ross LIT64( 0x00000000000001FF ),
558 1.1 ross LIT64( 0x00000000000000FF ),
559 1.1 ross LIT64( 0x000000000000007F ),
560 1.1 ross LIT64( 0x000000000000003F ),
561 1.1 ross LIT64( 0x000000000000001F ),
562 1.1 ross LIT64( 0x000000000000000F ),
563 1.1 ross LIT64( 0x0000000000000007 ),
564 1.1 ross LIT64( 0x0000000000000003 )
565 1.1 ross };
566 1.1 ross
567 1.1 ross static int64 int64NextP1( sequenceT *sequencePtr )
568 1.1 ross {
569 1.1 ross uint8 termNum;
570 1.1 ross int64 z;
571 1.1 ross
572 1.1 ross termNum = sequencePtr->term1Num;
573 1.1 ross z = int64P1[ termNum ];
574 1.1 ross ++termNum;
575 1.1 ross if ( int64NumP1 <= termNum ) {
576 1.1 ross termNum = 0;
577 1.1 ross sequencePtr->done = TRUE;
578 1.1 ross }
579 1.1 ross sequencePtr->term1Num = termNum;
580 1.1 ross return (sbits64) z;
581 1.1 ross
582 1.1 ross }
583 1.1 ross
584 1.1 ross static const int64 int64NumP2 = ( int64NumP1 * int64NumP1 + int64NumP1 ) / 2;
585 1.1 ross
586 1.1 ross static int64 int64NextP2( sequenceT *sequencePtr )
587 1.1 ross {
588 1.1 ross uint8 term1Num, term2Num;
589 1.1 ross int64 z;
590 1.1 ross
591 1.1 ross term2Num = sequencePtr->term2Num;
592 1.1 ross term1Num = sequencePtr->term1Num;
593 1.1 ross z = int64P1[ term1Num ] + int64P1[ term2Num ];
594 1.1 ross ++term2Num;
595 1.1 ross if ( int64NumP1 <= term2Num ) {
596 1.1 ross ++term1Num;
597 1.1 ross if ( int64NumP1 <= term1Num ) {
598 1.1 ross term1Num = 0;
599 1.1 ross sequencePtr->done = TRUE;
600 1.1 ross }
601 1.1 ross term2Num = term1Num;
602 1.1 ross sequencePtr->term1Num = term1Num;
603 1.1 ross }
604 1.1 ross sequencePtr->term2Num = term2Num;
605 1.1 ross return (sbits64) z;
606 1.1 ross
607 1.1 ross }
608 1.1 ross
609 1.1 ross static int64 int64RandomP3( void )
610 1.1 ross {
611 1.1 ross
612 1.1 ross return
613 1.1 ross (sbits64) (
614 1.1 ross int64P1[ randomUint8() % int64NumP1 ]
615 1.1 ross + int64P1[ randomUint8() % int64NumP1 ]
616 1.1 ross + int64P1[ randomUint8() % int64NumP1 ]
617 1.1 ross );
618 1.1 ross
619 1.1 ross }
620 1.1 ross
621 1.1 ross enum {
622 1.1 ross int64NumPInfWeightMasks = 61
623 1.1 ross };
624 1.1 ross
625 1.1 ross static const uint64 int64PInfWeightMasks[ int64NumPInfWeightMasks ] = {
626 1.1 ross LIT64( 0xFFFFFFFFFFFFFFFF ),
627 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFF ),
628 1.1 ross LIT64( 0x3FFFFFFFFFFFFFFF ),
629 1.1 ross LIT64( 0x1FFFFFFFFFFFFFFF ),
630 1.1 ross LIT64( 0x0FFFFFFFFFFFFFFF ),
631 1.1 ross LIT64( 0x07FFFFFFFFFFFFFF ),
632 1.1 ross LIT64( 0x03FFFFFFFFFFFFFF ),
633 1.1 ross LIT64( 0x01FFFFFFFFFFFFFF ),
634 1.1 ross LIT64( 0x00FFFFFFFFFFFFFF ),
635 1.1 ross LIT64( 0x007FFFFFFFFFFFFF ),
636 1.1 ross LIT64( 0x003FFFFFFFFFFFFF ),
637 1.1 ross LIT64( 0x001FFFFFFFFFFFFF ),
638 1.1 ross LIT64( 0x000FFFFFFFFFFFFF ),
639 1.1 ross LIT64( 0x0007FFFFFFFFFFFF ),
640 1.1 ross LIT64( 0x0003FFFFFFFFFFFF ),
641 1.1 ross LIT64( 0x0001FFFFFFFFFFFF ),
642 1.1 ross LIT64( 0x0000FFFFFFFFFFFF ),
643 1.1 ross LIT64( 0x00007FFFFFFFFFFF ),
644 1.1 ross LIT64( 0x00003FFFFFFFFFFF ),
645 1.1 ross LIT64( 0x00001FFFFFFFFFFF ),
646 1.1 ross LIT64( 0x00000FFFFFFFFFFF ),
647 1.1 ross LIT64( 0x000007FFFFFFFFFF ),
648 1.1 ross LIT64( 0x000003FFFFFFFFFF ),
649 1.1 ross LIT64( 0x000001FFFFFFFFFF ),
650 1.1 ross LIT64( 0x000000FFFFFFFFFF ),
651 1.1 ross LIT64( 0x0000007FFFFFFFFF ),
652 1.1 ross LIT64( 0x0000003FFFFFFFFF ),
653 1.1 ross LIT64( 0x0000001FFFFFFFFF ),
654 1.1 ross LIT64( 0x0000000FFFFFFFFF ),
655 1.1 ross LIT64( 0x00000007FFFFFFFF ),
656 1.1 ross LIT64( 0x00000003FFFFFFFF ),
657 1.1 ross LIT64( 0x00000001FFFFFFFF ),
658 1.1 ross LIT64( 0x00000000FFFFFFFF ),
659 1.1 ross LIT64( 0x000000007FFFFFFF ),
660 1.1 ross LIT64( 0x000000003FFFFFFF ),
661 1.1 ross LIT64( 0x000000001FFFFFFF ),
662 1.1 ross LIT64( 0x000000000FFFFFFF ),
663 1.1 ross LIT64( 0x0000000007FFFFFF ),
664 1.1 ross LIT64( 0x0000000003FFFFFF ),
665 1.1 ross LIT64( 0x0000000001FFFFFF ),
666 1.1 ross LIT64( 0x0000000000FFFFFF ),
667 1.1 ross LIT64( 0x00000000007FFFFF ),
668 1.1 ross LIT64( 0x00000000003FFFFF ),
669 1.1 ross LIT64( 0x00000000001FFFFF ),
670 1.1 ross LIT64( 0x00000000000FFFFF ),
671 1.1 ross LIT64( 0x000000000007FFFF ),
672 1.1 ross LIT64( 0x000000000003FFFF ),
673 1.1 ross LIT64( 0x000000000001FFFF ),
674 1.1 ross LIT64( 0x000000000000FFFF ),
675 1.1 ross LIT64( 0x0000000000007FFF ),
676 1.1 ross LIT64( 0x0000000000003FFF ),
677 1.1 ross LIT64( 0x0000000000001FFF ),
678 1.1 ross LIT64( 0x0000000000000FFF ),
679 1.1 ross LIT64( 0x00000000000007FF ),
680 1.1 ross LIT64( 0x00000000000003FF ),
681 1.1 ross LIT64( 0x00000000000001FF ),
682 1.1 ross LIT64( 0x00000000000000FF ),
683 1.1 ross LIT64( 0x000000000000007F ),
684 1.1 ross LIT64( 0x000000000000003F ),
685 1.1 ross LIT64( 0x000000000000001F ),
686 1.1 ross LIT64( 0x000000000000000F )
687 1.1 ross };
688 1.1 ross
689 1.1 ross static const uint64 int64PInfWeightOffsets[ int64NumPInfWeightMasks ] = {
690 1.1 ross LIT64( 0x0000000000000000 ),
691 1.1 ross LIT64( 0xC000000000000000 ),
692 1.1 ross LIT64( 0xE000000000000000 ),
693 1.1 ross LIT64( 0xF000000000000000 ),
694 1.1 ross LIT64( 0xF800000000000000 ),
695 1.1 ross LIT64( 0xFC00000000000000 ),
696 1.1 ross LIT64( 0xFE00000000000000 ),
697 1.1 ross LIT64( 0xFF00000000000000 ),
698 1.1 ross LIT64( 0xFF80000000000000 ),
699 1.1 ross LIT64( 0xFFC0000000000000 ),
700 1.1 ross LIT64( 0xFFE0000000000000 ),
701 1.1 ross LIT64( 0xFFF0000000000000 ),
702 1.1 ross LIT64( 0xFFF8000000000000 ),
703 1.1 ross LIT64( 0xFFFC000000000000 ),
704 1.1 ross LIT64( 0xFFFE000000000000 ),
705 1.1 ross LIT64( 0xFFFF000000000000 ),
706 1.1 ross LIT64( 0xFFFF800000000000 ),
707 1.1 ross LIT64( 0xFFFFC00000000000 ),
708 1.1 ross LIT64( 0xFFFFE00000000000 ),
709 1.1 ross LIT64( 0xFFFFF00000000000 ),
710 1.1 ross LIT64( 0xFFFFF80000000000 ),
711 1.1 ross LIT64( 0xFFFFFC0000000000 ),
712 1.1 ross LIT64( 0xFFFFFE0000000000 ),
713 1.1 ross LIT64( 0xFFFFFF0000000000 ),
714 1.1 ross LIT64( 0xFFFFFF8000000000 ),
715 1.1 ross LIT64( 0xFFFFFFC000000000 ),
716 1.1 ross LIT64( 0xFFFFFFE000000000 ),
717 1.1 ross LIT64( 0xFFFFFFF000000000 ),
718 1.1 ross LIT64( 0xFFFFFFF800000000 ),
719 1.1 ross LIT64( 0xFFFFFFFC00000000 ),
720 1.1 ross LIT64( 0xFFFFFFFE00000000 ),
721 1.1 ross LIT64( 0xFFFFFFFF00000000 ),
722 1.1 ross LIT64( 0xFFFFFFFF80000000 ),
723 1.1 ross LIT64( 0xFFFFFFFFC0000000 ),
724 1.1 ross LIT64( 0xFFFFFFFFE0000000 ),
725 1.1 ross LIT64( 0xFFFFFFFFF0000000 ),
726 1.1 ross LIT64( 0xFFFFFFFFF8000000 ),
727 1.1 ross LIT64( 0xFFFFFFFFFC000000 ),
728 1.1 ross LIT64( 0xFFFFFFFFFE000000 ),
729 1.1 ross LIT64( 0xFFFFFFFFFF000000 ),
730 1.1 ross LIT64( 0xFFFFFFFFFF800000 ),
731 1.1 ross LIT64( 0xFFFFFFFFFFC00000 ),
732 1.1 ross LIT64( 0xFFFFFFFFFFE00000 ),
733 1.1 ross LIT64( 0xFFFFFFFFFFF00000 ),
734 1.1 ross LIT64( 0xFFFFFFFFFFF80000 ),
735 1.1 ross LIT64( 0xFFFFFFFFFFFC0000 ),
736 1.1 ross LIT64( 0xFFFFFFFFFFFE0000 ),
737 1.1 ross LIT64( 0xFFFFFFFFFFFF0000 ),
738 1.1 ross LIT64( 0xFFFFFFFFFFFF8000 ),
739 1.1 ross LIT64( 0xFFFFFFFFFFFFC000 ),
740 1.1 ross LIT64( 0xFFFFFFFFFFFFE000 ),
741 1.1 ross LIT64( 0xFFFFFFFFFFFFF000 ),
742 1.1 ross LIT64( 0xFFFFFFFFFFFFF800 ),
743 1.1 ross LIT64( 0xFFFFFFFFFFFFFC00 ),
744 1.1 ross LIT64( 0xFFFFFFFFFFFFFE00 ),
745 1.1 ross LIT64( 0xFFFFFFFFFFFFFF00 ),
746 1.1 ross LIT64( 0xFFFFFFFFFFFFFF80 ),
747 1.1 ross LIT64( 0xFFFFFFFFFFFFFFC0 ),
748 1.1 ross LIT64( 0xFFFFFFFFFFFFFFE0 ),
749 1.1 ross LIT64( 0xFFFFFFFFFFFFFFF0 ),
750 1.1 ross LIT64( 0xFFFFFFFFFFFFFFF8 )
751 1.1 ross };
752 1.1 ross
753 1.1 ross static int64 int64RandomPInf( void )
754 1.1 ross {
755 1.1 ross int8 weightMaskNum;
756 1.1 ross
757 1.1 ross weightMaskNum = randomUint8() % int64NumPInfWeightMasks;
758 1.1 ross return
759 1.1 ross (sbits64) (
760 1.1 ross ( randomUint64() & int64PInfWeightMasks[ weightMaskNum ] )
761 1.1 ross + int64PInfWeightOffsets[ weightMaskNum ]
762 1.1 ross );
763 1.1 ross
764 1.1 ross }
765 1.1 ross
766 1.1 ross #endif
767 1.1 ross
768 1.1 ross enum {
769 1.1 ross float32NumQIn = 22,
770 1.1 ross float32NumQOut = 50,
771 1.1 ross float32NumP1 = 4,
772 1.1 ross float32NumP2 = 88
773 1.1 ross };
774 1.1 ross
775 1.1 ross static const uint32 float32QIn[ float32NumQIn ] = {
776 1.1 ross 0x00000000, /* positive, subnormal */
777 1.1 ross 0x00800000, /* positive, -126 */
778 1.1 ross 0x33800000, /* positive, -24 */
779 1.1 ross 0x3E800000, /* positive, -2 */
780 1.1 ross 0x3F000000, /* positive, -1 */
781 1.1 ross 0x3F800000, /* positive, 0 */
782 1.1 ross 0x40000000, /* positive, 1 */
783 1.1 ross 0x40800000, /* positive, 2 */
784 1.1 ross 0x4B800000, /* positive, 24 */
785 1.1 ross 0x7F000000, /* positive, 127 */
786 1.1 ross 0x7F800000, /* positive, infinity or NaN */
787 1.1 ross 0x80000000, /* negative, subnormal */
788 1.1 ross 0x80800000, /* negative, -126 */
789 1.1 ross 0xB3800000, /* negative, -24 */
790 1.1 ross 0xBE800000, /* negative, -2 */
791 1.1 ross 0xBF000000, /* negative, -1 */
792 1.1 ross 0xBF800000, /* negative, 0 */
793 1.1 ross 0xC0000000, /* negative, 1 */
794 1.1 ross 0xC0800000, /* negative, 2 */
795 1.1 ross 0xCB800000, /* negative, 24 */
796 1.1 ross 0xFE800000, /* negative, 126 */
797 1.1 ross 0xFF800000 /* negative, infinity or NaN */
798 1.1 ross };
799 1.1 ross
800 1.1 ross static const uint32 float32QOut[ float32NumQOut ] = {
801 1.1 ross 0x00000000, /* positive, subnormal */
802 1.1 ross 0x00800000, /* positive, -126 */
803 1.1 ross 0x01000000, /* positive, -125 */
804 1.1 ross 0x33800000, /* positive, -24 */
805 1.1 ross 0x3D800000, /* positive, -4 */
806 1.1 ross 0x3E000000, /* positive, -3 */
807 1.1 ross 0x3E800000, /* positive, -2 */
808 1.1 ross 0x3F000000, /* positive, -1 */
809 1.1 ross 0x3F800000, /* positive, 0 */
810 1.1 ross 0x40000000, /* positive, 1 */
811 1.1 ross 0x40800000, /* positive, 2 */
812 1.1 ross 0x41000000, /* positive, 3 */
813 1.1 ross 0x41800000, /* positive, 4 */
814 1.1 ross 0x4B800000, /* positive, 24 */
815 1.1 ross 0x4E000000, /* positive, 29 */
816 1.1 ross 0x4E800000, /* positive, 30 */
817 1.1 ross 0x4F000000, /* positive, 31 */
818 1.1 ross 0x4F800000, /* positive, 32 */
819 1.1 ross 0x5E000000, /* positive, 61 */
820 1.1 ross 0x5E800000, /* positive, 62 */
821 1.1 ross 0x5F000000, /* positive, 63 */
822 1.1 ross 0x5F800000, /* positive, 64 */
823 1.1 ross 0x7E800000, /* positive, 126 */
824 1.1 ross 0x7F000000, /* positive, 127 */
825 1.1 ross 0x7F800000, /* positive, infinity or NaN */
826 1.1 ross 0x80000000, /* negative, subnormal */
827 1.1 ross 0x80800000, /* negative, -126 */
828 1.1 ross 0x81000000, /* negative, -125 */
829 1.1 ross 0xB3800000, /* negative, -24 */
830 1.1 ross 0xBD800000, /* negative, -4 */
831 1.1 ross 0xBE000000, /* negative, -3 */
832 1.1 ross 0xBE800000, /* negative, -2 */
833 1.1 ross 0xBF000000, /* negative, -1 */
834 1.1 ross 0xBF800000, /* negative, 0 */
835 1.1 ross 0xC0000000, /* negative, 1 */
836 1.1 ross 0xC0800000, /* negative, 2 */
837 1.1 ross 0xC1000000, /* negative, 3 */
838 1.1 ross 0xC1800000, /* negative, 4 */
839 1.1 ross 0xCB800000, /* negative, 24 */
840 1.1 ross 0xCE000000, /* negative, 29 */
841 1.1 ross 0xCE800000, /* negative, 30 */
842 1.1 ross 0xCF000000, /* negative, 31 */
843 1.1 ross 0xCF800000, /* negative, 32 */
844 1.1 ross 0xDE000000, /* negative, 61 */
845 1.1 ross 0xDE800000, /* negative, 62 */
846 1.1 ross 0xDF000000, /* negative, 63 */
847 1.1 ross 0xDF800000, /* negative, 64 */
848 1.1 ross 0xFE800000, /* negative, 126 */
849 1.1 ross 0xFF000000, /* negative, 127 */
850 1.1 ross 0xFF800000 /* negative, infinity or NaN */
851 1.1 ross };
852 1.1 ross
853 1.1 ross static const uint32 float32P1[ float32NumP1 ] = {
854 1.1 ross 0x00000000,
855 1.1 ross 0x00000001,
856 1.1 ross 0x007FFFFF,
857 1.1 ross 0x007FFFFE
858 1.1 ross };
859 1.1 ross
860 1.1 ross static const uint32 float32P2[ float32NumP2 ] = {
861 1.1 ross 0x00000000,
862 1.1 ross 0x00000001,
863 1.1 ross 0x00000002,
864 1.1 ross 0x00000004,
865 1.1 ross 0x00000008,
866 1.1 ross 0x00000010,
867 1.1 ross 0x00000020,
868 1.1 ross 0x00000040,
869 1.1 ross 0x00000080,
870 1.1 ross 0x00000100,
871 1.1 ross 0x00000200,
872 1.1 ross 0x00000400,
873 1.1 ross 0x00000800,
874 1.1 ross 0x00001000,
875 1.1 ross 0x00002000,
876 1.1 ross 0x00004000,
877 1.1 ross 0x00008000,
878 1.1 ross 0x00010000,
879 1.1 ross 0x00020000,
880 1.1 ross 0x00040000,
881 1.1 ross 0x00080000,
882 1.1 ross 0x00100000,
883 1.1 ross 0x00200000,
884 1.1 ross 0x00400000,
885 1.1 ross 0x00600000,
886 1.1 ross 0x00700000,
887 1.1 ross 0x00780000,
888 1.1 ross 0x007C0000,
889 1.1 ross 0x007E0000,
890 1.1 ross 0x007F0000,
891 1.1 ross 0x007F8000,
892 1.1 ross 0x007FC000,
893 1.1 ross 0x007FE000,
894 1.1 ross 0x007FF000,
895 1.1 ross 0x007FF800,
896 1.1 ross 0x007FFC00,
897 1.1 ross 0x007FFE00,
898 1.1 ross 0x007FFF00,
899 1.1 ross 0x007FFF80,
900 1.1 ross 0x007FFFC0,
901 1.1 ross 0x007FFFE0,
902 1.1 ross 0x007FFFF0,
903 1.1 ross 0x007FFFF8,
904 1.1 ross 0x007FFFFC,
905 1.1 ross 0x007FFFFE,
906 1.1 ross 0x007FFFFF,
907 1.1 ross 0x007FFFFD,
908 1.1 ross 0x007FFFFB,
909 1.1 ross 0x007FFFF7,
910 1.1 ross 0x007FFFEF,
911 1.1 ross 0x007FFFDF,
912 1.1 ross 0x007FFFBF,
913 1.1 ross 0x007FFF7F,
914 1.1 ross 0x007FFEFF,
915 1.1 ross 0x007FFDFF,
916 1.1 ross 0x007FFBFF,
917 1.1 ross 0x007FF7FF,
918 1.1 ross 0x007FEFFF,
919 1.1 ross 0x007FDFFF,
920 1.1 ross 0x007FBFFF,
921 1.1 ross 0x007F7FFF,
922 1.1 ross 0x007EFFFF,
923 1.1 ross 0x007DFFFF,
924 1.1 ross 0x007BFFFF,
925 1.1 ross 0x0077FFFF,
926 1.1 ross 0x006FFFFF,
927 1.1 ross 0x005FFFFF,
928 1.1 ross 0x003FFFFF,
929 1.1 ross 0x001FFFFF,
930 1.1 ross 0x000FFFFF,
931 1.1 ross 0x0007FFFF,
932 1.1 ross 0x0003FFFF,
933 1.1 ross 0x0001FFFF,
934 1.1 ross 0x0000FFFF,
935 1.1 ross 0x00007FFF,
936 1.1 ross 0x00003FFF,
937 1.1 ross 0x00001FFF,
938 1.1 ross 0x00000FFF,
939 1.1 ross 0x000007FF,
940 1.1 ross 0x000003FF,
941 1.1 ross 0x000001FF,
942 1.1 ross 0x000000FF,
943 1.1 ross 0x0000007F,
944 1.1 ross 0x0000003F,
945 1.1 ross 0x0000001F,
946 1.1 ross 0x0000000F,
947 1.1 ross 0x00000007,
948 1.1 ross 0x00000003
949 1.1 ross };
950 1.1 ross
951 1.1 ross static const uint32 float32NumQInP1 = float32NumQIn * float32NumP1;
952 1.1 ross static const uint32 float32NumQOutP1 = float32NumQOut * float32NumP1;
953 1.1 ross
954 1.1 ross static float32 float32NextQInP1( sequenceT *sequencePtr )
955 1.1 ross {
956 1.1 ross uint8 expNum, sigNum;
957 1.1 ross float32 z;
958 1.1 ross
959 1.1 ross sigNum = sequencePtr->term1Num;
960 1.1 ross expNum = sequencePtr->expNum;
961 1.1 ross z = float32QIn[ expNum ] | float32P1[ sigNum ];
962 1.1 ross ++sigNum;
963 1.1 ross if ( float32NumP1 <= sigNum ) {
964 1.1 ross sigNum = 0;
965 1.1 ross ++expNum;
966 1.1 ross if ( float32NumQIn <= expNum ) {
967 1.1 ross expNum = 0;
968 1.1 ross sequencePtr->done = TRUE;
969 1.1 ross }
970 1.1 ross sequencePtr->expNum = expNum;
971 1.1 ross }
972 1.1 ross sequencePtr->term1Num = sigNum;
973 1.1 ross return z;
974 1.1 ross
975 1.1 ross }
976 1.1 ross
977 1.1 ross static float32 float32NextQOutP1( sequenceT *sequencePtr )
978 1.1 ross {
979 1.1 ross uint8 expNum, sigNum;
980 1.1 ross float32 z;
981 1.1 ross
982 1.1 ross sigNum = sequencePtr->term1Num;
983 1.1 ross expNum = sequencePtr->expNum;
984 1.1 ross z = float32QOut[ expNum ] | float32P1[ sigNum ];
985 1.1 ross ++sigNum;
986 1.1 ross if ( float32NumP1 <= sigNum ) {
987 1.1 ross sigNum = 0;
988 1.1 ross ++expNum;
989 1.1 ross if ( float32NumQOut <= expNum ) {
990 1.1 ross expNum = 0;
991 1.1 ross sequencePtr->done = TRUE;
992 1.1 ross }
993 1.1 ross sequencePtr->expNum = expNum;
994 1.1 ross }
995 1.1 ross sequencePtr->term1Num = sigNum;
996 1.1 ross return z;
997 1.1 ross
998 1.1 ross }
999 1.1 ross
1000 1.1 ross static const uint32 float32NumQInP2 = float32NumQIn * float32NumP2;
1001 1.1 ross static const uint32 float32NumQOutP2 = float32NumQOut * float32NumP2;
1002 1.1 ross
1003 1.1 ross static float32 float32NextQInP2( sequenceT *sequencePtr )
1004 1.1 ross {
1005 1.1 ross uint8 expNum, sigNum;
1006 1.1 ross float32 z;
1007 1.1 ross
1008 1.1 ross sigNum = sequencePtr->term1Num;
1009 1.1 ross expNum = sequencePtr->expNum;
1010 1.1 ross z = float32QIn[ expNum ] | float32P2[ sigNum ];
1011 1.1 ross ++sigNum;
1012 1.1 ross if ( float32NumP2 <= sigNum ) {
1013 1.1 ross sigNum = 0;
1014 1.1 ross ++expNum;
1015 1.1 ross if ( float32NumQIn <= expNum ) {
1016 1.1 ross expNum = 0;
1017 1.1 ross sequencePtr->done = TRUE;
1018 1.1 ross }
1019 1.1 ross sequencePtr->expNum = expNum;
1020 1.1 ross }
1021 1.1 ross sequencePtr->term1Num = sigNum;
1022 1.1 ross return z;
1023 1.1 ross
1024 1.1 ross }
1025 1.1 ross
1026 1.1 ross static float32 float32NextQOutP2( sequenceT *sequencePtr )
1027 1.1 ross {
1028 1.1 ross uint8 expNum, sigNum;
1029 1.1 ross float32 z;
1030 1.1 ross
1031 1.1 ross sigNum = sequencePtr->term1Num;
1032 1.1 ross expNum = sequencePtr->expNum;
1033 1.1 ross z = float32QOut[ expNum ] | float32P2[ sigNum ];
1034 1.1 ross ++sigNum;
1035 1.1 ross if ( float32NumP2 <= sigNum ) {
1036 1.1 ross sigNum = 0;
1037 1.1 ross ++expNum;
1038 1.1 ross if ( float32NumQOut <= expNum ) {
1039 1.1 ross expNum = 0;
1040 1.1 ross sequencePtr->done = TRUE;
1041 1.1 ross }
1042 1.1 ross sequencePtr->expNum = expNum;
1043 1.1 ross }
1044 1.1 ross sequencePtr->term1Num = sigNum;
1045 1.1 ross return z;
1046 1.1 ross
1047 1.1 ross }
1048 1.1 ross
1049 1.1 ross static float32 float32RandomQOutP3( void )
1050 1.1 ross {
1051 1.1 ross
1052 1.1 ross return
1053 1.1 ross float32QOut[ randomUint8() % float32NumQOut ]
1054 1.1 ross | ( ( float32P2[ randomUint8() % float32NumP2 ]
1055 1.1 ross + float32P2[ randomUint8() % float32NumP2 ] )
1056 1.1 ross & 0x007FFFFF );
1057 1.1 ross
1058 1.1 ross }
1059 1.1 ross
1060 1.1 ross static float32 float32RandomQOutPInf( void )
1061 1.1 ross {
1062 1.1 ross
1063 1.1 ross return
1064 1.1 ross float32QOut[ randomUint8() % float32NumQOut ]
1065 1.1 ross | ( randomUint32() & 0x007FFFFF );
1066 1.1 ross
1067 1.1 ross }
1068 1.1 ross
1069 1.1 ross enum {
1070 1.1 ross float32NumQInfWeightMasks = 7
1071 1.1 ross };
1072 1.1 ross
1073 1.1 ross static const uint32 float32QInfWeightMasks[ float32NumQInfWeightMasks ] = {
1074 1.1 ross 0x7F800000,
1075 1.1 ross 0x7F800000,
1076 1.1 ross 0x3F800000,
1077 1.1 ross 0x1F800000,
1078 1.1 ross 0x0F800000,
1079 1.1 ross 0x07800000,
1080 1.1 ross 0x03800000
1081 1.1 ross };
1082 1.1 ross
1083 1.1 ross static const uint32 float32QInfWeightOffsets[ float32NumQInfWeightMasks ] = {
1084 1.1 ross 0x00000000,
1085 1.1 ross 0x00000000,
1086 1.1 ross 0x20000000,
1087 1.1 ross 0x30000000,
1088 1.1 ross 0x38000000,
1089 1.1 ross 0x3C000000,
1090 1.1 ross 0x3E000000
1091 1.1 ross };
1092 1.1 ross
1093 1.1 ross static float32 float32RandomQInfP3( void )
1094 1.1 ross {
1095 1.1 ross int8 weightMaskNum;
1096 1.1 ross
1097 1.1 ross weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
1098 1.1 ross return
1099 1.1 ross ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1100 1.1 ross | ( ( ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
1101 1.1 ross & float32QInfWeightMasks[ weightMaskNum ] )
1102 1.1 ross + float32QInfWeightOffsets[ weightMaskNum ]
1103 1.1 ross )
1104 1.1 ross | ( ( float32P2[ randomUint8() % float32NumP2 ]
1105 1.1 ross + float32P2[ randomUint8() % float32NumP2 ] )
1106 1.1 ross & 0x007FFFFF );
1107 1.1 ross
1108 1.1 ross }
1109 1.1 ross
1110 1.1 ross static float32 float32RandomQInfPInf( void )
1111 1.1 ross {
1112 1.1 ross int8 weightMaskNum;
1113 1.1 ross
1114 1.1 ross weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
1115 1.1 ross return
1116 1.1 ross ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1117 1.1 ross | ( ( ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
1118 1.1 ross & float32QInfWeightMasks[ weightMaskNum ] )
1119 1.1 ross + float32QInfWeightOffsets[ weightMaskNum ]
1120 1.1 ross )
1121 1.1 ross | ( randomUint32() & 0x007FFFFF );
1122 1.1 ross
1123 1.1 ross }
1124 1.1 ross
1125 1.1 ross static float32 float32Random( void )
1126 1.1 ross {
1127 1.1 ross
1128 1.1 ross switch ( randomUint8() & 7 ) {
1129 1.1 ross case 0:
1130 1.1 ross case 1:
1131 1.1 ross case 2:
1132 1.1 ross return float32RandomQOutP3();
1133 1.1 ross case 3:
1134 1.1 ross return float32RandomQOutPInf();
1135 1.1 ross case 4:
1136 1.1 ross case 5:
1137 1.1 ross case 6:
1138 1.1 ross return float32RandomQInfP3();
1139 1.1 ross case 7:
1140 1.1 ross return float32RandomQInfPInf();
1141 1.1 ross }
1142 1.2 ross abort();
1143 1.2 ross return 0;
1144 1.1 ross }
1145 1.1 ross
1146 1.1 ross #ifdef BITS64
1147 1.1 ross #define SETFLOAT64( z, zHigh, zLow ) z = ( ( (float64) zHigh )<<32 ) | zLow
1148 1.1 ross #else
1149 1.1 ross #define SETFLOAT64( z, zHigh, zLow ) z.low = zLow; z.high = zHigh
1150 1.1 ross #endif
1151 1.1 ross
1152 1.1 ross enum {
1153 1.1 ross float64NumQIn = 22,
1154 1.1 ross float64NumQOut = 64,
1155 1.1 ross float64NumP1 = 4,
1156 1.1 ross float64NumP2 = 204
1157 1.1 ross };
1158 1.1 ross
1159 1.1 ross static const uint32 float64QIn[ float64NumQIn ] = {
1160 1.1 ross 0x00000000, /* positive, subnormal */
1161 1.1 ross 0x00100000, /* positive, -1022 */
1162 1.1 ross 0x3CA00000, /* positive, -53 */
1163 1.1 ross 0x3FD00000, /* positive, -2 */
1164 1.1 ross 0x3FE00000, /* positive, -1 */
1165 1.1 ross 0x3FF00000, /* positive, 0 */
1166 1.1 ross 0x40000000, /* positive, 1 */
1167 1.1 ross 0x40100000, /* positive, 2 */
1168 1.1 ross 0x43400000, /* positive, 53 */
1169 1.1 ross 0x7FE00000, /* positive, 1023 */
1170 1.1 ross 0x7FF00000, /* positive, infinity or NaN */
1171 1.1 ross 0x80000000, /* negative, subnormal */
1172 1.1 ross 0x80100000, /* negative, -1022 */
1173 1.1 ross 0xBCA00000, /* negative, -53 */
1174 1.1 ross 0xBFD00000, /* negative, -2 */
1175 1.1 ross 0xBFE00000, /* negative, -1 */
1176 1.1 ross 0xBFF00000, /* negative, 0 */
1177 1.1 ross 0xC0000000, /* negative, 1 */
1178 1.1 ross 0xC0100000, /* negative, 2 */
1179 1.1 ross 0xC3400000, /* negative, 53 */
1180 1.1 ross 0xFFE00000, /* negative, 1023 */
1181 1.1 ross 0xFFF00000 /* negative, infinity or NaN */
1182 1.1 ross };
1183 1.1 ross
1184 1.1 ross static const uint32 float64QOut[ float64NumQOut ] = {
1185 1.1 ross 0x00000000, /* positive, subnormal */
1186 1.1 ross 0x00100000, /* positive, -1022 */
1187 1.1 ross 0x00200000, /* positive, -1021 */
1188 1.1 ross 0x37E00000, /* positive, -129 */
1189 1.1 ross 0x37F00000, /* positive, -128 */
1190 1.1 ross 0x38000000, /* positive, -127 */
1191 1.1 ross 0x38100000, /* positive, -126 */
1192 1.1 ross 0x3CA00000, /* positive, -53 */
1193 1.1 ross 0x3FB00000, /* positive, -4 */
1194 1.1 ross 0x3FC00000, /* positive, -3 */
1195 1.1 ross 0x3FD00000, /* positive, -2 */
1196 1.1 ross 0x3FE00000, /* positive, -1 */
1197 1.1 ross 0x3FF00000, /* positive, 0 */
1198 1.1 ross 0x40000000, /* positive, 1 */
1199 1.1 ross 0x40100000, /* positive, 2 */
1200 1.1 ross 0x40200000, /* positive, 3 */
1201 1.1 ross 0x40300000, /* positive, 4 */
1202 1.1 ross 0x41C00000, /* positive, 29 */
1203 1.1 ross 0x41D00000, /* positive, 30 */
1204 1.1 ross 0x41E00000, /* positive, 31 */
1205 1.1 ross 0x41F00000, /* positive, 32 */
1206 1.1 ross 0x43400000, /* positive, 53 */
1207 1.1 ross 0x43C00000, /* positive, 61 */
1208 1.1 ross 0x43D00000, /* positive, 62 */
1209 1.1 ross 0x43E00000, /* positive, 63 */
1210 1.1 ross 0x43F00000, /* positive, 64 */
1211 1.1 ross 0x47E00000, /* positive, 127 */
1212 1.1 ross 0x47F00000, /* positive, 128 */
1213 1.1 ross 0x48000000, /* positive, 129 */
1214 1.1 ross 0x7FD00000, /* positive, 1022 */
1215 1.1 ross 0x7FE00000, /* positive, 1023 */
1216 1.1 ross 0x7FF00000, /* positive, infinity or NaN */
1217 1.1 ross 0x80000000, /* negative, subnormal */
1218 1.1 ross 0x80100000, /* negative, -1022 */
1219 1.1 ross 0x80200000, /* negative, -1021 */
1220 1.1 ross 0xB7E00000, /* negative, -129 */
1221 1.1 ross 0xB7F00000, /* negative, -128 */
1222 1.1 ross 0xB8000000, /* negative, -127 */
1223 1.1 ross 0xB8100000, /* negative, -126 */
1224 1.1 ross 0xBCA00000, /* negative, -53 */
1225 1.1 ross 0xBFB00000, /* negative, -4 */
1226 1.1 ross 0xBFC00000, /* negative, -3 */
1227 1.1 ross 0xBFD00000, /* negative, -2 */
1228 1.1 ross 0xBFE00000, /* negative, -1 */
1229 1.1 ross 0xBFF00000, /* negative, 0 */
1230 1.1 ross 0xC0000000, /* negative, 1 */
1231 1.1 ross 0xC0100000, /* negative, 2 */
1232 1.1 ross 0xC0200000, /* negative, 3 */
1233 1.1 ross 0xC0300000, /* negative, 4 */
1234 1.1 ross 0xC1C00000, /* negative, 29 */
1235 1.1 ross 0xC1D00000, /* negative, 30 */
1236 1.1 ross 0xC1E00000, /* negative, 31 */
1237 1.1 ross 0xC1F00000, /* negative, 32 */
1238 1.1 ross 0xC3400000, /* negative, 53 */
1239 1.1 ross 0xC3C00000, /* negative, 61 */
1240 1.1 ross 0xC3D00000, /* negative, 62 */
1241 1.1 ross 0xC3E00000, /* negative, 63 */
1242 1.1 ross 0xC3F00000, /* negative, 64 */
1243 1.1 ross 0xC7E00000, /* negative, 127 */
1244 1.1 ross 0xC7F00000, /* negative, 128 */
1245 1.1 ross 0xC8000000, /* negative, 129 */
1246 1.1 ross 0xFFD00000, /* negative, 1022 */
1247 1.1 ross 0xFFE00000, /* negative, 1023 */
1248 1.1 ross 0xFFF00000 /* negative, infinity or NaN */
1249 1.1 ross };
1250 1.1 ross
1251 1.1 ross static const struct { bits32 high, low; } float64P1[ float64NumP1 ] = {
1252 1.1 ross { 0x00000000, 0x00000000 },
1253 1.1 ross { 0x00000000, 0x00000001 },
1254 1.1 ross { 0x000FFFFF, 0xFFFFFFFF },
1255 1.1 ross { 0x000FFFFF, 0xFFFFFFFE }
1256 1.1 ross };
1257 1.1 ross
1258 1.1 ross static const struct { bits32 high, low; } float64P2[ float64NumP2 ] = {
1259 1.1 ross { 0x00000000, 0x00000000 },
1260 1.1 ross { 0x00000000, 0x00000001 },
1261 1.1 ross { 0x00000000, 0x00000002 },
1262 1.1 ross { 0x00000000, 0x00000004 },
1263 1.1 ross { 0x00000000, 0x00000008 },
1264 1.1 ross { 0x00000000, 0x00000010 },
1265 1.1 ross { 0x00000000, 0x00000020 },
1266 1.1 ross { 0x00000000, 0x00000040 },
1267 1.1 ross { 0x00000000, 0x00000080 },
1268 1.1 ross { 0x00000000, 0x00000100 },
1269 1.1 ross { 0x00000000, 0x00000200 },
1270 1.1 ross { 0x00000000, 0x00000400 },
1271 1.1 ross { 0x00000000, 0x00000800 },
1272 1.1 ross { 0x00000000, 0x00001000 },
1273 1.1 ross { 0x00000000, 0x00002000 },
1274 1.1 ross { 0x00000000, 0x00004000 },
1275 1.1 ross { 0x00000000, 0x00008000 },
1276 1.1 ross { 0x00000000, 0x00010000 },
1277 1.1 ross { 0x00000000, 0x00020000 },
1278 1.1 ross { 0x00000000, 0x00040000 },
1279 1.1 ross { 0x00000000, 0x00080000 },
1280 1.1 ross { 0x00000000, 0x00100000 },
1281 1.1 ross { 0x00000000, 0x00200000 },
1282 1.1 ross { 0x00000000, 0x00400000 },
1283 1.1 ross { 0x00000000, 0x00800000 },
1284 1.1 ross { 0x00000000, 0x01000000 },
1285 1.1 ross { 0x00000000, 0x02000000 },
1286 1.1 ross { 0x00000000, 0x04000000 },
1287 1.1 ross { 0x00000000, 0x08000000 },
1288 1.1 ross { 0x00000000, 0x10000000 },
1289 1.1 ross { 0x00000000, 0x20000000 },
1290 1.1 ross { 0x00000000, 0x40000000 },
1291 1.1 ross { 0x00000000, 0x80000000 },
1292 1.1 ross { 0x00000001, 0x00000000 },
1293 1.1 ross { 0x00000002, 0x00000000 },
1294 1.1 ross { 0x00000004, 0x00000000 },
1295 1.1 ross { 0x00000008, 0x00000000 },
1296 1.1 ross { 0x00000010, 0x00000000 },
1297 1.1 ross { 0x00000020, 0x00000000 },
1298 1.1 ross { 0x00000040, 0x00000000 },
1299 1.1 ross { 0x00000080, 0x00000000 },
1300 1.1 ross { 0x00000100, 0x00000000 },
1301 1.1 ross { 0x00000200, 0x00000000 },
1302 1.1 ross { 0x00000400, 0x00000000 },
1303 1.1 ross { 0x00000800, 0x00000000 },
1304 1.1 ross { 0x00001000, 0x00000000 },
1305 1.1 ross { 0x00002000, 0x00000000 },
1306 1.1 ross { 0x00004000, 0x00000000 },
1307 1.1 ross { 0x00008000, 0x00000000 },
1308 1.1 ross { 0x00010000, 0x00000000 },
1309 1.1 ross { 0x00020000, 0x00000000 },
1310 1.1 ross { 0x00040000, 0x00000000 },
1311 1.1 ross { 0x00080000, 0x00000000 },
1312 1.1 ross { 0x000C0000, 0x00000000 },
1313 1.1 ross { 0x000E0000, 0x00000000 },
1314 1.1 ross { 0x000F0000, 0x00000000 },
1315 1.1 ross { 0x000F8000, 0x00000000 },
1316 1.1 ross { 0x000FC000, 0x00000000 },
1317 1.1 ross { 0x000FE000, 0x00000000 },
1318 1.1 ross { 0x000FF000, 0x00000000 },
1319 1.1 ross { 0x000FF800, 0x00000000 },
1320 1.1 ross { 0x000FFC00, 0x00000000 },
1321 1.1 ross { 0x000FFE00, 0x00000000 },
1322 1.1 ross { 0x000FFF00, 0x00000000 },
1323 1.1 ross { 0x000FFF80, 0x00000000 },
1324 1.1 ross { 0x000FFFC0, 0x00000000 },
1325 1.1 ross { 0x000FFFE0, 0x00000000 },
1326 1.1 ross { 0x000FFFF0, 0x00000000 },
1327 1.1 ross { 0x000FFFF8, 0x00000000 },
1328 1.1 ross { 0x000FFFFC, 0x00000000 },
1329 1.1 ross { 0x000FFFFE, 0x00000000 },
1330 1.1 ross { 0x000FFFFF, 0x00000000 },
1331 1.1 ross { 0x000FFFFF, 0x80000000 },
1332 1.1 ross { 0x000FFFFF, 0xC0000000 },
1333 1.1 ross { 0x000FFFFF, 0xE0000000 },
1334 1.1 ross { 0x000FFFFF, 0xF0000000 },
1335 1.1 ross { 0x000FFFFF, 0xF8000000 },
1336 1.1 ross { 0x000FFFFF, 0xFC000000 },
1337 1.1 ross { 0x000FFFFF, 0xFE000000 },
1338 1.1 ross { 0x000FFFFF, 0xFF000000 },
1339 1.1 ross { 0x000FFFFF, 0xFF800000 },
1340 1.1 ross { 0x000FFFFF, 0xFFC00000 },
1341 1.1 ross { 0x000FFFFF, 0xFFE00000 },
1342 1.1 ross { 0x000FFFFF, 0xFFF00000 },
1343 1.1 ross { 0x000FFFFF, 0xFFF80000 },
1344 1.1 ross { 0x000FFFFF, 0xFFFC0000 },
1345 1.1 ross { 0x000FFFFF, 0xFFFE0000 },
1346 1.1 ross { 0x000FFFFF, 0xFFFF0000 },
1347 1.1 ross { 0x000FFFFF, 0xFFFF8000 },
1348 1.1 ross { 0x000FFFFF, 0xFFFFC000 },
1349 1.1 ross { 0x000FFFFF, 0xFFFFE000 },
1350 1.1 ross { 0x000FFFFF, 0xFFFFF000 },
1351 1.1 ross { 0x000FFFFF, 0xFFFFF800 },
1352 1.1 ross { 0x000FFFFF, 0xFFFFFC00 },
1353 1.1 ross { 0x000FFFFF, 0xFFFFFE00 },
1354 1.1 ross { 0x000FFFFF, 0xFFFFFF00 },
1355 1.1 ross { 0x000FFFFF, 0xFFFFFF80 },
1356 1.1 ross { 0x000FFFFF, 0xFFFFFFC0 },
1357 1.1 ross { 0x000FFFFF, 0xFFFFFFE0 },
1358 1.1 ross { 0x000FFFFF, 0xFFFFFFF0 },
1359 1.1 ross { 0x000FFFFF, 0xFFFFFFF8 },
1360 1.1 ross { 0x000FFFFF, 0xFFFFFFFC },
1361 1.1 ross { 0x000FFFFF, 0xFFFFFFFE },
1362 1.1 ross { 0x000FFFFF, 0xFFFFFFFF },
1363 1.1 ross { 0x000FFFFF, 0xFFFFFFFD },
1364 1.1 ross { 0x000FFFFF, 0xFFFFFFFB },
1365 1.1 ross { 0x000FFFFF, 0xFFFFFFF7 },
1366 1.1 ross { 0x000FFFFF, 0xFFFFFFEF },
1367 1.1 ross { 0x000FFFFF, 0xFFFFFFDF },
1368 1.1 ross { 0x000FFFFF, 0xFFFFFFBF },
1369 1.1 ross { 0x000FFFFF, 0xFFFFFF7F },
1370 1.1 ross { 0x000FFFFF, 0xFFFFFEFF },
1371 1.1 ross { 0x000FFFFF, 0xFFFFFDFF },
1372 1.1 ross { 0x000FFFFF, 0xFFFFFBFF },
1373 1.1 ross { 0x000FFFFF, 0xFFFFF7FF },
1374 1.1 ross { 0x000FFFFF, 0xFFFFEFFF },
1375 1.1 ross { 0x000FFFFF, 0xFFFFDFFF },
1376 1.1 ross { 0x000FFFFF, 0xFFFFBFFF },
1377 1.1 ross { 0x000FFFFF, 0xFFFF7FFF },
1378 1.1 ross { 0x000FFFFF, 0xFFFEFFFF },
1379 1.1 ross { 0x000FFFFF, 0xFFFDFFFF },
1380 1.1 ross { 0x000FFFFF, 0xFFFBFFFF },
1381 1.1 ross { 0x000FFFFF, 0xFFF7FFFF },
1382 1.1 ross { 0x000FFFFF, 0xFFEFFFFF },
1383 1.1 ross { 0x000FFFFF, 0xFFDFFFFF },
1384 1.1 ross { 0x000FFFFF, 0xFFBFFFFF },
1385 1.1 ross { 0x000FFFFF, 0xFF7FFFFF },
1386 1.1 ross { 0x000FFFFF, 0xFEFFFFFF },
1387 1.1 ross { 0x000FFFFF, 0xFDFFFFFF },
1388 1.1 ross { 0x000FFFFF, 0xFBFFFFFF },
1389 1.1 ross { 0x000FFFFF, 0xF7FFFFFF },
1390 1.1 ross { 0x000FFFFF, 0xEFFFFFFF },
1391 1.1 ross { 0x000FFFFF, 0xDFFFFFFF },
1392 1.1 ross { 0x000FFFFF, 0xBFFFFFFF },
1393 1.1 ross { 0x000FFFFF, 0x7FFFFFFF },
1394 1.1 ross { 0x000FFFFE, 0xFFFFFFFF },
1395 1.1 ross { 0x000FFFFD, 0xFFFFFFFF },
1396 1.1 ross { 0x000FFFFB, 0xFFFFFFFF },
1397 1.1 ross { 0x000FFFF7, 0xFFFFFFFF },
1398 1.1 ross { 0x000FFFEF, 0xFFFFFFFF },
1399 1.1 ross { 0x000FFFDF, 0xFFFFFFFF },
1400 1.1 ross { 0x000FFFBF, 0xFFFFFFFF },
1401 1.1 ross { 0x000FFF7F, 0xFFFFFFFF },
1402 1.1 ross { 0x000FFEFF, 0xFFFFFFFF },
1403 1.1 ross { 0x000FFDFF, 0xFFFFFFFF },
1404 1.1 ross { 0x000FFBFF, 0xFFFFFFFF },
1405 1.1 ross { 0x000FF7FF, 0xFFFFFFFF },
1406 1.1 ross { 0x000FEFFF, 0xFFFFFFFF },
1407 1.1 ross { 0x000FDFFF, 0xFFFFFFFF },
1408 1.1 ross { 0x000FBFFF, 0xFFFFFFFF },
1409 1.1 ross { 0x000F7FFF, 0xFFFFFFFF },
1410 1.1 ross { 0x000EFFFF, 0xFFFFFFFF },
1411 1.1 ross { 0x000DFFFF, 0xFFFFFFFF },
1412 1.1 ross { 0x000BFFFF, 0xFFFFFFFF },
1413 1.1 ross { 0x0007FFFF, 0xFFFFFFFF },
1414 1.1 ross { 0x0003FFFF, 0xFFFFFFFF },
1415 1.1 ross { 0x0001FFFF, 0xFFFFFFFF },
1416 1.1 ross { 0x0000FFFF, 0xFFFFFFFF },
1417 1.1 ross { 0x00007FFF, 0xFFFFFFFF },
1418 1.1 ross { 0x00003FFF, 0xFFFFFFFF },
1419 1.1 ross { 0x00001FFF, 0xFFFFFFFF },
1420 1.1 ross { 0x00000FFF, 0xFFFFFFFF },
1421 1.1 ross { 0x000007FF, 0xFFFFFFFF },
1422 1.1 ross { 0x000003FF, 0xFFFFFFFF },
1423 1.1 ross { 0x000001FF, 0xFFFFFFFF },
1424 1.1 ross { 0x000000FF, 0xFFFFFFFF },
1425 1.1 ross { 0x0000007F, 0xFFFFFFFF },
1426 1.1 ross { 0x0000003F, 0xFFFFFFFF },
1427 1.1 ross { 0x0000001F, 0xFFFFFFFF },
1428 1.1 ross { 0x0000000F, 0xFFFFFFFF },
1429 1.1 ross { 0x00000007, 0xFFFFFFFF },
1430 1.1 ross { 0x00000003, 0xFFFFFFFF },
1431 1.1 ross { 0x00000001, 0xFFFFFFFF },
1432 1.1 ross { 0x00000000, 0xFFFFFFFF },
1433 1.1 ross { 0x00000000, 0x7FFFFFFF },
1434 1.1 ross { 0x00000000, 0x3FFFFFFF },
1435 1.1 ross { 0x00000000, 0x1FFFFFFF },
1436 1.1 ross { 0x00000000, 0x0FFFFFFF },
1437 1.1 ross { 0x00000000, 0x07FFFFFF },
1438 1.1 ross { 0x00000000, 0x03FFFFFF },
1439 1.1 ross { 0x00000000, 0x01FFFFFF },
1440 1.1 ross { 0x00000000, 0x00FFFFFF },
1441 1.1 ross { 0x00000000, 0x007FFFFF },
1442 1.1 ross { 0x00000000, 0x003FFFFF },
1443 1.1 ross { 0x00000000, 0x001FFFFF },
1444 1.1 ross { 0x00000000, 0x000FFFFF },
1445 1.1 ross { 0x00000000, 0x0007FFFF },
1446 1.1 ross { 0x00000000, 0x0003FFFF },
1447 1.1 ross { 0x00000000, 0x0001FFFF },
1448 1.1 ross { 0x00000000, 0x0000FFFF },
1449 1.1 ross { 0x00000000, 0x00007FFF },
1450 1.1 ross { 0x00000000, 0x00003FFF },
1451 1.1 ross { 0x00000000, 0x00001FFF },
1452 1.1 ross { 0x00000000, 0x00000FFF },
1453 1.1 ross { 0x00000000, 0x000007FF },
1454 1.1 ross { 0x00000000, 0x000003FF },
1455 1.1 ross { 0x00000000, 0x000001FF },
1456 1.1 ross { 0x00000000, 0x000000FF },
1457 1.1 ross { 0x00000000, 0x0000007F },
1458 1.1 ross { 0x00000000, 0x0000003F },
1459 1.1 ross { 0x00000000, 0x0000001F },
1460 1.1 ross { 0x00000000, 0x0000000F },
1461 1.1 ross { 0x00000000, 0x00000007 },
1462 1.1 ross { 0x00000000, 0x00000003 }
1463 1.1 ross };
1464 1.1 ross
1465 1.1 ross static const uint32 float64NumQInP1 = float64NumQIn * float64NumP1;
1466 1.1 ross static const uint32 float64NumQOutP1 = float64NumQOut * float64NumP1;
1467 1.1 ross
1468 1.1 ross static float64 float64NextQInP1( sequenceT *sequencePtr )
1469 1.1 ross {
1470 1.1 ross uint8 expNum, sigNum;
1471 1.1 ross float64 z;
1472 1.1 ross
1473 1.1 ross sigNum = sequencePtr->term1Num;
1474 1.1 ross expNum = sequencePtr->expNum;
1475 1.1 ross SETFLOAT64(
1476 1.1 ross z,
1477 1.1 ross float64QIn[ expNum ] | float64P1[ sigNum ].high,
1478 1.1 ross float64P1[ sigNum ].low
1479 1.1 ross );
1480 1.1 ross ++sigNum;
1481 1.1 ross if ( float64NumP1 <= sigNum ) {
1482 1.1 ross sigNum = 0;
1483 1.1 ross ++expNum;
1484 1.1 ross if ( float64NumQIn <= expNum ) {
1485 1.1 ross expNum = 0;
1486 1.1 ross sequencePtr->done = TRUE;
1487 1.1 ross }
1488 1.1 ross sequencePtr->expNum = expNum;
1489 1.1 ross }
1490 1.1 ross sequencePtr->term1Num = sigNum;
1491 1.1 ross return z;
1492 1.1 ross
1493 1.1 ross }
1494 1.1 ross
1495 1.1 ross static float64 float64NextQOutP1( sequenceT *sequencePtr )
1496 1.1 ross {
1497 1.1 ross uint8 expNum, sigNum;
1498 1.1 ross float64 z;
1499 1.1 ross
1500 1.1 ross sigNum = sequencePtr->term1Num;
1501 1.1 ross expNum = sequencePtr->expNum;
1502 1.1 ross SETFLOAT64(
1503 1.1 ross z,
1504 1.1 ross float64QOut[ expNum ] | float64P1[ sigNum ].high,
1505 1.1 ross float64P1[ sigNum ].low
1506 1.1 ross );
1507 1.1 ross ++sigNum;
1508 1.1 ross if ( float64NumP1 <= sigNum ) {
1509 1.1 ross sigNum = 0;
1510 1.1 ross ++expNum;
1511 1.1 ross if ( float64NumQOut <= expNum ) {
1512 1.1 ross expNum = 0;
1513 1.1 ross sequencePtr->done = TRUE;
1514 1.1 ross }
1515 1.1 ross sequencePtr->expNum = expNum;
1516 1.1 ross }
1517 1.1 ross sequencePtr->term1Num = sigNum;
1518 1.1 ross return z;
1519 1.1 ross
1520 1.1 ross }
1521 1.1 ross
1522 1.1 ross static const uint32 float64NumQInP2 = float64NumQIn * float64NumP2;
1523 1.1 ross static const uint32 float64NumQOutP2 = float64NumQOut * float64NumP2;
1524 1.1 ross
1525 1.1 ross static float64 float64NextQInP2( sequenceT *sequencePtr )
1526 1.1 ross {
1527 1.1 ross uint8 expNum, sigNum;
1528 1.1 ross float64 z;
1529 1.1 ross
1530 1.1 ross sigNum = sequencePtr->term1Num;
1531 1.1 ross expNum = sequencePtr->expNum;
1532 1.1 ross SETFLOAT64(
1533 1.1 ross z,
1534 1.1 ross float64QIn[ expNum ] | float64P2[ sigNum ].high,
1535 1.1 ross float64P2[ sigNum ].low
1536 1.1 ross );
1537 1.1 ross ++sigNum;
1538 1.1 ross if ( float64NumP2 <= sigNum ) {
1539 1.1 ross sigNum = 0;
1540 1.1 ross ++expNum;
1541 1.1 ross if ( float64NumQIn <= expNum ) {
1542 1.1 ross expNum = 0;
1543 1.1 ross sequencePtr->done = TRUE;
1544 1.1 ross }
1545 1.1 ross sequencePtr->expNum = expNum;
1546 1.1 ross }
1547 1.1 ross sequencePtr->term1Num = sigNum;
1548 1.1 ross return z;
1549 1.1 ross
1550 1.1 ross }
1551 1.1 ross
1552 1.1 ross static float64 float64NextQOutP2( sequenceT *sequencePtr )
1553 1.1 ross {
1554 1.1 ross uint8 expNum, sigNum;
1555 1.1 ross float64 z;
1556 1.1 ross
1557 1.1 ross sigNum = sequencePtr->term1Num;
1558 1.1 ross expNum = sequencePtr->expNum;
1559 1.1 ross SETFLOAT64(
1560 1.1 ross z,
1561 1.1 ross float64QOut[ expNum ] | float64P2[ sigNum ].high,
1562 1.1 ross float64P2[ sigNum ].low
1563 1.1 ross );
1564 1.1 ross ++sigNum;
1565 1.1 ross if ( float64NumP2 <= sigNum ) {
1566 1.1 ross sigNum = 0;
1567 1.1 ross ++expNum;
1568 1.1 ross if ( float64NumQOut <= expNum ) {
1569 1.1 ross expNum = 0;
1570 1.1 ross sequencePtr->done = TRUE;
1571 1.1 ross }
1572 1.1 ross sequencePtr->expNum = expNum;
1573 1.1 ross }
1574 1.1 ross sequencePtr->term1Num = sigNum;
1575 1.1 ross return z;
1576 1.1 ross
1577 1.1 ross }
1578 1.1 ross
1579 1.1 ross static float64 float64RandomQOutP3( void )
1580 1.1 ross {
1581 1.1 ross int8 sigNum1, sigNum2;
1582 1.1 ross uint32 sig1Low, sig2Low, zLow;
1583 1.1 ross float64 z;
1584 1.1 ross
1585 1.1 ross sigNum1 = randomUint8() % float64NumP2;
1586 1.1 ross sigNum2 = randomUint8() % float64NumP2;
1587 1.1 ross sig1Low = float64P2[ sigNum1 ].low;
1588 1.1 ross sig2Low = float64P2[ sigNum2 ].low;
1589 1.1 ross zLow = sig1Low + sig2Low;
1590 1.1 ross SETFLOAT64(
1591 1.1 ross z,
1592 1.1 ross float64QOut[ randomUint8() % float64NumQOut ]
1593 1.1 ross | ( ( float64P2[ sigNum1 ].high
1594 1.1 ross + float64P2[ sigNum2 ].high
1595 1.1 ross + ( zLow < sig1Low )
1596 1.1 ross )
1597 1.1 ross & 0x000FFFFF
1598 1.1 ross ),
1599 1.1 ross zLow
1600 1.1 ross );
1601 1.1 ross return z;
1602 1.1 ross
1603 1.1 ross }
1604 1.1 ross
1605 1.1 ross static float64 float64RandomQOutPInf( void )
1606 1.1 ross {
1607 1.1 ross float64 z;
1608 1.1 ross
1609 1.1 ross SETFLOAT64(
1610 1.1 ross z,
1611 1.1 ross float64QOut[ randomUint8() % float64NumQOut ]
1612 1.1 ross | ( randomUint32() & 0x000FFFFF ),
1613 1.1 ross randomUint32()
1614 1.1 ross );
1615 1.1 ross return z;
1616 1.1 ross
1617 1.1 ross }
1618 1.1 ross
1619 1.1 ross enum {
1620 1.1 ross float64NumQInfWeightMasks = 10
1621 1.1 ross };
1622 1.1 ross
1623 1.1 ross static const uint32 float64QInfWeightMasks[ float64NumQInfWeightMasks ] = {
1624 1.1 ross 0x7FF00000,
1625 1.1 ross 0x7FF00000,
1626 1.1 ross 0x3FF00000,
1627 1.1 ross 0x1FF00000,
1628 1.1 ross 0x0FF00000,
1629 1.1 ross 0x07F00000,
1630 1.1 ross 0x03F00000,
1631 1.1 ross 0x01F00000,
1632 1.1 ross 0x00F00000,
1633 1.1 ross 0x00700000
1634 1.1 ross };
1635 1.1 ross
1636 1.1 ross static const uint32 float64QInfWeightOffsets[ float64NumQInfWeightMasks ] = {
1637 1.1 ross 0x00000000,
1638 1.1 ross 0x00000000,
1639 1.1 ross 0x20000000,
1640 1.1 ross 0x30000000,
1641 1.1 ross 0x38000000,
1642 1.1 ross 0x3C000000,
1643 1.1 ross 0x3E000000,
1644 1.1 ross 0x3F000000,
1645 1.1 ross 0x3F800000,
1646 1.1 ross 0x3FC00000
1647 1.1 ross };
1648 1.1 ross
1649 1.1 ross static float64 float64RandomQInfP3( void )
1650 1.1 ross {
1651 1.1 ross int8 sigNum1, sigNum2;
1652 1.1 ross uint32 sig1Low, sig2Low, zLow;
1653 1.1 ross int8 weightMaskNum;
1654 1.1 ross float64 z;
1655 1.1 ross
1656 1.1 ross sigNum1 = randomUint8() % float64NumP2;
1657 1.1 ross sigNum2 = randomUint8() % float64NumP2;
1658 1.1 ross sig1Low = float64P2[ sigNum1 ].low;
1659 1.1 ross sig2Low = float64P2[ sigNum2 ].low;
1660 1.1 ross zLow = sig1Low + sig2Low;
1661 1.1 ross weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
1662 1.1 ross SETFLOAT64(
1663 1.1 ross z,
1664 1.1 ross ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1665 1.1 ross | ( ( ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
1666 1.1 ross & float64QInfWeightMasks[ weightMaskNum ] )
1667 1.1 ross + float64QInfWeightOffsets[ weightMaskNum ]
1668 1.1 ross )
1669 1.1 ross | ( ( float64P2[ sigNum1 ].high
1670 1.1 ross + float64P2[ sigNum2 ].high
1671 1.1 ross + ( zLow < sig1Low )
1672 1.1 ross )
1673 1.1 ross & 0x000FFFFF
1674 1.1 ross ),
1675 1.1 ross zLow
1676 1.1 ross );
1677 1.1 ross return z;
1678 1.1 ross
1679 1.1 ross }
1680 1.1 ross
1681 1.1 ross static float64 float64RandomQInfPInf( void )
1682 1.1 ross {
1683 1.1 ross int8 weightMaskNum;
1684 1.1 ross float64 z;
1685 1.1 ross
1686 1.1 ross weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
1687 1.1 ross SETFLOAT64(
1688 1.1 ross z,
1689 1.1 ross ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1690 1.1 ross | ( ( ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
1691 1.1 ross & float64QInfWeightMasks[ weightMaskNum ] )
1692 1.1 ross + float64QInfWeightOffsets[ weightMaskNum ]
1693 1.1 ross )
1694 1.1 ross | ( randomUint32() & 0x000FFFFF ),
1695 1.1 ross randomUint32()
1696 1.1 ross );
1697 1.1 ross return z;
1698 1.1 ross
1699 1.1 ross }
1700 1.1 ross
1701 1.1 ross static float64 float64Random( void )
1702 1.1 ross {
1703 1.1 ross
1704 1.1 ross switch ( randomUint8() & 7 ) {
1705 1.1 ross case 0:
1706 1.1 ross case 1:
1707 1.1 ross case 2:
1708 1.1 ross return float64RandomQOutP3();
1709 1.1 ross case 3:
1710 1.1 ross return float64RandomQOutPInf();
1711 1.1 ross case 4:
1712 1.1 ross case 5:
1713 1.1 ross case 6:
1714 1.1 ross return float64RandomQInfP3();
1715 1.1 ross case 7:
1716 1.1 ross return float64RandomQInfPInf();
1717 1.1 ross }
1718 1.2 ross abort();
1719 1.2 ross return 0;
1720 1.1 ross }
1721 1.1 ross
1722 1.1 ross #ifdef FLOATX80
1723 1.1 ross
1724 1.1 ross enum {
1725 1.1 ross floatx80NumQIn = 22,
1726 1.1 ross floatx80NumQOut = 76,
1727 1.1 ross floatx80NumP1 = 4,
1728 1.1 ross floatx80NumP2 = 248
1729 1.1 ross };
1730 1.1 ross
1731 1.1 ross static const uint16 floatx80QIn[ floatx80NumQIn ] = {
1732 1.1 ross 0x0000, /* positive, subnormal */
1733 1.1 ross 0x0001, /* positive, -16382 */
1734 1.1 ross 0x3FBF, /* positive, -64 */
1735 1.1 ross 0x3FFD, /* positive, -2 */
1736 1.1 ross 0x3FFE, /* positive, -1 */
1737 1.1 ross 0x3FFF, /* positive, 0 */
1738 1.1 ross 0x4000, /* positive, 1 */
1739 1.1 ross 0x4001, /* positive, 2 */
1740 1.1 ross 0x403F, /* positive, 64 */
1741 1.1 ross 0x7FFE, /* positive, 16383 */
1742 1.1 ross 0x7FFF, /* positive, infinity or NaN */
1743 1.1 ross 0x8000, /* negative, subnormal */
1744 1.1 ross 0x8001, /* negative, -16382 */
1745 1.1 ross 0xBFBF, /* negative, -64 */
1746 1.1 ross 0xBFFD, /* negative, -2 */
1747 1.1 ross 0xBFFE, /* negative, -1 */
1748 1.1 ross 0xBFFF, /* negative, 0 */
1749 1.1 ross 0xC000, /* negative, 1 */
1750 1.1 ross 0xC001, /* negative, 2 */
1751 1.1 ross 0xC03F, /* negative, 64 */
1752 1.1 ross 0xFFFE, /* negative, 16383 */
1753 1.1 ross 0xFFFF /* negative, infinity or NaN */
1754 1.1 ross };
1755 1.1 ross
1756 1.1 ross static const uint16 floatx80QOut[ floatx80NumQOut ] = {
1757 1.1 ross 0x0000, /* positive, subnormal */
1758 1.1 ross 0x0001, /* positive, -16382 */
1759 1.1 ross 0x0002, /* positive, -16381 */
1760 1.1 ross 0x3BFE, /* positive, -1025 */
1761 1.1 ross 0x3BFF, /* positive, -1024 */
1762 1.1 ross 0x3C00, /* positive, -1023 */
1763 1.1 ross 0x3C01, /* positive, -1022 */
1764 1.1 ross 0x3F7E, /* positive, -129 */
1765 1.1 ross 0x3F7F, /* positive, -128 */
1766 1.1 ross 0x3F80, /* positive, -127 */
1767 1.1 ross 0x3F81, /* positive, -126 */
1768 1.1 ross 0x3FBF, /* positive, -64 */
1769 1.1 ross 0x3FFB, /* positive, -4 */
1770 1.1 ross 0x3FFC, /* positive, -3 */
1771 1.1 ross 0x3FFD, /* positive, -2 */
1772 1.1 ross 0x3FFE, /* positive, -1 */
1773 1.1 ross 0x3FFF, /* positive, 0 */
1774 1.1 ross 0x4000, /* positive, 1 */
1775 1.1 ross 0x4001, /* positive, 2 */
1776 1.1 ross 0x4002, /* positive, 3 */
1777 1.1 ross 0x4003, /* positive, 4 */
1778 1.1 ross 0x401C, /* positive, 29 */
1779 1.1 ross 0x401D, /* positive, 30 */
1780 1.1 ross 0x401E, /* positive, 31 */
1781 1.1 ross 0x401F, /* positive, 32 */
1782 1.1 ross 0x403C, /* positive, 61 */
1783 1.1 ross 0x403D, /* positive, 62 */
1784 1.1 ross 0x403E, /* positive, 63 */
1785 1.1 ross 0x403F, /* positive, 64 */
1786 1.1 ross 0x407E, /* positive, 127 */
1787 1.1 ross 0x407F, /* positive, 128 */
1788 1.1 ross 0x4080, /* positive, 129 */
1789 1.1 ross 0x43FE, /* positive, 1023 */
1790 1.1 ross 0x43FF, /* positive, 1024 */
1791 1.1 ross 0x4400, /* positive, 1025 */
1792 1.1 ross 0x7FFD, /* positive, 16382 */
1793 1.1 ross 0x7FFE, /* positive, 16383 */
1794 1.1 ross 0x7FFF, /* positive, infinity or NaN */
1795 1.1 ross 0x8000, /* negative, subnormal */
1796 1.1 ross 0x8001, /* negative, -16382 */
1797 1.1 ross 0x8002, /* negative, -16381 */
1798 1.1 ross 0xBBFE, /* negative, -1025 */
1799 1.1 ross 0xBBFF, /* negative, -1024 */
1800 1.1 ross 0xBC00, /* negative, -1023 */
1801 1.1 ross 0xBC01, /* negative, -1022 */
1802 1.1 ross 0xBF7E, /* negative, -129 */
1803 1.1 ross 0xBF7F, /* negative, -128 */
1804 1.1 ross 0xBF80, /* negative, -127 */
1805 1.1 ross 0xBF81, /* negative, -126 */
1806 1.1 ross 0xBFBF, /* negative, -64 */
1807 1.1 ross 0xBFFB, /* negative, -4 */
1808 1.1 ross 0xBFFC, /* negative, -3 */
1809 1.1 ross 0xBFFD, /* negative, -2 */
1810 1.1 ross 0xBFFE, /* negative, -1 */
1811 1.1 ross 0xBFFF, /* negative, 0 */
1812 1.1 ross 0xC000, /* negative, 1 */
1813 1.1 ross 0xC001, /* negative, 2 */
1814 1.1 ross 0xC002, /* negative, 3 */
1815 1.1 ross 0xC003, /* negative, 4 */
1816 1.1 ross 0xC01C, /* negative, 29 */
1817 1.1 ross 0xC01D, /* negative, 30 */
1818 1.1 ross 0xC01E, /* negative, 31 */
1819 1.1 ross 0xC01F, /* negative, 32 */
1820 1.1 ross 0xC03C, /* negative, 61 */
1821 1.1 ross 0xC03D, /* negative, 62 */
1822 1.1 ross 0xC03E, /* negative, 63 */
1823 1.1 ross 0xC03F, /* negative, 64 */
1824 1.1 ross 0xC07E, /* negative, 127 */
1825 1.1 ross 0xC07F, /* negative, 128 */
1826 1.1 ross 0xC080, /* negative, 129 */
1827 1.1 ross 0xC3FE, /* negative, 1023 */
1828 1.1 ross 0xC3FF, /* negative, 1024 */
1829 1.1 ross 0xC400, /* negative, 1025 */
1830 1.1 ross 0xFFFD, /* negative, 16382 */
1831 1.1 ross 0xFFFE, /* negative, 16383 */
1832 1.1 ross 0xFFFF /* negative, infinity or NaN */
1833 1.1 ross };
1834 1.1 ross
1835 1.1 ross static const bits64 floatx80P1[ floatx80NumP1 ] = {
1836 1.1 ross LIT64( 0x0000000000000000 ),
1837 1.1 ross LIT64( 0x0000000000000001 ),
1838 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFF ),
1839 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFE )
1840 1.1 ross };
1841 1.1 ross
1842 1.1 ross static const bits64 floatx80P2[ floatx80NumP2 ] = {
1843 1.1 ross LIT64( 0x0000000000000000 ),
1844 1.1 ross LIT64( 0x0000000000000001 ),
1845 1.1 ross LIT64( 0x0000000000000002 ),
1846 1.1 ross LIT64( 0x0000000000000004 ),
1847 1.1 ross LIT64( 0x0000000000000008 ),
1848 1.1 ross LIT64( 0x0000000000000010 ),
1849 1.1 ross LIT64( 0x0000000000000020 ),
1850 1.1 ross LIT64( 0x0000000000000040 ),
1851 1.1 ross LIT64( 0x0000000000000080 ),
1852 1.1 ross LIT64( 0x0000000000000100 ),
1853 1.1 ross LIT64( 0x0000000000000200 ),
1854 1.1 ross LIT64( 0x0000000000000400 ),
1855 1.1 ross LIT64( 0x0000000000000800 ),
1856 1.1 ross LIT64( 0x0000000000001000 ),
1857 1.1 ross LIT64( 0x0000000000002000 ),
1858 1.1 ross LIT64( 0x0000000000004000 ),
1859 1.1 ross LIT64( 0x0000000000008000 ),
1860 1.1 ross LIT64( 0x0000000000010000 ),
1861 1.1 ross LIT64( 0x0000000000020000 ),
1862 1.1 ross LIT64( 0x0000000000040000 ),
1863 1.1 ross LIT64( 0x0000000000080000 ),
1864 1.1 ross LIT64( 0x0000000000100000 ),
1865 1.1 ross LIT64( 0x0000000000200000 ),
1866 1.1 ross LIT64( 0x0000000000400000 ),
1867 1.1 ross LIT64( 0x0000000000800000 ),
1868 1.1 ross LIT64( 0x0000000001000000 ),
1869 1.1 ross LIT64( 0x0000000002000000 ),
1870 1.1 ross LIT64( 0x0000000004000000 ),
1871 1.1 ross LIT64( 0x0000000008000000 ),
1872 1.1 ross LIT64( 0x0000000010000000 ),
1873 1.1 ross LIT64( 0x0000000020000000 ),
1874 1.1 ross LIT64( 0x0000000040000000 ),
1875 1.1 ross LIT64( 0x0000000080000000 ),
1876 1.1 ross LIT64( 0x0000000100000000 ),
1877 1.1 ross LIT64( 0x0000000200000000 ),
1878 1.1 ross LIT64( 0x0000000400000000 ),
1879 1.1 ross LIT64( 0x0000000800000000 ),
1880 1.1 ross LIT64( 0x0000001000000000 ),
1881 1.1 ross LIT64( 0x0000002000000000 ),
1882 1.1 ross LIT64( 0x0000004000000000 ),
1883 1.1 ross LIT64( 0x0000008000000000 ),
1884 1.1 ross LIT64( 0x0000010000000000 ),
1885 1.1 ross LIT64( 0x0000020000000000 ),
1886 1.1 ross LIT64( 0x0000040000000000 ),
1887 1.1 ross LIT64( 0x0000080000000000 ),
1888 1.1 ross LIT64( 0x0000100000000000 ),
1889 1.1 ross LIT64( 0x0000200000000000 ),
1890 1.1 ross LIT64( 0x0000400000000000 ),
1891 1.1 ross LIT64( 0x0000800000000000 ),
1892 1.1 ross LIT64( 0x0001000000000000 ),
1893 1.1 ross LIT64( 0x0002000000000000 ),
1894 1.1 ross LIT64( 0x0004000000000000 ),
1895 1.1 ross LIT64( 0x0008000000000000 ),
1896 1.1 ross LIT64( 0x0010000000000000 ),
1897 1.1 ross LIT64( 0x0020000000000000 ),
1898 1.1 ross LIT64( 0x0040000000000000 ),
1899 1.1 ross LIT64( 0x0080000000000000 ),
1900 1.1 ross LIT64( 0x0100000000000000 ),
1901 1.1 ross LIT64( 0x0200000000000000 ),
1902 1.1 ross LIT64( 0x0400000000000000 ),
1903 1.1 ross LIT64( 0x0800000000000000 ),
1904 1.1 ross LIT64( 0x1000000000000000 ),
1905 1.1 ross LIT64( 0x2000000000000000 ),
1906 1.1 ross LIT64( 0x4000000000000000 ),
1907 1.1 ross LIT64( 0x6000000000000000 ),
1908 1.1 ross LIT64( 0x7000000000000000 ),
1909 1.1 ross LIT64( 0x7800000000000000 ),
1910 1.1 ross LIT64( 0x7C00000000000000 ),
1911 1.1 ross LIT64( 0x7E00000000000000 ),
1912 1.1 ross LIT64( 0x7F00000000000000 ),
1913 1.1 ross LIT64( 0x7F80000000000000 ),
1914 1.1 ross LIT64( 0x7FC0000000000000 ),
1915 1.1 ross LIT64( 0x7FE0000000000000 ),
1916 1.1 ross LIT64( 0x7FF0000000000000 ),
1917 1.1 ross LIT64( 0x7FF8000000000000 ),
1918 1.1 ross LIT64( 0x7FFC000000000000 ),
1919 1.1 ross LIT64( 0x7FFE000000000000 ),
1920 1.1 ross LIT64( 0x7FFF000000000000 ),
1921 1.1 ross LIT64( 0x7FFF800000000000 ),
1922 1.1 ross LIT64( 0x7FFFC00000000000 ),
1923 1.1 ross LIT64( 0x7FFFE00000000000 ),
1924 1.1 ross LIT64( 0x7FFFF00000000000 ),
1925 1.1 ross LIT64( 0x7FFFF80000000000 ),
1926 1.1 ross LIT64( 0x7FFFFC0000000000 ),
1927 1.1 ross LIT64( 0x7FFFFE0000000000 ),
1928 1.1 ross LIT64( 0x7FFFFF0000000000 ),
1929 1.1 ross LIT64( 0x7FFFFF8000000000 ),
1930 1.1 ross LIT64( 0x7FFFFFC000000000 ),
1931 1.1 ross LIT64( 0x7FFFFFE000000000 ),
1932 1.1 ross LIT64( 0x7FFFFFF000000000 ),
1933 1.1 ross LIT64( 0x7FFFFFF800000000 ),
1934 1.1 ross LIT64( 0x7FFFFFFC00000000 ),
1935 1.1 ross LIT64( 0x7FFFFFFE00000000 ),
1936 1.1 ross LIT64( 0x7FFFFFFF00000000 ),
1937 1.1 ross LIT64( 0x7FFFFFFF80000000 ),
1938 1.1 ross LIT64( 0x7FFFFFFFC0000000 ),
1939 1.1 ross LIT64( 0x7FFFFFFFE0000000 ),
1940 1.1 ross LIT64( 0x7FFFFFFFF0000000 ),
1941 1.1 ross LIT64( 0x7FFFFFFFF8000000 ),
1942 1.1 ross LIT64( 0x7FFFFFFFFC000000 ),
1943 1.1 ross LIT64( 0x7FFFFFFFFE000000 ),
1944 1.1 ross LIT64( 0x7FFFFFFFFF000000 ),
1945 1.1 ross LIT64( 0x7FFFFFFFFF800000 ),
1946 1.1 ross LIT64( 0x7FFFFFFFFFC00000 ),
1947 1.1 ross LIT64( 0x7FFFFFFFFFE00000 ),
1948 1.1 ross LIT64( 0x7FFFFFFFFFF00000 ),
1949 1.1 ross LIT64( 0x7FFFFFFFFFF80000 ),
1950 1.1 ross LIT64( 0x7FFFFFFFFFFC0000 ),
1951 1.1 ross LIT64( 0x7FFFFFFFFFFE0000 ),
1952 1.1 ross LIT64( 0x7FFFFFFFFFFF0000 ),
1953 1.1 ross LIT64( 0x7FFFFFFFFFFF8000 ),
1954 1.1 ross LIT64( 0x7FFFFFFFFFFFC000 ),
1955 1.1 ross LIT64( 0x7FFFFFFFFFFFE000 ),
1956 1.1 ross LIT64( 0x7FFFFFFFFFFFF000 ),
1957 1.1 ross LIT64( 0x7FFFFFFFFFFFF800 ),
1958 1.1 ross LIT64( 0x7FFFFFFFFFFFFC00 ),
1959 1.1 ross LIT64( 0x7FFFFFFFFFFFFE00 ),
1960 1.1 ross LIT64( 0x7FFFFFFFFFFFFF00 ),
1961 1.1 ross LIT64( 0x7FFFFFFFFFFFFF80 ),
1962 1.1 ross LIT64( 0x7FFFFFFFFFFFFFC0 ),
1963 1.1 ross LIT64( 0x7FFFFFFFFFFFFFE0 ),
1964 1.1 ross LIT64( 0x7FFFFFFFFFFFFFF0 ),
1965 1.1 ross LIT64( 0x7FFFFFFFFFFFFFF8 ),
1966 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFC ),
1967 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFE ),
1968 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFF ),
1969 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFD ),
1970 1.1 ross LIT64( 0x7FFFFFFFFFFFFFFB ),
1971 1.1 ross LIT64( 0x7FFFFFFFFFFFFFF7 ),
1972 1.1 ross LIT64( 0x7FFFFFFFFFFFFFEF ),
1973 1.1 ross LIT64( 0x7FFFFFFFFFFFFFDF ),
1974 1.1 ross LIT64( 0x7FFFFFFFFFFFFFBF ),
1975 1.1 ross LIT64( 0x7FFFFFFFFFFFFF7F ),
1976 1.1 ross LIT64( 0x7FFFFFFFFFFFFEFF ),
1977 1.1 ross LIT64( 0x7FFFFFFFFFFFFDFF ),
1978 1.1 ross LIT64( 0x7FFFFFFFFFFFFBFF ),
1979 1.1 ross LIT64( 0x7FFFFFFFFFFFF7FF ),
1980 1.1 ross LIT64( 0x7FFFFFFFFFFFEFFF ),
1981 1.1 ross LIT64( 0x7FFFFFFFFFFFDFFF ),
1982 1.1 ross LIT64( 0x7FFFFFFFFFFFBFFF ),
1983 1.1 ross LIT64( 0x7FFFFFFFFFFF7FFF ),
1984 1.1 ross LIT64( 0x7FFFFFFFFFFEFFFF ),
1985 1.1 ross LIT64( 0x7FFFFFFFFFFDFFFF ),
1986 1.1 ross LIT64( 0x7FFFFFFFFFFBFFFF ),
1987 1.1 ross LIT64( 0x7FFFFFFFFFF7FFFF ),
1988 1.1 ross LIT64( 0x7FFFFFFFFFEFFFFF ),
1989 1.1 ross LIT64( 0x7FFFFFFFFFDFFFFF ),
1990 1.1 ross LIT64( 0x7FFFFFFFFFBFFFFF ),
1991 1.1 ross LIT64( 0x7FFFFFFFFF7FFFFF ),
1992 1.1 ross LIT64( 0x7FFFFFFFFEFFFFFF ),
1993 1.1 ross LIT64( 0x7FFFFFFFFDFFFFFF ),
1994 1.1 ross LIT64( 0x7FFFFFFFFBFFFFFF ),
1995 1.1 ross LIT64( 0x7FFFFFFFF7FFFFFF ),
1996 1.1 ross LIT64( 0x7FFFFFFFEFFFFFFF ),
1997 1.1 ross LIT64( 0x7FFFFFFFDFFFFFFF ),
1998 1.1 ross LIT64( 0x7FFFFFFFBFFFFFFF ),
1999 1.1 ross LIT64( 0x7FFFFFFF7FFFFFFF ),
2000 1.1 ross LIT64( 0x7FFFFFFEFFFFFFFF ),
2001 1.1 ross LIT64( 0x7FFFFFFDFFFFFFFF ),
2002 1.1 ross LIT64( 0x7FFFFFFBFFFFFFFF ),
2003 1.1 ross LIT64( 0x7FFFFFF7FFFFFFFF ),
2004 1.1 ross LIT64( 0x7FFFFFEFFFFFFFFF ),
2005 1.1 ross LIT64( 0x7FFFFFDFFFFFFFFF ),
2006 1.1 ross LIT64( 0x7FFFFFBFFFFFFFFF ),
2007 1.1 ross LIT64( 0x7FFFFF7FFFFFFFFF ),
2008 1.1 ross LIT64( 0x7FFFFEFFFFFFFFFF ),
2009 1.1 ross LIT64( 0x7FFFFDFFFFFFFFFF ),
2010 1.1 ross LIT64( 0x7FFFFBFFFFFFFFFF ),
2011 1.1 ross LIT64( 0x7FFFF7FFFFFFFFFF ),
2012 1.1 ross LIT64( 0x7FFFEFFFFFFFFFFF ),
2013 1.1 ross LIT64( 0x7FFFDFFFFFFFFFFF ),
2014 1.1 ross LIT64( 0x7FFFBFFFFFFFFFFF ),
2015 1.1 ross LIT64( 0x7FFF7FFFFFFFFFFF ),
2016 1.1 ross LIT64( 0x7FFEFFFFFFFFFFFF ),
2017 1.1 ross LIT64( 0x7FFDFFFFFFFFFFFF ),
2018 1.1 ross LIT64( 0x7FFBFFFFFFFFFFFF ),
2019 1.1 ross LIT64( 0x7FF7FFFFFFFFFFFF ),
2020 1.1 ross LIT64( 0x7FEFFFFFFFFFFFFF ),
2021 1.1 ross LIT64( 0x7FDFFFFFFFFFFFFF ),
2022 1.1 ross LIT64( 0x7FBFFFFFFFFFFFFF ),
2023 1.1 ross LIT64( 0x7F7FFFFFFFFFFFFF ),
2024 1.1 ross LIT64( 0x7EFFFFFFFFFFFFFF ),
2025 1.1 ross LIT64( 0x7DFFFFFFFFFFFFFF ),
2026 1.1 ross LIT64( 0x7BFFFFFFFFFFFFFF ),
2027 1.1 ross LIT64( 0x77FFFFFFFFFFFFFF ),
2028 1.1 ross LIT64( 0x6FFFFFFFFFFFFFFF ),
2029 1.1 ross LIT64( 0x5FFFFFFFFFFFFFFF ),
2030 1.1 ross LIT64( 0x3FFFFFFFFFFFFFFF ),
2031 1.1 ross LIT64( 0x1FFFFFFFFFFFFFFF ),
2032 1.1 ross LIT64( 0x0FFFFFFFFFFFFFFF ),
2033 1.1 ross LIT64( 0x07FFFFFFFFFFFFFF ),
2034 1.1 ross LIT64( 0x03FFFFFFFFFFFFFF ),
2035 1.1 ross LIT64( 0x01FFFFFFFFFFFFFF ),
2036 1.1 ross LIT64( 0x00FFFFFFFFFFFFFF ),
2037 1.1 ross LIT64( 0x007FFFFFFFFFFFFF ),
2038 1.1 ross LIT64( 0x003FFFFFFFFFFFFF ),
2039 1.1 ross LIT64( 0x001FFFFFFFFFFFFF ),
2040 1.1 ross LIT64( 0x000FFFFFFFFFFFFF ),
2041 1.1 ross LIT64( 0x0007FFFFFFFFFFFF ),
2042 1.1 ross LIT64( 0x0003FFFFFFFFFFFF ),
2043 1.1 ross LIT64( 0x0001FFFFFFFFFFFF ),
2044 1.1 ross LIT64( 0x0000FFFFFFFFFFFF ),
2045 1.1 ross LIT64( 0x00007FFFFFFFFFFF ),
2046 1.1 ross LIT64( 0x00003FFFFFFFFFFF ),
2047 1.1 ross LIT64( 0x00001FFFFFFFFFFF ),
2048 1.1 ross LIT64( 0x00000FFFFFFFFFFF ),
2049 1.1 ross LIT64( 0x000007FFFFFFFFFF ),
2050 1.1 ross LIT64( 0x000003FFFFFFFFFF ),
2051 1.1 ross LIT64( 0x000001FFFFFFFFFF ),
2052 1.1 ross LIT64( 0x000000FFFFFFFFFF ),
2053 1.1 ross LIT64( 0x0000007FFFFFFFFF ),
2054 1.1 ross LIT64( 0x0000003FFFFFFFFF ),
2055 1.1 ross LIT64( 0x0000001FFFFFFFFF ),
2056 1.1 ross LIT64( 0x0000000FFFFFFFFF ),
2057 1.1 ross LIT64( 0x00000007FFFFFFFF ),
2058 1.1 ross LIT64( 0x00000003FFFFFFFF ),
2059 1.1 ross LIT64( 0x00000001FFFFFFFF ),
2060 1.1 ross LIT64( 0x00000000FFFFFFFF ),
2061 1.1 ross LIT64( 0x000000007FFFFFFF ),
2062 1.1 ross LIT64( 0x000000003FFFFFFF ),
2063 1.1 ross LIT64( 0x000000001FFFFFFF ),
2064 1.1 ross LIT64( 0x000000000FFFFFFF ),
2065 1.1 ross LIT64( 0x0000000007FFFFFF ),
2066 1.1 ross LIT64( 0x0000000003FFFFFF ),
2067 1.1 ross LIT64( 0x0000000001FFFFFF ),
2068 1.1 ross LIT64( 0x0000000000FFFFFF ),
2069 1.1 ross LIT64( 0x00000000007FFFFF ),
2070 1.1 ross LIT64( 0x00000000003FFFFF ),
2071 1.1 ross LIT64( 0x00000000001FFFFF ),
2072 1.1 ross LIT64( 0x00000000000FFFFF ),
2073 1.1 ross LIT64( 0x000000000007FFFF ),
2074 1.1 ross LIT64( 0x000000000003FFFF ),
2075 1.1 ross LIT64( 0x000000000001FFFF ),
2076 1.1 ross LIT64( 0x000000000000FFFF ),
2077 1.1 ross LIT64( 0x0000000000007FFF ),
2078 1.1 ross LIT64( 0x0000000000003FFF ),
2079 1.1 ross LIT64( 0x0000000000001FFF ),
2080 1.1 ross LIT64( 0x0000000000000FFF ),
2081 1.1 ross LIT64( 0x00000000000007FF ),
2082 1.1 ross LIT64( 0x00000000000003FF ),
2083 1.1 ross LIT64( 0x00000000000001FF ),
2084 1.1 ross LIT64( 0x00000000000000FF ),
2085 1.1 ross LIT64( 0x000000000000007F ),
2086 1.1 ross LIT64( 0x000000000000003F ),
2087 1.1 ross LIT64( 0x000000000000001F ),
2088 1.1 ross LIT64( 0x000000000000000F ),
2089 1.1 ross LIT64( 0x0000000000000007 ),
2090 1.1 ross LIT64( 0x0000000000000003 )
2091 1.1 ross };
2092 1.1 ross
2093 1.1 ross static const uint32 floatx80NumQInP1 = floatx80NumQIn * floatx80NumP1;
2094 1.1 ross static const uint32 floatx80NumQOutP1 = floatx80NumQOut * floatx80NumP1;
2095 1.1 ross
2096 1.1 ross static floatx80 floatx80NextQInP1( sequenceT *sequencePtr )
2097 1.1 ross {
2098 1.1 ross int16 expNum, sigNum;
2099 1.1 ross floatx80 z;
2100 1.1 ross
2101 1.1 ross sigNum = sequencePtr->term1Num;
2102 1.1 ross expNum = sequencePtr->expNum;
2103 1.1 ross z.low = floatx80P1[ sigNum ];
2104 1.1 ross z.high = floatx80QIn[ expNum ];
2105 1.1 ross if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2106 1.1 ross ++sigNum;
2107 1.1 ross if ( floatx80NumP1 <= sigNum ) {
2108 1.1 ross sigNum = 0;
2109 1.1 ross ++expNum;
2110 1.1 ross if ( floatx80NumQIn <= expNum ) {
2111 1.1 ross expNum = 0;
2112 1.1 ross sequencePtr->done = TRUE;
2113 1.1 ross }
2114 1.1 ross sequencePtr->expNum = expNum;
2115 1.1 ross }
2116 1.1 ross sequencePtr->term1Num = sigNum;
2117 1.1 ross return z;
2118 1.1 ross
2119 1.1 ross }
2120 1.1 ross
2121 1.1 ross static floatx80 floatx80NextQOutP1( sequenceT *sequencePtr )
2122 1.1 ross {
2123 1.1 ross int16 expNum, sigNum;
2124 1.1 ross floatx80 z;
2125 1.1 ross
2126 1.1 ross sigNum = sequencePtr->term1Num;
2127 1.1 ross expNum = sequencePtr->expNum;
2128 1.1 ross z.low = floatx80P1[ sigNum ];
2129 1.1 ross z.high = floatx80QOut[ expNum ];
2130 1.1 ross if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2131 1.1 ross ++sigNum;
2132 1.1 ross if ( floatx80NumP1 <= sigNum ) {
2133 1.1 ross sigNum = 0;
2134 1.1 ross ++expNum;
2135 1.1 ross if ( floatx80NumQOut <= expNum ) {
2136 1.1 ross expNum = 0;
2137 1.1 ross sequencePtr->done = TRUE;
2138 1.1 ross }
2139 1.1 ross sequencePtr->expNum = expNum;
2140 1.1 ross }
2141 1.1 ross sequencePtr->term1Num = sigNum;
2142 1.1 ross return z;
2143 1.1 ross
2144 1.1 ross }
2145 1.1 ross
2146 1.1 ross static const uint32 floatx80NumQInP2 = floatx80NumQIn * floatx80NumP2;
2147 1.1 ross static const uint32 floatx80NumQOutP2 = floatx80NumQOut * floatx80NumP2;
2148 1.1 ross
2149 1.1 ross static floatx80 floatx80NextQInP2( sequenceT *sequencePtr )
2150 1.1 ross {
2151 1.1 ross int16 expNum, sigNum;
2152 1.1 ross floatx80 z;
2153 1.1 ross
2154 1.1 ross sigNum = sequencePtr->term1Num;
2155 1.1 ross expNum = sequencePtr->expNum;
2156 1.1 ross z.low = floatx80P2[ sigNum ];
2157 1.1 ross z.high = floatx80QIn[ expNum ];
2158 1.1 ross if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2159 1.1 ross ++sigNum;
2160 1.1 ross if ( floatx80NumP2 <= sigNum ) {
2161 1.1 ross sigNum = 0;
2162 1.1 ross ++expNum;
2163 1.1 ross if ( floatx80NumQIn <= expNum ) {
2164 1.1 ross expNum = 0;
2165 1.1 ross sequencePtr->done = TRUE;
2166 1.1 ross }
2167 1.1 ross sequencePtr->expNum = expNum;
2168 1.1 ross }
2169 1.1 ross sequencePtr->term1Num = sigNum;
2170 1.1 ross return z;
2171 1.1 ross
2172 1.1 ross }
2173 1.1 ross
2174 1.1 ross static floatx80 floatx80NextQOutP2( sequenceT *sequencePtr )
2175 1.1 ross {
2176 1.1 ross int16 expNum, sigNum;
2177 1.1 ross floatx80 z;
2178 1.1 ross
2179 1.1 ross sigNum = sequencePtr->term1Num;
2180 1.1 ross expNum = sequencePtr->expNum;
2181 1.1 ross z.low = floatx80P2[ sigNum ];
2182 1.1 ross z.high = floatx80QOut[ expNum ];
2183 1.1 ross if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2184 1.1 ross ++sigNum;
2185 1.1 ross if ( floatx80NumP2 <= sigNum ) {
2186 1.1 ross sigNum = 0;
2187 1.1 ross ++expNum;
2188 1.1 ross if ( floatx80NumQOut <= expNum ) {
2189 1.1 ross expNum = 0;
2190 1.1 ross sequencePtr->done = TRUE;
2191 1.1 ross }
2192 1.1 ross sequencePtr->expNum = expNum;
2193 1.1 ross }
2194 1.1 ross sequencePtr->term1Num = sigNum;
2195 1.1 ross return z;
2196 1.1 ross
2197 1.1 ross }
2198 1.1 ross
2199 1.1 ross static floatx80 floatx80RandomQOutP3( void )
2200 1.1 ross {
2201 1.1 ross floatx80 z;
2202 1.1 ross
2203 1.1 ross z.low =
2204 1.1 ross ( floatx80P2[ randomUint8() % floatx80NumP2 ]
2205 1.1 ross + floatx80P2[ randomUint8() % floatx80NumP2 ] )
2206 1.1 ross & LIT64( 0x7FFFFFFFFFFFFFFF );
2207 1.1 ross z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
2208 1.1 ross if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2209 1.1 ross return z;
2210 1.1 ross
2211 1.1 ross }
2212 1.1 ross
2213 1.1 ross static floatx80 floatx80RandomQOutPInf( void )
2214 1.1 ross {
2215 1.1 ross floatx80 z;
2216 1.1 ross
2217 1.1 ross z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
2218 1.1 ross z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
2219 1.1 ross if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2220 1.1 ross return z;
2221 1.1 ross
2222 1.1 ross }
2223 1.1 ross
2224 1.1 ross enum {
2225 1.1 ross floatx80NumQInfWeightMasks = 14
2226 1.1 ross };
2227 1.1 ross
2228 1.1 ross static const uint16 floatx80QInfWeightMasks[ floatx80NumQInfWeightMasks ] = {
2229 1.1 ross 0x7FFF,
2230 1.1 ross 0x7FFF,
2231 1.1 ross 0x3FFF,
2232 1.1 ross 0x1FFF,
2233 1.1 ross 0x07FF,
2234 1.1 ross 0x07FF,
2235 1.1 ross 0x03FF,
2236 1.1 ross 0x01FF,
2237 1.1 ross 0x00FF,
2238 1.1 ross 0x007F,
2239 1.1 ross 0x003F,
2240 1.1 ross 0x001F,
2241 1.1 ross 0x000F,
2242 1.1 ross 0x0007
2243 1.1 ross };
2244 1.1 ross
2245 1.1 ross static const uint16 floatx80QInfWeightOffsets[ floatx80NumQInfWeightMasks ] = {
2246 1.1 ross 0x0000,
2247 1.1 ross 0x0000,
2248 1.1 ross 0x2000,
2249 1.1 ross 0x3000,
2250 1.1 ross 0x3800,
2251 1.1 ross 0x3C00,
2252 1.1 ross 0x3E00,
2253 1.1 ross 0x3F00,
2254 1.1 ross 0x3F80,
2255 1.1 ross 0x3FC0,
2256 1.1 ross 0x3FE0,
2257 1.1 ross 0x3FF0,
2258 1.1 ross 0x3FF8,
2259 1.1 ross 0x3FFC
2260 1.1 ross };
2261 1.1 ross
2262 1.1 ross static floatx80 floatx80RandomQInfP3( void )
2263 1.1 ross {
2264 1.1 ross int8 weightMaskNum;
2265 1.1 ross floatx80 z;
2266 1.1 ross
2267 1.1 ross z.low =
2268 1.1 ross ( floatx80P2[ randomUint8() % floatx80NumP2 ]
2269 1.1 ross + floatx80P2[ randomUint8() % floatx80NumP2 ] )
2270 1.1 ross & LIT64( 0x7FFFFFFFFFFFFFFF );
2271 1.1 ross weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
2272 1.1 ross z.high =
2273 1.2 ross randomUint16() & (floatx80QInfWeightMasks[ weightMaskNum ]
2274 1.2 ross + floatx80QInfWeightOffsets[ weightMaskNum ]);
2275 1.1 ross if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
2276 1.1 ross z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
2277 1.1 ross return z;
2278 1.1 ross
2279 1.1 ross }
2280 1.1 ross
2281 1.1 ross static floatx80 floatx80RandomQInfPInf( void )
2282 1.1 ross {
2283 1.1 ross int8 weightMaskNum;
2284 1.1 ross floatx80 z;
2285 1.1 ross
2286 1.1 ross z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
2287 1.1 ross weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
2288 1.1 ross z.high =
2289 1.2 ross randomUint16() & (floatx80QInfWeightMasks[ weightMaskNum ]
2290 1.2 ross + floatx80QInfWeightOffsets[ weightMaskNum ]);
2291 1.1 ross if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
2292 1.1 ross z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
2293 1.1 ross return z;
2294 1.1 ross
2295 1.1 ross }
2296 1.1 ross
2297 1.1 ross static floatx80 floatx80Random( void )
2298 1.1 ross {
2299 1.1 ross
2300 1.1 ross switch ( randomUint8() & 7 ) {
2301 1.1 ross case 0:
2302 1.1 ross case 1:
2303 1.1 ross case 2:
2304 1.1 ross return floatx80RandomQOutP3();
2305 1.1 ross case 3:
2306 1.1 ross return floatx80RandomQOutPInf();
2307 1.1 ross case 4:
2308 1.1 ross case 5:
2309 1.1 ross case 6:
2310 1.1 ross return floatx80RandomQInfP3();
2311 1.1 ross case 7:
2312 1.2 ross break;
2313 1.1 ross }
2314 1.2 ross return floatx80RandomQInfPInf();
2315 1.1 ross }
2316 1.1 ross
2317 1.1 ross #endif
2318 1.1 ross
2319 1.1 ross #ifdef FLOAT128
2320 1.1 ross
2321 1.1 ross enum {
2322 1.1 ross float128NumQIn = 22,
2323 1.1 ross float128NumQOut = 78,
2324 1.1 ross float128NumP1 = 4,
2325 1.1 ross float128NumP2 = 443
2326 1.1 ross };
2327 1.1 ross
2328 1.1 ross static const uint64 float128QIn[ float128NumQIn ] = {
2329 1.1 ross LIT64( 0x0000000000000000 ), /* positive, subnormal */
2330 1.1 ross LIT64( 0x0001000000000000 ), /* positive, -16382 */
2331 1.1 ross LIT64( 0x3F8E000000000000 ), /* positive, -113 */
2332 1.1 ross LIT64( 0x3FFD000000000000 ), /* positive, -2 */
2333 1.1 ross LIT64( 0x3FFE000000000000 ), /* positive, -1 */
2334 1.1 ross LIT64( 0x3FFF000000000000 ), /* positive, 0 */
2335 1.1 ross LIT64( 0x4000000000000000 ), /* positive, 1 */
2336 1.1 ross LIT64( 0x4001000000000000 ), /* positive, 2 */
2337 1.1 ross LIT64( 0x4070000000000000 ), /* positive, 113 */
2338 1.1 ross LIT64( 0x7FFE000000000000 ), /* positive, 16383 */
2339 1.1 ross LIT64( 0x7FFF000000000000 ), /* positive, infinity or NaN */
2340 1.1 ross LIT64( 0x8000000000000000 ), /* negative, subnormal */
2341 1.1 ross LIT64( 0x8001000000000000 ), /* negative, -16382 */
2342 1.1 ross LIT64( 0xBF8E000000000000 ), /* negative, -113 */
2343 1.1 ross LIT64( 0xBFFD000000000000 ), /* negative, -2 */
2344 1.1 ross LIT64( 0xBFFE000000000000 ), /* negative, -1 */
2345 1.1 ross LIT64( 0xBFFF000000000000 ), /* negative, 0 */
2346 1.1 ross LIT64( 0xC000000000000000 ), /* negative, 1 */
2347 1.1 ross LIT64( 0xC001000000000000 ), /* negative, 2 */
2348 1.1 ross LIT64( 0xC070000000000000 ), /* negative, 113 */
2349 1.1 ross LIT64( 0xFFFE000000000000 ), /* negative, 16383 */
2350 1.1 ross LIT64( 0xFFFF000000000000 ) /* negative, infinity or NaN */
2351 1.1 ross };
2352 1.1 ross
2353 1.1 ross static const uint64 float128QOut[ float128NumQOut ] = {
2354 1.1 ross LIT64( 0x0000000000000000 ), /* positive, subnormal */
2355 1.1 ross LIT64( 0x0001000000000000 ), /* positive, -16382 */
2356 1.1 ross LIT64( 0x0002000000000000 ), /* positive, -16381 */
2357 1.1 ross LIT64( 0x3BFE000000000000 ), /* positive, -1025 */
2358 1.1 ross LIT64( 0x3BFF000000000000 ), /* positive, -1024 */
2359 1.1 ross LIT64( 0x3C00000000000000 ), /* positive, -1023 */
2360 1.1 ross LIT64( 0x3C01000000000000 ), /* positive, -1022 */
2361 1.1 ross LIT64( 0x3F7E000000000000 ), /* positive, -129 */
2362 1.1 ross LIT64( 0x3F7F000000000000 ), /* positive, -128 */
2363 1.1 ross LIT64( 0x3F80000000000000 ), /* positive, -127 */
2364 1.1 ross LIT64( 0x3F81000000000000 ), /* positive, -126 */
2365 1.1 ross LIT64( 0x3F8E000000000000 ), /* positive, -113 */
2366 1.1 ross LIT64( 0x3FFB000000000000 ), /* positive, -4 */
2367 1.1 ross LIT64( 0x3FFC000000000000 ), /* positive, -3 */
2368 1.1 ross LIT64( 0x3FFD000000000000 ), /* positive, -2 */
2369 1.1 ross LIT64( 0x3FFE000000000000 ), /* positive, -1 */
2370 1.1 ross LIT64( 0x3FFF000000000000 ), /* positive, 0 */
2371 1.1 ross LIT64( 0x4000000000000000 ), /* positive, 1 */
2372 1.1 ross LIT64( 0x4001000000000000 ), /* positive, 2 */
2373 1.1 ross LIT64( 0x4002000000000000 ), /* positive, 3 */
2374 1.1 ross LIT64( 0x4003000000000000 ), /* positive, 4 */
2375 1.1 ross LIT64( 0x401C000000000000 ), /* positive, 29 */
2376 1.1 ross LIT64( 0x401D000000000000 ), /* positive, 30 */
2377 1.1 ross LIT64( 0x401E000000000000 ), /* positive, 31 */
2378 1.1 ross LIT64( 0x401F000000000000 ), /* positive, 32 */
2379 1.1 ross LIT64( 0x403C000000000000 ), /* positive, 61 */
2380 1.1 ross LIT64( 0x403D000000000000 ), /* positive, 62 */
2381 1.1 ross LIT64( 0x403E000000000000 ), /* positive, 63 */
2382 1.1 ross LIT64( 0x403F000000000000 ), /* positive, 64 */
2383 1.1 ross LIT64( 0x4070000000000000 ), /* positive, 113 */
2384 1.1 ross LIT64( 0x407E000000000000 ), /* positive, 127 */
2385 1.1 ross LIT64( 0x407F000000000000 ), /* positive, 128 */
2386 1.1 ross LIT64( 0x4080000000000000 ), /* positive, 129 */
2387 1.1 ross LIT64( 0x43FE000000000000 ), /* positive, 1023 */
2388 1.1 ross LIT64( 0x43FF000000000000 ), /* positive, 1024 */
2389 1.1 ross LIT64( 0x4400000000000000 ), /* positive, 1025 */
2390 1.1 ross LIT64( 0x7FFD000000000000 ), /* positive, 16382 */
2391 1.1 ross LIT64( 0x7FFE000000000000 ), /* positive, 16383 */
2392 1.1 ross LIT64( 0x7FFF000000000000 ), /* positive, infinity or NaN */
2393 1.1 ross LIT64( 0x8000000000000000 ), /* negative, subnormal */
2394 1.1 ross LIT64( 0x8001000000000000 ), /* negative, -16382 */
2395 1.1 ross LIT64( 0x8002000000000000 ), /* negative, -16381 */
2396 1.1 ross LIT64( 0xBBFE000000000000 ), /* negative, -1025 */
2397 1.1 ross LIT64( 0xBBFF000000000000 ), /* negative, -1024 */
2398 1.1 ross LIT64( 0xBC00000000000000 ), /* negative, -1023 */
2399 1.1 ross LIT64( 0xBC01000000000000 ), /* negative, -1022 */
2400 1.1 ross LIT64( 0xBF7E000000000000 ), /* negative, -129 */
2401 1.1 ross LIT64( 0xBF7F000000000000 ), /* negative, -128 */
2402 1.1 ross LIT64( 0xBF80000000000000 ), /* negative, -127 */
2403 1.1 ross LIT64( 0xBF81000000000000 ), /* negative, -126 */
2404 1.1 ross LIT64( 0xBF8E000000000000 ), /* negative, -113 */
2405 1.1 ross LIT64( 0xBFFB000000000000 ), /* negative, -4 */
2406 1.1 ross LIT64( 0xBFFC000000000000 ), /* negative, -3 */
2407 1.1 ross LIT64( 0xBFFD000000000000 ), /* negative, -2 */
2408 1.1 ross LIT64( 0xBFFE000000000000 ), /* negative, -1 */
2409 1.1 ross LIT64( 0xBFFF000000000000 ), /* negative, 0 */
2410 1.1 ross LIT64( 0xC000000000000000 ), /* negative, 1 */
2411 1.1 ross LIT64( 0xC001000000000000 ), /* negative, 2 */
2412 1.1 ross LIT64( 0xC002000000000000 ), /* negative, 3 */
2413 1.1 ross LIT64( 0xC003000000000000 ), /* negative, 4 */
2414 1.1 ross LIT64( 0xC01C000000000000 ), /* negative, 29 */
2415 1.1 ross LIT64( 0xC01D000000000000 ), /* negative, 30 */
2416 1.1 ross LIT64( 0xC01E000000000000 ), /* negative, 31 */
2417 1.1 ross LIT64( 0xC01F000000000000 ), /* negative, 32 */
2418 1.1 ross LIT64( 0xC03C000000000000 ), /* negative, 61 */
2419 1.1 ross LIT64( 0xC03D000000000000 ), /* negative, 62 */
2420 1.1 ross LIT64( 0xC03E000000000000 ), /* negative, 63 */
2421 1.1 ross LIT64( 0xC03F000000000000 ), /* negative, 64 */
2422 1.1 ross LIT64( 0xC070000000000000 ), /* negative, 113 */
2423 1.1 ross LIT64( 0xC07E000000000000 ), /* negative, 127 */
2424 1.1 ross LIT64( 0xC07F000000000000 ), /* negative, 128 */
2425 1.1 ross LIT64( 0xC080000000000000 ), /* negative, 129 */
2426 1.1 ross LIT64( 0xC3FE000000000000 ), /* negative, 1023 */
2427 1.1 ross LIT64( 0xC3FF000000000000 ), /* negative, 1024 */
2428 1.1 ross LIT64( 0xC400000000000000 ), /* negative, 1025 */
2429 1.1 ross LIT64( 0xFFFD000000000000 ), /* negative, 16382 */
2430 1.1 ross LIT64( 0xFFFE000000000000 ), /* negative, 16383 */
2431 1.1 ross LIT64( 0xFFFF000000000000 ) /* negative, infinity or NaN */
2432 1.1 ross };
2433 1.1 ross
2434 1.1 ross static const struct { bits64 high, low; } float128P1[ float128NumP1 ] = {
2435 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
2436 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
2437 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2438 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) }
2439 1.1 ross };
2440 1.1 ross
2441 1.1 ross static const struct { bits64 high, low; } float128P2[ float128NumP2 ] = {
2442 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
2443 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
2444 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000002 ) },
2445 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000004 ) },
2446 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000008 ) },
2447 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000010 ) },
2448 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000020 ) },
2449 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000040 ) },
2450 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000080 ) },
2451 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000100 ) },
2452 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000200 ) },
2453 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000400 ) },
2454 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000800 ) },
2455 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001000 ) },
2456 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000002000 ) },
2457 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000004000 ) },
2458 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000008000 ) },
2459 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000010000 ) },
2460 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000020000 ) },
2461 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000040000 ) },
2462 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000080000 ) },
2463 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000100000 ) },
2464 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000200000 ) },
2465 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000400000 ) },
2466 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000800000 ) },
2467 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001000000 ) },
2468 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000002000000 ) },
2469 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000004000000 ) },
2470 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000008000000 ) },
2471 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000010000000 ) },
2472 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000020000000 ) },
2473 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000040000000 ) },
2474 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000080000000 ) },
2475 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000100000000 ) },
2476 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000200000000 ) },
2477 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000400000000 ) },
2478 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000800000000 ) },
2479 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000001000000000 ) },
2480 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000002000000000 ) },
2481 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000004000000000 ) },
2482 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000008000000000 ) },
2483 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000010000000000 ) },
2484 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000020000000000 ) },
2485 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000040000000000 ) },
2486 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000080000000000 ) },
2487 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000100000000000 ) },
2488 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000200000000000 ) },
2489 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000400000000000 ) },
2490 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000800000000000 ) },
2491 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0001000000000000 ) },
2492 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0002000000000000 ) },
2493 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0004000000000000 ) },
2494 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0008000000000000 ) },
2495 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0010000000000000 ) },
2496 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0020000000000000 ) },
2497 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0040000000000000 ) },
2498 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0080000000000000 ) },
2499 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0100000000000000 ) },
2500 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0200000000000000 ) },
2501 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0400000000000000 ) },
2502 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0800000000000000 ) },
2503 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x1000000000000000 ) },
2504 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x2000000000000000 ) },
2505 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x4000000000000000 ) },
2506 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x8000000000000000 ) },
2507 1.1 ross { LIT64( 0x0000000000000001 ), LIT64( 0x0000000000000000 ) },
2508 1.1 ross { LIT64( 0x0000000000000002 ), LIT64( 0x0000000000000000 ) },
2509 1.1 ross { LIT64( 0x0000000000000004 ), LIT64( 0x0000000000000000 ) },
2510 1.1 ross { LIT64( 0x0000000000000008 ), LIT64( 0x0000000000000000 ) },
2511 1.1 ross { LIT64( 0x0000000000000010 ), LIT64( 0x0000000000000000 ) },
2512 1.1 ross { LIT64( 0x0000000000000020 ), LIT64( 0x0000000000000000 ) },
2513 1.1 ross { LIT64( 0x0000000000000040 ), LIT64( 0x0000000000000000 ) },
2514 1.1 ross { LIT64( 0x0000000000000080 ), LIT64( 0x0000000000000000 ) },
2515 1.1 ross { LIT64( 0x0000000000000100 ), LIT64( 0x0000000000000000 ) },
2516 1.1 ross { LIT64( 0x0000000000000200 ), LIT64( 0x0000000000000000 ) },
2517 1.1 ross { LIT64( 0x0000000000000400 ), LIT64( 0x0000000000000000 ) },
2518 1.1 ross { LIT64( 0x0000000000000800 ), LIT64( 0x0000000000000000 ) },
2519 1.1 ross { LIT64( 0x0000000000001000 ), LIT64( 0x0000000000000000 ) },
2520 1.1 ross { LIT64( 0x0000000000002000 ), LIT64( 0x0000000000000000 ) },
2521 1.1 ross { LIT64( 0x0000000000004000 ), LIT64( 0x0000000000000000 ) },
2522 1.1 ross { LIT64( 0x0000000000008000 ), LIT64( 0x0000000000000000 ) },
2523 1.1 ross { LIT64( 0x0000000000010000 ), LIT64( 0x0000000000000000 ) },
2524 1.1 ross { LIT64( 0x0000000000020000 ), LIT64( 0x0000000000000000 ) },
2525 1.1 ross { LIT64( 0x0000000000040000 ), LIT64( 0x0000000000000000 ) },
2526 1.1 ross { LIT64( 0x0000000000080000 ), LIT64( 0x0000000000000000 ) },
2527 1.1 ross { LIT64( 0x0000000000100000 ), LIT64( 0x0000000000000000 ) },
2528 1.1 ross { LIT64( 0x0000000000200000 ), LIT64( 0x0000000000000000 ) },
2529 1.1 ross { LIT64( 0x0000000000400000 ), LIT64( 0x0000000000000000 ) },
2530 1.1 ross { LIT64( 0x0000000000800000 ), LIT64( 0x0000000000000000 ) },
2531 1.1 ross { LIT64( 0x0000000001000000 ), LIT64( 0x0000000000000000 ) },
2532 1.1 ross { LIT64( 0x0000000002000000 ), LIT64( 0x0000000000000000 ) },
2533 1.1 ross { LIT64( 0x0000000004000000 ), LIT64( 0x0000000000000000 ) },
2534 1.1 ross { LIT64( 0x0000000008000000 ), LIT64( 0x0000000000000000 ) },
2535 1.1 ross { LIT64( 0x0000000010000000 ), LIT64( 0x0000000000000000 ) },
2536 1.1 ross { LIT64( 0x0000000020000000 ), LIT64( 0x0000000000000000 ) },
2537 1.1 ross { LIT64( 0x0000000040000000 ), LIT64( 0x0000000000000000 ) },
2538 1.1 ross { LIT64( 0x0000000080000000 ), LIT64( 0x0000000000000000 ) },
2539 1.1 ross { LIT64( 0x0000000100000000 ), LIT64( 0x0000000000000000 ) },
2540 1.1 ross { LIT64( 0x0000000200000000 ), LIT64( 0x0000000000000000 ) },
2541 1.1 ross { LIT64( 0x0000000400000000 ), LIT64( 0x0000000000000000 ) },
2542 1.1 ross { LIT64( 0x0000000800000000 ), LIT64( 0x0000000000000000 ) },
2543 1.1 ross { LIT64( 0x0000001000000000 ), LIT64( 0x0000000000000000 ) },
2544 1.1 ross { LIT64( 0x0000002000000000 ), LIT64( 0x0000000000000000 ) },
2545 1.1 ross { LIT64( 0x0000004000000000 ), LIT64( 0x0000000000000000 ) },
2546 1.1 ross { LIT64( 0x0000008000000000 ), LIT64( 0x0000000000000000 ) },
2547 1.1 ross { LIT64( 0x0000010000000000 ), LIT64( 0x0000000000000000 ) },
2548 1.1 ross { LIT64( 0x0000020000000000 ), LIT64( 0x0000000000000000 ) },
2549 1.1 ross { LIT64( 0x0000040000000000 ), LIT64( 0x0000000000000000 ) },
2550 1.1 ross { LIT64( 0x0000080000000000 ), LIT64( 0x0000000000000000 ) },
2551 1.1 ross { LIT64( 0x0000100000000000 ), LIT64( 0x0000000000000000 ) },
2552 1.1 ross { LIT64( 0x0000200000000000 ), LIT64( 0x0000000000000000 ) },
2553 1.1 ross { LIT64( 0x0000400000000000 ), LIT64( 0x0000000000000000 ) },
2554 1.1 ross { LIT64( 0x0000800000000000 ), LIT64( 0x0000000000000000 ) },
2555 1.1 ross { LIT64( 0x0000C00000000000 ), LIT64( 0x0000000000000000 ) },
2556 1.1 ross { LIT64( 0x0000E00000000000 ), LIT64( 0x0000000000000000 ) },
2557 1.1 ross { LIT64( 0x0000F00000000000 ), LIT64( 0x0000000000000000 ) },
2558 1.1 ross { LIT64( 0x0000F80000000000 ), LIT64( 0x0000000000000000 ) },
2559 1.1 ross { LIT64( 0x0000FC0000000000 ), LIT64( 0x0000000000000000 ) },
2560 1.1 ross { LIT64( 0x0000FE0000000000 ), LIT64( 0x0000000000000000 ) },
2561 1.1 ross { LIT64( 0x0000FF0000000000 ), LIT64( 0x0000000000000000 ) },
2562 1.1 ross { LIT64( 0x0000FF8000000000 ), LIT64( 0x0000000000000000 ) },
2563 1.1 ross { LIT64( 0x0000FFC000000000 ), LIT64( 0x0000000000000000 ) },
2564 1.1 ross { LIT64( 0x0000FFE000000000 ), LIT64( 0x0000000000000000 ) },
2565 1.1 ross { LIT64( 0x0000FFF000000000 ), LIT64( 0x0000000000000000 ) },
2566 1.1 ross { LIT64( 0x0000FFF800000000 ), LIT64( 0x0000000000000000 ) },
2567 1.1 ross { LIT64( 0x0000FFFC00000000 ), LIT64( 0x0000000000000000 ) },
2568 1.1 ross { LIT64( 0x0000FFFE00000000 ), LIT64( 0x0000000000000000 ) },
2569 1.1 ross { LIT64( 0x0000FFFF00000000 ), LIT64( 0x0000000000000000 ) },
2570 1.1 ross { LIT64( 0x0000FFFF80000000 ), LIT64( 0x0000000000000000 ) },
2571 1.1 ross { LIT64( 0x0000FFFFC0000000 ), LIT64( 0x0000000000000000 ) },
2572 1.1 ross { LIT64( 0x0000FFFFE0000000 ), LIT64( 0x0000000000000000 ) },
2573 1.1 ross { LIT64( 0x0000FFFFF0000000 ), LIT64( 0x0000000000000000 ) },
2574 1.1 ross { LIT64( 0x0000FFFFF8000000 ), LIT64( 0x0000000000000000 ) },
2575 1.1 ross { LIT64( 0x0000FFFFFC000000 ), LIT64( 0x0000000000000000 ) },
2576 1.1 ross { LIT64( 0x0000FFFFFE000000 ), LIT64( 0x0000000000000000 ) },
2577 1.1 ross { LIT64( 0x0000FFFFFF000000 ), LIT64( 0x0000000000000000 ) },
2578 1.1 ross { LIT64( 0x0000FFFFFF800000 ), LIT64( 0x0000000000000000 ) },
2579 1.1 ross { LIT64( 0x0000FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },
2580 1.1 ross { LIT64( 0x0000FFFFFFE00000 ), LIT64( 0x0000000000000000 ) },
2581 1.1 ross { LIT64( 0x0000FFFFFFF00000 ), LIT64( 0x0000000000000000 ) },
2582 1.1 ross { LIT64( 0x0000FFFFFFF80000 ), LIT64( 0x0000000000000000 ) },
2583 1.1 ross { LIT64( 0x0000FFFFFFFC0000 ), LIT64( 0x0000000000000000 ) },
2584 1.1 ross { LIT64( 0x0000FFFFFFFE0000 ), LIT64( 0x0000000000000000 ) },
2585 1.1 ross { LIT64( 0x0000FFFFFFFF0000 ), LIT64( 0x0000000000000000 ) },
2586 1.1 ross { LIT64( 0x0000FFFFFFFF8000 ), LIT64( 0x0000000000000000 ) },
2587 1.1 ross { LIT64( 0x0000FFFFFFFFC000 ), LIT64( 0x0000000000000000 ) },
2588 1.1 ross { LIT64( 0x0000FFFFFFFFE000 ), LIT64( 0x0000000000000000 ) },
2589 1.1 ross { LIT64( 0x0000FFFFFFFFF000 ), LIT64( 0x0000000000000000 ) },
2590 1.1 ross { LIT64( 0x0000FFFFFFFFF800 ), LIT64( 0x0000000000000000 ) },
2591 1.1 ross { LIT64( 0x0000FFFFFFFFFC00 ), LIT64( 0x0000000000000000 ) },
2592 1.1 ross { LIT64( 0x0000FFFFFFFFFE00 ), LIT64( 0x0000000000000000 ) },
2593 1.1 ross { LIT64( 0x0000FFFFFFFFFF00 ), LIT64( 0x0000000000000000 ) },
2594 1.1 ross { LIT64( 0x0000FFFFFFFFFF80 ), LIT64( 0x0000000000000000 ) },
2595 1.1 ross { LIT64( 0x0000FFFFFFFFFFC0 ), LIT64( 0x0000000000000000 ) },
2596 1.1 ross { LIT64( 0x0000FFFFFFFFFFE0 ), LIT64( 0x0000000000000000 ) },
2597 1.1 ross { LIT64( 0x0000FFFFFFFFFFF0 ), LIT64( 0x0000000000000000 ) },
2598 1.1 ross { LIT64( 0x0000FFFFFFFFFFF8 ), LIT64( 0x0000000000000000 ) },
2599 1.1 ross { LIT64( 0x0000FFFFFFFFFFFC ), LIT64( 0x0000000000000000 ) },
2600 1.1 ross { LIT64( 0x0000FFFFFFFFFFFE ), LIT64( 0x0000000000000000 ) },
2601 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x0000000000000000 ) },
2602 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x8000000000000000 ) },
2603 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xC000000000000000 ) },
2604 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xE000000000000000 ) },
2605 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF000000000000000 ) },
2606 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF800000000000000 ) },
2607 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFC00000000000000 ) },
2608 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFE00000000000000 ) },
2609 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF00000000000000 ) },
2610 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF80000000000000 ) },
2611 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFC0000000000000 ) },
2612 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFE0000000000000 ) },
2613 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF0000000000000 ) },
2614 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF8000000000000 ) },
2615 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },
2616 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFE000000000000 ) },
2617 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF000000000000 ) },
2618 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF800000000000 ) },
2619 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFC00000000000 ) },
2620 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFE00000000000 ) },
2621 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF00000000000 ) },
2622 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF80000000000 ) },
2623 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFC0000000000 ) },
2624 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFE0000000000 ) },
2625 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF0000000000 ) },
2626 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF8000000000 ) },
2627 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFC000000000 ) },
2628 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFE000000000 ) },
2629 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF000000000 ) },
2630 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF800000000 ) },
2631 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFC00000000 ) },
2632 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFE00000000 ) },
2633 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF00000000 ) },
2634 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF80000000 ) },
2635 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFC0000000 ) },
2636 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFE0000000 ) },
2637 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },
2638 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF8000000 ) },
2639 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFC000000 ) },
2640 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFE000000 ) },
2641 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF000000 ) },
2642 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF800000 ) },
2643 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFC00000 ) },
2644 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFE00000 ) },
2645 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF00000 ) },
2646 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF80000 ) },
2647 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFC0000 ) },
2648 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFE0000 ) },
2649 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF0000 ) },
2650 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF8000 ) },
2651 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFC000 ) },
2652 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFE000 ) },
2653 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF000 ) },
2654 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF800 ) },
2655 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFC00 ) },
2656 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFE00 ) },
2657 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF00 ) },
2658 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF80 ) },
2659 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFC0 ) },
2660 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFE0 ) },
2661 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF0 ) },
2662 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF8 ) },
2663 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFC ) },
2664 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) },
2665 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2666 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFD ) },
2667 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFB ) },
2668 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF7 ) },
2669 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFEF ) },
2670 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFDF ) },
2671 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFBF ) },
2672 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF7F ) },
2673 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFEFF ) },
2674 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFDFF ) },
2675 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFF ) },
2676 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF7FF ) },
2677 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },
2678 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFDFFF ) },
2679 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFBFFF ) },
2680 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF7FFF ) },
2681 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFEFFFF ) },
2682 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFDFFFF ) },
2683 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFBFFFF ) },
2684 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },
2685 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFEFFFFF ) },
2686 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFDFFFFF ) },
2687 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFBFFFFF ) },
2688 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF7FFFFF ) },
2689 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFEFFFFFF ) },
2690 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFDFFFFFF ) },
2691 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFBFFFFFF ) },
2692 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF7FFFFFF ) },
2693 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },
2694 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFDFFFFFFF ) },
2695 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFBFFFFFFF ) },
2696 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF7FFFFFFF ) },
2697 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFFFF ) },
2698 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFDFFFFFFFF ) },
2699 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFBFFFFFFFF ) },
2700 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF7FFFFFFFF ) },
2701 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFEFFFFFFFFF ) },
2702 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFDFFFFFFFFF ) },
2703 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFBFFFFFFFFF ) },
2704 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF7FFFFFFFFF ) },
2705 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFEFFFFFFFFFF ) },
2706 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFDFFFFFFFFFF ) },
2707 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFBFFFFFFFFFF ) },
2708 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF7FFFFFFFFFF ) },
2709 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFEFFFFFFFFFFF ) },
2710 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFDFFFFFFFFFFF ) },
2711 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFBFFFFFFFFFFF ) },
2712 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF7FFFFFFFFFFF ) },
2713 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFEFFFFFFFFFFFF ) },
2714 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFDFFFFFFFFFFFF ) },
2715 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFBFFFFFFFFFFFF ) },
2716 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF7FFFFFFFFFFFF ) },
2717 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFEFFFFFFFFFFFFF ) },
2718 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFDFFFFFFFFFFFFF ) },
2719 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFBFFFFFFFFFFFFF ) },
2720 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF7FFFFFFFFFFFFF ) },
2721 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFEFFFFFFFFFFFFFF ) },
2722 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFDFFFFFFFFFFFFFF ) },
2723 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFBFFFFFFFFFFFFFF ) },
2724 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF7FFFFFFFFFFFFFF ) },
2725 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xEFFFFFFFFFFFFFFF ) },
2726 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xDFFFFFFFFFFFFFFF ) },
2727 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xBFFFFFFFFFFFFFFF ) },
2728 1.1 ross { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
2729 1.1 ross { LIT64( 0x0000FFFFFFFFFFFD ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2730 1.1 ross { LIT64( 0x0000FFFFFFFFFFFB ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2731 1.1 ross { LIT64( 0x0000FFFFFFFFFFF7 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2732 1.1 ross { LIT64( 0x0000FFFFFFFFFFEF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2733 1.1 ross { LIT64( 0x0000FFFFFFFFFFDF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2734 1.1 ross { LIT64( 0x0000FFFFFFFFFFBF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2735 1.1 ross { LIT64( 0x0000FFFFFFFFFF7F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2736 1.1 ross { LIT64( 0x0000FFFFFFFFFEFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2737 1.1 ross { LIT64( 0x0000FFFFFFFFFDFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2738 1.1 ross { LIT64( 0x0000FFFFFFFFFBFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2739 1.1 ross { LIT64( 0x0000FFFFFFFFF7FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2740 1.1 ross { LIT64( 0x0000FFFFFFFFEFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2741 1.1 ross { LIT64( 0x0000FFFFFFFFDFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2742 1.1 ross { LIT64( 0x0000FFFFFFFFBFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2743 1.1 ross { LIT64( 0x0000FFFFFFFF7FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2744 1.1 ross { LIT64( 0x0000FFFFFFFEFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2745 1.1 ross { LIT64( 0x0000FFFFFFFDFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2746 1.1 ross { LIT64( 0x0000FFFFFFFBFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2747 1.1 ross { LIT64( 0x0000FFFFFFF7FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2748 1.1 ross { LIT64( 0x0000FFFFFFEFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2749 1.1 ross { LIT64( 0x0000FFFFFFDFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2750 1.1 ross { LIT64( 0x0000FFFFFFBFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2751 1.1 ross { LIT64( 0x0000FFFFFF7FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2752 1.1 ross { LIT64( 0x0000FFFFFEFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2753 1.1 ross { LIT64( 0x0000FFFFFDFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2754 1.1 ross { LIT64( 0x0000FFFFFBFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2755 1.1 ross { LIT64( 0x0000FFFFF7FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2756 1.1 ross { LIT64( 0x0000FFFFEFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2757 1.1 ross { LIT64( 0x0000FFFFDFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2758 1.1 ross { LIT64( 0x0000FFFFBFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2759 1.1 ross { LIT64( 0x0000FFFF7FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2760 1.1 ross { LIT64( 0x0000FFFEFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2761 1.1 ross { LIT64( 0x0000FFFDFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2762 1.1 ross { LIT64( 0x0000FFFBFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2763 1.1 ross { LIT64( 0x0000FFF7FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2764 1.1 ross { LIT64( 0x0000FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2765 1.1 ross { LIT64( 0x0000FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2766 1.1 ross { LIT64( 0x0000FFBFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2767 1.1 ross { LIT64( 0x0000FF7FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2768 1.1 ross { LIT64( 0x0000FEFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2769 1.1 ross { LIT64( 0x0000FDFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2770 1.1 ross { LIT64( 0x0000FBFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2771 1.1 ross { LIT64( 0x0000F7FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2772 1.1 ross { LIT64( 0x0000EFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2773 1.1 ross { LIT64( 0x0000DFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2774 1.1 ross { LIT64( 0x0000BFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2775 1.1 ross { LIT64( 0x00007FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2776 1.1 ross { LIT64( 0x00003FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2777 1.1 ross { LIT64( 0x00001FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2778 1.1 ross { LIT64( 0x00000FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2779 1.1 ross { LIT64( 0x000007FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2780 1.1 ross { LIT64( 0x000003FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2781 1.1 ross { LIT64( 0x000001FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2782 1.1 ross { LIT64( 0x000000FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2783 1.1 ross { LIT64( 0x0000007FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2784 1.1 ross { LIT64( 0x0000003FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2785 1.1 ross { LIT64( 0x0000001FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2786 1.1 ross { LIT64( 0x0000000FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2787 1.1 ross { LIT64( 0x00000007FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2788 1.1 ross { LIT64( 0x00000003FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2789 1.1 ross { LIT64( 0x00000001FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2790 1.1 ross { LIT64( 0x00000000FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2791 1.1 ross { LIT64( 0x000000007FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2792 1.1 ross { LIT64( 0x000000003FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2793 1.1 ross { LIT64( 0x000000001FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2794 1.1 ross { LIT64( 0x000000000FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2795 1.1 ross { LIT64( 0x0000000007FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2796 1.1 ross { LIT64( 0x0000000003FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2797 1.1 ross { LIT64( 0x0000000001FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2798 1.1 ross { LIT64( 0x0000000000FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2799 1.1 ross { LIT64( 0x00000000007FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2800 1.1 ross { LIT64( 0x00000000003FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2801 1.1 ross { LIT64( 0x00000000001FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2802 1.1 ross { LIT64( 0x00000000000FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2803 1.1 ross { LIT64( 0x000000000007FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2804 1.1 ross { LIT64( 0x000000000003FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2805 1.1 ross { LIT64( 0x000000000001FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2806 1.1 ross { LIT64( 0x000000000000FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2807 1.1 ross { LIT64( 0x0000000000007FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2808 1.1 ross { LIT64( 0x0000000000003FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2809 1.1 ross { LIT64( 0x0000000000001FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2810 1.1 ross { LIT64( 0x0000000000000FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2811 1.1 ross { LIT64( 0x00000000000007FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2812 1.1 ross { LIT64( 0x00000000000003FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2813 1.1 ross { LIT64( 0x00000000000001FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2814 1.1 ross { LIT64( 0x00000000000000FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2815 1.1 ross { LIT64( 0x000000000000007F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2816 1.1 ross { LIT64( 0x000000000000003F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2817 1.1 ross { LIT64( 0x000000000000001F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2818 1.1 ross { LIT64( 0x000000000000000F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2819 1.1 ross { LIT64( 0x0000000000000007 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2820 1.1 ross { LIT64( 0x0000000000000003 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2821 1.1 ross { LIT64( 0x0000000000000001 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2822 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2823 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
2824 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x3FFFFFFFFFFFFFFF ) },
2825 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x1FFFFFFFFFFFFFFF ) },
2826 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0FFFFFFFFFFFFFFF ) },
2827 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x07FFFFFFFFFFFFFF ) },
2828 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x03FFFFFFFFFFFFFF ) },
2829 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x01FFFFFFFFFFFFFF ) },
2830 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00FFFFFFFFFFFFFF ) },
2831 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x007FFFFFFFFFFFFF ) },
2832 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x003FFFFFFFFFFFFF ) },
2833 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x001FFFFFFFFFFFFF ) },
2834 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000FFFFFFFFFFFFF ) },
2835 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0007FFFFFFFFFFFF ) },
2836 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0003FFFFFFFFFFFF ) },
2837 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0001FFFFFFFFFFFF ) },
2838 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000FFFFFFFFFFFF ) },
2839 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00007FFFFFFFFFFF ) },
2840 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00003FFFFFFFFFFF ) },
2841 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00001FFFFFFFFFFF ) },
2842 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000FFFFFFFFFFF ) },
2843 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000007FFFFFFFFFF ) },
2844 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000003FFFFFFFFFF ) },
2845 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000001FFFFFFFFFF ) },
2846 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000FFFFFFFFFF ) },
2847 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000007FFFFFFFFF ) },
2848 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000003FFFFFFFFF ) },
2849 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000001FFFFFFFFF ) },
2850 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000FFFFFFFFF ) },
2851 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000007FFFFFFFF ) },
2852 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000003FFFFFFFF ) },
2853 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000001FFFFFFFF ) },
2854 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000FFFFFFFF ) },
2855 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000007FFFFFFF ) },
2856 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000003FFFFFFF ) },
2857 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000001FFFFFFF ) },
2858 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000FFFFFFF ) },
2859 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000007FFFFFF ) },
2860 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000003FFFFFF ) },
2861 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001FFFFFF ) },
2862 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000FFFFFF ) },
2863 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000007FFFFF ) },
2864 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000003FFFFF ) },
2865 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000001FFFFF ) },
2866 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000FFFFF ) },
2867 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000007FFFF ) },
2868 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000003FFFF ) },
2869 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000001FFFF ) },
2870 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000FFFF ) },
2871 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000007FFF ) },
2872 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000003FFF ) },
2873 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001FFF ) },
2874 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000FFF ) },
2875 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000007FF ) },
2876 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000003FF ) },
2877 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000001FF ) },
2878 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000000FF ) },
2879 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000007F ) },
2880 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000003F ) },
2881 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000001F ) },
2882 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000000F ) },
2883 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000007 ) },
2884 1.1 ross { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000003 ) }
2885 1.1 ross };
2886 1.1 ross
2887 1.1 ross static const uint32 float128NumQInP1 = float128NumQIn * float128NumP1;
2888 1.1 ross static const uint32 float128NumQOutP1 = float128NumQOut * float128NumP1;
2889 1.1 ross
2890 1.1 ross static float128 float128NextQInP1( sequenceT *sequencePtr )
2891 1.1 ross {
2892 1.1 ross int16 expNum, sigNum;
2893 1.1 ross float128 z;
2894 1.1 ross
2895 1.1 ross sigNum = sequencePtr->term1Num;
2896 1.1 ross expNum = sequencePtr->expNum;
2897 1.1 ross z.low = float128P1[ sigNum ].low;
2898 1.1 ross z.high = float128QIn[ expNum ] | float128P1[ sigNum ].high;
2899 1.1 ross ++sigNum;
2900 1.1 ross if ( float128NumP1 <= sigNum ) {
2901 1.1 ross sigNum = 0;
2902 1.1 ross ++expNum;
2903 1.1 ross if ( float128NumQIn <= expNum ) {
2904 1.1 ross expNum = 0;
2905 1.1 ross sequencePtr->done = TRUE;
2906 1.1 ross }
2907 1.1 ross sequencePtr->expNum = expNum;
2908 1.1 ross }
2909 1.1 ross sequencePtr->term1Num = sigNum;
2910 1.1 ross return z;
2911 1.1 ross
2912 1.1 ross }
2913 1.1 ross
2914 1.1 ross static float128 float128NextQOutP1( sequenceT *sequencePtr )
2915 1.1 ross {
2916 1.1 ross int16 expNum, sigNum;
2917 1.1 ross float128 z;
2918 1.1 ross
2919 1.1 ross sigNum = sequencePtr->term1Num;
2920 1.1 ross expNum = sequencePtr->expNum;
2921 1.1 ross z.low = float128P1[ sigNum ].low;
2922 1.1 ross z.high = float128QOut[ expNum ] | float128P1[ sigNum ].high;
2923 1.1 ross ++sigNum;
2924 1.1 ross if ( float128NumP1 <= sigNum ) {
2925 1.1 ross sigNum = 0;
2926 1.1 ross ++expNum;
2927 1.1 ross if ( float128NumQOut <= expNum ) {
2928 1.1 ross expNum = 0;
2929 1.1 ross sequencePtr->done = TRUE;
2930 1.1 ross }
2931 1.1 ross sequencePtr->expNum = expNum;
2932 1.1 ross }
2933 1.1 ross sequencePtr->term1Num = sigNum;
2934 1.1 ross return z;
2935 1.1 ross
2936 1.1 ross }
2937 1.1 ross
2938 1.1 ross static const uint32 float128NumQInP2 = float128NumQIn * float128NumP2;
2939 1.1 ross static const uint32 float128NumQOutP2 = float128NumQOut * float128NumP2;
2940 1.1 ross
2941 1.1 ross static float128 float128NextQInP2( sequenceT *sequencePtr )
2942 1.1 ross {
2943 1.1 ross int16 expNum, sigNum;
2944 1.1 ross float128 z;
2945 1.1 ross
2946 1.1 ross sigNum = sequencePtr->term1Num;
2947 1.1 ross expNum = sequencePtr->expNum;
2948 1.1 ross z.low = float128P2[ sigNum ].low;
2949 1.1 ross z.high = float128QIn[ expNum ] | float128P2[ sigNum ].high;
2950 1.1 ross ++sigNum;
2951 1.1 ross if ( float128NumP2 <= sigNum ) {
2952 1.1 ross sigNum = 0;
2953 1.1 ross ++expNum;
2954 1.1 ross if ( float128NumQIn <= expNum ) {
2955 1.1 ross expNum = 0;
2956 1.1 ross sequencePtr->done = TRUE;
2957 1.1 ross }
2958 1.1 ross sequencePtr->expNum = expNum;
2959 1.1 ross }
2960 1.1 ross sequencePtr->term1Num = sigNum;
2961 1.1 ross return z;
2962 1.1 ross
2963 1.1 ross }
2964 1.1 ross
2965 1.1 ross static float128 float128NextQOutP2( sequenceT *sequencePtr )
2966 1.1 ross {
2967 1.1 ross int16 expNum, sigNum;
2968 1.1 ross float128 z;
2969 1.1 ross
2970 1.1 ross sigNum = sequencePtr->term1Num;
2971 1.1 ross expNum = sequencePtr->expNum;
2972 1.1 ross z.low = float128P2[ sigNum ].low;
2973 1.1 ross z.high = float128QOut[ expNum ] | float128P2[ sigNum ].high;
2974 1.1 ross ++sigNum;
2975 1.1 ross if ( float128NumP2 <= sigNum ) {
2976 1.1 ross sigNum = 0;
2977 1.1 ross ++expNum;
2978 1.1 ross if ( float128NumQOut <= expNum ) {
2979 1.1 ross expNum = 0;
2980 1.1 ross sequencePtr->done = TRUE;
2981 1.1 ross }
2982 1.1 ross sequencePtr->expNum = expNum;
2983 1.1 ross }
2984 1.1 ross sequencePtr->term1Num = sigNum;
2985 1.1 ross return z;
2986 1.1 ross
2987 1.1 ross }
2988 1.1 ross
2989 1.1 ross static float128 float128RandomQOutP3( void )
2990 1.1 ross {
2991 1.1 ross int16 sigNum1, sigNum2;
2992 1.1 ross uint64 sig1Low, sig2Low;
2993 1.1 ross float128 z;
2994 1.1 ross
2995 1.1 ross sigNum1 = randomUint8() % float128NumP2;
2996 1.1 ross sigNum2 = randomUint8() % float128NumP2;
2997 1.1 ross sig1Low = float128P2[ sigNum1 ].low;
2998 1.1 ross sig2Low = float128P2[ sigNum2 ].low;
2999 1.1 ross z.low = sig1Low + sig2Low;
3000 1.1 ross z.high =
3001 1.1 ross float128QOut[ randomUint8() % float128NumQOut ]
3002 1.1 ross | ( ( float128P2[ sigNum1 ].high
3003 1.1 ross + float128P2[ sigNum2 ].high
3004 1.1 ross + ( z.low < sig1Low )
3005 1.1 ross )
3006 1.1 ross & LIT64( 0x0000FFFFFFFFFFFF )
3007 1.1 ross );
3008 1.1 ross return z;
3009 1.1 ross
3010 1.1 ross }
3011 1.1 ross
3012 1.1 ross static float128 float128RandomQOutPInf( void )
3013 1.1 ross {
3014 1.1 ross float128 z;
3015 1.1 ross
3016 1.1 ross z.low = randomUint64();
3017 1.1 ross z.high =
3018 1.1 ross float128QOut[ randomUint8() % float128NumQOut ]
3019 1.1 ross | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
3020 1.1 ross return z;
3021 1.1 ross
3022 1.1 ross }
3023 1.1 ross
3024 1.1 ross enum {
3025 1.1 ross float128NumQInfWeightMasks = 14
3026 1.1 ross };
3027 1.1 ross
3028 1.1 ross static const uint64 float128QInfWeightMasks[ float128NumQInfWeightMasks ] = {
3029 1.1 ross LIT64( 0x7FFF000000000000 ),
3030 1.1 ross LIT64( 0x7FFF000000000000 ),
3031 1.1 ross LIT64( 0x3FFF000000000000 ),
3032 1.1 ross LIT64( 0x1FFF000000000000 ),
3033 1.1 ross LIT64( 0x07FF000000000000 ),
3034 1.1 ross LIT64( 0x07FF000000000000 ),
3035 1.1 ross LIT64( 0x03FF000000000000 ),
3036 1.1 ross LIT64( 0x01FF000000000000 ),
3037 1.1 ross LIT64( 0x00FF000000000000 ),
3038 1.1 ross LIT64( 0x007F000000000000 ),
3039 1.1 ross LIT64( 0x003F000000000000 ),
3040 1.1 ross LIT64( 0x001F000000000000 ),
3041 1.1 ross LIT64( 0x000F000000000000 ),
3042 1.1 ross LIT64( 0x0007000000000000 )
3043 1.1 ross };
3044 1.1 ross
3045 1.1 ross static const uint64 float128QInfWeightOffsets[ float128NumQInfWeightMasks ] = {
3046 1.1 ross LIT64( 0x0000000000000000 ),
3047 1.1 ross LIT64( 0x0000000000000000 ),
3048 1.1 ross LIT64( 0x2000000000000000 ),
3049 1.1 ross LIT64( 0x3000000000000000 ),
3050 1.1 ross LIT64( 0x3800000000000000 ),
3051 1.1 ross LIT64( 0x3C00000000000000 ),
3052 1.1 ross LIT64( 0x3E00000000000000 ),
3053 1.1 ross LIT64( 0x3F00000000000000 ),
3054 1.1 ross LIT64( 0x3F80000000000000 ),
3055 1.1 ross LIT64( 0x3FC0000000000000 ),
3056 1.1 ross LIT64( 0x3FE0000000000000 ),
3057 1.1 ross LIT64( 0x3FF0000000000000 ),
3058 1.1 ross LIT64( 0x3FF8000000000000 ),
3059 1.1 ross LIT64( 0x3FFC000000000000 )
3060 1.1 ross };
3061 1.1 ross
3062 1.1 ross static float128 float128RandomQInfP3( void )
3063 1.1 ross {
3064 1.1 ross int16 sigNum1, sigNum2;
3065 1.1 ross uint64 sig1Low, sig2Low;
3066 1.1 ross int8 weightMaskNum;
3067 1.1 ross float128 z;
3068 1.1 ross
3069 1.1 ross sigNum1 = randomUint8() % float128NumP2;
3070 1.1 ross sigNum2 = randomUint8() % float128NumP2;
3071 1.1 ross sig1Low = float128P2[ sigNum1 ].low;
3072 1.1 ross sig2Low = float128P2[ sigNum2 ].low;
3073 1.1 ross z.low = sig1Low + sig2Low;
3074 1.1 ross weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
3075 1.1 ross z.high =
3076 1.1 ross ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
3077 1.1 ross | ( ( ( ( (uint64) randomUint16() )<<48 )
3078 1.1 ross & float128QInfWeightMasks[ weightMaskNum ] )
3079 1.1 ross + float128QInfWeightOffsets[ weightMaskNum ]
3080 1.1 ross )
3081 1.1 ross | ( ( float128P2[ sigNum1 ].high
3082 1.1 ross + float128P2[ sigNum2 ].high
3083 1.1 ross + ( z.low < sig1Low )
3084 1.1 ross )
3085 1.1 ross & LIT64( 0x0000FFFFFFFFFFFF )
3086 1.1 ross );
3087 1.1 ross return z;
3088 1.1 ross
3089 1.1 ross }
3090 1.1 ross
3091 1.1 ross static float128 float128RandomQInfPInf( void )
3092 1.1 ross {
3093 1.1 ross int8 weightMaskNum;
3094 1.1 ross float128 z;
3095 1.1 ross
3096 1.1 ross weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
3097 1.1 ross z.low = randomUint64();
3098 1.1 ross z.high =
3099 1.1 ross ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
3100 1.1 ross | ( ( ( ( (uint64) randomUint16() )<<48 )
3101 1.1 ross & float128QInfWeightMasks[ weightMaskNum ] )
3102 1.1 ross + float128QInfWeightOffsets[ weightMaskNum ]
3103 1.1 ross )
3104 1.1 ross | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
3105 1.1 ross return z;
3106 1.1 ross
3107 1.1 ross }
3108 1.1 ross
3109 1.1 ross static float128 float128Random( void )
3110 1.1 ross {
3111 1.1 ross
3112 1.1 ross switch ( randomUint8() & 7 ) {
3113 1.1 ross case 0:
3114 1.1 ross case 1:
3115 1.1 ross case 2:
3116 1.1 ross return float128RandomQOutP3();
3117 1.1 ross case 3:
3118 1.1 ross return float128RandomQOutPInf();
3119 1.1 ross case 4:
3120 1.1 ross case 5:
3121 1.1 ross case 6:
3122 1.1 ross return float128RandomQInfP3();
3123 1.1 ross case 7:
3124 1.1 ross return float128RandomQInfPInf();
3125 1.1 ross }
3126 1.1 ross
3127 1.1 ross }
3128 1.1 ross
3129 1.1 ross #endif
3130 1.1 ross
3131 1.1 ross static int8 level = 0;
3132 1.1 ross
3133 1.1 ross void testCases_setLevel( int8 levelIn )
3134 1.1 ross {
3135 1.1 ross
3136 1.1 ross if ( ( levelIn < 1 ) || ( 2 < levelIn ) ) {
3137 1.1 ross fail( "Invalid testing level: %d", levelIn );
3138 1.1 ross }
3139 1.1 ross level = levelIn;
3140 1.1 ross
3141 1.1 ross }
3142 1.1 ross
3143 1.1 ross static int8 sequenceType;
3144 1.1 ross static sequenceT sequenceA, sequenceB;
3145 1.1 ross static int8 subcase;
3146 1.1 ross
3147 1.1 ross uint32 testCases_total;
3148 1.1 ross flag testCases_done;
3149 1.1 ross
3150 1.1 ross static float32 current_a_float32;
3151 1.1 ross static float32 current_b_float32;
3152 1.1 ross static float64 current_a_float64;
3153 1.1 ross static float64 current_b_float64;
3154 1.1 ross #ifdef FLOATX80
3155 1.1 ross static floatx80 current_a_floatx80;
3156 1.1 ross static floatx80 current_b_floatx80;
3157 1.1 ross #endif
3158 1.1 ross #ifdef FLOAT128
3159 1.1 ross static float128 current_a_float128;
3160 1.1 ross static float128 current_b_float128;
3161 1.1 ross #endif
3162 1.1 ross
3163 1.1 ross void testCases_initSequence( int8 sequenceTypeIn )
3164 1.1 ross {
3165 1.1 ross
3166 1.1 ross sequenceType = sequenceTypeIn;
3167 1.1 ross sequenceA.term2Num = 0;
3168 1.1 ross sequenceA.term1Num = 0;
3169 1.1 ross sequenceA.expNum = 0;
3170 1.1 ross sequenceA.done = FALSE;
3171 1.1 ross sequenceB.term2Num = 0;
3172 1.1 ross sequenceB.term1Num = 0;
3173 1.1 ross sequenceB.expNum = 0;
3174 1.1 ross sequenceB.done = FALSE;
3175 1.1 ross subcase = 0;
3176 1.1 ross switch ( level ) {
3177 1.1 ross case 1:
3178 1.1 ross switch ( sequenceTypeIn ) {
3179 1.1 ross case testCases_sequence_a_int32:
3180 1.1 ross testCases_total = 3 * int32NumP1;
3181 1.1 ross break;
3182 1.1 ross #ifdef BITS64
3183 1.1 ross case testCases_sequence_a_int64:
3184 1.1 ross testCases_total = 3 * int64NumP1;
3185 1.1 ross break;
3186 1.1 ross #endif
3187 1.1 ross case testCases_sequence_a_float32:
3188 1.1 ross testCases_total = 3 * float32NumQOutP1;
3189 1.1 ross break;
3190 1.1 ross case testCases_sequence_ab_float32:
3191 1.1 ross testCases_total = 6 * float32NumQInP1 * float32NumQInP1;
3192 1.1 ross current_a_float32 = float32NextQInP1( &sequenceA );
3193 1.1 ross break;
3194 1.1 ross case testCases_sequence_a_float64:
3195 1.1 ross testCases_total = 3 * float64NumQOutP1;
3196 1.1 ross break;
3197 1.1 ross case testCases_sequence_ab_float64:
3198 1.1 ross testCases_total = 6 * float64NumQInP1 * float64NumQInP1;
3199 1.1 ross current_a_float64 = float64NextQInP1( &sequenceA );
3200 1.1 ross break;
3201 1.1 ross #ifdef FLOATX80
3202 1.1 ross case testCases_sequence_a_floatx80:
3203 1.1 ross testCases_total = 3 * floatx80NumQOutP1;
3204 1.1 ross break;
3205 1.1 ross case testCases_sequence_ab_floatx80:
3206 1.1 ross testCases_total = 6 * floatx80NumQInP1 * floatx80NumQInP1;
3207 1.1 ross current_a_floatx80 = floatx80NextQInP1( &sequenceA );
3208 1.1 ross break;
3209 1.1 ross #endif
3210 1.1 ross #ifdef FLOAT128
3211 1.1 ross case testCases_sequence_a_float128:
3212 1.1 ross testCases_total = 3 * float128NumQOutP1;
3213 1.1 ross break;
3214 1.1 ross case testCases_sequence_ab_float128:
3215 1.1 ross testCases_total = 6 * float128NumQInP1 * float128NumQInP1;
3216 1.1 ross current_a_float128 = float128NextQInP1( &sequenceA );
3217 1.1 ross break;
3218 1.1 ross #endif
3219 1.1 ross }
3220 1.1 ross break;
3221 1.1 ross case 2:
3222 1.1 ross switch ( sequenceTypeIn ) {
3223 1.1 ross case testCases_sequence_a_int32:
3224 1.1 ross testCases_total = 2 * int32NumP2;
3225 1.1 ross break;
3226 1.1 ross #ifdef BITS64
3227 1.1 ross case testCases_sequence_a_int64:
3228 1.1 ross testCases_total = 2 * int64NumP2;
3229 1.1 ross break;
3230 1.1 ross #endif
3231 1.1 ross case testCases_sequence_a_float32:
3232 1.1 ross testCases_total = 2 * float32NumQOutP2;
3233 1.1 ross break;
3234 1.1 ross case testCases_sequence_ab_float32:
3235 1.1 ross testCases_total = 2 * float32NumQInP2 * float32NumQInP2;
3236 1.1 ross current_a_float32 = float32NextQInP2( &sequenceA );
3237 1.1 ross break;
3238 1.1 ross case testCases_sequence_a_float64:
3239 1.1 ross testCases_total = 2 * float64NumQOutP2;
3240 1.1 ross break;
3241 1.1 ross case testCases_sequence_ab_float64:
3242 1.1 ross testCases_total = 2 * float64NumQInP2 * float64NumQInP2;
3243 1.1 ross current_a_float64 = float64NextQInP2( &sequenceA );
3244 1.1 ross break;
3245 1.1 ross #ifdef FLOATX80
3246 1.1 ross case testCases_sequence_a_floatx80:
3247 1.1 ross testCases_total = 2 * floatx80NumQOutP2;
3248 1.1 ross break;
3249 1.1 ross case testCases_sequence_ab_floatx80:
3250 1.1 ross testCases_total = 2 * floatx80NumQInP2 * floatx80NumQInP2;
3251 1.1 ross current_a_floatx80 = floatx80NextQInP2( &sequenceA );
3252 1.1 ross break;
3253 1.1 ross #endif
3254 1.1 ross #ifdef FLOAT128
3255 1.1 ross case testCases_sequence_a_float128:
3256 1.1 ross testCases_total = 2 * float128NumQOutP2;
3257 1.1 ross break;
3258 1.1 ross case testCases_sequence_ab_float128:
3259 1.1 ross testCases_total = 2 * float128NumQInP2 * float128NumQInP2;
3260 1.1 ross current_a_float128 = float128NextQInP2( &sequenceA );
3261 1.1 ross break;
3262 1.1 ross #endif
3263 1.1 ross }
3264 1.1 ross break;
3265 1.1 ross }
3266 1.1 ross testCases_done = FALSE;
3267 1.1 ross
3268 1.1 ross }
3269 1.1 ross
3270 1.1 ross int32 testCases_a_int32;
3271 1.1 ross #ifdef BITS64
3272 1.1 ross int64 testCases_a_int64;
3273 1.1 ross #endif
3274 1.1 ross float32 testCases_a_float32;
3275 1.1 ross float32 testCases_b_float32;
3276 1.1 ross float64 testCases_a_float64;
3277 1.1 ross float64 testCases_b_float64;
3278 1.1 ross #ifdef FLOATX80
3279 1.1 ross floatx80 testCases_a_floatx80;
3280 1.1 ross floatx80 testCases_b_floatx80;
3281 1.1 ross #endif
3282 1.1 ross #ifdef FLOAT128
3283 1.1 ross float128 testCases_a_float128;
3284 1.1 ross float128 testCases_b_float128;
3285 1.1 ross #endif
3286 1.1 ross
3287 1.1 ross void testCases_next( void )
3288 1.1 ross {
3289 1.1 ross
3290 1.1 ross switch ( level ) {
3291 1.1 ross case 1:
3292 1.1 ross switch ( sequenceType ) {
3293 1.1 ross case testCases_sequence_a_int32:
3294 1.1 ross switch ( subcase ) {
3295 1.1 ross case 0:
3296 1.1 ross testCases_a_int32 = int32RandomP3();
3297 1.1 ross break;
3298 1.1 ross case 1:
3299 1.1 ross testCases_a_int32 = int32RandomPInf();
3300 1.1 ross break;
3301 1.1 ross case 2:
3302 1.1 ross testCases_a_int32 = int32NextP1( &sequenceA );
3303 1.1 ross testCases_done = sequenceA.done;
3304 1.1 ross subcase = -1;
3305 1.1 ross break;
3306 1.1 ross }
3307 1.1 ross ++subcase;
3308 1.1 ross break;
3309 1.1 ross #ifdef BITS64
3310 1.1 ross case testCases_sequence_a_int64:
3311 1.1 ross switch ( subcase ) {
3312 1.1 ross case 0:
3313 1.1 ross testCases_a_int64 = int64RandomP3();
3314 1.1 ross break;
3315 1.1 ross case 1:
3316 1.1 ross testCases_a_int64 = int64RandomPInf();
3317 1.1 ross break;
3318 1.1 ross case 2:
3319 1.1 ross testCases_a_int64 = int64NextP1( &sequenceA );
3320 1.1 ross testCases_done = sequenceA.done;
3321 1.1 ross subcase = -1;
3322 1.1 ross break;
3323 1.1 ross }
3324 1.1 ross ++subcase;
3325 1.1 ross break;
3326 1.1 ross #endif
3327 1.1 ross case testCases_sequence_a_float32:
3328 1.1 ross switch ( subcase ) {
3329 1.1 ross case 0:
3330 1.1 ross case 1:
3331 1.1 ross testCases_a_float32 = float32Random();
3332 1.1 ross break;
3333 1.1 ross case 2:
3334 1.1 ross testCases_a_float32 = float32NextQOutP1( &sequenceA );
3335 1.1 ross testCases_done = sequenceA.done;
3336 1.1 ross subcase = -1;
3337 1.1 ross break;
3338 1.1 ross }
3339 1.1 ross ++subcase;
3340 1.1 ross break;
3341 1.1 ross case testCases_sequence_ab_float32:
3342 1.1 ross switch ( subcase ) {
3343 1.1 ross case 0:
3344 1.1 ross if ( sequenceB.done ) {
3345 1.1 ross sequenceB.done = FALSE;
3346 1.1 ross current_a_float32 = float32NextQInP1( &sequenceA );
3347 1.1 ross }
3348 1.1 ross current_b_float32 = float32NextQInP1( &sequenceB );
3349 1.1 ross case 2:
3350 1.1 ross case 4:
3351 1.1 ross testCases_a_float32 = float32Random();
3352 1.1 ross testCases_b_float32 = float32Random();
3353 1.1 ross break;
3354 1.1 ross case 1:
3355 1.1 ross testCases_a_float32 = current_a_float32;
3356 1.1 ross testCases_b_float32 = float32Random();
3357 1.1 ross break;
3358 1.1 ross case 3:
3359 1.1 ross testCases_a_float32 = float32Random();
3360 1.1 ross testCases_b_float32 = current_b_float32;
3361 1.1 ross break;
3362 1.1 ross case 5:
3363 1.1 ross testCases_a_float32 = current_a_float32;
3364 1.1 ross testCases_b_float32 = current_b_float32;
3365 1.1 ross testCases_done = sequenceA.done & sequenceB.done;
3366 1.1 ross subcase = -1;
3367 1.1 ross break;
3368 1.1 ross }
3369 1.1 ross ++subcase;
3370 1.1 ross break;
3371 1.1 ross case testCases_sequence_a_float64:
3372 1.1 ross switch ( subcase ) {
3373 1.1 ross case 0:
3374 1.1 ross case 1:
3375 1.1 ross testCases_a_float64 = float64Random();
3376 1.1 ross break;
3377 1.1 ross case 2:
3378 1.1 ross testCases_a_float64 = float64NextQOutP1( &sequenceA );
3379 1.1 ross testCases_done = sequenceA.done;
3380 1.1 ross subcase = -1;
3381 1.1 ross break;
3382 1.1 ross }
3383 1.1 ross ++subcase;
3384 1.1 ross break;
3385 1.1 ross case testCases_sequence_ab_float64:
3386 1.1 ross switch ( subcase ) {
3387 1.1 ross case 0:
3388 1.1 ross if ( sequenceB.done ) {
3389 1.1 ross sequenceB.done = FALSE;
3390 1.1 ross current_a_float64 = float64NextQInP1( &sequenceA );
3391 1.1 ross }
3392 1.1 ross current_b_float64 = float64NextQInP1( &sequenceB );
3393 1.1 ross case 2:
3394 1.1 ross case 4:
3395 1.1 ross testCases_a_float64 = float64Random();
3396 1.1 ross testCases_b_float64 = float64Random();
3397 1.1 ross break;
3398 1.1 ross case 1:
3399 1.1 ross testCases_a_float64 = current_a_float64;
3400 1.1 ross testCases_b_float64 = float64Random();
3401 1.1 ross break;
3402 1.1 ross case 3:
3403 1.1 ross testCases_a_float64 = float64Random();
3404 1.1 ross testCases_b_float64 = current_b_float64;
3405 1.1 ross break;
3406 1.1 ross case 5:
3407 1.1 ross testCases_a_float64 = current_a_float64;
3408 1.1 ross testCases_b_float64 = current_b_float64;
3409 1.1 ross testCases_done = sequenceA.done & sequenceB.done;
3410 1.1 ross subcase = -1;
3411 1.1 ross break;
3412 1.1 ross }
3413 1.1 ross ++subcase;
3414 1.1 ross break;
3415 1.1 ross #ifdef FLOATX80
3416 1.1 ross case testCases_sequence_a_floatx80:
3417 1.1 ross switch ( subcase ) {
3418 1.1 ross case 0:
3419 1.1 ross case 1:
3420 1.1 ross testCases_a_floatx80 = floatx80Random();
3421 1.1 ross break;
3422 1.1 ross case 2:
3423 1.1 ross testCases_a_floatx80 = floatx80NextQOutP1( &sequenceA );
3424 1.1 ross testCases_done = sequenceA.done;
3425 1.1 ross subcase = -1;
3426 1.1 ross break;
3427 1.1 ross }
3428 1.1 ross ++subcase;
3429 1.1 ross break;
3430 1.1 ross case testCases_sequence_ab_floatx80:
3431 1.1 ross switch ( subcase ) {
3432 1.1 ross case 0:
3433 1.1 ross if ( sequenceB.done ) {
3434 1.1 ross sequenceB.done = FALSE;
3435 1.1 ross current_a_floatx80 = floatx80NextQInP1( &sequenceA );
3436 1.1 ross }
3437 1.1 ross current_b_floatx80 = floatx80NextQInP1( &sequenceB );
3438 1.1 ross case 2:
3439 1.1 ross case 4:
3440 1.1 ross testCases_a_floatx80 = floatx80Random();
3441 1.1 ross testCases_b_floatx80 = floatx80Random();
3442 1.1 ross break;
3443 1.1 ross case 1:
3444 1.1 ross testCases_a_floatx80 = current_a_floatx80;
3445 1.1 ross testCases_b_floatx80 = floatx80Random();
3446 1.1 ross break;
3447 1.1 ross case 3:
3448 1.1 ross testCases_a_floatx80 = floatx80Random();
3449 1.1 ross testCases_b_floatx80 = current_b_floatx80;
3450 1.1 ross break;
3451 1.1 ross case 5:
3452 1.1 ross testCases_a_floatx80 = current_a_floatx80;
3453 1.1 ross testCases_b_floatx80 = current_b_floatx80;
3454 1.1 ross testCases_done = sequenceA.done & sequenceB.done;
3455 1.1 ross subcase = -1;
3456 1.1 ross break;
3457 1.1 ross }
3458 1.1 ross ++subcase;
3459 1.1 ross break;
3460 1.1 ross #endif
3461 1.1 ross #ifdef FLOAT128
3462 1.1 ross case testCases_sequence_a_float128:
3463 1.1 ross switch ( subcase ) {
3464 1.1 ross case 0:
3465 1.1 ross case 1:
3466 1.1 ross testCases_a_float128 = float128Random();
3467 1.1 ross break;
3468 1.1 ross case 2:
3469 1.1 ross testCases_a_float128 = float128NextQOutP1( &sequenceA );
3470 1.1 ross testCases_done = sequenceA.done;
3471 1.1 ross subcase = -1;
3472 1.1 ross break;
3473 1.1 ross }
3474 1.1 ross ++subcase;
3475 1.1 ross break;
3476 1.1 ross case testCases_sequence_ab_float128:
3477 1.1 ross switch ( subcase ) {
3478 1.1 ross case 0:
3479 1.1 ross if ( sequenceB.done ) {
3480 1.1 ross sequenceB.done = FALSE;
3481 1.1 ross current_a_float128 = float128NextQInP1( &sequenceA );
3482 1.1 ross }
3483 1.1 ross current_b_float128 = float128NextQInP1( &sequenceB );
3484 1.1 ross case 2:
3485 1.1 ross case 4:
3486 1.1 ross testCases_a_float128 = float128Random();
3487 1.1 ross testCases_b_float128 = float128Random();
3488 1.1 ross break;
3489 1.1 ross case 1:
3490 1.1 ross testCases_a_float128 = current_a_float128;
3491 1.1 ross testCases_b_float128 = float128Random();
3492 1.1 ross break;
3493 1.1 ross case 3:
3494 1.1 ross testCases_a_float128 = float128Random();
3495 1.1 ross testCases_b_float128 = current_b_float128;
3496 1.1 ross break;
3497 1.1 ross case 5:
3498 1.1 ross testCases_a_float128 = current_a_float128;
3499 1.1 ross testCases_b_float128 = current_b_float128;
3500 1.1 ross testCases_done = sequenceA.done & sequenceB.done;
3501 1.1 ross subcase = -1;
3502 1.1 ross break;
3503 1.1 ross }
3504 1.1 ross ++subcase;
3505 1.1 ross break;
3506 1.1 ross #endif
3507 1.1 ross }
3508 1.1 ross break;
3509 1.1 ross case 2:
3510 1.1 ross switch ( sequenceType ) {
3511 1.1 ross case testCases_sequence_a_int32:
3512 1.1 ross switch ( subcase ) {
3513 1.1 ross case 0:
3514 1.1 ross testCases_a_int32 = int32RandomP3();
3515 1.1 ross break;
3516 1.1 ross case 2:
3517 1.1 ross testCases_a_int32 = int32RandomPInf();
3518 1.1 ross break;
3519 1.1 ross case 3:
3520 1.1 ross subcase = -1;
3521 1.1 ross case 1:
3522 1.1 ross testCases_a_int32 = int32NextP2( &sequenceA );
3523 1.1 ross testCases_done = sequenceA.done;
3524 1.1 ross break;
3525 1.1 ross }
3526 1.1 ross ++subcase;
3527 1.1 ross break;
3528 1.1 ross #ifdef BITS64
3529 1.1 ross case testCases_sequence_a_int64:
3530 1.1 ross switch ( subcase ) {
3531 1.1 ross case 0:
3532 1.1 ross testCases_a_int64 = int64RandomP3();
3533 1.1 ross break;
3534 1.1 ross case 2:
3535 1.1 ross testCases_a_int64 = int64RandomPInf();
3536 1.1 ross break;
3537 1.1 ross case 3:
3538 1.1 ross subcase = -1;
3539 1.1 ross case 1:
3540 1.1 ross testCases_a_int64 = int64NextP2( &sequenceA );
3541 1.1 ross testCases_done = sequenceA.done;
3542 1.1 ross break;
3543 1.1 ross }
3544 1.1 ross ++subcase;
3545 1.1 ross break;
3546 1.1 ross #endif
3547 1.1 ross case testCases_sequence_a_float32:
3548 1.1 ross switch ( subcase ) {
3549 1.1 ross case 0:
3550 1.1 ross testCases_a_float32 = float32Random();
3551 1.1 ross break;
3552 1.1 ross case 1:
3553 1.1 ross testCases_a_float32 = float32NextQOutP2( &sequenceA );
3554 1.1 ross testCases_done = sequenceA.done;
3555 1.1 ross subcase = -1;
3556 1.1 ross break;
3557 1.1 ross }
3558 1.1 ross ++subcase;
3559 1.1 ross break;
3560 1.1 ross case testCases_sequence_ab_float32:
3561 1.1 ross switch ( subcase ) {
3562 1.1 ross case 0:
3563 1.1 ross testCases_a_float32 = float32Random();
3564 1.1 ross testCases_b_float32 = float32Random();
3565 1.1 ross break;
3566 1.1 ross case 1:
3567 1.1 ross if ( sequenceB.done ) {
3568 1.1 ross sequenceB.done = FALSE;
3569 1.1 ross current_a_float32 = float32NextQInP2( &sequenceA );
3570 1.1 ross }
3571 1.1 ross testCases_a_float32 = current_a_float32;
3572 1.1 ross testCases_b_float32 = float32NextQInP2( &sequenceB );
3573 1.1 ross testCases_done = sequenceA.done & sequenceB.done;
3574 1.1 ross subcase = -1;
3575 1.1 ross break;
3576 1.1 ross }
3577 1.1 ross ++subcase;
3578 1.1 ross break;
3579 1.1 ross case testCases_sequence_a_float64:
3580 1.1 ross switch ( subcase ) {
3581 1.1 ross case 0:
3582 1.1 ross testCases_a_float64 = float64Random();
3583 1.1 ross break;
3584 1.1 ross case 1:
3585 1.1 ross testCases_a_float64 = float64NextQOutP2( &sequenceA );
3586 1.1 ross testCases_done = sequenceA.done;
3587 1.1 ross subcase = -1;
3588 1.1 ross break;
3589 1.1 ross }
3590 1.1 ross ++subcase;
3591 1.1 ross break;
3592 1.1 ross case testCases_sequence_ab_float64:
3593 1.1 ross switch ( subcase ) {
3594 1.1 ross case 0:
3595 1.1 ross testCases_a_float64 = float64Random();
3596 1.1 ross testCases_b_float64 = float64Random();
3597 1.1 ross break;
3598 1.1 ross case 1:
3599 1.1 ross if ( sequenceB.done ) {
3600 1.1 ross sequenceB.done = FALSE;
3601 1.1 ross current_a_float64 = float64NextQInP2( &sequenceA );
3602 1.1 ross }
3603 1.1 ross testCases_a_float64 = current_a_float64;
3604 1.1 ross testCases_b_float64 = float64NextQInP2( &sequenceB );
3605 1.1 ross testCases_done = sequenceA.done & sequenceB.done;
3606 1.1 ross subcase = -1;
3607 1.1 ross break;
3608 1.1 ross }
3609 1.1 ross ++subcase;
3610 1.1 ross break;
3611 1.1 ross #ifdef FLOATX80
3612 1.1 ross case testCases_sequence_a_floatx80:
3613 1.1 ross switch ( subcase ) {
3614 1.1 ross case 0:
3615 1.1 ross testCases_a_floatx80 = floatx80Random();
3616 1.1 ross break;
3617 1.1 ross case 1:
3618 1.1 ross testCases_a_floatx80 = floatx80NextQOutP2( &sequenceA );
3619 1.1 ross testCases_done = sequenceA.done;
3620 1.1 ross subcase = -1;
3621 1.1 ross break;
3622 1.1 ross }
3623 1.1 ross ++subcase;
3624 1.1 ross break;
3625 1.1 ross case testCases_sequence_ab_floatx80:
3626 1.1 ross switch ( subcase ) {
3627 1.1 ross case 0:
3628 1.1 ross testCases_a_floatx80 = floatx80Random();
3629 1.1 ross testCases_b_floatx80 = floatx80Random();
3630 1.1 ross break;
3631 1.1 ross case 1:
3632 1.1 ross if ( sequenceB.done ) {
3633 1.1 ross sequenceB.done = FALSE;
3634 1.1 ross current_a_floatx80 = floatx80NextQInP2( &sequenceA );
3635 1.1 ross }
3636 1.1 ross testCases_a_floatx80 = current_a_floatx80;
3637 1.1 ross testCases_b_floatx80 = floatx80NextQInP2( &sequenceB );
3638 1.1 ross testCases_done = sequenceA.done & sequenceB.done;
3639 1.1 ross subcase = -1;
3640 1.1 ross break;
3641 1.1 ross }
3642 1.1 ross ++subcase;
3643 1.1 ross break;
3644 1.1 ross #endif
3645 1.1 ross #ifdef FLOAT128
3646 1.1 ross case testCases_sequence_a_float128:
3647 1.1 ross switch ( subcase ) {
3648 1.1 ross case 0:
3649 1.1 ross testCases_a_float128 = float128Random();
3650 1.1 ross break;
3651 1.1 ross case 1:
3652 1.1 ross testCases_a_float128 = float128NextQOutP2( &sequenceA );
3653 1.1 ross testCases_done = sequenceA.done;
3654 1.1 ross subcase = -1;
3655 1.1 ross break;
3656 1.1 ross }
3657 1.1 ross ++subcase;
3658 1.1 ross break;
3659 1.1 ross case testCases_sequence_ab_float128:
3660 1.1 ross switch ( subcase ) {
3661 1.1 ross case 0:
3662 1.1 ross testCases_a_float128 = float128Random();
3663 1.1 ross testCases_b_float128 = float128Random();
3664 1.1 ross break;
3665 1.1 ross case 1:
3666 1.1 ross if ( sequenceB.done ) {
3667 1.1 ross sequenceB.done = FALSE;
3668 1.1 ross current_a_float128 = float128NextQInP2( &sequenceA );
3669 1.1 ross }
3670 1.1 ross testCases_a_float128 = current_a_float128;
3671 1.1 ross testCases_b_float128 = float128NextQInP2( &sequenceB );
3672 1.1 ross testCases_done = sequenceA.done & sequenceB.done;
3673 1.1 ross subcase = -1;
3674 1.1 ross break;
3675 1.1 ross }
3676 1.1 ross ++subcase;
3677 1.1 ross break;
3678 1.1 ross #endif
3679 1.1 ross }
3680 1.1 ross break;
3681 1.1 ross }
3682 1.1 ross
3683 1.1 ross }
3684 1.1 ross
3685