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