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