1206917Smarius
2206917Smarius/*
3206917Smarius===============================================================================
4206917Smarius
5206917SmariusThis C source file is part of TestFloat, Release 2a, a package of programs
6206917Smariusfor testing the correctness of floating-point arithmetic complying to the
7206917SmariusIEC/IEEE Standard for Floating-Point.
8206917Smarius
9206917SmariusWritten by John R. Hauser.  More information is available through the Web
10206917Smariuspage `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
11206917Smarius
12206917SmariusTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
13206917Smariushas been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
14206917SmariusTIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
15206917SmariusPERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
16206917SmariusAND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
17206917Smarius
18206917SmariusDerivative works are acceptable, even for commercial purposes, so long as
19206917Smarius(1) they include prominent notice that the work is derivative, and (2) they
20206917Smariusinclude prominent notice akin to these four paragraphs for those parts of
21206917Smariusthis code that are retained.
22206917Smarius
23206917Smarius===============================================================================
24206917Smarius*/
25206917Smarius
26207151Smarius#include <sys/cdefs.h>
27207151Smarius__FBSDID("$FreeBSD$");
28207151Smarius
29206917Smarius#include "milieu.h"
30206917Smarius#include "fail.h"
31206917Smarius#include "random.h"
32206917Smarius#include "softfloat.h"
33206917Smarius#include "testCases.h"
34206917Smarius
35206917Smariustypedef struct {
36206917Smarius    int16 expNum, term1Num, term2Num;
37206917Smarius    flag done;
38206917Smarius} sequenceT;
39206917Smarius
40206917Smariusenum {
41206917Smarius    int32NumP1 = 124
42206917Smarius};
43206917Smarius
44206917Smariusstatic const uint32 int32P1[ int32NumP1 ] = {
45206917Smarius    0x00000000,
46206917Smarius    0x00000001,
47206917Smarius    0x00000002,
48206917Smarius    0x00000004,
49206917Smarius    0x00000008,
50206917Smarius    0x00000010,
51206917Smarius    0x00000020,
52206917Smarius    0x00000040,
53206917Smarius    0x00000080,
54206917Smarius    0x00000100,
55206917Smarius    0x00000200,
56206917Smarius    0x00000400,
57206917Smarius    0x00000800,
58206917Smarius    0x00001000,
59206917Smarius    0x00002000,
60206917Smarius    0x00004000,
61206917Smarius    0x00008000,
62206917Smarius    0x00010000,
63206917Smarius    0x00020000,
64206917Smarius    0x00040000,
65206917Smarius    0x00080000,
66206917Smarius    0x00100000,
67206917Smarius    0x00200000,
68206917Smarius    0x00400000,
69206917Smarius    0x00800000,
70206917Smarius    0x01000000,
71206917Smarius    0x02000000,
72206917Smarius    0x04000000,
73206917Smarius    0x08000000,
74206917Smarius    0x10000000,
75206917Smarius    0x20000000,
76206917Smarius    0x40000000,
77206917Smarius    0x80000000,
78206917Smarius    0xC0000000,
79206917Smarius    0xE0000000,
80206917Smarius    0xF0000000,
81206917Smarius    0xF8000000,
82206917Smarius    0xFC000000,
83206917Smarius    0xFE000000,
84206917Smarius    0xFF000000,
85206917Smarius    0xFF800000,
86206917Smarius    0xFFC00000,
87206917Smarius    0xFFE00000,
88206917Smarius    0xFFF00000,
89206917Smarius    0xFFF80000,
90206917Smarius    0xFFFC0000,
91206917Smarius    0xFFFE0000,
92206917Smarius    0xFFFF0000,
93206917Smarius    0xFFFF8000,
94206917Smarius    0xFFFFC000,
95206917Smarius    0xFFFFE000,
96206917Smarius    0xFFFFF000,
97206917Smarius    0xFFFFF800,
98206917Smarius    0xFFFFFC00,
99206917Smarius    0xFFFFFE00,
100206917Smarius    0xFFFFFF00,
101206917Smarius    0xFFFFFF80,
102206917Smarius    0xFFFFFFC0,
103206917Smarius    0xFFFFFFE0,
104206917Smarius    0xFFFFFFF0,
105206917Smarius    0xFFFFFFF8,
106206917Smarius    0xFFFFFFFC,
107206917Smarius    0xFFFFFFFE,
108206917Smarius    0xFFFFFFFF,
109206917Smarius    0xFFFFFFFD,
110206917Smarius    0xFFFFFFFB,
111206917Smarius    0xFFFFFFF7,
112206917Smarius    0xFFFFFFEF,
113206917Smarius    0xFFFFFFDF,
114206917Smarius    0xFFFFFFBF,
115206917Smarius    0xFFFFFF7F,
116206917Smarius    0xFFFFFEFF,
117206917Smarius    0xFFFFFDFF,
118206917Smarius    0xFFFFFBFF,
119206917Smarius    0xFFFFF7FF,
120206917Smarius    0xFFFFEFFF,
121206917Smarius    0xFFFFDFFF,
122206917Smarius    0xFFFFBFFF,
123206917Smarius    0xFFFF7FFF,
124206917Smarius    0xFFFEFFFF,
125206917Smarius    0xFFFDFFFF,
126206917Smarius    0xFFFBFFFF,
127206917Smarius    0xFFF7FFFF,
128206917Smarius    0xFFEFFFFF,
129206917Smarius    0xFFDFFFFF,
130206917Smarius    0xFFBFFFFF,
131206917Smarius    0xFF7FFFFF,
132206917Smarius    0xFEFFFFFF,
133206917Smarius    0xFDFFFFFF,
134206917Smarius    0xFBFFFFFF,
135206917Smarius    0xF7FFFFFF,
136206917Smarius    0xEFFFFFFF,
137206917Smarius    0xDFFFFFFF,
138206917Smarius    0xBFFFFFFF,
139206917Smarius    0x7FFFFFFF,
140206917Smarius    0x3FFFFFFF,
141206917Smarius    0x1FFFFFFF,
142206917Smarius    0x0FFFFFFF,
143206917Smarius    0x07FFFFFF,
144206917Smarius    0x03FFFFFF,
145206917Smarius    0x01FFFFFF,
146206917Smarius    0x00FFFFFF,
147206917Smarius    0x007FFFFF,
148206917Smarius    0x003FFFFF,
149206917Smarius    0x001FFFFF,
150206917Smarius    0x000FFFFF,
151206917Smarius    0x0007FFFF,
152206917Smarius    0x0003FFFF,
153206917Smarius    0x0001FFFF,
154206917Smarius    0x0000FFFF,
155206917Smarius    0x00007FFF,
156206917Smarius    0x00003FFF,
157206917Smarius    0x00001FFF,
158206917Smarius    0x00000FFF,
159206917Smarius    0x000007FF,
160206917Smarius    0x000003FF,
161206917Smarius    0x000001FF,
162206917Smarius    0x000000FF,
163206917Smarius    0x0000007F,
164206917Smarius    0x0000003F,
165206917Smarius    0x0000001F,
166206917Smarius    0x0000000F,
167206917Smarius    0x00000007,
168206917Smarius    0x00000003
169206917Smarius};
170206917Smarius
171206917Smariusstatic int32 int32NextP1( sequenceT *sequencePtr )
172206917Smarius{
173206917Smarius    uint8 termNum;
174206917Smarius    int32 z;
175206917Smarius
176206917Smarius    termNum = sequencePtr->term1Num;
177206917Smarius    z = int32P1[ termNum ];
178206917Smarius    ++termNum;
179206917Smarius    if ( int32NumP1 <= termNum ) {
180206917Smarius        termNum = 0;
181206917Smarius        sequencePtr->done = TRUE;
182206917Smarius    }
183206917Smarius    sequencePtr->term1Num = termNum;
184206917Smarius    return (sbits32) z;
185206917Smarius
186206917Smarius}
187206917Smarius
188206917Smariusstatic const int32 int32NumP2 = ( int32NumP1 * int32NumP1 + int32NumP1 ) / 2;
189206917Smarius
190206917Smariusstatic int32 int32NextP2( sequenceT *sequencePtr )
191206917Smarius{
192206917Smarius    uint8 term1Num, term2Num;
193206917Smarius    int32 z;
194206917Smarius
195206917Smarius    term2Num = sequencePtr->term2Num;
196206917Smarius    term1Num = sequencePtr->term1Num;
197206917Smarius    z = int32P1[ term1Num ] + int32P1[ term2Num ];
198206917Smarius    ++term2Num;
199206917Smarius    if ( int32NumP1 <= term2Num ) {
200206917Smarius        ++term1Num;
201206917Smarius        if ( int32NumP1 <= term1Num ) {
202206917Smarius            term1Num = 0;
203206917Smarius            sequencePtr->done = TRUE;
204206917Smarius        }
205206917Smarius        term2Num = term1Num;
206206917Smarius        sequencePtr->term1Num = term1Num;
207206917Smarius    }
208206917Smarius    sequencePtr->term2Num = term2Num;
209206917Smarius    return (sbits32) z;
210206917Smarius
211206917Smarius}
212206917Smarius
213206917Smariusstatic int32 int32RandomP3( void )
214206917Smarius{
215206917Smarius
216206917Smarius    return
217206917Smarius        (sbits32) (
218206917Smarius              int32P1[ randomUint8() % int32NumP1 ]
219206917Smarius            + int32P1[ randomUint8() % int32NumP1 ]
220206917Smarius            + int32P1[ randomUint8() % int32NumP1 ]
221206917Smarius        );
222206917Smarius
223206917Smarius}
224206917Smarius
225206917Smariusenum {
226206917Smarius    int32NumPInfWeightMasks = 29
227206917Smarius};
228206917Smarius
229206917Smariusstatic const uint32 int32PInfWeightMasks[ int32NumPInfWeightMasks ] = {
230206917Smarius    0xFFFFFFFF,
231206917Smarius    0x7FFFFFFF,
232206917Smarius    0x3FFFFFFF,
233206917Smarius    0x1FFFFFFF,
234206917Smarius    0x0FFFFFFF,
235206917Smarius    0x07FFFFFF,
236206917Smarius    0x03FFFFFF,
237206917Smarius    0x01FFFFFF,
238206917Smarius    0x00FFFFFF,
239206917Smarius    0x007FFFFF,
240206917Smarius    0x003FFFFF,
241206917Smarius    0x001FFFFF,
242206917Smarius    0x000FFFFF,
243206917Smarius    0x0007FFFF,
244206917Smarius    0x0003FFFF,
245206917Smarius    0x0001FFFF,
246206917Smarius    0x0000FFFF,
247206917Smarius    0x00007FFF,
248206917Smarius    0x00003FFF,
249206917Smarius    0x00001FFF,
250206917Smarius    0x00000FFF,
251206917Smarius    0x000007FF,
252206917Smarius    0x000003FF,
253206917Smarius    0x000001FF,
254206917Smarius    0x000000FF,
255206917Smarius    0x0000007F,
256206917Smarius    0x0000003F,
257206917Smarius    0x0000001F,
258206917Smarius    0x0000000F
259206917Smarius};
260206917Smarius
261206917Smariusstatic const uint32 int32PInfWeightOffsets[ int32NumPInfWeightMasks ] = {
262206917Smarius    0x00000000,
263206917Smarius    0xC0000000,
264206917Smarius    0xE0000000,
265206917Smarius    0xF0000000,
266206917Smarius    0xF8000000,
267206917Smarius    0xFC000000,
268206917Smarius    0xFE000000,
269206917Smarius    0xFF000000,
270206917Smarius    0xFF800000,
271206917Smarius    0xFFC00000,
272206917Smarius    0xFFE00000,
273206917Smarius    0xFFF00000,
274206917Smarius    0xFFF80000,
275206917Smarius    0xFFFC0000,
276206917Smarius    0xFFFE0000,
277206917Smarius    0xFFFF0000,
278206917Smarius    0xFFFF8000,
279206917Smarius    0xFFFFC000,
280206917Smarius    0xFFFFE000,
281206917Smarius    0xFFFFF000,
282206917Smarius    0xFFFFF800,
283206917Smarius    0xFFFFFC00,
284206917Smarius    0xFFFFFE00,
285206917Smarius    0xFFFFFF00,
286206917Smarius    0xFFFFFF80,
287206917Smarius    0xFFFFFFC0,
288206917Smarius    0xFFFFFFE0,
289206917Smarius    0xFFFFFFF0,
290206917Smarius    0xFFFFFFF8
291206917Smarius};
292206917Smarius
293206917Smariusstatic int32 int32RandomPInf( void )
294206917Smarius{
295206917Smarius    int8 weightMaskNum;
296206917Smarius
297206917Smarius    weightMaskNum = randomUint8() % int32NumPInfWeightMasks;
298206917Smarius    return
299206917Smarius        (sbits32) (
300206917Smarius              ( randomUint32() & int32PInfWeightMasks[ weightMaskNum ] )
301206917Smarius            + int32PInfWeightOffsets[ weightMaskNum ]
302206917Smarius        );
303206917Smarius
304206917Smarius}
305206917Smarius
306206917Smarius#ifdef BITS64
307206917Smarius
308206917Smariusenum {
309206917Smarius    int64NumP1 = 252
310206917Smarius};
311206917Smarius
312206917Smariusstatic const uint64 int64P1[ int64NumP1 ] = {
313206917Smarius    LIT64( 0x0000000000000000 ),
314206917Smarius    LIT64( 0x0000000000000001 ),
315206917Smarius    LIT64( 0x0000000000000002 ),
316206917Smarius    LIT64( 0x0000000000000004 ),
317206917Smarius    LIT64( 0x0000000000000008 ),
318206917Smarius    LIT64( 0x0000000000000010 ),
319206917Smarius    LIT64( 0x0000000000000020 ),
320206917Smarius    LIT64( 0x0000000000000040 ),
321206917Smarius    LIT64( 0x0000000000000080 ),
322206917Smarius    LIT64( 0x0000000000000100 ),
323206917Smarius    LIT64( 0x0000000000000200 ),
324206917Smarius    LIT64( 0x0000000000000400 ),
325206917Smarius    LIT64( 0x0000000000000800 ),
326206917Smarius    LIT64( 0x0000000000001000 ),
327206917Smarius    LIT64( 0x0000000000002000 ),
328206917Smarius    LIT64( 0x0000000000004000 ),
329206917Smarius    LIT64( 0x0000000000008000 ),
330206917Smarius    LIT64( 0x0000000000010000 ),
331206917Smarius    LIT64( 0x0000000000020000 ),
332206917Smarius    LIT64( 0x0000000000040000 ),
333206917Smarius    LIT64( 0x0000000000080000 ),
334206917Smarius    LIT64( 0x0000000000100000 ),
335206917Smarius    LIT64( 0x0000000000200000 ),
336206917Smarius    LIT64( 0x0000000000400000 ),
337206917Smarius    LIT64( 0x0000000000800000 ),
338206917Smarius    LIT64( 0x0000000001000000 ),
339206917Smarius    LIT64( 0x0000000002000000 ),
340206917Smarius    LIT64( 0x0000000004000000 ),
341206917Smarius    LIT64( 0x0000000008000000 ),
342206917Smarius    LIT64( 0x0000000010000000 ),
343206917Smarius    LIT64( 0x0000000020000000 ),
344206917Smarius    LIT64( 0x0000000040000000 ),
345206917Smarius    LIT64( 0x0000000080000000 ),
346206917Smarius    LIT64( 0x0000000100000000 ),
347206917Smarius    LIT64( 0x0000000200000000 ),
348206917Smarius    LIT64( 0x0000000400000000 ),
349206917Smarius    LIT64( 0x0000000800000000 ),
350206917Smarius    LIT64( 0x0000001000000000 ),
351206917Smarius    LIT64( 0x0000002000000000 ),
352206917Smarius    LIT64( 0x0000004000000000 ),
353206917Smarius    LIT64( 0x0000008000000000 ),
354206917Smarius    LIT64( 0x0000010000000000 ),
355206917Smarius    LIT64( 0x0000020000000000 ),
356206917Smarius    LIT64( 0x0000040000000000 ),
357206917Smarius    LIT64( 0x0000080000000000 ),
358206917Smarius    LIT64( 0x0000100000000000 ),
359206917Smarius    LIT64( 0x0000200000000000 ),
360206917Smarius    LIT64( 0x0000400000000000 ),
361206917Smarius    LIT64( 0x0000800000000000 ),
362206917Smarius    LIT64( 0x0001000000000000 ),
363206917Smarius    LIT64( 0x0002000000000000 ),
364206917Smarius    LIT64( 0x0004000000000000 ),
365206917Smarius    LIT64( 0x0008000000000000 ),
366206917Smarius    LIT64( 0x0010000000000000 ),
367206917Smarius    LIT64( 0x0020000000000000 ),
368206917Smarius    LIT64( 0x0040000000000000 ),
369206917Smarius    LIT64( 0x0080000000000000 ),
370206917Smarius    LIT64( 0x0100000000000000 ),
371206917Smarius    LIT64( 0x0200000000000000 ),
372206917Smarius    LIT64( 0x0400000000000000 ),
373206917Smarius    LIT64( 0x0800000000000000 ),
374206917Smarius    LIT64( 0x1000000000000000 ),
375206917Smarius    LIT64( 0x2000000000000000 ),
376206917Smarius    LIT64( 0x4000000000000000 ),
377206917Smarius    LIT64( 0x8000000000000000 ),
378206917Smarius    LIT64( 0xC000000000000000 ),
379206917Smarius    LIT64( 0xE000000000000000 ),
380206917Smarius    LIT64( 0xF000000000000000 ),
381206917Smarius    LIT64( 0xF800000000000000 ),
382206917Smarius    LIT64( 0xFC00000000000000 ),
383206917Smarius    LIT64( 0xFE00000000000000 ),
384206917Smarius    LIT64( 0xFF00000000000000 ),
385206917Smarius    LIT64( 0xFF80000000000000 ),
386206917Smarius    LIT64( 0xFFC0000000000000 ),
387206917Smarius    LIT64( 0xFFE0000000000000 ),
388206917Smarius    LIT64( 0xFFF0000000000000 ),
389206917Smarius    LIT64( 0xFFF8000000000000 ),
390206917Smarius    LIT64( 0xFFFC000000000000 ),
391206917Smarius    LIT64( 0xFFFE000000000000 ),
392206917Smarius    LIT64( 0xFFFF000000000000 ),
393206917Smarius    LIT64( 0xFFFF800000000000 ),
394206917Smarius    LIT64( 0xFFFFC00000000000 ),
395206917Smarius    LIT64( 0xFFFFE00000000000 ),
396206917Smarius    LIT64( 0xFFFFF00000000000 ),
397206917Smarius    LIT64( 0xFFFFF80000000000 ),
398206917Smarius    LIT64( 0xFFFFFC0000000000 ),
399206917Smarius    LIT64( 0xFFFFFE0000000000 ),
400206917Smarius    LIT64( 0xFFFFFF0000000000 ),
401206917Smarius    LIT64( 0xFFFFFF8000000000 ),
402206917Smarius    LIT64( 0xFFFFFFC000000000 ),
403206917Smarius    LIT64( 0xFFFFFFE000000000 ),
404206917Smarius    LIT64( 0xFFFFFFF000000000 ),
405206917Smarius    LIT64( 0xFFFFFFF800000000 ),
406206917Smarius    LIT64( 0xFFFFFFFC00000000 ),
407206917Smarius    LIT64( 0xFFFFFFFE00000000 ),
408206917Smarius    LIT64( 0xFFFFFFFF00000000 ),
409206917Smarius    LIT64( 0xFFFFFFFF80000000 ),
410206917Smarius    LIT64( 0xFFFFFFFFC0000000 ),
411206917Smarius    LIT64( 0xFFFFFFFFE0000000 ),
412206917Smarius    LIT64( 0xFFFFFFFFF0000000 ),
413206917Smarius    LIT64( 0xFFFFFFFFF8000000 ),
414206917Smarius    LIT64( 0xFFFFFFFFFC000000 ),
415206917Smarius    LIT64( 0xFFFFFFFFFE000000 ),
416206917Smarius    LIT64( 0xFFFFFFFFFF000000 ),
417206917Smarius    LIT64( 0xFFFFFFFFFF800000 ),
418206917Smarius    LIT64( 0xFFFFFFFFFFC00000 ),
419206917Smarius    LIT64( 0xFFFFFFFFFFE00000 ),
420206917Smarius    LIT64( 0xFFFFFFFFFFF00000 ),
421206917Smarius    LIT64( 0xFFFFFFFFFFF80000 ),
422206917Smarius    LIT64( 0xFFFFFFFFFFFC0000 ),
423206917Smarius    LIT64( 0xFFFFFFFFFFFE0000 ),
424206917Smarius    LIT64( 0xFFFFFFFFFFFF0000 ),
425206917Smarius    LIT64( 0xFFFFFFFFFFFF8000 ),
426206917Smarius    LIT64( 0xFFFFFFFFFFFFC000 ),
427206917Smarius    LIT64( 0xFFFFFFFFFFFFE000 ),
428206917Smarius    LIT64( 0xFFFFFFFFFFFFF000 ),
429206917Smarius    LIT64( 0xFFFFFFFFFFFFF800 ),
430206917Smarius    LIT64( 0xFFFFFFFFFFFFFC00 ),
431206917Smarius    LIT64( 0xFFFFFFFFFFFFFE00 ),
432206917Smarius    LIT64( 0xFFFFFFFFFFFFFF00 ),
433206917Smarius    LIT64( 0xFFFFFFFFFFFFFF80 ),
434206917Smarius    LIT64( 0xFFFFFFFFFFFFFFC0 ),
435206917Smarius    LIT64( 0xFFFFFFFFFFFFFFE0 ),
436206917Smarius    LIT64( 0xFFFFFFFFFFFFFFF0 ),
437206917Smarius    LIT64( 0xFFFFFFFFFFFFFFF8 ),
438206917Smarius    LIT64( 0xFFFFFFFFFFFFFFFC ),
439206917Smarius    LIT64( 0xFFFFFFFFFFFFFFFE ),
440206917Smarius    LIT64( 0xFFFFFFFFFFFFFFFF ),
441206917Smarius    LIT64( 0xFFFFFFFFFFFFFFFD ),
442206917Smarius    LIT64( 0xFFFFFFFFFFFFFFFB ),
443206917Smarius    LIT64( 0xFFFFFFFFFFFFFFF7 ),
444206917Smarius    LIT64( 0xFFFFFFFFFFFFFFEF ),
445206917Smarius    LIT64( 0xFFFFFFFFFFFFFFDF ),
446206917Smarius    LIT64( 0xFFFFFFFFFFFFFFBF ),
447206917Smarius    LIT64( 0xFFFFFFFFFFFFFF7F ),
448206917Smarius    LIT64( 0xFFFFFFFFFFFFFEFF ),
449206917Smarius    LIT64( 0xFFFFFFFFFFFFFDFF ),
450206917Smarius    LIT64( 0xFFFFFFFFFFFFFBFF ),
451206917Smarius    LIT64( 0xFFFFFFFFFFFFF7FF ),
452206917Smarius    LIT64( 0xFFFFFFFFFFFFEFFF ),
453206917Smarius    LIT64( 0xFFFFFFFFFFFFDFFF ),
454206917Smarius    LIT64( 0xFFFFFFFFFFFFBFFF ),
455206917Smarius    LIT64( 0xFFFFFFFFFFFF7FFF ),
456206917Smarius    LIT64( 0xFFFFFFFFFFFEFFFF ),
457206917Smarius    LIT64( 0xFFFFFFFFFFFDFFFF ),
458206917Smarius    LIT64( 0xFFFFFFFFFFFBFFFF ),
459206917Smarius    LIT64( 0xFFFFFFFFFFF7FFFF ),
460206917Smarius    LIT64( 0xFFFFFFFFFFEFFFFF ),
461206917Smarius    LIT64( 0xFFFFFFFFFFDFFFFF ),
462206917Smarius    LIT64( 0xFFFFFFFFFFBFFFFF ),
463206917Smarius    LIT64( 0xFFFFFFFFFF7FFFFF ),
464206917Smarius    LIT64( 0xFFFFFFFFFEFFFFFF ),
465206917Smarius    LIT64( 0xFFFFFFFFFDFFFFFF ),
466206917Smarius    LIT64( 0xFFFFFFFFFBFFFFFF ),
467206917Smarius    LIT64( 0xFFFFFFFFF7FFFFFF ),
468206917Smarius    LIT64( 0xFFFFFFFFEFFFFFFF ),
469206917Smarius    LIT64( 0xFFFFFFFFDFFFFFFF ),
470206917Smarius    LIT64( 0xFFFFFFFFBFFFFFFF ),
471206917Smarius    LIT64( 0xFFFFFFFF7FFFFFFF ),
472206917Smarius    LIT64( 0xFFFFFFFEFFFFFFFF ),
473206917Smarius    LIT64( 0xFFFFFFFDFFFFFFFF ),
474206917Smarius    LIT64( 0xFFFFFFFBFFFFFFFF ),
475206917Smarius    LIT64( 0xFFFFFFF7FFFFFFFF ),
476206917Smarius    LIT64( 0xFFFFFFEFFFFFFFFF ),
477206917Smarius    LIT64( 0xFFFFFFDFFFFFFFFF ),
478206917Smarius    LIT64( 0xFFFFFFBFFFFFFFFF ),
479206917Smarius    LIT64( 0xFFFFFF7FFFFFFFFF ),
480206917Smarius    LIT64( 0xFFFFFEFFFFFFFFFF ),
481206917Smarius    LIT64( 0xFFFFFDFFFFFFFFFF ),
482206917Smarius    LIT64( 0xFFFFFBFFFFFFFFFF ),
483206917Smarius    LIT64( 0xFFFFF7FFFFFFFFFF ),
484206917Smarius    LIT64( 0xFFFFEFFFFFFFFFFF ),
485206917Smarius    LIT64( 0xFFFFDFFFFFFFFFFF ),
486206917Smarius    LIT64( 0xFFFFBFFFFFFFFFFF ),
487206917Smarius    LIT64( 0xFFFF7FFFFFFFFFFF ),
488206917Smarius    LIT64( 0xFFFEFFFFFFFFFFFF ),
489206917Smarius    LIT64( 0xFFFDFFFFFFFFFFFF ),
490206917Smarius    LIT64( 0xFFFBFFFFFFFFFFFF ),
491206917Smarius    LIT64( 0xFFF7FFFFFFFFFFFF ),
492206917Smarius    LIT64( 0xFFEFFFFFFFFFFFFF ),
493206917Smarius    LIT64( 0xFFDFFFFFFFFFFFFF ),
494206917Smarius    LIT64( 0xFFBFFFFFFFFFFFFF ),
495206917Smarius    LIT64( 0xFF7FFFFFFFFFFFFF ),
496206917Smarius    LIT64( 0xFEFFFFFFFFFFFFFF ),
497206917Smarius    LIT64( 0xFDFFFFFFFFFFFFFF ),
498206917Smarius    LIT64( 0xFBFFFFFFFFFFFFFF ),
499206917Smarius    LIT64( 0xF7FFFFFFFFFFFFFF ),
500206917Smarius    LIT64( 0xEFFFFFFFFFFFFFFF ),
501206917Smarius    LIT64( 0xDFFFFFFFFFFFFFFF ),
502206917Smarius    LIT64( 0xBFFFFFFFFFFFFFFF ),
503206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFF ),
504206917Smarius    LIT64( 0x3FFFFFFFFFFFFFFF ),
505206917Smarius    LIT64( 0x1FFFFFFFFFFFFFFF ),
506206917Smarius    LIT64( 0x0FFFFFFFFFFFFFFF ),
507206917Smarius    LIT64( 0x07FFFFFFFFFFFFFF ),
508206917Smarius    LIT64( 0x03FFFFFFFFFFFFFF ),
509206917Smarius    LIT64( 0x01FFFFFFFFFFFFFF ),
510206917Smarius    LIT64( 0x00FFFFFFFFFFFFFF ),
511206917Smarius    LIT64( 0x007FFFFFFFFFFFFF ),
512206917Smarius    LIT64( 0x003FFFFFFFFFFFFF ),
513206917Smarius    LIT64( 0x001FFFFFFFFFFFFF ),
514206917Smarius    LIT64( 0x000FFFFFFFFFFFFF ),
515206917Smarius    LIT64( 0x0007FFFFFFFFFFFF ),
516206917Smarius    LIT64( 0x0003FFFFFFFFFFFF ),
517206917Smarius    LIT64( 0x0001FFFFFFFFFFFF ),
518206917Smarius    LIT64( 0x0000FFFFFFFFFFFF ),
519206917Smarius    LIT64( 0x00007FFFFFFFFFFF ),
520206917Smarius    LIT64( 0x00003FFFFFFFFFFF ),
521206917Smarius    LIT64( 0x00001FFFFFFFFFFF ),
522206917Smarius    LIT64( 0x00000FFFFFFFFFFF ),
523206917Smarius    LIT64( 0x000007FFFFFFFFFF ),
524206917Smarius    LIT64( 0x000003FFFFFFFFFF ),
525206917Smarius    LIT64( 0x000001FFFFFFFFFF ),
526206917Smarius    LIT64( 0x000000FFFFFFFFFF ),
527206917Smarius    LIT64( 0x0000007FFFFFFFFF ),
528206917Smarius    LIT64( 0x0000003FFFFFFFFF ),
529206917Smarius    LIT64( 0x0000001FFFFFFFFF ),
530206917Smarius    LIT64( 0x0000000FFFFFFFFF ),
531206917Smarius    LIT64( 0x00000007FFFFFFFF ),
532206917Smarius    LIT64( 0x00000003FFFFFFFF ),
533206917Smarius    LIT64( 0x00000001FFFFFFFF ),
534206917Smarius    LIT64( 0x00000000FFFFFFFF ),
535206917Smarius    LIT64( 0x000000007FFFFFFF ),
536206917Smarius    LIT64( 0x000000003FFFFFFF ),
537206917Smarius    LIT64( 0x000000001FFFFFFF ),
538206917Smarius    LIT64( 0x000000000FFFFFFF ),
539206917Smarius    LIT64( 0x0000000007FFFFFF ),
540206917Smarius    LIT64( 0x0000000003FFFFFF ),
541206917Smarius    LIT64( 0x0000000001FFFFFF ),
542206917Smarius    LIT64( 0x0000000000FFFFFF ),
543206917Smarius    LIT64( 0x00000000007FFFFF ),
544206917Smarius    LIT64( 0x00000000003FFFFF ),
545206917Smarius    LIT64( 0x00000000001FFFFF ),
546206917Smarius    LIT64( 0x00000000000FFFFF ),
547206917Smarius    LIT64( 0x000000000007FFFF ),
548206917Smarius    LIT64( 0x000000000003FFFF ),
549206917Smarius    LIT64( 0x000000000001FFFF ),
550206917Smarius    LIT64( 0x000000000000FFFF ),
551206917Smarius    LIT64( 0x0000000000007FFF ),
552206917Smarius    LIT64( 0x0000000000003FFF ),
553206917Smarius    LIT64( 0x0000000000001FFF ),
554206917Smarius    LIT64( 0x0000000000000FFF ),
555206917Smarius    LIT64( 0x00000000000007FF ),
556206917Smarius    LIT64( 0x00000000000003FF ),
557206917Smarius    LIT64( 0x00000000000001FF ),
558206917Smarius    LIT64( 0x00000000000000FF ),
559206917Smarius    LIT64( 0x000000000000007F ),
560206917Smarius    LIT64( 0x000000000000003F ),
561206917Smarius    LIT64( 0x000000000000001F ),
562206917Smarius    LIT64( 0x000000000000000F ),
563206917Smarius    LIT64( 0x0000000000000007 ),
564206917Smarius    LIT64( 0x0000000000000003 )
565206917Smarius};
566206917Smarius
567206917Smariusstatic int64 int64NextP1( sequenceT *sequencePtr )
568206917Smarius{
569206917Smarius    uint8 termNum;
570206917Smarius    int64 z;
571206917Smarius
572206917Smarius    termNum = sequencePtr->term1Num;
573206917Smarius    z = int64P1[ termNum ];
574206917Smarius    ++termNum;
575206917Smarius    if ( int64NumP1 <= termNum ) {
576206917Smarius        termNum = 0;
577206917Smarius        sequencePtr->done = TRUE;
578206917Smarius    }
579206917Smarius    sequencePtr->term1Num = termNum;
580206917Smarius    return (sbits64) z;
581206917Smarius
582206917Smarius}
583206917Smarius
584206917Smariusstatic const int64 int64NumP2 = ( int64NumP1 * int64NumP1 + int64NumP1 ) / 2;
585206917Smarius
586206917Smariusstatic int64 int64NextP2( sequenceT *sequencePtr )
587206917Smarius{
588206917Smarius    uint8 term1Num, term2Num;
589206917Smarius    int64 z;
590206917Smarius
591206917Smarius    term2Num = sequencePtr->term2Num;
592206917Smarius    term1Num = sequencePtr->term1Num;
593206917Smarius    z = int64P1[ term1Num ] + int64P1[ term2Num ];
594206917Smarius    ++term2Num;
595206917Smarius    if ( int64NumP1 <= term2Num ) {
596206917Smarius        ++term1Num;
597206917Smarius        if ( int64NumP1 <= term1Num ) {
598206917Smarius            term1Num = 0;
599206917Smarius            sequencePtr->done = TRUE;
600206917Smarius        }
601206917Smarius        term2Num = term1Num;
602206917Smarius        sequencePtr->term1Num = term1Num;
603206917Smarius    }
604206917Smarius    sequencePtr->term2Num = term2Num;
605206917Smarius    return (sbits64) z;
606206917Smarius
607206917Smarius}
608206917Smarius
609206917Smariusstatic int64 int64RandomP3( void )
610206917Smarius{
611206917Smarius
612206917Smarius    return
613206917Smarius        (sbits64) (
614206917Smarius              int64P1[ randomUint8() % int64NumP1 ]
615206917Smarius            + int64P1[ randomUint8() % int64NumP1 ]
616206917Smarius            + int64P1[ randomUint8() % int64NumP1 ]
617206917Smarius        );
618206917Smarius
619206917Smarius}
620206917Smarius
621206917Smariusenum {
622206917Smarius    int64NumPInfWeightMasks = 61
623206917Smarius};
624206917Smarius
625206917Smariusstatic const uint64 int64PInfWeightMasks[ int64NumPInfWeightMasks ] = {
626206917Smarius    LIT64( 0xFFFFFFFFFFFFFFFF ),
627206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFF ),
628206917Smarius    LIT64( 0x3FFFFFFFFFFFFFFF ),
629206917Smarius    LIT64( 0x1FFFFFFFFFFFFFFF ),
630206917Smarius    LIT64( 0x0FFFFFFFFFFFFFFF ),
631206917Smarius    LIT64( 0x07FFFFFFFFFFFFFF ),
632206917Smarius    LIT64( 0x03FFFFFFFFFFFFFF ),
633206917Smarius    LIT64( 0x01FFFFFFFFFFFFFF ),
634206917Smarius    LIT64( 0x00FFFFFFFFFFFFFF ),
635206917Smarius    LIT64( 0x007FFFFFFFFFFFFF ),
636206917Smarius    LIT64( 0x003FFFFFFFFFFFFF ),
637206917Smarius    LIT64( 0x001FFFFFFFFFFFFF ),
638206917Smarius    LIT64( 0x000FFFFFFFFFFFFF ),
639206917Smarius    LIT64( 0x0007FFFFFFFFFFFF ),
640206917Smarius    LIT64( 0x0003FFFFFFFFFFFF ),
641206917Smarius    LIT64( 0x0001FFFFFFFFFFFF ),
642206917Smarius    LIT64( 0x0000FFFFFFFFFFFF ),
643206917Smarius    LIT64( 0x00007FFFFFFFFFFF ),
644206917Smarius    LIT64( 0x00003FFFFFFFFFFF ),
645206917Smarius    LIT64( 0x00001FFFFFFFFFFF ),
646206917Smarius    LIT64( 0x00000FFFFFFFFFFF ),
647206917Smarius    LIT64( 0x000007FFFFFFFFFF ),
648206917Smarius    LIT64( 0x000003FFFFFFFFFF ),
649206917Smarius    LIT64( 0x000001FFFFFFFFFF ),
650206917Smarius    LIT64( 0x000000FFFFFFFFFF ),
651206917Smarius    LIT64( 0x0000007FFFFFFFFF ),
652206917Smarius    LIT64( 0x0000003FFFFFFFFF ),
653206917Smarius    LIT64( 0x0000001FFFFFFFFF ),
654206917Smarius    LIT64( 0x0000000FFFFFFFFF ),
655206917Smarius    LIT64( 0x00000007FFFFFFFF ),
656206917Smarius    LIT64( 0x00000003FFFFFFFF ),
657206917Smarius    LIT64( 0x00000001FFFFFFFF ),
658206917Smarius    LIT64( 0x00000000FFFFFFFF ),
659206917Smarius    LIT64( 0x000000007FFFFFFF ),
660206917Smarius    LIT64( 0x000000003FFFFFFF ),
661206917Smarius    LIT64( 0x000000001FFFFFFF ),
662206917Smarius    LIT64( 0x000000000FFFFFFF ),
663206917Smarius    LIT64( 0x0000000007FFFFFF ),
664206917Smarius    LIT64( 0x0000000003FFFFFF ),
665206917Smarius    LIT64( 0x0000000001FFFFFF ),
666206917Smarius    LIT64( 0x0000000000FFFFFF ),
667206917Smarius    LIT64( 0x00000000007FFFFF ),
668206917Smarius    LIT64( 0x00000000003FFFFF ),
669206917Smarius    LIT64( 0x00000000001FFFFF ),
670206917Smarius    LIT64( 0x00000000000FFFFF ),
671206917Smarius    LIT64( 0x000000000007FFFF ),
672206917Smarius    LIT64( 0x000000000003FFFF ),
673206917Smarius    LIT64( 0x000000000001FFFF ),
674206917Smarius    LIT64( 0x000000000000FFFF ),
675206917Smarius    LIT64( 0x0000000000007FFF ),
676206917Smarius    LIT64( 0x0000000000003FFF ),
677206917Smarius    LIT64( 0x0000000000001FFF ),
678206917Smarius    LIT64( 0x0000000000000FFF ),
679206917Smarius    LIT64( 0x00000000000007FF ),
680206917Smarius    LIT64( 0x00000000000003FF ),
681206917Smarius    LIT64( 0x00000000000001FF ),
682206917Smarius    LIT64( 0x00000000000000FF ),
683206917Smarius    LIT64( 0x000000000000007F ),
684206917Smarius    LIT64( 0x000000000000003F ),
685206917Smarius    LIT64( 0x000000000000001F ),
686206917Smarius    LIT64( 0x000000000000000F )
687206917Smarius};
688206917Smarius
689206917Smariusstatic const uint64 int64PInfWeightOffsets[ int64NumPInfWeightMasks ] = {
690206917Smarius    LIT64( 0x0000000000000000 ),
691206917Smarius    LIT64( 0xC000000000000000 ),
692206917Smarius    LIT64( 0xE000000000000000 ),
693206917Smarius    LIT64( 0xF000000000000000 ),
694206917Smarius    LIT64( 0xF800000000000000 ),
695206917Smarius    LIT64( 0xFC00000000000000 ),
696206917Smarius    LIT64( 0xFE00000000000000 ),
697206917Smarius    LIT64( 0xFF00000000000000 ),
698206917Smarius    LIT64( 0xFF80000000000000 ),
699206917Smarius    LIT64( 0xFFC0000000000000 ),
700206917Smarius    LIT64( 0xFFE0000000000000 ),
701206917Smarius    LIT64( 0xFFF0000000000000 ),
702206917Smarius    LIT64( 0xFFF8000000000000 ),
703206917Smarius    LIT64( 0xFFFC000000000000 ),
704206917Smarius    LIT64( 0xFFFE000000000000 ),
705206917Smarius    LIT64( 0xFFFF000000000000 ),
706206917Smarius    LIT64( 0xFFFF800000000000 ),
707206917Smarius    LIT64( 0xFFFFC00000000000 ),
708206917Smarius    LIT64( 0xFFFFE00000000000 ),
709206917Smarius    LIT64( 0xFFFFF00000000000 ),
710206917Smarius    LIT64( 0xFFFFF80000000000 ),
711206917Smarius    LIT64( 0xFFFFFC0000000000 ),
712206917Smarius    LIT64( 0xFFFFFE0000000000 ),
713206917Smarius    LIT64( 0xFFFFFF0000000000 ),
714206917Smarius    LIT64( 0xFFFFFF8000000000 ),
715206917Smarius    LIT64( 0xFFFFFFC000000000 ),
716206917Smarius    LIT64( 0xFFFFFFE000000000 ),
717206917Smarius    LIT64( 0xFFFFFFF000000000 ),
718206917Smarius    LIT64( 0xFFFFFFF800000000 ),
719206917Smarius    LIT64( 0xFFFFFFFC00000000 ),
720206917Smarius    LIT64( 0xFFFFFFFE00000000 ),
721206917Smarius    LIT64( 0xFFFFFFFF00000000 ),
722206917Smarius    LIT64( 0xFFFFFFFF80000000 ),
723206917Smarius    LIT64( 0xFFFFFFFFC0000000 ),
724206917Smarius    LIT64( 0xFFFFFFFFE0000000 ),
725206917Smarius    LIT64( 0xFFFFFFFFF0000000 ),
726206917Smarius    LIT64( 0xFFFFFFFFF8000000 ),
727206917Smarius    LIT64( 0xFFFFFFFFFC000000 ),
728206917Smarius    LIT64( 0xFFFFFFFFFE000000 ),
729206917Smarius    LIT64( 0xFFFFFFFFFF000000 ),
730206917Smarius    LIT64( 0xFFFFFFFFFF800000 ),
731206917Smarius    LIT64( 0xFFFFFFFFFFC00000 ),
732206917Smarius    LIT64( 0xFFFFFFFFFFE00000 ),
733206917Smarius    LIT64( 0xFFFFFFFFFFF00000 ),
734206917Smarius    LIT64( 0xFFFFFFFFFFF80000 ),
735206917Smarius    LIT64( 0xFFFFFFFFFFFC0000 ),
736206917Smarius    LIT64( 0xFFFFFFFFFFFE0000 ),
737206917Smarius    LIT64( 0xFFFFFFFFFFFF0000 ),
738206917Smarius    LIT64( 0xFFFFFFFFFFFF8000 ),
739206917Smarius    LIT64( 0xFFFFFFFFFFFFC000 ),
740206917Smarius    LIT64( 0xFFFFFFFFFFFFE000 ),
741206917Smarius    LIT64( 0xFFFFFFFFFFFFF000 ),
742206917Smarius    LIT64( 0xFFFFFFFFFFFFF800 ),
743206917Smarius    LIT64( 0xFFFFFFFFFFFFFC00 ),
744206917Smarius    LIT64( 0xFFFFFFFFFFFFFE00 ),
745206917Smarius    LIT64( 0xFFFFFFFFFFFFFF00 ),
746206917Smarius    LIT64( 0xFFFFFFFFFFFFFF80 ),
747206917Smarius    LIT64( 0xFFFFFFFFFFFFFFC0 ),
748206917Smarius    LIT64( 0xFFFFFFFFFFFFFFE0 ),
749206917Smarius    LIT64( 0xFFFFFFFFFFFFFFF0 ),
750206917Smarius    LIT64( 0xFFFFFFFFFFFFFFF8 )
751206917Smarius};
752206917Smarius
753206917Smariusstatic int64 int64RandomPInf( void )
754206917Smarius{
755206917Smarius    int8 weightMaskNum;
756206917Smarius
757206917Smarius    weightMaskNum = randomUint8() % int64NumPInfWeightMasks;
758206917Smarius    return
759206917Smarius        (sbits64) (
760206917Smarius              ( randomUint64() & int64PInfWeightMasks[ weightMaskNum ] )
761206917Smarius            + int64PInfWeightOffsets[ weightMaskNum ]
762206917Smarius        );
763206917Smarius
764206917Smarius}
765206917Smarius
766206917Smarius#endif
767206917Smarius
768206917Smariusenum {
769206917Smarius    float32NumQIn  = 22,
770206917Smarius    float32NumQOut = 50,
771206917Smarius    float32NumP1   =  4,
772206917Smarius    float32NumP2   = 88
773206917Smarius};
774206917Smarius
775206917Smariusstatic const uint32 float32QIn[ float32NumQIn ] = {
776206917Smarius    0x00000000,		/* positive, subnormal		*/
777206917Smarius    0x00800000,		/* positive, -126		*/
778206917Smarius    0x33800000,		/* positive,  -24		*/
779206917Smarius    0x3E800000,		/* positive,   -2		*/
780206917Smarius    0x3F000000,		/* positive,   -1		*/
781206917Smarius    0x3F800000,		/* positive,    0		*/
782206917Smarius    0x40000000,		/* positive,    1		*/
783206917Smarius    0x40800000,		/* positive,    2		*/
784206917Smarius    0x4B800000,		/* positive,   24		*/
785206917Smarius    0x7F000000,		/* positive,  127		*/
786206917Smarius    0x7F800000,		/* positive, infinity or NaN	*/
787206917Smarius    0x80000000,		/* negative, subnormal		*/
788206917Smarius    0x80800000,		/* negative, -126		*/
789206917Smarius    0xB3800000,		/* negative,  -24		*/
790206917Smarius    0xBE800000,		/* negative,   -2		*/
791206917Smarius    0xBF000000,		/* negative,   -1		*/
792206917Smarius    0xBF800000,		/* negative,    0		*/
793206917Smarius    0xC0000000,		/* negative,    1		*/
794206917Smarius    0xC0800000,		/* negative,    2		*/
795206917Smarius    0xCB800000,		/* negative,   24		*/
796206917Smarius    0xFE800000,		/* negative,  126		*/
797206917Smarius    0xFF800000		/* negative, infinity or NaN	*/
798206917Smarius};
799206917Smarius
800206917Smariusstatic const uint32 float32QOut[ float32NumQOut ] = {
801206917Smarius    0x00000000,		/* positive, subnormal		*/
802206917Smarius    0x00800000,		/* positive, -126		*/
803206917Smarius    0x01000000,		/* positive, -125		*/
804206917Smarius    0x33800000,		/* positive,  -24		*/
805206917Smarius    0x3D800000,		/* positive,   -4		*/
806206917Smarius    0x3E000000,		/* positive,   -3		*/
807206917Smarius    0x3E800000,		/* positive,   -2		*/
808206917Smarius    0x3F000000,		/* positive,   -1		*/
809206917Smarius    0x3F800000,		/* positive,    0		*/
810206917Smarius    0x40000000,		/* positive,    1		*/
811206917Smarius    0x40800000,		/* positive,    2		*/
812206917Smarius    0x41000000,		/* positive,    3		*/
813206917Smarius    0x41800000,		/* positive,    4		*/
814206917Smarius    0x4B800000,		/* positive,   24		*/
815206917Smarius    0x4E000000,		/* positive,   29		*/
816206917Smarius    0x4E800000,		/* positive,   30		*/
817206917Smarius    0x4F000000,		/* positive,   31		*/
818206917Smarius    0x4F800000,		/* positive,   32		*/
819206917Smarius    0x5E000000,		/* positive,   61		*/
820206917Smarius    0x5E800000,		/* positive,   62		*/
821206917Smarius    0x5F000000,		/* positive,   63		*/
822206917Smarius    0x5F800000,		/* positive,   64		*/
823206917Smarius    0x7E800000,		/* positive,  126		*/
824206917Smarius    0x7F000000,		/* positive,  127		*/
825206917Smarius    0x7F800000,		/* positive, infinity or NaN	*/
826206917Smarius    0x80000000,		/* negative, subnormal		*/
827206917Smarius    0x80800000,		/* negative, -126		*/
828206917Smarius    0x81000000,		/* negative, -125		*/
829206917Smarius    0xB3800000,		/* negative,  -24		*/
830206917Smarius    0xBD800000,		/* negative,   -4		*/
831206917Smarius    0xBE000000,		/* negative,   -3		*/
832206917Smarius    0xBE800000,		/* negative,   -2		*/
833206917Smarius    0xBF000000,		/* negative,   -1		*/
834206917Smarius    0xBF800000,		/* negative,    0		*/
835206917Smarius    0xC0000000,		/* negative,    1		*/
836206917Smarius    0xC0800000,		/* negative,    2		*/
837206917Smarius    0xC1000000,		/* negative,    3		*/
838206917Smarius    0xC1800000,		/* negative,    4		*/
839206917Smarius    0xCB800000,		/* negative,   24		*/
840206917Smarius    0xCE000000,		/* negative,   29		*/
841206917Smarius    0xCE800000,		/* negative,   30		*/
842206917Smarius    0xCF000000,		/* negative,   31		*/
843206917Smarius    0xCF800000,		/* negative,   32		*/
844206917Smarius    0xDE000000,		/* negative,   61		*/
845206917Smarius    0xDE800000,		/* negative,   62		*/
846206917Smarius    0xDF000000,		/* negative,   63		*/
847206917Smarius    0xDF800000,		/* negative,   64		*/
848206917Smarius    0xFE800000,		/* negative,  126		*/
849206917Smarius    0xFF000000,		/* negative,  127		*/
850206917Smarius    0xFF800000		/* negative, infinity or NaN	*/
851206917Smarius};
852206917Smarius
853206917Smariusstatic const uint32 float32P1[ float32NumP1 ] = {
854206917Smarius    0x00000000,
855206917Smarius    0x00000001,
856206917Smarius    0x007FFFFF,
857206917Smarius    0x007FFFFE
858206917Smarius};
859206917Smarius
860206917Smariusstatic const uint32 float32P2[ float32NumP2 ] = {
861206917Smarius    0x00000000,
862206917Smarius    0x00000001,
863206917Smarius    0x00000002,
864206917Smarius    0x00000004,
865206917Smarius    0x00000008,
866206917Smarius    0x00000010,
867206917Smarius    0x00000020,
868206917Smarius    0x00000040,
869206917Smarius    0x00000080,
870206917Smarius    0x00000100,
871206917Smarius    0x00000200,
872206917Smarius    0x00000400,
873206917Smarius    0x00000800,
874206917Smarius    0x00001000,
875206917Smarius    0x00002000,
876206917Smarius    0x00004000,
877206917Smarius    0x00008000,
878206917Smarius    0x00010000,
879206917Smarius    0x00020000,
880206917Smarius    0x00040000,
881206917Smarius    0x00080000,
882206917Smarius    0x00100000,
883206917Smarius    0x00200000,
884206917Smarius    0x00400000,
885206917Smarius    0x00600000,
886206917Smarius    0x00700000,
887206917Smarius    0x00780000,
888206917Smarius    0x007C0000,
889206917Smarius    0x007E0000,
890206917Smarius    0x007F0000,
891206917Smarius    0x007F8000,
892206917Smarius    0x007FC000,
893206917Smarius    0x007FE000,
894206917Smarius    0x007FF000,
895206917Smarius    0x007FF800,
896206917Smarius    0x007FFC00,
897206917Smarius    0x007FFE00,
898206917Smarius    0x007FFF00,
899206917Smarius    0x007FFF80,
900206917Smarius    0x007FFFC0,
901206917Smarius    0x007FFFE0,
902206917Smarius    0x007FFFF0,
903206917Smarius    0x007FFFF8,
904206917Smarius    0x007FFFFC,
905206917Smarius    0x007FFFFE,
906206917Smarius    0x007FFFFF,
907206917Smarius    0x007FFFFD,
908206917Smarius    0x007FFFFB,
909206917Smarius    0x007FFFF7,
910206917Smarius    0x007FFFEF,
911206917Smarius    0x007FFFDF,
912206917Smarius    0x007FFFBF,
913206917Smarius    0x007FFF7F,
914206917Smarius    0x007FFEFF,
915206917Smarius    0x007FFDFF,
916206917Smarius    0x007FFBFF,
917206917Smarius    0x007FF7FF,
918206917Smarius    0x007FEFFF,
919206917Smarius    0x007FDFFF,
920206917Smarius    0x007FBFFF,
921206917Smarius    0x007F7FFF,
922206917Smarius    0x007EFFFF,
923206917Smarius    0x007DFFFF,
924206917Smarius    0x007BFFFF,
925206917Smarius    0x0077FFFF,
926206917Smarius    0x006FFFFF,
927206917Smarius    0x005FFFFF,
928206917Smarius    0x003FFFFF,
929206917Smarius    0x001FFFFF,
930206917Smarius    0x000FFFFF,
931206917Smarius    0x0007FFFF,
932206917Smarius    0x0003FFFF,
933206917Smarius    0x0001FFFF,
934206917Smarius    0x0000FFFF,
935206917Smarius    0x00007FFF,
936206917Smarius    0x00003FFF,
937206917Smarius    0x00001FFF,
938206917Smarius    0x00000FFF,
939206917Smarius    0x000007FF,
940206917Smarius    0x000003FF,
941206917Smarius    0x000001FF,
942206917Smarius    0x000000FF,
943206917Smarius    0x0000007F,
944206917Smarius    0x0000003F,
945206917Smarius    0x0000001F,
946206917Smarius    0x0000000F,
947206917Smarius    0x00000007,
948206917Smarius    0x00000003
949206917Smarius};
950206917Smarius
951206917Smariusstatic const uint32 float32NumQInP1 = float32NumQIn * float32NumP1;
952206917Smariusstatic const uint32 float32NumQOutP1 = float32NumQOut * float32NumP1;
953206917Smarius
954206917Smariusstatic float32 float32NextQInP1( sequenceT *sequencePtr )
955206917Smarius{
956206917Smarius    uint8 expNum, sigNum;
957206917Smarius    float32 z;
958206917Smarius
959206917Smarius    sigNum = sequencePtr->term1Num;
960206917Smarius    expNum = sequencePtr->expNum;
961206917Smarius    z = float32QIn[ expNum ] | float32P1[ sigNum ];
962206917Smarius    ++sigNum;
963206917Smarius    if ( float32NumP1 <= sigNum ) {
964206917Smarius        sigNum = 0;
965206917Smarius        ++expNum;
966206917Smarius        if ( float32NumQIn <= expNum ) {
967206917Smarius            expNum = 0;
968206917Smarius            sequencePtr->done = TRUE;
969206917Smarius        }
970206917Smarius        sequencePtr->expNum = expNum;
971206917Smarius    }
972206917Smarius    sequencePtr->term1Num = sigNum;
973206917Smarius    return z;
974206917Smarius
975206917Smarius}
976206917Smarius
977206917Smariusstatic float32 float32NextQOutP1( sequenceT *sequencePtr )
978206917Smarius{
979206917Smarius    uint8 expNum, sigNum;
980206917Smarius    float32 z;
981206917Smarius
982206917Smarius    sigNum = sequencePtr->term1Num;
983206917Smarius    expNum = sequencePtr->expNum;
984206917Smarius    z = float32QOut[ expNum ] | float32P1[ sigNum ];
985206917Smarius    ++sigNum;
986206917Smarius    if ( float32NumP1 <= sigNum ) {
987206917Smarius        sigNum = 0;
988206917Smarius        ++expNum;
989206917Smarius        if ( float32NumQOut <= expNum ) {
990206917Smarius            expNum = 0;
991206917Smarius            sequencePtr->done = TRUE;
992206917Smarius        }
993206917Smarius        sequencePtr->expNum = expNum;
994206917Smarius    }
995206917Smarius    sequencePtr->term1Num = sigNum;
996206917Smarius    return z;
997206917Smarius
998206917Smarius}
999206917Smarius
1000206917Smariusstatic const uint32 float32NumQInP2 = float32NumQIn * float32NumP2;
1001206917Smariusstatic const uint32 float32NumQOutP2 = float32NumQOut * float32NumP2;
1002206917Smarius
1003206917Smariusstatic float32 float32NextQInP2( sequenceT *sequencePtr )
1004206917Smarius{
1005206917Smarius    uint8 expNum, sigNum;
1006206917Smarius    float32 z;
1007206917Smarius
1008206917Smarius    sigNum = sequencePtr->term1Num;
1009206917Smarius    expNum = sequencePtr->expNum;
1010206917Smarius    z = float32QIn[ expNum ] | float32P2[ sigNum ];
1011206917Smarius    ++sigNum;
1012206917Smarius    if ( float32NumP2 <= sigNum ) {
1013206917Smarius        sigNum = 0;
1014206917Smarius        ++expNum;
1015206917Smarius        if ( float32NumQIn <= expNum ) {
1016206917Smarius            expNum = 0;
1017206917Smarius            sequencePtr->done = TRUE;
1018206917Smarius        }
1019206917Smarius        sequencePtr->expNum = expNum;
1020206917Smarius    }
1021206917Smarius    sequencePtr->term1Num = sigNum;
1022206917Smarius    return z;
1023206917Smarius
1024206917Smarius}
1025206917Smarius
1026206917Smariusstatic float32 float32NextQOutP2( sequenceT *sequencePtr )
1027206917Smarius{
1028206917Smarius    uint8 expNum, sigNum;
1029206917Smarius    float32 z;
1030206917Smarius
1031206917Smarius    sigNum = sequencePtr->term1Num;
1032206917Smarius    expNum = sequencePtr->expNum;
1033206917Smarius    z = float32QOut[ expNum ] | float32P2[ sigNum ];
1034206917Smarius    ++sigNum;
1035206917Smarius    if ( float32NumP2 <= sigNum ) {
1036206917Smarius        sigNum = 0;
1037206917Smarius        ++expNum;
1038206917Smarius        if ( float32NumQOut <= expNum ) {
1039206917Smarius            expNum = 0;
1040206917Smarius            sequencePtr->done = TRUE;
1041206917Smarius        }
1042206917Smarius        sequencePtr->expNum = expNum;
1043206917Smarius    }
1044206917Smarius    sequencePtr->term1Num = sigNum;
1045206917Smarius    return z;
1046206917Smarius
1047206917Smarius}
1048206917Smarius
1049206917Smariusstatic float32 float32RandomQOutP3( void )
1050206917Smarius{
1051206917Smarius
1052206917Smarius    return
1053206917Smarius          float32QOut[ randomUint8() % float32NumQOut ]
1054206917Smarius        | (   (   float32P2[ randomUint8() % float32NumP2 ]
1055206917Smarius                + float32P2[ randomUint8() % float32NumP2 ] )
1056206917Smarius            & 0x007FFFFF );
1057206917Smarius
1058206917Smarius}
1059206917Smarius
1060206917Smariusstatic float32 float32RandomQOutPInf( void )
1061206917Smarius{
1062206917Smarius
1063206917Smarius    return
1064206917Smarius          float32QOut[ randomUint8() % float32NumQOut ]
1065206917Smarius        | ( randomUint32() & 0x007FFFFF );
1066206917Smarius
1067206917Smarius}
1068206917Smarius
1069206917Smariusenum {
1070206917Smarius    float32NumQInfWeightMasks = 7
1071206917Smarius};
1072206917Smarius
1073206917Smariusstatic const uint32 float32QInfWeightMasks[ float32NumQInfWeightMasks ] = {
1074206917Smarius    0x7F800000,
1075206917Smarius    0x7F800000,
1076206917Smarius    0x3F800000,
1077206917Smarius    0x1F800000,
1078206917Smarius    0x0F800000,
1079206917Smarius    0x07800000,
1080206917Smarius    0x03800000
1081206917Smarius};
1082206917Smarius
1083206917Smariusstatic const uint32 float32QInfWeightOffsets[ float32NumQInfWeightMasks ] = {
1084206917Smarius    0x00000000,
1085206917Smarius    0x00000000,
1086206917Smarius    0x20000000,
1087206917Smarius    0x30000000,
1088206917Smarius    0x38000000,
1089206917Smarius    0x3C000000,
1090206917Smarius    0x3E000000
1091206917Smarius};
1092206917Smarius
1093206917Smariusstatic float32 float32RandomQInfP3( void )
1094206917Smarius{
1095206917Smarius    int8 weightMaskNum;
1096206917Smarius
1097206917Smarius    weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
1098206917Smarius    return
1099206917Smarius          ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1100206917Smarius        | (   (   ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
1101206917Smarius                & float32QInfWeightMasks[ weightMaskNum ] )
1102206917Smarius            + float32QInfWeightOffsets[ weightMaskNum ]
1103206917Smarius          )
1104206917Smarius        | (   (   float32P2[ randomUint8() % float32NumP2 ]
1105206917Smarius                + float32P2[ randomUint8() % float32NumP2 ] )
1106206917Smarius            & 0x007FFFFF );
1107206917Smarius
1108206917Smarius}
1109206917Smarius
1110206917Smariusstatic float32 float32RandomQInfPInf( void )
1111206917Smarius{
1112206917Smarius    int8 weightMaskNum;
1113206917Smarius
1114206917Smarius    weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
1115206917Smarius    return
1116206917Smarius          ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1117206917Smarius        | (   (   ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
1118206917Smarius                & float32QInfWeightMasks[ weightMaskNum ] )
1119206917Smarius            + float32QInfWeightOffsets[ weightMaskNum ]
1120206917Smarius          )
1121206917Smarius        | ( randomUint32() & 0x007FFFFF );
1122206917Smarius
1123206917Smarius}
1124206917Smarius
1125206917Smariusstatic float32 float32Random( void )
1126206917Smarius{
1127206917Smarius
1128206917Smarius    switch ( randomUint8() & 7 ) {
1129206917Smarius     case 0:
1130206917Smarius     case 1:
1131206917Smarius     case 2:
1132206917Smarius        return float32RandomQOutP3();
1133206917Smarius     case 3:
1134206917Smarius        return float32RandomQOutPInf();
1135206917Smarius     case 4:
1136206917Smarius     case 5:
1137206917Smarius     case 6:
1138206917Smarius        return float32RandomQInfP3();
1139207151Smarius     default:
1140206917Smarius        return float32RandomQInfPInf();
1141206917Smarius    }
1142206917Smarius
1143206917Smarius}
1144206917Smarius
1145206917Smarius#ifdef BITS64
1146206917Smarius#define SETFLOAT64( z, zHigh, zLow ) z = ( ( (float64) zHigh )<<32 ) | zLow
1147206917Smarius#else
1148206917Smarius#define SETFLOAT64( z, zHigh, zLow ) z.low = zLow; z.high = zHigh
1149206917Smarius#endif
1150206917Smarius
1151206917Smariusenum {
1152206917Smarius    float64NumQIn  =  22,
1153206917Smarius    float64NumQOut =  64,
1154206917Smarius    float64NumP1   =   4,
1155206917Smarius    float64NumP2   = 204
1156206917Smarius};
1157206917Smarius
1158206917Smariusstatic const uint32 float64QIn[ float64NumQIn ] = {
1159206917Smarius    0x00000000,		/* positive, subnormal		*/
1160206917Smarius    0x00100000,		/* positive, -1022		*/
1161206917Smarius    0x3CA00000,		/* positive,   -53		*/
1162206917Smarius    0x3FD00000,		/* positive,    -2		*/
1163206917Smarius    0x3FE00000,		/* positive,    -1		*/
1164206917Smarius    0x3FF00000,		/* positive,     0		*/
1165206917Smarius    0x40000000,		/* positive,     1		*/
1166206917Smarius    0x40100000,		/* positive,     2		*/
1167206917Smarius    0x43400000,		/* positive,    53		*/
1168206917Smarius    0x7FE00000,		/* positive,  1023		*/
1169206917Smarius    0x7FF00000,		/* positive, infinity or NaN	*/
1170206917Smarius    0x80000000,		/* negative, subnormal		*/
1171206917Smarius    0x80100000,		/* negative, -1022		*/
1172206917Smarius    0xBCA00000,		/* negative,   -53		*/
1173206917Smarius    0xBFD00000,		/* negative,    -2		*/
1174206917Smarius    0xBFE00000,		/* negative,    -1		*/
1175206917Smarius    0xBFF00000,		/* negative,     0		*/
1176206917Smarius    0xC0000000,		/* negative,     1		*/
1177206917Smarius    0xC0100000,		/* negative,     2		*/
1178206917Smarius    0xC3400000,		/* negative,    53		*/
1179206917Smarius    0xFFE00000,		/* negative,  1023		*/
1180206917Smarius    0xFFF00000		/* negative, infinity or NaN	*/
1181206917Smarius};
1182206917Smarius
1183206917Smariusstatic const uint32 float64QOut[ float64NumQOut ] = {
1184206917Smarius    0x00000000,		/* positive, subnormal		*/
1185206917Smarius    0x00100000,		/* positive, -1022		*/
1186206917Smarius    0x00200000,		/* positive, -1021		*/
1187206917Smarius    0x37E00000,		/* positive,  -129		*/
1188206917Smarius    0x37F00000,		/* positive,  -128		*/
1189206917Smarius    0x38000000,		/* positive,  -127		*/
1190206917Smarius    0x38100000,		/* positive,  -126		*/
1191206917Smarius    0x3CA00000,		/* positive,   -53		*/
1192206917Smarius    0x3FB00000,		/* positive,    -4		*/
1193206917Smarius    0x3FC00000,		/* positive,    -3		*/
1194206917Smarius    0x3FD00000,		/* positive,    -2		*/
1195206917Smarius    0x3FE00000,		/* positive,    -1		*/
1196206917Smarius    0x3FF00000,		/* positive,     0		*/
1197206917Smarius    0x40000000,		/* positive,     1		*/
1198206917Smarius    0x40100000,		/* positive,     2		*/
1199206917Smarius    0x40200000,		/* positive,     3		*/
1200206917Smarius    0x40300000,		/* positive,     4		*/
1201206917Smarius    0x41C00000,		/* positive,    29		*/
1202206917Smarius    0x41D00000,		/* positive,    30		*/
1203206917Smarius    0x41E00000,		/* positive,    31		*/
1204206917Smarius    0x41F00000,		/* positive,    32		*/
1205206917Smarius    0x43400000,		/* positive,    53		*/
1206206917Smarius    0x43C00000,		/* positive,    61		*/
1207206917Smarius    0x43D00000,		/* positive,    62		*/
1208206917Smarius    0x43E00000,		/* positive,    63		*/
1209206917Smarius    0x43F00000,		/* positive,    64		*/
1210206917Smarius    0x47E00000,		/* positive,   127		*/
1211206917Smarius    0x47F00000,		/* positive,   128		*/
1212206917Smarius    0x48000000,		/* positive,   129		*/
1213206917Smarius    0x7FD00000,		/* positive,  1022		*/
1214206917Smarius    0x7FE00000,		/* positive,  1023		*/
1215206917Smarius    0x7FF00000,		/* positive, infinity or NaN	*/
1216206917Smarius    0x80000000,		/* negative, subnormal		*/
1217206917Smarius    0x80100000,		/* negative, -1022		*/
1218206917Smarius    0x80200000,		/* negative, -1021		*/
1219206917Smarius    0xB7E00000,		/* negative,  -129		*/
1220206917Smarius    0xB7F00000,		/* negative,  -128		*/
1221206917Smarius    0xB8000000,		/* negative,  -127		*/
1222206917Smarius    0xB8100000,		/* negative,  -126		*/
1223206917Smarius    0xBCA00000,		/* negative,   -53		*/
1224206917Smarius    0xBFB00000,		/* negative,    -4		*/
1225206917Smarius    0xBFC00000,		/* negative,    -3		*/
1226206917Smarius    0xBFD00000,		/* negative,    -2		*/
1227206917Smarius    0xBFE00000,		/* negative,    -1		*/
1228206917Smarius    0xBFF00000,		/* negative,     0		*/
1229206917Smarius    0xC0000000,		/* negative,     1		*/
1230206917Smarius    0xC0100000,		/* negative,     2		*/
1231206917Smarius    0xC0200000,		/* negative,     3		*/
1232206917Smarius    0xC0300000,		/* negative,     4		*/
1233206917Smarius    0xC1C00000,		/* negative,    29		*/
1234206917Smarius    0xC1D00000,		/* negative,    30		*/
1235206917Smarius    0xC1E00000,		/* negative,    31		*/
1236206917Smarius    0xC1F00000,		/* negative,    32		*/
1237206917Smarius    0xC3400000,		/* negative,    53		*/
1238206917Smarius    0xC3C00000,		/* negative,    61		*/
1239206917Smarius    0xC3D00000,		/* negative,    62		*/
1240206917Smarius    0xC3E00000,		/* negative,    63		*/
1241206917Smarius    0xC3F00000,		/* negative,    64		*/
1242206917Smarius    0xC7E00000,		/* negative,   127		*/
1243206917Smarius    0xC7F00000,		/* negative,   128		*/
1244206917Smarius    0xC8000000,		/* negative,   129		*/
1245206917Smarius    0xFFD00000,		/* negative,  1022		*/
1246206917Smarius    0xFFE00000,		/* negative,  1023		*/
1247206917Smarius    0xFFF00000		/* negative, infinity or NaN	*/
1248206917Smarius};
1249206917Smarius
1250206917Smariusstatic const struct { bits32 high, low; } float64P1[ float64NumP1 ] = {
1251206917Smarius    { 0x00000000, 0x00000000 },
1252206917Smarius    { 0x00000000, 0x00000001 },
1253206917Smarius    { 0x000FFFFF, 0xFFFFFFFF },
1254206917Smarius    { 0x000FFFFF, 0xFFFFFFFE }
1255206917Smarius};
1256206917Smarius
1257206917Smariusstatic const struct { bits32 high, low; } float64P2[ float64NumP2 ] = {
1258206917Smarius    { 0x00000000, 0x00000000 },
1259206917Smarius    { 0x00000000, 0x00000001 },
1260206917Smarius    { 0x00000000, 0x00000002 },
1261206917Smarius    { 0x00000000, 0x00000004 },
1262206917Smarius    { 0x00000000, 0x00000008 },
1263206917Smarius    { 0x00000000, 0x00000010 },
1264206917Smarius    { 0x00000000, 0x00000020 },
1265206917Smarius    { 0x00000000, 0x00000040 },
1266206917Smarius    { 0x00000000, 0x00000080 },
1267206917Smarius    { 0x00000000, 0x00000100 },
1268206917Smarius    { 0x00000000, 0x00000200 },
1269206917Smarius    { 0x00000000, 0x00000400 },
1270206917Smarius    { 0x00000000, 0x00000800 },
1271206917Smarius    { 0x00000000, 0x00001000 },
1272206917Smarius    { 0x00000000, 0x00002000 },
1273206917Smarius    { 0x00000000, 0x00004000 },
1274206917Smarius    { 0x00000000, 0x00008000 },
1275206917Smarius    { 0x00000000, 0x00010000 },
1276206917Smarius    { 0x00000000, 0x00020000 },
1277206917Smarius    { 0x00000000, 0x00040000 },
1278206917Smarius    { 0x00000000, 0x00080000 },
1279206917Smarius    { 0x00000000, 0x00100000 },
1280206917Smarius    { 0x00000000, 0x00200000 },
1281206917Smarius    { 0x00000000, 0x00400000 },
1282206917Smarius    { 0x00000000, 0x00800000 },
1283206917Smarius    { 0x00000000, 0x01000000 },
1284206917Smarius    { 0x00000000, 0x02000000 },
1285206917Smarius    { 0x00000000, 0x04000000 },
1286206917Smarius    { 0x00000000, 0x08000000 },
1287206917Smarius    { 0x00000000, 0x10000000 },
1288206917Smarius    { 0x00000000, 0x20000000 },
1289206917Smarius    { 0x00000000, 0x40000000 },
1290206917Smarius    { 0x00000000, 0x80000000 },
1291206917Smarius    { 0x00000001, 0x00000000 },
1292206917Smarius    { 0x00000002, 0x00000000 },
1293206917Smarius    { 0x00000004, 0x00000000 },
1294206917Smarius    { 0x00000008, 0x00000000 },
1295206917Smarius    { 0x00000010, 0x00000000 },
1296206917Smarius    { 0x00000020, 0x00000000 },
1297206917Smarius    { 0x00000040, 0x00000000 },
1298206917Smarius    { 0x00000080, 0x00000000 },
1299206917Smarius    { 0x00000100, 0x00000000 },
1300206917Smarius    { 0x00000200, 0x00000000 },
1301206917Smarius    { 0x00000400, 0x00000000 },
1302206917Smarius    { 0x00000800, 0x00000000 },
1303206917Smarius    { 0x00001000, 0x00000000 },
1304206917Smarius    { 0x00002000, 0x00000000 },
1305206917Smarius    { 0x00004000, 0x00000000 },
1306206917Smarius    { 0x00008000, 0x00000000 },
1307206917Smarius    { 0x00010000, 0x00000000 },
1308206917Smarius    { 0x00020000, 0x00000000 },
1309206917Smarius    { 0x00040000, 0x00000000 },
1310206917Smarius    { 0x00080000, 0x00000000 },
1311206917Smarius    { 0x000C0000, 0x00000000 },
1312206917Smarius    { 0x000E0000, 0x00000000 },
1313206917Smarius    { 0x000F0000, 0x00000000 },
1314206917Smarius    { 0x000F8000, 0x00000000 },
1315206917Smarius    { 0x000FC000, 0x00000000 },
1316206917Smarius    { 0x000FE000, 0x00000000 },
1317206917Smarius    { 0x000FF000, 0x00000000 },
1318206917Smarius    { 0x000FF800, 0x00000000 },
1319206917Smarius    { 0x000FFC00, 0x00000000 },
1320206917Smarius    { 0x000FFE00, 0x00000000 },
1321206917Smarius    { 0x000FFF00, 0x00000000 },
1322206917Smarius    { 0x000FFF80, 0x00000000 },
1323206917Smarius    { 0x000FFFC0, 0x00000000 },
1324206917Smarius    { 0x000FFFE0, 0x00000000 },
1325206917Smarius    { 0x000FFFF0, 0x00000000 },
1326206917Smarius    { 0x000FFFF8, 0x00000000 },
1327206917Smarius    { 0x000FFFFC, 0x00000000 },
1328206917Smarius    { 0x000FFFFE, 0x00000000 },
1329206917Smarius    { 0x000FFFFF, 0x00000000 },
1330206917Smarius    { 0x000FFFFF, 0x80000000 },
1331206917Smarius    { 0x000FFFFF, 0xC0000000 },
1332206917Smarius    { 0x000FFFFF, 0xE0000000 },
1333206917Smarius    { 0x000FFFFF, 0xF0000000 },
1334206917Smarius    { 0x000FFFFF, 0xF8000000 },
1335206917Smarius    { 0x000FFFFF, 0xFC000000 },
1336206917Smarius    { 0x000FFFFF, 0xFE000000 },
1337206917Smarius    { 0x000FFFFF, 0xFF000000 },
1338206917Smarius    { 0x000FFFFF, 0xFF800000 },
1339206917Smarius    { 0x000FFFFF, 0xFFC00000 },
1340206917Smarius    { 0x000FFFFF, 0xFFE00000 },
1341206917Smarius    { 0x000FFFFF, 0xFFF00000 },
1342206917Smarius    { 0x000FFFFF, 0xFFF80000 },
1343206917Smarius    { 0x000FFFFF, 0xFFFC0000 },
1344206917Smarius    { 0x000FFFFF, 0xFFFE0000 },
1345206917Smarius    { 0x000FFFFF, 0xFFFF0000 },
1346206917Smarius    { 0x000FFFFF, 0xFFFF8000 },
1347206917Smarius    { 0x000FFFFF, 0xFFFFC000 },
1348206917Smarius    { 0x000FFFFF, 0xFFFFE000 },
1349206917Smarius    { 0x000FFFFF, 0xFFFFF000 },
1350206917Smarius    { 0x000FFFFF, 0xFFFFF800 },
1351206917Smarius    { 0x000FFFFF, 0xFFFFFC00 },
1352206917Smarius    { 0x000FFFFF, 0xFFFFFE00 },
1353206917Smarius    { 0x000FFFFF, 0xFFFFFF00 },
1354206917Smarius    { 0x000FFFFF, 0xFFFFFF80 },
1355206917Smarius    { 0x000FFFFF, 0xFFFFFFC0 },
1356206917Smarius    { 0x000FFFFF, 0xFFFFFFE0 },
1357206917Smarius    { 0x000FFFFF, 0xFFFFFFF0 },
1358206917Smarius    { 0x000FFFFF, 0xFFFFFFF8 },
1359206917Smarius    { 0x000FFFFF, 0xFFFFFFFC },
1360206917Smarius    { 0x000FFFFF, 0xFFFFFFFE },
1361206917Smarius    { 0x000FFFFF, 0xFFFFFFFF },
1362206917Smarius    { 0x000FFFFF, 0xFFFFFFFD },
1363206917Smarius    { 0x000FFFFF, 0xFFFFFFFB },
1364206917Smarius    { 0x000FFFFF, 0xFFFFFFF7 },
1365206917Smarius    { 0x000FFFFF, 0xFFFFFFEF },
1366206917Smarius    { 0x000FFFFF, 0xFFFFFFDF },
1367206917Smarius    { 0x000FFFFF, 0xFFFFFFBF },
1368206917Smarius    { 0x000FFFFF, 0xFFFFFF7F },
1369206917Smarius    { 0x000FFFFF, 0xFFFFFEFF },
1370206917Smarius    { 0x000FFFFF, 0xFFFFFDFF },
1371206917Smarius    { 0x000FFFFF, 0xFFFFFBFF },
1372206917Smarius    { 0x000FFFFF, 0xFFFFF7FF },
1373206917Smarius    { 0x000FFFFF, 0xFFFFEFFF },
1374206917Smarius    { 0x000FFFFF, 0xFFFFDFFF },
1375206917Smarius    { 0x000FFFFF, 0xFFFFBFFF },
1376206917Smarius    { 0x000FFFFF, 0xFFFF7FFF },
1377206917Smarius    { 0x000FFFFF, 0xFFFEFFFF },
1378206917Smarius    { 0x000FFFFF, 0xFFFDFFFF },
1379206917Smarius    { 0x000FFFFF, 0xFFFBFFFF },
1380206917Smarius    { 0x000FFFFF, 0xFFF7FFFF },
1381206917Smarius    { 0x000FFFFF, 0xFFEFFFFF },
1382206917Smarius    { 0x000FFFFF, 0xFFDFFFFF },
1383206917Smarius    { 0x000FFFFF, 0xFFBFFFFF },
1384206917Smarius    { 0x000FFFFF, 0xFF7FFFFF },
1385206917Smarius    { 0x000FFFFF, 0xFEFFFFFF },
1386206917Smarius    { 0x000FFFFF, 0xFDFFFFFF },
1387206917Smarius    { 0x000FFFFF, 0xFBFFFFFF },
1388206917Smarius    { 0x000FFFFF, 0xF7FFFFFF },
1389206917Smarius    { 0x000FFFFF, 0xEFFFFFFF },
1390206917Smarius    { 0x000FFFFF, 0xDFFFFFFF },
1391206917Smarius    { 0x000FFFFF, 0xBFFFFFFF },
1392206917Smarius    { 0x000FFFFF, 0x7FFFFFFF },
1393206917Smarius    { 0x000FFFFE, 0xFFFFFFFF },
1394206917Smarius    { 0x000FFFFD, 0xFFFFFFFF },
1395206917Smarius    { 0x000FFFFB, 0xFFFFFFFF },
1396206917Smarius    { 0x000FFFF7, 0xFFFFFFFF },
1397206917Smarius    { 0x000FFFEF, 0xFFFFFFFF },
1398206917Smarius    { 0x000FFFDF, 0xFFFFFFFF },
1399206917Smarius    { 0x000FFFBF, 0xFFFFFFFF },
1400206917Smarius    { 0x000FFF7F, 0xFFFFFFFF },
1401206917Smarius    { 0x000FFEFF, 0xFFFFFFFF },
1402206917Smarius    { 0x000FFDFF, 0xFFFFFFFF },
1403206917Smarius    { 0x000FFBFF, 0xFFFFFFFF },
1404206917Smarius    { 0x000FF7FF, 0xFFFFFFFF },
1405206917Smarius    { 0x000FEFFF, 0xFFFFFFFF },
1406206917Smarius    { 0x000FDFFF, 0xFFFFFFFF },
1407206917Smarius    { 0x000FBFFF, 0xFFFFFFFF },
1408206917Smarius    { 0x000F7FFF, 0xFFFFFFFF },
1409206917Smarius    { 0x000EFFFF, 0xFFFFFFFF },
1410206917Smarius    { 0x000DFFFF, 0xFFFFFFFF },
1411206917Smarius    { 0x000BFFFF, 0xFFFFFFFF },
1412206917Smarius    { 0x0007FFFF, 0xFFFFFFFF },
1413206917Smarius    { 0x0003FFFF, 0xFFFFFFFF },
1414206917Smarius    { 0x0001FFFF, 0xFFFFFFFF },
1415206917Smarius    { 0x0000FFFF, 0xFFFFFFFF },
1416206917Smarius    { 0x00007FFF, 0xFFFFFFFF },
1417206917Smarius    { 0x00003FFF, 0xFFFFFFFF },
1418206917Smarius    { 0x00001FFF, 0xFFFFFFFF },
1419206917Smarius    { 0x00000FFF, 0xFFFFFFFF },
1420206917Smarius    { 0x000007FF, 0xFFFFFFFF },
1421206917Smarius    { 0x000003FF, 0xFFFFFFFF },
1422206917Smarius    { 0x000001FF, 0xFFFFFFFF },
1423206917Smarius    { 0x000000FF, 0xFFFFFFFF },
1424206917Smarius    { 0x0000007F, 0xFFFFFFFF },
1425206917Smarius    { 0x0000003F, 0xFFFFFFFF },
1426206917Smarius    { 0x0000001F, 0xFFFFFFFF },
1427206917Smarius    { 0x0000000F, 0xFFFFFFFF },
1428206917Smarius    { 0x00000007, 0xFFFFFFFF },
1429206917Smarius    { 0x00000003, 0xFFFFFFFF },
1430206917Smarius    { 0x00000001, 0xFFFFFFFF },
1431206917Smarius    { 0x00000000, 0xFFFFFFFF },
1432206917Smarius    { 0x00000000, 0x7FFFFFFF },
1433206917Smarius    { 0x00000000, 0x3FFFFFFF },
1434206917Smarius    { 0x00000000, 0x1FFFFFFF },
1435206917Smarius    { 0x00000000, 0x0FFFFFFF },
1436206917Smarius    { 0x00000000, 0x07FFFFFF },
1437206917Smarius    { 0x00000000, 0x03FFFFFF },
1438206917Smarius    { 0x00000000, 0x01FFFFFF },
1439206917Smarius    { 0x00000000, 0x00FFFFFF },
1440206917Smarius    { 0x00000000, 0x007FFFFF },
1441206917Smarius    { 0x00000000, 0x003FFFFF },
1442206917Smarius    { 0x00000000, 0x001FFFFF },
1443206917Smarius    { 0x00000000, 0x000FFFFF },
1444206917Smarius    { 0x00000000, 0x0007FFFF },
1445206917Smarius    { 0x00000000, 0x0003FFFF },
1446206917Smarius    { 0x00000000, 0x0001FFFF },
1447206917Smarius    { 0x00000000, 0x0000FFFF },
1448206917Smarius    { 0x00000000, 0x00007FFF },
1449206917Smarius    { 0x00000000, 0x00003FFF },
1450206917Smarius    { 0x00000000, 0x00001FFF },
1451206917Smarius    { 0x00000000, 0x00000FFF },
1452206917Smarius    { 0x00000000, 0x000007FF },
1453206917Smarius    { 0x00000000, 0x000003FF },
1454206917Smarius    { 0x00000000, 0x000001FF },
1455206917Smarius    { 0x00000000, 0x000000FF },
1456206917Smarius    { 0x00000000, 0x0000007F },
1457206917Smarius    { 0x00000000, 0x0000003F },
1458206917Smarius    { 0x00000000, 0x0000001F },
1459206917Smarius    { 0x00000000, 0x0000000F },
1460206917Smarius    { 0x00000000, 0x00000007 },
1461206917Smarius    { 0x00000000, 0x00000003 }
1462206917Smarius};
1463206917Smarius
1464206917Smariusstatic const uint32 float64NumQInP1 = float64NumQIn * float64NumP1;
1465206917Smariusstatic const uint32 float64NumQOutP1 = float64NumQOut * float64NumP1;
1466206917Smarius
1467206917Smariusstatic float64 float64NextQInP1( sequenceT *sequencePtr )
1468206917Smarius{
1469206917Smarius    uint8 expNum, sigNum;
1470206917Smarius    float64 z;
1471206917Smarius
1472206917Smarius    sigNum = sequencePtr->term1Num;
1473206917Smarius    expNum = sequencePtr->expNum;
1474206917Smarius    SETFLOAT64(
1475206917Smarius        z,
1476206917Smarius        float64QIn[ expNum ] | float64P1[ sigNum ].high,
1477206917Smarius        float64P1[ sigNum ].low
1478206917Smarius    );
1479206917Smarius    ++sigNum;
1480206917Smarius    if ( float64NumP1 <= sigNum ) {
1481206917Smarius        sigNum = 0;
1482206917Smarius        ++expNum;
1483206917Smarius        if ( float64NumQIn <= expNum ) {
1484206917Smarius            expNum = 0;
1485206917Smarius            sequencePtr->done = TRUE;
1486206917Smarius        }
1487206917Smarius        sequencePtr->expNum = expNum;
1488206917Smarius    }
1489206917Smarius    sequencePtr->term1Num = sigNum;
1490206917Smarius    return z;
1491206917Smarius
1492206917Smarius}
1493206917Smarius
1494206917Smariusstatic float64 float64NextQOutP1( sequenceT *sequencePtr )
1495206917Smarius{
1496206917Smarius    uint8 expNum, sigNum;
1497206917Smarius    float64 z;
1498206917Smarius
1499206917Smarius    sigNum = sequencePtr->term1Num;
1500206917Smarius    expNum = sequencePtr->expNum;
1501206917Smarius    SETFLOAT64(
1502206917Smarius        z,
1503206917Smarius        float64QOut[ expNum ] | float64P1[ sigNum ].high,
1504206917Smarius        float64P1[ sigNum ].low
1505206917Smarius    );
1506206917Smarius    ++sigNum;
1507206917Smarius    if ( float64NumP1 <= sigNum ) {
1508206917Smarius        sigNum = 0;
1509206917Smarius        ++expNum;
1510206917Smarius        if ( float64NumQOut <= expNum ) {
1511206917Smarius            expNum = 0;
1512206917Smarius            sequencePtr->done = TRUE;
1513206917Smarius        }
1514206917Smarius        sequencePtr->expNum = expNum;
1515206917Smarius    }
1516206917Smarius    sequencePtr->term1Num = sigNum;
1517206917Smarius    return z;
1518206917Smarius
1519206917Smarius}
1520206917Smarius
1521206917Smariusstatic const uint32 float64NumQInP2 = float64NumQIn * float64NumP2;
1522206917Smariusstatic const uint32 float64NumQOutP2 = float64NumQOut * float64NumP2;
1523206917Smarius
1524206917Smariusstatic float64 float64NextQInP2( sequenceT *sequencePtr )
1525206917Smarius{
1526206917Smarius    uint8 expNum, sigNum;
1527206917Smarius    float64 z;
1528206917Smarius
1529206917Smarius    sigNum = sequencePtr->term1Num;
1530206917Smarius    expNum = sequencePtr->expNum;
1531206917Smarius    SETFLOAT64(
1532206917Smarius        z,
1533206917Smarius        float64QIn[ expNum ] | float64P2[ sigNum ].high,
1534206917Smarius        float64P2[ sigNum ].low
1535206917Smarius    );
1536206917Smarius    ++sigNum;
1537206917Smarius    if ( float64NumP2 <= sigNum ) {
1538206917Smarius        sigNum = 0;
1539206917Smarius        ++expNum;
1540206917Smarius        if ( float64NumQIn <= expNum ) {
1541206917Smarius            expNum = 0;
1542206917Smarius            sequencePtr->done = TRUE;
1543206917Smarius        }
1544206917Smarius        sequencePtr->expNum = expNum;
1545206917Smarius    }
1546206917Smarius    sequencePtr->term1Num = sigNum;
1547206917Smarius    return z;
1548206917Smarius
1549206917Smarius}
1550206917Smarius
1551206917Smariusstatic float64 float64NextQOutP2( sequenceT *sequencePtr )
1552206917Smarius{
1553206917Smarius    uint8 expNum, sigNum;
1554206917Smarius    float64 z;
1555206917Smarius
1556206917Smarius    sigNum = sequencePtr->term1Num;
1557206917Smarius    expNum = sequencePtr->expNum;
1558206917Smarius    SETFLOAT64(
1559206917Smarius        z,
1560206917Smarius        float64QOut[ expNum ] | float64P2[ sigNum ].high,
1561206917Smarius        float64P2[ sigNum ].low
1562206917Smarius    );
1563206917Smarius    ++sigNum;
1564206917Smarius    if ( float64NumP2 <= sigNum ) {
1565206917Smarius        sigNum = 0;
1566206917Smarius        ++expNum;
1567206917Smarius        if ( float64NumQOut <= expNum ) {
1568206917Smarius            expNum = 0;
1569206917Smarius            sequencePtr->done = TRUE;
1570206917Smarius        }
1571206917Smarius        sequencePtr->expNum = expNum;
1572206917Smarius    }
1573206917Smarius    sequencePtr->term1Num = sigNum;
1574206917Smarius    return z;
1575206917Smarius
1576206917Smarius}
1577206917Smarius
1578206917Smariusstatic float64 float64RandomQOutP3( void )
1579206917Smarius{
1580206917Smarius    int8 sigNum1, sigNum2;
1581206917Smarius    uint32 sig1Low, sig2Low, zLow;
1582206917Smarius    float64 z;
1583206917Smarius
1584206917Smarius    sigNum1 = randomUint8() % float64NumP2;
1585206917Smarius    sigNum2 = randomUint8() % float64NumP2;
1586206917Smarius    sig1Low = float64P2[ sigNum1 ].low;
1587206917Smarius    sig2Low = float64P2[ sigNum2 ].low;
1588206917Smarius    zLow = sig1Low + sig2Low;
1589206917Smarius    SETFLOAT64(
1590206917Smarius        z,
1591206917Smarius          float64QOut[ randomUint8() % float64NumQOut ]
1592206917Smarius        | (   (   float64P2[ sigNum1 ].high
1593206917Smarius                + float64P2[ sigNum2 ].high
1594206917Smarius                + ( zLow < sig1Low )
1595206917Smarius              )
1596206917Smarius            & 0x000FFFFF
1597206917Smarius          ),
1598206917Smarius        zLow
1599206917Smarius    );
1600206917Smarius    return z;
1601206917Smarius
1602206917Smarius}
1603206917Smarius
1604206917Smariusstatic float64 float64RandomQOutPInf( void )
1605206917Smarius{
1606206917Smarius    float64 z;
1607206917Smarius
1608206917Smarius    SETFLOAT64(
1609206917Smarius        z,
1610206917Smarius          float64QOut[ randomUint8() % float64NumQOut ]
1611206917Smarius        | ( randomUint32() & 0x000FFFFF ),
1612206917Smarius        randomUint32()
1613206917Smarius    );
1614206917Smarius    return z;
1615206917Smarius
1616206917Smarius}
1617206917Smarius
1618206917Smariusenum {
1619206917Smarius    float64NumQInfWeightMasks = 10
1620206917Smarius};
1621206917Smarius
1622206917Smariusstatic const uint32 float64QInfWeightMasks[ float64NumQInfWeightMasks ] = {
1623206917Smarius    0x7FF00000,
1624206917Smarius    0x7FF00000,
1625206917Smarius    0x3FF00000,
1626206917Smarius    0x1FF00000,
1627206917Smarius    0x0FF00000,
1628206917Smarius    0x07F00000,
1629206917Smarius    0x03F00000,
1630206917Smarius    0x01F00000,
1631206917Smarius    0x00F00000,
1632206917Smarius    0x00700000
1633206917Smarius};
1634206917Smarius
1635206917Smariusstatic const uint32 float64QInfWeightOffsets[ float64NumQInfWeightMasks ] = {
1636206917Smarius    0x00000000,
1637206917Smarius    0x00000000,
1638206917Smarius    0x20000000,
1639206917Smarius    0x30000000,
1640206917Smarius    0x38000000,
1641206917Smarius    0x3C000000,
1642206917Smarius    0x3E000000,
1643206917Smarius    0x3F000000,
1644206917Smarius    0x3F800000,
1645206917Smarius    0x3FC00000
1646206917Smarius};
1647206917Smarius
1648206917Smariusstatic float64 float64RandomQInfP3( void )
1649206917Smarius{
1650206917Smarius    int8 sigNum1, sigNum2;
1651206917Smarius    uint32 sig1Low, sig2Low, zLow;
1652206917Smarius    int8 weightMaskNum;
1653206917Smarius    float64 z;
1654206917Smarius
1655206917Smarius    sigNum1 = randomUint8() % float64NumP2;
1656206917Smarius    sigNum2 = randomUint8() % float64NumP2;
1657206917Smarius    sig1Low = float64P2[ sigNum1 ].low;
1658206917Smarius    sig2Low = float64P2[ sigNum2 ].low;
1659206917Smarius    zLow = sig1Low + sig2Low;
1660206917Smarius    weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
1661206917Smarius    SETFLOAT64(
1662206917Smarius        z,
1663206917Smarius          ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1664206917Smarius        | (   (   ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
1665206917Smarius                & float64QInfWeightMasks[ weightMaskNum ] )
1666206917Smarius            + float64QInfWeightOffsets[ weightMaskNum ]
1667206917Smarius          )
1668206917Smarius        | (   (   float64P2[ sigNum1 ].high
1669206917Smarius                + float64P2[ sigNum2 ].high
1670206917Smarius                + ( zLow < sig1Low )
1671206917Smarius              )
1672206917Smarius            & 0x000FFFFF
1673206917Smarius          ),
1674206917Smarius        zLow
1675206917Smarius    );
1676206917Smarius    return z;
1677206917Smarius
1678206917Smarius}
1679206917Smarius
1680206917Smariusstatic float64 float64RandomQInfPInf( void )
1681206917Smarius{
1682206917Smarius    int8 weightMaskNum;
1683206917Smarius    float64 z;
1684206917Smarius
1685206917Smarius    weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
1686206917Smarius    SETFLOAT64(
1687206917Smarius        z,
1688206917Smarius          ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1689206917Smarius        | (   (   ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
1690206917Smarius                & float64QInfWeightMasks[ weightMaskNum ] )
1691206917Smarius            + float64QInfWeightOffsets[ weightMaskNum ]
1692206917Smarius          )
1693206917Smarius        | ( randomUint32() & 0x000FFFFF ),
1694206917Smarius        randomUint32()
1695206917Smarius    );
1696206917Smarius    return z;
1697206917Smarius
1698206917Smarius}
1699206917Smarius
1700206917Smariusstatic float64 float64Random( void )
1701206917Smarius{
1702206917Smarius
1703206917Smarius    switch ( randomUint8() & 7 ) {
1704206917Smarius     case 0:
1705206917Smarius     case 1:
1706206917Smarius     case 2:
1707206917Smarius        return float64RandomQOutP3();
1708206917Smarius     case 3:
1709206917Smarius        return float64RandomQOutPInf();
1710206917Smarius     case 4:
1711206917Smarius     case 5:
1712206917Smarius     case 6:
1713206917Smarius        return float64RandomQInfP3();
1714207151Smarius     default:
1715206917Smarius        return float64RandomQInfPInf();
1716206917Smarius    }
1717206917Smarius
1718206917Smarius}
1719206917Smarius
1720206917Smarius#ifdef FLOATX80
1721206917Smarius
1722206917Smariusenum {
1723206917Smarius    floatx80NumQIn  =  22,
1724206917Smarius    floatx80NumQOut =  76,
1725206917Smarius    floatx80NumP1   =   4,
1726206917Smarius    floatx80NumP2   = 248
1727206917Smarius};
1728206917Smarius
1729206917Smariusstatic const uint16 floatx80QIn[ floatx80NumQIn ] = {
1730206917Smarius    0x0000,		/* positive, subnormal		*/
1731206917Smarius    0x0001,		/* positive, -16382		*/
1732206917Smarius    0x3FBF,		/* positive,    -64		*/
1733206917Smarius    0x3FFD,		/* positive,     -2		*/
1734206917Smarius    0x3FFE,		/* positive,     -1		*/
1735206917Smarius    0x3FFF,		/* positive,      0		*/
1736206917Smarius    0x4000,		/* positive,      1		*/
1737206917Smarius    0x4001,		/* positive,      2		*/
1738206917Smarius    0x403F,		/* positive,     64		*/
1739206917Smarius    0x7FFE,		/* positive,  16383		*/
1740206917Smarius    0x7FFF,		/* positive, infinity or NaN	*/
1741206917Smarius    0x8000,		/* negative, subnormal		*/
1742206917Smarius    0x8001,		/* negative, -16382		*/
1743206917Smarius    0xBFBF,		/* negative,    -64		*/
1744206917Smarius    0xBFFD,		/* negative,     -2		*/
1745206917Smarius    0xBFFE,		/* negative,     -1		*/
1746206917Smarius    0xBFFF,		/* negative,      0		*/
1747206917Smarius    0xC000,		/* negative,      1		*/
1748206917Smarius    0xC001,		/* negative,      2		*/
1749206917Smarius    0xC03F,		/* negative,     64		*/
1750206917Smarius    0xFFFE,		/* negative,  16383		*/
1751206917Smarius    0xFFFF		/* negative, infinity or NaN	*/
1752206917Smarius};
1753206917Smarius
1754206917Smariusstatic const uint16 floatx80QOut[ floatx80NumQOut ] = {
1755206917Smarius    0x0000,		/* positive, subnormal		*/
1756206917Smarius    0x0001,		/* positive, -16382		*/
1757206917Smarius    0x0002,		/* positive, -16381		*/
1758206917Smarius    0x3BFE,		/* positive,  -1025		*/
1759206917Smarius    0x3BFF,		/* positive,  -1024		*/
1760206917Smarius    0x3C00,		/* positive,  -1023		*/
1761206917Smarius    0x3C01,		/* positive,  -1022		*/
1762206917Smarius    0x3F7E,		/* positive,   -129		*/
1763206917Smarius    0x3F7F,		/* positive,   -128		*/
1764206917Smarius    0x3F80,		/* positive,   -127		*/
1765206917Smarius    0x3F81,		/* positive,   -126		*/
1766206917Smarius    0x3FBF,		/* positive,    -64		*/
1767206917Smarius    0x3FFB,		/* positive,     -4		*/
1768206917Smarius    0x3FFC,		/* positive,     -3		*/
1769206917Smarius    0x3FFD,		/* positive,     -2		*/
1770206917Smarius    0x3FFE,		/* positive,     -1		*/
1771206917Smarius    0x3FFF,		/* positive,      0		*/
1772206917Smarius    0x4000,		/* positive,      1		*/
1773206917Smarius    0x4001,		/* positive,      2		*/
1774206917Smarius    0x4002,		/* positive,      3		*/
1775206917Smarius    0x4003,		/* positive,      4		*/
1776206917Smarius    0x401C,		/* positive,     29		*/
1777206917Smarius    0x401D,		/* positive,     30		*/
1778206917Smarius    0x401E,		/* positive,     31		*/
1779206917Smarius    0x401F,		/* positive,     32		*/
1780206917Smarius    0x403C,		/* positive,     61		*/
1781206917Smarius    0x403D,		/* positive,     62		*/
1782206917Smarius    0x403E,		/* positive,     63		*/
1783206917Smarius    0x403F,		/* positive,     64		*/
1784206917Smarius    0x407E,		/* positive,    127		*/
1785206917Smarius    0x407F,		/* positive,    128		*/
1786206917Smarius    0x4080,		/* positive,    129		*/
1787206917Smarius    0x43FE,		/* positive,   1023		*/
1788206917Smarius    0x43FF,		/* positive,   1024		*/
1789206917Smarius    0x4400,		/* positive,   1025		*/
1790206917Smarius    0x7FFD,		/* positive,  16382		*/
1791206917Smarius    0x7FFE,		/* positive,  16383		*/
1792206917Smarius    0x7FFF,		/* positive, infinity or NaN	*/
1793206917Smarius    0x8000,		/* negative, subnormal		*/
1794206917Smarius    0x8001,		/* negative, -16382		*/
1795206917Smarius    0x8002,		/* negative, -16381		*/
1796206917Smarius    0xBBFE,		/* negative,  -1025		*/
1797206917Smarius    0xBBFF,		/* negative,  -1024		*/
1798206917Smarius    0xBC00,		/* negative,  -1023		*/
1799206917Smarius    0xBC01,		/* negative,  -1022		*/
1800206917Smarius    0xBF7E,		/* negative,   -129		*/
1801206917Smarius    0xBF7F,		/* negative,   -128		*/
1802206917Smarius    0xBF80,		/* negative,   -127		*/
1803206917Smarius    0xBF81,		/* negative,   -126		*/
1804206917Smarius    0xBFBF,		/* negative,    -64		*/
1805206917Smarius    0xBFFB,		/* negative,     -4		*/
1806206917Smarius    0xBFFC,		/* negative,     -3		*/
1807206917Smarius    0xBFFD,		/* negative,     -2		*/
1808206917Smarius    0xBFFE,		/* negative,     -1		*/
1809206917Smarius    0xBFFF,		/* negative,      0		*/
1810206917Smarius    0xC000,		/* negative,      1		*/
1811206917Smarius    0xC001,		/* negative,      2		*/
1812206917Smarius    0xC002,		/* negative,      3		*/
1813206917Smarius    0xC003,		/* negative,      4		*/
1814206917Smarius    0xC01C,		/* negative,     29		*/
1815206917Smarius    0xC01D,		/* negative,     30		*/
1816206917Smarius    0xC01E,		/* negative,     31		*/
1817206917Smarius    0xC01F,		/* negative,     32		*/
1818206917Smarius    0xC03C,		/* negative,     61		*/
1819206917Smarius    0xC03D,		/* negative,     62		*/
1820206917Smarius    0xC03E,		/* negative,     63		*/
1821206917Smarius    0xC03F,		/* negative,     64		*/
1822206917Smarius    0xC07E,		/* negative,    127		*/
1823206917Smarius    0xC07F,		/* negative,    128		*/
1824206917Smarius    0xC080,		/* negative,    129		*/
1825206917Smarius    0xC3FE,		/* negative,   1023		*/
1826206917Smarius    0xC3FF,		/* negative,   1024		*/
1827206917Smarius    0xC400,		/* negative,   1025		*/
1828206917Smarius    0xFFFD,		/* negative,  16382		*/
1829206917Smarius    0xFFFE,		/* negative,  16383		*/
1830206917Smarius    0xFFFF		/* negative, infinity or NaN	*/
1831206917Smarius};
1832206917Smarius
1833206917Smariusstatic const bits64 floatx80P1[ floatx80NumP1 ] = {
1834206917Smarius    LIT64( 0x0000000000000000 ),
1835206917Smarius    LIT64( 0x0000000000000001 ),
1836206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFF ),
1837206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFE )
1838206917Smarius};
1839206917Smarius
1840206917Smariusstatic const bits64 floatx80P2[ floatx80NumP2 ] = {
1841206917Smarius    LIT64( 0x0000000000000000 ),
1842206917Smarius    LIT64( 0x0000000000000001 ),
1843206917Smarius    LIT64( 0x0000000000000002 ),
1844206917Smarius    LIT64( 0x0000000000000004 ),
1845206917Smarius    LIT64( 0x0000000000000008 ),
1846206917Smarius    LIT64( 0x0000000000000010 ),
1847206917Smarius    LIT64( 0x0000000000000020 ),
1848206917Smarius    LIT64( 0x0000000000000040 ),
1849206917Smarius    LIT64( 0x0000000000000080 ),
1850206917Smarius    LIT64( 0x0000000000000100 ),
1851206917Smarius    LIT64( 0x0000000000000200 ),
1852206917Smarius    LIT64( 0x0000000000000400 ),
1853206917Smarius    LIT64( 0x0000000000000800 ),
1854206917Smarius    LIT64( 0x0000000000001000 ),
1855206917Smarius    LIT64( 0x0000000000002000 ),
1856206917Smarius    LIT64( 0x0000000000004000 ),
1857206917Smarius    LIT64( 0x0000000000008000 ),
1858206917Smarius    LIT64( 0x0000000000010000 ),
1859206917Smarius    LIT64( 0x0000000000020000 ),
1860206917Smarius    LIT64( 0x0000000000040000 ),
1861206917Smarius    LIT64( 0x0000000000080000 ),
1862206917Smarius    LIT64( 0x0000000000100000 ),
1863206917Smarius    LIT64( 0x0000000000200000 ),
1864206917Smarius    LIT64( 0x0000000000400000 ),
1865206917Smarius    LIT64( 0x0000000000800000 ),
1866206917Smarius    LIT64( 0x0000000001000000 ),
1867206917Smarius    LIT64( 0x0000000002000000 ),
1868206917Smarius    LIT64( 0x0000000004000000 ),
1869206917Smarius    LIT64( 0x0000000008000000 ),
1870206917Smarius    LIT64( 0x0000000010000000 ),
1871206917Smarius    LIT64( 0x0000000020000000 ),
1872206917Smarius    LIT64( 0x0000000040000000 ),
1873206917Smarius    LIT64( 0x0000000080000000 ),
1874206917Smarius    LIT64( 0x0000000100000000 ),
1875206917Smarius    LIT64( 0x0000000200000000 ),
1876206917Smarius    LIT64( 0x0000000400000000 ),
1877206917Smarius    LIT64( 0x0000000800000000 ),
1878206917Smarius    LIT64( 0x0000001000000000 ),
1879206917Smarius    LIT64( 0x0000002000000000 ),
1880206917Smarius    LIT64( 0x0000004000000000 ),
1881206917Smarius    LIT64( 0x0000008000000000 ),
1882206917Smarius    LIT64( 0x0000010000000000 ),
1883206917Smarius    LIT64( 0x0000020000000000 ),
1884206917Smarius    LIT64( 0x0000040000000000 ),
1885206917Smarius    LIT64( 0x0000080000000000 ),
1886206917Smarius    LIT64( 0x0000100000000000 ),
1887206917Smarius    LIT64( 0x0000200000000000 ),
1888206917Smarius    LIT64( 0x0000400000000000 ),
1889206917Smarius    LIT64( 0x0000800000000000 ),
1890206917Smarius    LIT64( 0x0001000000000000 ),
1891206917Smarius    LIT64( 0x0002000000000000 ),
1892206917Smarius    LIT64( 0x0004000000000000 ),
1893206917Smarius    LIT64( 0x0008000000000000 ),
1894206917Smarius    LIT64( 0x0010000000000000 ),
1895206917Smarius    LIT64( 0x0020000000000000 ),
1896206917Smarius    LIT64( 0x0040000000000000 ),
1897206917Smarius    LIT64( 0x0080000000000000 ),
1898206917Smarius    LIT64( 0x0100000000000000 ),
1899206917Smarius    LIT64( 0x0200000000000000 ),
1900206917Smarius    LIT64( 0x0400000000000000 ),
1901206917Smarius    LIT64( 0x0800000000000000 ),
1902206917Smarius    LIT64( 0x1000000000000000 ),
1903206917Smarius    LIT64( 0x2000000000000000 ),
1904206917Smarius    LIT64( 0x4000000000000000 ),
1905206917Smarius    LIT64( 0x6000000000000000 ),
1906206917Smarius    LIT64( 0x7000000000000000 ),
1907206917Smarius    LIT64( 0x7800000000000000 ),
1908206917Smarius    LIT64( 0x7C00000000000000 ),
1909206917Smarius    LIT64( 0x7E00000000000000 ),
1910206917Smarius    LIT64( 0x7F00000000000000 ),
1911206917Smarius    LIT64( 0x7F80000000000000 ),
1912206917Smarius    LIT64( 0x7FC0000000000000 ),
1913206917Smarius    LIT64( 0x7FE0000000000000 ),
1914206917Smarius    LIT64( 0x7FF0000000000000 ),
1915206917Smarius    LIT64( 0x7FF8000000000000 ),
1916206917Smarius    LIT64( 0x7FFC000000000000 ),
1917206917Smarius    LIT64( 0x7FFE000000000000 ),
1918206917Smarius    LIT64( 0x7FFF000000000000 ),
1919206917Smarius    LIT64( 0x7FFF800000000000 ),
1920206917Smarius    LIT64( 0x7FFFC00000000000 ),
1921206917Smarius    LIT64( 0x7FFFE00000000000 ),
1922206917Smarius    LIT64( 0x7FFFF00000000000 ),
1923206917Smarius    LIT64( 0x7FFFF80000000000 ),
1924206917Smarius    LIT64( 0x7FFFFC0000000000 ),
1925206917Smarius    LIT64( 0x7FFFFE0000000000 ),
1926206917Smarius    LIT64( 0x7FFFFF0000000000 ),
1927206917Smarius    LIT64( 0x7FFFFF8000000000 ),
1928206917Smarius    LIT64( 0x7FFFFFC000000000 ),
1929206917Smarius    LIT64( 0x7FFFFFE000000000 ),
1930206917Smarius    LIT64( 0x7FFFFFF000000000 ),
1931206917Smarius    LIT64( 0x7FFFFFF800000000 ),
1932206917Smarius    LIT64( 0x7FFFFFFC00000000 ),
1933206917Smarius    LIT64( 0x7FFFFFFE00000000 ),
1934206917Smarius    LIT64( 0x7FFFFFFF00000000 ),
1935206917Smarius    LIT64( 0x7FFFFFFF80000000 ),
1936206917Smarius    LIT64( 0x7FFFFFFFC0000000 ),
1937206917Smarius    LIT64( 0x7FFFFFFFE0000000 ),
1938206917Smarius    LIT64( 0x7FFFFFFFF0000000 ),
1939206917Smarius    LIT64( 0x7FFFFFFFF8000000 ),
1940206917Smarius    LIT64( 0x7FFFFFFFFC000000 ),
1941206917Smarius    LIT64( 0x7FFFFFFFFE000000 ),
1942206917Smarius    LIT64( 0x7FFFFFFFFF000000 ),
1943206917Smarius    LIT64( 0x7FFFFFFFFF800000 ),
1944206917Smarius    LIT64( 0x7FFFFFFFFFC00000 ),
1945206917Smarius    LIT64( 0x7FFFFFFFFFE00000 ),
1946206917Smarius    LIT64( 0x7FFFFFFFFFF00000 ),
1947206917Smarius    LIT64( 0x7FFFFFFFFFF80000 ),
1948206917Smarius    LIT64( 0x7FFFFFFFFFFC0000 ),
1949206917Smarius    LIT64( 0x7FFFFFFFFFFE0000 ),
1950206917Smarius    LIT64( 0x7FFFFFFFFFFF0000 ),
1951206917Smarius    LIT64( 0x7FFFFFFFFFFF8000 ),
1952206917Smarius    LIT64( 0x7FFFFFFFFFFFC000 ),
1953206917Smarius    LIT64( 0x7FFFFFFFFFFFE000 ),
1954206917Smarius    LIT64( 0x7FFFFFFFFFFFF000 ),
1955206917Smarius    LIT64( 0x7FFFFFFFFFFFF800 ),
1956206917Smarius    LIT64( 0x7FFFFFFFFFFFFC00 ),
1957206917Smarius    LIT64( 0x7FFFFFFFFFFFFE00 ),
1958206917Smarius    LIT64( 0x7FFFFFFFFFFFFF00 ),
1959206917Smarius    LIT64( 0x7FFFFFFFFFFFFF80 ),
1960206917Smarius    LIT64( 0x7FFFFFFFFFFFFFC0 ),
1961206917Smarius    LIT64( 0x7FFFFFFFFFFFFFE0 ),
1962206917Smarius    LIT64( 0x7FFFFFFFFFFFFFF0 ),
1963206917Smarius    LIT64( 0x7FFFFFFFFFFFFFF8 ),
1964206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFC ),
1965206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFE ),
1966206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFF ),
1967206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFD ),
1968206917Smarius    LIT64( 0x7FFFFFFFFFFFFFFB ),
1969206917Smarius    LIT64( 0x7FFFFFFFFFFFFFF7 ),
1970206917Smarius    LIT64( 0x7FFFFFFFFFFFFFEF ),
1971206917Smarius    LIT64( 0x7FFFFFFFFFFFFFDF ),
1972206917Smarius    LIT64( 0x7FFFFFFFFFFFFFBF ),
1973206917Smarius    LIT64( 0x7FFFFFFFFFFFFF7F ),
1974206917Smarius    LIT64( 0x7FFFFFFFFFFFFEFF ),
1975206917Smarius    LIT64( 0x7FFFFFFFFFFFFDFF ),
1976206917Smarius    LIT64( 0x7FFFFFFFFFFFFBFF ),
1977206917Smarius    LIT64( 0x7FFFFFFFFFFFF7FF ),
1978206917Smarius    LIT64( 0x7FFFFFFFFFFFEFFF ),
1979206917Smarius    LIT64( 0x7FFFFFFFFFFFDFFF ),
1980206917Smarius    LIT64( 0x7FFFFFFFFFFFBFFF ),
1981206917Smarius    LIT64( 0x7FFFFFFFFFFF7FFF ),
1982206917Smarius    LIT64( 0x7FFFFFFFFFFEFFFF ),
1983206917Smarius    LIT64( 0x7FFFFFFFFFFDFFFF ),
1984206917Smarius    LIT64( 0x7FFFFFFFFFFBFFFF ),
1985206917Smarius    LIT64( 0x7FFFFFFFFFF7FFFF ),
1986206917Smarius    LIT64( 0x7FFFFFFFFFEFFFFF ),
1987206917Smarius    LIT64( 0x7FFFFFFFFFDFFFFF ),
1988206917Smarius    LIT64( 0x7FFFFFFFFFBFFFFF ),
1989206917Smarius    LIT64( 0x7FFFFFFFFF7FFFFF ),
1990206917Smarius    LIT64( 0x7FFFFFFFFEFFFFFF ),
1991206917Smarius    LIT64( 0x7FFFFFFFFDFFFFFF ),
1992206917Smarius    LIT64( 0x7FFFFFFFFBFFFFFF ),
1993206917Smarius    LIT64( 0x7FFFFFFFF7FFFFFF ),
1994206917Smarius    LIT64( 0x7FFFFFFFEFFFFFFF ),
1995206917Smarius    LIT64( 0x7FFFFFFFDFFFFFFF ),
1996206917Smarius    LIT64( 0x7FFFFFFFBFFFFFFF ),
1997206917Smarius    LIT64( 0x7FFFFFFF7FFFFFFF ),
1998206917Smarius    LIT64( 0x7FFFFFFEFFFFFFFF ),
1999206917Smarius    LIT64( 0x7FFFFFFDFFFFFFFF ),
2000206917Smarius    LIT64( 0x7FFFFFFBFFFFFFFF ),
2001206917Smarius    LIT64( 0x7FFFFFF7FFFFFFFF ),
2002206917Smarius    LIT64( 0x7FFFFFEFFFFFFFFF ),
2003206917Smarius    LIT64( 0x7FFFFFDFFFFFFFFF ),
2004206917Smarius    LIT64( 0x7FFFFFBFFFFFFFFF ),
2005206917Smarius    LIT64( 0x7FFFFF7FFFFFFFFF ),
2006206917Smarius    LIT64( 0x7FFFFEFFFFFFFFFF ),
2007206917Smarius    LIT64( 0x7FFFFDFFFFFFFFFF ),
2008206917Smarius    LIT64( 0x7FFFFBFFFFFFFFFF ),
2009206917Smarius    LIT64( 0x7FFFF7FFFFFFFFFF ),
2010206917Smarius    LIT64( 0x7FFFEFFFFFFFFFFF ),
2011206917Smarius    LIT64( 0x7FFFDFFFFFFFFFFF ),
2012206917Smarius    LIT64( 0x7FFFBFFFFFFFFFFF ),
2013206917Smarius    LIT64( 0x7FFF7FFFFFFFFFFF ),
2014206917Smarius    LIT64( 0x7FFEFFFFFFFFFFFF ),
2015206917Smarius    LIT64( 0x7FFDFFFFFFFFFFFF ),
2016206917Smarius    LIT64( 0x7FFBFFFFFFFFFFFF ),
2017206917Smarius    LIT64( 0x7FF7FFFFFFFFFFFF ),
2018206917Smarius    LIT64( 0x7FEFFFFFFFFFFFFF ),
2019206917Smarius    LIT64( 0x7FDFFFFFFFFFFFFF ),
2020206917Smarius    LIT64( 0x7FBFFFFFFFFFFFFF ),
2021206917Smarius    LIT64( 0x7F7FFFFFFFFFFFFF ),
2022206917Smarius    LIT64( 0x7EFFFFFFFFFFFFFF ),
2023206917Smarius    LIT64( 0x7DFFFFFFFFFFFFFF ),
2024206917Smarius    LIT64( 0x7BFFFFFFFFFFFFFF ),
2025206917Smarius    LIT64( 0x77FFFFFFFFFFFFFF ),
2026206917Smarius    LIT64( 0x6FFFFFFFFFFFFFFF ),
2027206917Smarius    LIT64( 0x5FFFFFFFFFFFFFFF ),
2028206917Smarius    LIT64( 0x3FFFFFFFFFFFFFFF ),
2029206917Smarius    LIT64( 0x1FFFFFFFFFFFFFFF ),
2030206917Smarius    LIT64( 0x0FFFFFFFFFFFFFFF ),
2031206917Smarius    LIT64( 0x07FFFFFFFFFFFFFF ),
2032206917Smarius    LIT64( 0x03FFFFFFFFFFFFFF ),
2033206917Smarius    LIT64( 0x01FFFFFFFFFFFFFF ),
2034206917Smarius    LIT64( 0x00FFFFFFFFFFFFFF ),
2035206917Smarius    LIT64( 0x007FFFFFFFFFFFFF ),
2036206917Smarius    LIT64( 0x003FFFFFFFFFFFFF ),
2037206917Smarius    LIT64( 0x001FFFFFFFFFFFFF ),
2038206917Smarius    LIT64( 0x000FFFFFFFFFFFFF ),
2039206917Smarius    LIT64( 0x0007FFFFFFFFFFFF ),
2040206917Smarius    LIT64( 0x0003FFFFFFFFFFFF ),
2041206917Smarius    LIT64( 0x0001FFFFFFFFFFFF ),
2042206917Smarius    LIT64( 0x0000FFFFFFFFFFFF ),
2043206917Smarius    LIT64( 0x00007FFFFFFFFFFF ),
2044206917Smarius    LIT64( 0x00003FFFFFFFFFFF ),
2045206917Smarius    LIT64( 0x00001FFFFFFFFFFF ),
2046206917Smarius    LIT64( 0x00000FFFFFFFFFFF ),
2047206917Smarius    LIT64( 0x000007FFFFFFFFFF ),
2048206917Smarius    LIT64( 0x000003FFFFFFFFFF ),
2049206917Smarius    LIT64( 0x000001FFFFFFFFFF ),
2050206917Smarius    LIT64( 0x000000FFFFFFFFFF ),
2051206917Smarius    LIT64( 0x0000007FFFFFFFFF ),
2052206917Smarius    LIT64( 0x0000003FFFFFFFFF ),
2053206917Smarius    LIT64( 0x0000001FFFFFFFFF ),
2054206917Smarius    LIT64( 0x0000000FFFFFFFFF ),
2055206917Smarius    LIT64( 0x00000007FFFFFFFF ),
2056206917Smarius    LIT64( 0x00000003FFFFFFFF ),
2057206917Smarius    LIT64( 0x00000001FFFFFFFF ),
2058206917Smarius    LIT64( 0x00000000FFFFFFFF ),
2059206917Smarius    LIT64( 0x000000007FFFFFFF ),
2060206917Smarius    LIT64( 0x000000003FFFFFFF ),
2061206917Smarius    LIT64( 0x000000001FFFFFFF ),
2062206917Smarius    LIT64( 0x000000000FFFFFFF ),
2063206917Smarius    LIT64( 0x0000000007FFFFFF ),
2064206917Smarius    LIT64( 0x0000000003FFFFFF ),
2065206917Smarius    LIT64( 0x0000000001FFFFFF ),
2066206917Smarius    LIT64( 0x0000000000FFFFFF ),
2067206917Smarius    LIT64( 0x00000000007FFFFF ),
2068206917Smarius    LIT64( 0x00000000003FFFFF ),
2069206917Smarius    LIT64( 0x00000000001FFFFF ),
2070206917Smarius    LIT64( 0x00000000000FFFFF ),
2071206917Smarius    LIT64( 0x000000000007FFFF ),
2072206917Smarius    LIT64( 0x000000000003FFFF ),
2073206917Smarius    LIT64( 0x000000000001FFFF ),
2074206917Smarius    LIT64( 0x000000000000FFFF ),
2075206917Smarius    LIT64( 0x0000000000007FFF ),
2076206917Smarius    LIT64( 0x0000000000003FFF ),
2077206917Smarius    LIT64( 0x0000000000001FFF ),
2078206917Smarius    LIT64( 0x0000000000000FFF ),
2079206917Smarius    LIT64( 0x00000000000007FF ),
2080206917Smarius    LIT64( 0x00000000000003FF ),
2081206917Smarius    LIT64( 0x00000000000001FF ),
2082206917Smarius    LIT64( 0x00000000000000FF ),
2083206917Smarius    LIT64( 0x000000000000007F ),
2084206917Smarius    LIT64( 0x000000000000003F ),
2085206917Smarius    LIT64( 0x000000000000001F ),
2086206917Smarius    LIT64( 0x000000000000000F ),
2087206917Smarius    LIT64( 0x0000000000000007 ),
2088206917Smarius    LIT64( 0x0000000000000003 )
2089206917Smarius};
2090206917Smarius
2091206917Smariusstatic const uint32 floatx80NumQInP1 = floatx80NumQIn * floatx80NumP1;
2092206917Smariusstatic const uint32 floatx80NumQOutP1 = floatx80NumQOut * floatx80NumP1;
2093206917Smarius
2094206917Smariusstatic floatx80 floatx80NextQInP1( sequenceT *sequencePtr )
2095206917Smarius{
2096206917Smarius    int16 expNum, sigNum;
2097206917Smarius    floatx80 z;
2098206917Smarius
2099206917Smarius    sigNum = sequencePtr->term1Num;
2100206917Smarius    expNum = sequencePtr->expNum;
2101206917Smarius    z.low = floatx80P1[ sigNum ];
2102206917Smarius    z.high = floatx80QIn[ expNum ];
2103206917Smarius    if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2104206917Smarius    ++sigNum;
2105206917Smarius    if ( floatx80NumP1 <= sigNum ) {
2106206917Smarius        sigNum = 0;
2107206917Smarius        ++expNum;
2108206917Smarius        if ( floatx80NumQIn <= expNum ) {
2109206917Smarius            expNum = 0;
2110206917Smarius            sequencePtr->done = TRUE;
2111206917Smarius        }
2112206917Smarius        sequencePtr->expNum = expNum;
2113206917Smarius    }
2114206917Smarius    sequencePtr->term1Num = sigNum;
2115206917Smarius    return z;
2116206917Smarius
2117206917Smarius}
2118206917Smarius
2119206917Smariusstatic floatx80 floatx80NextQOutP1( sequenceT *sequencePtr )
2120206917Smarius{
2121206917Smarius    int16 expNum, sigNum;
2122206917Smarius    floatx80 z;
2123206917Smarius
2124206917Smarius    sigNum = sequencePtr->term1Num;
2125206917Smarius    expNum = sequencePtr->expNum;
2126206917Smarius    z.low = floatx80P1[ sigNum ];
2127206917Smarius    z.high = floatx80QOut[ expNum ];
2128206917Smarius    if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2129206917Smarius    ++sigNum;
2130206917Smarius    if ( floatx80NumP1 <= sigNum ) {
2131206917Smarius        sigNum = 0;
2132206917Smarius        ++expNum;
2133206917Smarius        if ( floatx80NumQOut <= expNum ) {
2134206917Smarius            expNum = 0;
2135206917Smarius            sequencePtr->done = TRUE;
2136206917Smarius        }
2137206917Smarius        sequencePtr->expNum = expNum;
2138206917Smarius    }
2139206917Smarius    sequencePtr->term1Num = sigNum;
2140206917Smarius    return z;
2141206917Smarius
2142206917Smarius}
2143206917Smarius
2144206917Smariusstatic const uint32 floatx80NumQInP2 = floatx80NumQIn * floatx80NumP2;
2145206917Smariusstatic const uint32 floatx80NumQOutP2 = floatx80NumQOut * floatx80NumP2;
2146206917Smarius
2147206917Smariusstatic floatx80 floatx80NextQInP2( sequenceT *sequencePtr )
2148206917Smarius{
2149206917Smarius    int16 expNum, sigNum;
2150206917Smarius    floatx80 z;
2151206917Smarius
2152206917Smarius    sigNum = sequencePtr->term1Num;
2153206917Smarius    expNum = sequencePtr->expNum;
2154206917Smarius    z.low = floatx80P2[ sigNum ];
2155206917Smarius    z.high = floatx80QIn[ expNum ];
2156206917Smarius    if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2157206917Smarius    ++sigNum;
2158206917Smarius    if ( floatx80NumP2 <= sigNum ) {
2159206917Smarius        sigNum = 0;
2160206917Smarius        ++expNum;
2161206917Smarius        if ( floatx80NumQIn <= expNum ) {
2162206917Smarius            expNum = 0;
2163206917Smarius            sequencePtr->done = TRUE;
2164206917Smarius        }
2165206917Smarius        sequencePtr->expNum = expNum;
2166206917Smarius    }
2167206917Smarius    sequencePtr->term1Num = sigNum;
2168206917Smarius    return z;
2169206917Smarius
2170206917Smarius}
2171206917Smarius
2172206917Smariusstatic floatx80 floatx80NextQOutP2( sequenceT *sequencePtr )
2173206917Smarius{
2174206917Smarius    int16 expNum, sigNum;
2175206917Smarius    floatx80 z;
2176206917Smarius
2177206917Smarius    sigNum = sequencePtr->term1Num;
2178206917Smarius    expNum = sequencePtr->expNum;
2179206917Smarius    z.low = floatx80P2[ sigNum ];
2180206917Smarius    z.high = floatx80QOut[ expNum ];
2181206917Smarius    if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2182206917Smarius    ++sigNum;
2183206917Smarius    if ( floatx80NumP2 <= sigNum ) {
2184206917Smarius        sigNum = 0;
2185206917Smarius        ++expNum;
2186206917Smarius        if ( floatx80NumQOut <= expNum ) {
2187206917Smarius            expNum = 0;
2188206917Smarius            sequencePtr->done = TRUE;
2189206917Smarius        }
2190206917Smarius        sequencePtr->expNum = expNum;
2191206917Smarius    }
2192206917Smarius    sequencePtr->term1Num = sigNum;
2193206917Smarius    return z;
2194206917Smarius
2195206917Smarius}
2196206917Smarius
2197206917Smariusstatic floatx80 floatx80RandomQOutP3( void )
2198206917Smarius{
2199206917Smarius    floatx80 z;
2200206917Smarius
2201206917Smarius    z.low =
2202206917Smarius          (   floatx80P2[ randomUint8() % floatx80NumP2 ]
2203206917Smarius            + floatx80P2[ randomUint8() % floatx80NumP2 ] )
2204206917Smarius        & LIT64( 0x7FFFFFFFFFFFFFFF );
2205206917Smarius    z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
2206206917Smarius    if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2207206917Smarius    return z;
2208206917Smarius
2209206917Smarius}
2210206917Smarius
2211206917Smariusstatic floatx80 floatx80RandomQOutPInf( void )
2212206917Smarius{
2213206917Smarius    floatx80 z;
2214206917Smarius
2215206917Smarius    z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
2216206917Smarius    z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
2217206917Smarius    if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2218206917Smarius    return z;
2219206917Smarius
2220206917Smarius}
2221206917Smarius
2222206917Smariusenum {
2223206917Smarius    floatx80NumQInfWeightMasks = 14
2224206917Smarius};
2225206917Smarius
2226206917Smariusstatic const uint16 floatx80QInfWeightMasks[ floatx80NumQInfWeightMasks ] = {
2227206917Smarius    0x7FFF,
2228206917Smarius    0x7FFF,
2229206917Smarius    0x3FFF,
2230206917Smarius    0x1FFF,
2231206917Smarius    0x07FF,
2232206917Smarius    0x07FF,
2233206917Smarius    0x03FF,
2234206917Smarius    0x01FF,
2235206917Smarius    0x00FF,
2236206917Smarius    0x007F,
2237206917Smarius    0x003F,
2238206917Smarius    0x001F,
2239206917Smarius    0x000F,
2240206917Smarius    0x0007
2241206917Smarius};
2242206917Smarius
2243206917Smariusstatic const uint16 floatx80QInfWeightOffsets[ floatx80NumQInfWeightMasks ] = {
2244206917Smarius    0x0000,
2245206917Smarius    0x0000,
2246206917Smarius    0x2000,
2247206917Smarius    0x3000,
2248206917Smarius    0x3800,
2249206917Smarius    0x3C00,
2250206917Smarius    0x3E00,
2251206917Smarius    0x3F00,
2252206917Smarius    0x3F80,
2253206917Smarius    0x3FC0,
2254206917Smarius    0x3FE0,
2255206917Smarius    0x3FF0,
2256206917Smarius    0x3FF8,
2257206917Smarius    0x3FFC
2258206917Smarius};
2259206917Smarius
2260206917Smariusstatic floatx80 floatx80RandomQInfP3( void )
2261206917Smarius{
2262206917Smarius    int8 weightMaskNum;
2263206917Smarius    floatx80 z;
2264206917Smarius
2265206917Smarius    z.low =
2266206917Smarius          (   floatx80P2[ randomUint8() % floatx80NumP2 ]
2267206917Smarius            + floatx80P2[ randomUint8() % floatx80NumP2 ] )
2268206917Smarius        & LIT64( 0x7FFFFFFFFFFFFFFF );
2269206917Smarius    weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
2270206917Smarius    z.high =
2271207151Smarius          ( randomUint16() & floatx80QInfWeightMasks[ weightMaskNum ] )
2272206917Smarius        + floatx80QInfWeightOffsets[ weightMaskNum ];
2273206917Smarius    if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
2274206917Smarius    z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
2275206917Smarius    return z;
2276206917Smarius
2277206917Smarius}
2278206917Smarius
2279206917Smariusstatic floatx80 floatx80RandomQInfPInf( void )
2280206917Smarius{
2281206917Smarius    int8 weightMaskNum;
2282206917Smarius    floatx80 z;
2283206917Smarius
2284206917Smarius    z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
2285206917Smarius    weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
2286206917Smarius    z.high =
2287207151Smarius          ( randomUint16() & floatx80QInfWeightMasks[ weightMaskNum ] )
2288206917Smarius        + floatx80QInfWeightOffsets[ weightMaskNum ];
2289206917Smarius    if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
2290206917Smarius    z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
2291206917Smarius    return z;
2292206917Smarius
2293206917Smarius}
2294206917Smarius
2295206917Smariusstatic floatx80 floatx80Random( void )
2296206917Smarius{
2297206917Smarius
2298206917Smarius    switch ( randomUint8() & 7 ) {
2299206917Smarius     case 0:
2300206917Smarius     case 1:
2301206917Smarius     case 2:
2302206917Smarius        return floatx80RandomQOutP3();
2303206917Smarius     case 3:
2304206917Smarius        return floatx80RandomQOutPInf();
2305206917Smarius     case 4:
2306206917Smarius     case 5:
2307206917Smarius     case 6:
2308206917Smarius        return floatx80RandomQInfP3();
2309207151Smarius     default:
2310206917Smarius        return floatx80RandomQInfPInf();
2311206917Smarius    }
2312206917Smarius
2313206917Smarius}
2314206917Smarius
2315206917Smarius#endif
2316206917Smarius
2317206917Smarius#ifdef FLOAT128
2318206917Smarius
2319206917Smariusenum {
2320206917Smarius    float128NumQIn  =  22,
2321206917Smarius    float128NumQOut =  78,
2322206917Smarius    float128NumP1   =   4,
2323206917Smarius    float128NumP2   = 443
2324206917Smarius};
2325206917Smarius
2326206917Smariusstatic const uint64 float128QIn[ float128NumQIn ] = {
2327206917Smarius    LIT64( 0x0000000000000000 ),	/* positive, subnormal		*/
2328206917Smarius    LIT64( 0x0001000000000000 ),	/* positive, -16382		*/
2329206917Smarius    LIT64( 0x3F8E000000000000 ),	/* positive,   -113		*/
2330206917Smarius    LIT64( 0x3FFD000000000000 ),	/* positive,     -2		*/
2331206917Smarius    LIT64( 0x3FFE000000000000 ),	/* positive,     -1		*/
2332206917Smarius    LIT64( 0x3FFF000000000000 ),	/* positive,      0		*/
2333206917Smarius    LIT64( 0x4000000000000000 ),	/* positive,      1		*/
2334206917Smarius    LIT64( 0x4001000000000000 ),	/* positive,      2		*/
2335206917Smarius    LIT64( 0x4070000000000000 ),	/* positive,    113		*/
2336206917Smarius    LIT64( 0x7FFE000000000000 ),	/* positive,  16383		*/
2337206917Smarius    LIT64( 0x7FFF000000000000 ),	/* positive, infinity or NaN	*/
2338206917Smarius    LIT64( 0x8000000000000000 ),	/* negative, subnormal		*/
2339206917Smarius    LIT64( 0x8001000000000000 ),	/* negative, -16382		*/
2340206917Smarius    LIT64( 0xBF8E000000000000 ),	/* negative,   -113		*/
2341206917Smarius    LIT64( 0xBFFD000000000000 ),	/* negative,     -2		*/
2342206917Smarius    LIT64( 0xBFFE000000000000 ),	/* negative,     -1		*/
2343206917Smarius    LIT64( 0xBFFF000000000000 ),	/* negative,      0		*/
2344206917Smarius    LIT64( 0xC000000000000000 ),	/* negative,      1		*/
2345206917Smarius    LIT64( 0xC001000000000000 ),	/* negative,      2		*/
2346206917Smarius    LIT64( 0xC070000000000000 ),	/* negative,    113		*/
2347206917Smarius    LIT64( 0xFFFE000000000000 ),	/* negative,  16383		*/
2348206917Smarius    LIT64( 0xFFFF000000000000 )		/* negative, infinity or NaN	*/
2349206917Smarius};
2350206917Smarius
2351206917Smariusstatic const uint64 float128QOut[ float128NumQOut ] = {
2352206917Smarius    LIT64( 0x0000000000000000 ),	/* positive, subnormal		*/
2353206917Smarius    LIT64( 0x0001000000000000 ),	/* positive, -16382		*/
2354206917Smarius    LIT64( 0x0002000000000000 ),	/* positive, -16381		*/
2355206917Smarius    LIT64( 0x3BFE000000000000 ),	/* positive,  -1025		*/
2356206917Smarius    LIT64( 0x3BFF000000000000 ),	/* positive,  -1024		*/
2357206917Smarius    LIT64( 0x3C00000000000000 ),	/* positive,  -1023		*/
2358206917Smarius    LIT64( 0x3C01000000000000 ),	/* positive,  -1022		*/
2359206917Smarius    LIT64( 0x3F7E000000000000 ),	/* positive,   -129		*/
2360206917Smarius    LIT64( 0x3F7F000000000000 ),	/* positive,   -128		*/
2361206917Smarius    LIT64( 0x3F80000000000000 ),	/* positive,   -127		*/
2362206917Smarius    LIT64( 0x3F81000000000000 ),	/* positive,   -126		*/
2363206917Smarius    LIT64( 0x3F8E000000000000 ),	/* positive,   -113		*/
2364206917Smarius    LIT64( 0x3FFB000000000000 ),	/* positive,     -4		*/
2365206917Smarius    LIT64( 0x3FFC000000000000 ),	/* positive,     -3		*/
2366206917Smarius    LIT64( 0x3FFD000000000000 ),	/* positive,     -2		*/
2367206917Smarius    LIT64( 0x3FFE000000000000 ),	/* positive,     -1		*/
2368206917Smarius    LIT64( 0x3FFF000000000000 ),	/* positive,      0		*/
2369206917Smarius    LIT64( 0x4000000000000000 ),	/* positive,      1		*/
2370206917Smarius    LIT64( 0x4001000000000000 ),	/* positive,      2		*/
2371206917Smarius    LIT64( 0x4002000000000000 ),	/* positive,      3		*/
2372206917Smarius    LIT64( 0x4003000000000000 ),	/* positive,      4		*/
2373206917Smarius    LIT64( 0x401C000000000000 ),	/* positive,     29		*/
2374206917Smarius    LIT64( 0x401D000000000000 ),	/* positive,     30		*/
2375206917Smarius    LIT64( 0x401E000000000000 ),	/* positive,     31		*/
2376206917Smarius    LIT64( 0x401F000000000000 ),	/* positive,     32		*/
2377206917Smarius    LIT64( 0x403C000000000000 ),	/* positive,     61		*/
2378206917Smarius    LIT64( 0x403D000000000000 ),	/* positive,     62		*/
2379206917Smarius    LIT64( 0x403E000000000000 ),	/* positive,     63		*/
2380206917Smarius    LIT64( 0x403F000000000000 ),	/* positive,     64		*/
2381206917Smarius    LIT64( 0x4070000000000000 ),	/* positive,    113		*/
2382206917Smarius    LIT64( 0x407E000000000000 ),	/* positive,    127		*/
2383206917Smarius    LIT64( 0x407F000000000000 ),	/* positive,    128		*/
2384206917Smarius    LIT64( 0x4080000000000000 ),	/* positive,    129		*/
2385206917Smarius    LIT64( 0x43FE000000000000 ),	/* positive,   1023		*/
2386206917Smarius    LIT64( 0x43FF000000000000 ),	/* positive,   1024		*/
2387206917Smarius    LIT64( 0x4400000000000000 ),	/* positive,   1025		*/
2388206917Smarius    LIT64( 0x7FFD000000000000 ),	/* positive,  16382		*/
2389206917Smarius    LIT64( 0x7FFE000000000000 ),	/* positive,  16383		*/
2390206917Smarius    LIT64( 0x7FFF000000000000 ),	/* positive, infinity or NaN	*/
2391206917Smarius    LIT64( 0x8000000000000000 ),	/* negative, subnormal		*/
2392206917Smarius    LIT64( 0x8001000000000000 ),	/* negative, -16382		*/
2393206917Smarius    LIT64( 0x8002000000000000 ),	/* negative, -16381		*/
2394206917Smarius    LIT64( 0xBBFE000000000000 ),	/* negative,  -1025		*/
2395206917Smarius    LIT64( 0xBBFF000000000000 ),	/* negative,  -1024		*/
2396206917Smarius    LIT64( 0xBC00000000000000 ),	/* negative,  -1023		*/
2397206917Smarius    LIT64( 0xBC01000000000000 ),	/* negative,  -1022		*/
2398206917Smarius    LIT64( 0xBF7E000000000000 ),	/* negative,   -129		*/
2399206917Smarius    LIT64( 0xBF7F000000000000 ),	/* negative,   -128		*/
2400206917Smarius    LIT64( 0xBF80000000000000 ),	/* negative,   -127		*/
2401206917Smarius    LIT64( 0xBF81000000000000 ),	/* negative,   -126		*/
2402206917Smarius    LIT64( 0xBF8E000000000000 ),	/* negative,   -113		*/
2403206917Smarius    LIT64( 0xBFFB000000000000 ),	/* negative,     -4		*/
2404206917Smarius    LIT64( 0xBFFC000000000000 ),	/* negative,     -3		*/
2405206917Smarius    LIT64( 0xBFFD000000000000 ),	/* negative,     -2		*/
2406206917Smarius    LIT64( 0xBFFE000000000000 ),	/* negative,     -1		*/
2407206917Smarius    LIT64( 0xBFFF000000000000 ),	/* negative,      0		*/
2408206917Smarius    LIT64( 0xC000000000000000 ),	/* negative,      1		*/
2409206917Smarius    LIT64( 0xC001000000000000 ),	/* negative,      2		*/
2410206917Smarius    LIT64( 0xC002000000000000 ),	/* negative,      3		*/
2411206917Smarius    LIT64( 0xC003000000000000 ),	/* negative,      4		*/
2412206917Smarius    LIT64( 0xC01C000000000000 ),	/* negative,     29		*/
2413206917Smarius    LIT64( 0xC01D000000000000 ),	/* negative,     30		*/
2414206917Smarius    LIT64( 0xC01E000000000000 ),	/* negative,     31		*/
2415206917Smarius    LIT64( 0xC01F000000000000 ),	/* negative,     32		*/
2416206917Smarius    LIT64( 0xC03C000000000000 ),	/* negative,     61		*/
2417206917Smarius    LIT64( 0xC03D000000000000 ),	/* negative,     62		*/
2418206917Smarius    LIT64( 0xC03E000000000000 ),	/* negative,     63		*/
2419206917Smarius    LIT64( 0xC03F000000000000 ),	/* negative,     64		*/
2420206917Smarius    LIT64( 0xC070000000000000 ),	/* negative,    113		*/
2421206917Smarius    LIT64( 0xC07E000000000000 ),	/* negative,    127		*/
2422206917Smarius    LIT64( 0xC07F000000000000 ),	/* negative,    128		*/
2423206917Smarius    LIT64( 0xC080000000000000 ),	/* negative,    129		*/
2424206917Smarius    LIT64( 0xC3FE000000000000 ),	/* negative,   1023		*/
2425206917Smarius    LIT64( 0xC3FF000000000000 ),	/* negative,   1024		*/
2426206917Smarius    LIT64( 0xC400000000000000 ),	/* negative,   1025		*/
2427206917Smarius    LIT64( 0xFFFD000000000000 ),	/* negative,  16382		*/
2428206917Smarius    LIT64( 0xFFFE000000000000 ),	/* negative,  16383		*/
2429206917Smarius    LIT64( 0xFFFF000000000000 )		/* negative, infinity or NaN	*/
2430206917Smarius};
2431206917Smarius
2432206917Smariusstatic const struct { bits64 high, low; } float128P1[ float128NumP1 ] = {
2433206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
2434206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
2435206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2436206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) }
2437206917Smarius};
2438206917Smarius
2439206917Smariusstatic const struct { bits64 high, low; } float128P2[ float128NumP2 ] = {
2440206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
2441206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
2442206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000002 ) },
2443206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000004 ) },
2444206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000008 ) },
2445206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000010 ) },
2446206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000020 ) },
2447206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000040 ) },
2448206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000080 ) },
2449206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000100 ) },
2450206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000200 ) },
2451206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000400 ) },
2452206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000800 ) },
2453206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001000 ) },
2454206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000002000 ) },
2455206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000004000 ) },
2456206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000008000 ) },
2457206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000010000 ) },
2458206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000020000 ) },
2459206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000040000 ) },
2460206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000080000 ) },
2461206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000100000 ) },
2462206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000200000 ) },
2463206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000400000 ) },
2464206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000800000 ) },
2465206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001000000 ) },
2466206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000002000000 ) },
2467206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000004000000 ) },
2468206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000008000000 ) },
2469206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000010000000 ) },
2470206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000020000000 ) },
2471206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000040000000 ) },
2472206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000080000000 ) },
2473206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000100000000 ) },
2474206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000200000000 ) },
2475206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000400000000 ) },
2476206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000800000000 ) },
2477206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000001000000000 ) },
2478206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000002000000000 ) },
2479206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000004000000000 ) },
2480206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000008000000000 ) },
2481206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000010000000000 ) },
2482206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000020000000000 ) },
2483206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000040000000000 ) },
2484206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000080000000000 ) },
2485206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000100000000000 ) },
2486206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000200000000000 ) },
2487206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000400000000000 ) },
2488206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000800000000000 ) },
2489206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0001000000000000 ) },
2490206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0002000000000000 ) },
2491206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0004000000000000 ) },
2492206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0008000000000000 ) },
2493206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0010000000000000 ) },
2494206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0020000000000000 ) },
2495206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0040000000000000 ) },
2496206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0080000000000000 ) },
2497206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0100000000000000 ) },
2498206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0200000000000000 ) },
2499206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0400000000000000 ) },
2500206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0800000000000000 ) },
2501206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x1000000000000000 ) },
2502206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x2000000000000000 ) },
2503206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x4000000000000000 ) },
2504206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x8000000000000000 ) },
2505206917Smarius    { LIT64( 0x0000000000000001 ), LIT64( 0x0000000000000000 ) },
2506206917Smarius    { LIT64( 0x0000000000000002 ), LIT64( 0x0000000000000000 ) },
2507206917Smarius    { LIT64( 0x0000000000000004 ), LIT64( 0x0000000000000000 ) },
2508206917Smarius    { LIT64( 0x0000000000000008 ), LIT64( 0x0000000000000000 ) },
2509206917Smarius    { LIT64( 0x0000000000000010 ), LIT64( 0x0000000000000000 ) },
2510206917Smarius    { LIT64( 0x0000000000000020 ), LIT64( 0x0000000000000000 ) },
2511206917Smarius    { LIT64( 0x0000000000000040 ), LIT64( 0x0000000000000000 ) },
2512206917Smarius    { LIT64( 0x0000000000000080 ), LIT64( 0x0000000000000000 ) },
2513206917Smarius    { LIT64( 0x0000000000000100 ), LIT64( 0x0000000000000000 ) },
2514206917Smarius    { LIT64( 0x0000000000000200 ), LIT64( 0x0000000000000000 ) },
2515206917Smarius    { LIT64( 0x0000000000000400 ), LIT64( 0x0000000000000000 ) },
2516206917Smarius    { LIT64( 0x0000000000000800 ), LIT64( 0x0000000000000000 ) },
2517206917Smarius    { LIT64( 0x0000000000001000 ), LIT64( 0x0000000000000000 ) },
2518206917Smarius    { LIT64( 0x0000000000002000 ), LIT64( 0x0000000000000000 ) },
2519206917Smarius    { LIT64( 0x0000000000004000 ), LIT64( 0x0000000000000000 ) },
2520206917Smarius    { LIT64( 0x0000000000008000 ), LIT64( 0x0000000000000000 ) },
2521206917Smarius    { LIT64( 0x0000000000010000 ), LIT64( 0x0000000000000000 ) },
2522206917Smarius    { LIT64( 0x0000000000020000 ), LIT64( 0x0000000000000000 ) },
2523206917Smarius    { LIT64( 0x0000000000040000 ), LIT64( 0x0000000000000000 ) },
2524206917Smarius    { LIT64( 0x0000000000080000 ), LIT64( 0x0000000000000000 ) },
2525206917Smarius    { LIT64( 0x0000000000100000 ), LIT64( 0x0000000000000000 ) },
2526206917Smarius    { LIT64( 0x0000000000200000 ), LIT64( 0x0000000000000000 ) },
2527206917Smarius    { LIT64( 0x0000000000400000 ), LIT64( 0x0000000000000000 ) },
2528206917Smarius    { LIT64( 0x0000000000800000 ), LIT64( 0x0000000000000000 ) },
2529206917Smarius    { LIT64( 0x0000000001000000 ), LIT64( 0x0000000000000000 ) },
2530206917Smarius    { LIT64( 0x0000000002000000 ), LIT64( 0x0000000000000000 ) },
2531206917Smarius    { LIT64( 0x0000000004000000 ), LIT64( 0x0000000000000000 ) },
2532206917Smarius    { LIT64( 0x0000000008000000 ), LIT64( 0x0000000000000000 ) },
2533206917Smarius    { LIT64( 0x0000000010000000 ), LIT64( 0x0000000000000000 ) },
2534206917Smarius    { LIT64( 0x0000000020000000 ), LIT64( 0x0000000000000000 ) },
2535206917Smarius    { LIT64( 0x0000000040000000 ), LIT64( 0x0000000000000000 ) },
2536206917Smarius    { LIT64( 0x0000000080000000 ), LIT64( 0x0000000000000000 ) },
2537206917Smarius    { LIT64( 0x0000000100000000 ), LIT64( 0x0000000000000000 ) },
2538206917Smarius    { LIT64( 0x0000000200000000 ), LIT64( 0x0000000000000000 ) },
2539206917Smarius    { LIT64( 0x0000000400000000 ), LIT64( 0x0000000000000000 ) },
2540206917Smarius    { LIT64( 0x0000000800000000 ), LIT64( 0x0000000000000000 ) },
2541206917Smarius    { LIT64( 0x0000001000000000 ), LIT64( 0x0000000000000000 ) },
2542206917Smarius    { LIT64( 0x0000002000000000 ), LIT64( 0x0000000000000000 ) },
2543206917Smarius    { LIT64( 0x0000004000000000 ), LIT64( 0x0000000000000000 ) },
2544206917Smarius    { LIT64( 0x0000008000000000 ), LIT64( 0x0000000000000000 ) },
2545206917Smarius    { LIT64( 0x0000010000000000 ), LIT64( 0x0000000000000000 ) },
2546206917Smarius    { LIT64( 0x0000020000000000 ), LIT64( 0x0000000000000000 ) },
2547206917Smarius    { LIT64( 0x0000040000000000 ), LIT64( 0x0000000000000000 ) },
2548206917Smarius    { LIT64( 0x0000080000000000 ), LIT64( 0x0000000000000000 ) },
2549206917Smarius    { LIT64( 0x0000100000000000 ), LIT64( 0x0000000000000000 ) },
2550206917Smarius    { LIT64( 0x0000200000000000 ), LIT64( 0x0000000000000000 ) },
2551206917Smarius    { LIT64( 0x0000400000000000 ), LIT64( 0x0000000000000000 ) },
2552206917Smarius    { LIT64( 0x0000800000000000 ), LIT64( 0x0000000000000000 ) },
2553206917Smarius    { LIT64( 0x0000C00000000000 ), LIT64( 0x0000000000000000 ) },
2554206917Smarius    { LIT64( 0x0000E00000000000 ), LIT64( 0x0000000000000000 ) },
2555206917Smarius    { LIT64( 0x0000F00000000000 ), LIT64( 0x0000000000000000 ) },
2556206917Smarius    { LIT64( 0x0000F80000000000 ), LIT64( 0x0000000000000000 ) },
2557206917Smarius    { LIT64( 0x0000FC0000000000 ), LIT64( 0x0000000000000000 ) },
2558206917Smarius    { LIT64( 0x0000FE0000000000 ), LIT64( 0x0000000000000000 ) },
2559206917Smarius    { LIT64( 0x0000FF0000000000 ), LIT64( 0x0000000000000000 ) },
2560206917Smarius    { LIT64( 0x0000FF8000000000 ), LIT64( 0x0000000000000000 ) },
2561206917Smarius    { LIT64( 0x0000FFC000000000 ), LIT64( 0x0000000000000000 ) },
2562206917Smarius    { LIT64( 0x0000FFE000000000 ), LIT64( 0x0000000000000000 ) },
2563206917Smarius    { LIT64( 0x0000FFF000000000 ), LIT64( 0x0000000000000000 ) },
2564206917Smarius    { LIT64( 0x0000FFF800000000 ), LIT64( 0x0000000000000000 ) },
2565206917Smarius    { LIT64( 0x0000FFFC00000000 ), LIT64( 0x0000000000000000 ) },
2566206917Smarius    { LIT64( 0x0000FFFE00000000 ), LIT64( 0x0000000000000000 ) },
2567206917Smarius    { LIT64( 0x0000FFFF00000000 ), LIT64( 0x0000000000000000 ) },
2568206917Smarius    { LIT64( 0x0000FFFF80000000 ), LIT64( 0x0000000000000000 ) },
2569206917Smarius    { LIT64( 0x0000FFFFC0000000 ), LIT64( 0x0000000000000000 ) },
2570206917Smarius    { LIT64( 0x0000FFFFE0000000 ), LIT64( 0x0000000000000000 ) },
2571206917Smarius    { LIT64( 0x0000FFFFF0000000 ), LIT64( 0x0000000000000000 ) },
2572206917Smarius    { LIT64( 0x0000FFFFF8000000 ), LIT64( 0x0000000000000000 ) },
2573206917Smarius    { LIT64( 0x0000FFFFFC000000 ), LIT64( 0x0000000000000000 ) },
2574206917Smarius    { LIT64( 0x0000FFFFFE000000 ), LIT64( 0x0000000000000000 ) },
2575206917Smarius    { LIT64( 0x0000FFFFFF000000 ), LIT64( 0x0000000000000000 ) },
2576206917Smarius    { LIT64( 0x0000FFFFFF800000 ), LIT64( 0x0000000000000000 ) },
2577206917Smarius    { LIT64( 0x0000FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },
2578206917Smarius    { LIT64( 0x0000FFFFFFE00000 ), LIT64( 0x0000000000000000 ) },
2579206917Smarius    { LIT64( 0x0000FFFFFFF00000 ), LIT64( 0x0000000000000000 ) },
2580206917Smarius    { LIT64( 0x0000FFFFFFF80000 ), LIT64( 0x0000000000000000 ) },
2581206917Smarius    { LIT64( 0x0000FFFFFFFC0000 ), LIT64( 0x0000000000000000 ) },
2582206917Smarius    { LIT64( 0x0000FFFFFFFE0000 ), LIT64( 0x0000000000000000 ) },
2583206917Smarius    { LIT64( 0x0000FFFFFFFF0000 ), LIT64( 0x0000000000000000 ) },
2584206917Smarius    { LIT64( 0x0000FFFFFFFF8000 ), LIT64( 0x0000000000000000 ) },
2585206917Smarius    { LIT64( 0x0000FFFFFFFFC000 ), LIT64( 0x0000000000000000 ) },
2586206917Smarius    { LIT64( 0x0000FFFFFFFFE000 ), LIT64( 0x0000000000000000 ) },
2587206917Smarius    { LIT64( 0x0000FFFFFFFFF000 ), LIT64( 0x0000000000000000 ) },
2588206917Smarius    { LIT64( 0x0000FFFFFFFFF800 ), LIT64( 0x0000000000000000 ) },
2589206917Smarius    { LIT64( 0x0000FFFFFFFFFC00 ), LIT64( 0x0000000000000000 ) },
2590206917Smarius    { LIT64( 0x0000FFFFFFFFFE00 ), LIT64( 0x0000000000000000 ) },
2591206917Smarius    { LIT64( 0x0000FFFFFFFFFF00 ), LIT64( 0x0000000000000000 ) },
2592206917Smarius    { LIT64( 0x0000FFFFFFFFFF80 ), LIT64( 0x0000000000000000 ) },
2593206917Smarius    { LIT64( 0x0000FFFFFFFFFFC0 ), LIT64( 0x0000000000000000 ) },
2594206917Smarius    { LIT64( 0x0000FFFFFFFFFFE0 ), LIT64( 0x0000000000000000 ) },
2595206917Smarius    { LIT64( 0x0000FFFFFFFFFFF0 ), LIT64( 0x0000000000000000 ) },
2596206917Smarius    { LIT64( 0x0000FFFFFFFFFFF8 ), LIT64( 0x0000000000000000 ) },
2597206917Smarius    { LIT64( 0x0000FFFFFFFFFFFC ), LIT64( 0x0000000000000000 ) },
2598206917Smarius    { LIT64( 0x0000FFFFFFFFFFFE ), LIT64( 0x0000000000000000 ) },
2599206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x0000000000000000 ) },
2600206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x8000000000000000 ) },
2601206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xC000000000000000 ) },
2602206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xE000000000000000 ) },
2603206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF000000000000000 ) },
2604206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF800000000000000 ) },
2605206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFC00000000000000 ) },
2606206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFE00000000000000 ) },
2607206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF00000000000000 ) },
2608206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF80000000000000 ) },
2609206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFC0000000000000 ) },
2610206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFE0000000000000 ) },
2611206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF0000000000000 ) },
2612206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF8000000000000 ) },
2613206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },
2614206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFE000000000000 ) },
2615206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF000000000000 ) },
2616206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF800000000000 ) },
2617206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFC00000000000 ) },
2618206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFE00000000000 ) },
2619206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF00000000000 ) },
2620206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF80000000000 ) },
2621206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFC0000000000 ) },
2622206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFE0000000000 ) },
2623206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF0000000000 ) },
2624206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF8000000000 ) },
2625206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFC000000000 ) },
2626206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFE000000000 ) },
2627206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF000000000 ) },
2628206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF800000000 ) },
2629206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFC00000000 ) },
2630206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFE00000000 ) },
2631206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF00000000 ) },
2632206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF80000000 ) },
2633206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFC0000000 ) },
2634206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFE0000000 ) },
2635206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },
2636206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF8000000 ) },
2637206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFC000000 ) },
2638206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFE000000 ) },
2639206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF000000 ) },
2640206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF800000 ) },
2641206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFC00000 ) },
2642206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFE00000 ) },
2643206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF00000 ) },
2644206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF80000 ) },
2645206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFC0000 ) },
2646206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFE0000 ) },
2647206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF0000 ) },
2648206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF8000 ) },
2649206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFC000 ) },
2650206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFE000 ) },
2651206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF000 ) },
2652206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF800 ) },
2653206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFC00 ) },
2654206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFE00 ) },
2655206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF00 ) },
2656206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF80 ) },
2657206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFC0 ) },
2658206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFE0 ) },
2659206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF0 ) },
2660206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF8 ) },
2661206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFC ) },
2662206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) },
2663206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2664206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFD ) },
2665206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFB ) },
2666206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF7 ) },
2667206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFEF ) },
2668206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFDF ) },
2669206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFBF ) },
2670206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF7F ) },
2671206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFEFF ) },
2672206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFDFF ) },
2673206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFF ) },
2674206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF7FF ) },
2675206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },
2676206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFDFFF ) },
2677206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFBFFF ) },
2678206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF7FFF ) },
2679206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFEFFFF ) },
2680206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFDFFFF ) },
2681206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFBFFFF ) },
2682206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },
2683206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFEFFFFF ) },
2684206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFDFFFFF ) },
2685206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFBFFFFF ) },
2686206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF7FFFFF ) },
2687206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFEFFFFFF ) },
2688206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFDFFFFFF ) },
2689206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFBFFFFFF ) },
2690206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF7FFFFFF ) },
2691206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },
2692206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFDFFFFFFF ) },
2693206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFBFFFFFFF ) },
2694206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF7FFFFFFF ) },
2695206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFFFF ) },
2696206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFDFFFFFFFF ) },
2697206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFBFFFFFFFF ) },
2698206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF7FFFFFFFF ) },
2699206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFEFFFFFFFFF ) },
2700206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFDFFFFFFFFF ) },
2701206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFBFFFFFFFFF ) },
2702206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF7FFFFFFFFF ) },
2703206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFEFFFFFFFFFF ) },
2704206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFDFFFFFFFFFF ) },
2705206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFBFFFFFFFFFF ) },
2706206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF7FFFFFFFFFF ) },
2707206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFEFFFFFFFFFFF ) },
2708206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFDFFFFFFFFFFF ) },
2709206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFBFFFFFFFFFFF ) },
2710206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF7FFFFFFFFFFF ) },
2711206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFEFFFFFFFFFFFF ) },
2712206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFDFFFFFFFFFFFF ) },
2713206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFBFFFFFFFFFFFF ) },
2714206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF7FFFFFFFFFFFF ) },
2715206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFEFFFFFFFFFFFFF ) },
2716206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFDFFFFFFFFFFFFF ) },
2717206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFBFFFFFFFFFFFFF ) },
2718206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF7FFFFFFFFFFFFF ) },
2719206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFEFFFFFFFFFFFFFF ) },
2720206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFDFFFFFFFFFFFFFF ) },
2721206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFBFFFFFFFFFFFFFF ) },
2722206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF7FFFFFFFFFFFFFF ) },
2723206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xEFFFFFFFFFFFFFFF ) },
2724206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xDFFFFFFFFFFFFFFF ) },
2725206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xBFFFFFFFFFFFFFFF ) },
2726206917Smarius    { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
2727206917Smarius    { LIT64( 0x0000FFFFFFFFFFFD ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2728206917Smarius    { LIT64( 0x0000FFFFFFFFFFFB ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2729206917Smarius    { LIT64( 0x0000FFFFFFFFFFF7 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2730206917Smarius    { LIT64( 0x0000FFFFFFFFFFEF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2731206917Smarius    { LIT64( 0x0000FFFFFFFFFFDF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2732206917Smarius    { LIT64( 0x0000FFFFFFFFFFBF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2733206917Smarius    { LIT64( 0x0000FFFFFFFFFF7F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2734206917Smarius    { LIT64( 0x0000FFFFFFFFFEFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2735206917Smarius    { LIT64( 0x0000FFFFFFFFFDFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2736206917Smarius    { LIT64( 0x0000FFFFFFFFFBFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2737206917Smarius    { LIT64( 0x0000FFFFFFFFF7FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2738206917Smarius    { LIT64( 0x0000FFFFFFFFEFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2739206917Smarius    { LIT64( 0x0000FFFFFFFFDFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2740206917Smarius    { LIT64( 0x0000FFFFFFFFBFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2741206917Smarius    { LIT64( 0x0000FFFFFFFF7FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2742206917Smarius    { LIT64( 0x0000FFFFFFFEFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2743206917Smarius    { LIT64( 0x0000FFFFFFFDFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2744206917Smarius    { LIT64( 0x0000FFFFFFFBFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2745206917Smarius    { LIT64( 0x0000FFFFFFF7FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2746206917Smarius    { LIT64( 0x0000FFFFFFEFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2747206917Smarius    { LIT64( 0x0000FFFFFFDFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2748206917Smarius    { LIT64( 0x0000FFFFFFBFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2749206917Smarius    { LIT64( 0x0000FFFFFF7FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2750206917Smarius    { LIT64( 0x0000FFFFFEFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2751206917Smarius    { LIT64( 0x0000FFFFFDFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2752206917Smarius    { LIT64( 0x0000FFFFFBFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2753206917Smarius    { LIT64( 0x0000FFFFF7FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2754206917Smarius    { LIT64( 0x0000FFFFEFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2755206917Smarius    { LIT64( 0x0000FFFFDFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2756206917Smarius    { LIT64( 0x0000FFFFBFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2757206917Smarius    { LIT64( 0x0000FFFF7FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2758206917Smarius    { LIT64( 0x0000FFFEFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2759206917Smarius    { LIT64( 0x0000FFFDFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2760206917Smarius    { LIT64( 0x0000FFFBFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2761206917Smarius    { LIT64( 0x0000FFF7FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2762206917Smarius    { LIT64( 0x0000FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2763206917Smarius    { LIT64( 0x0000FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2764206917Smarius    { LIT64( 0x0000FFBFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2765206917Smarius    { LIT64( 0x0000FF7FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2766206917Smarius    { LIT64( 0x0000FEFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2767206917Smarius    { LIT64( 0x0000FDFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2768206917Smarius    { LIT64( 0x0000FBFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2769206917Smarius    { LIT64( 0x0000F7FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2770206917Smarius    { LIT64( 0x0000EFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2771206917Smarius    { LIT64( 0x0000DFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2772206917Smarius    { LIT64( 0x0000BFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2773206917Smarius    { LIT64( 0x00007FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2774206917Smarius    { LIT64( 0x00003FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2775206917Smarius    { LIT64( 0x00001FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2776206917Smarius    { LIT64( 0x00000FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2777206917Smarius    { LIT64( 0x000007FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2778206917Smarius    { LIT64( 0x000003FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2779206917Smarius    { LIT64( 0x000001FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2780206917Smarius    { LIT64( 0x000000FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2781206917Smarius    { LIT64( 0x0000007FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2782206917Smarius    { LIT64( 0x0000003FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2783206917Smarius    { LIT64( 0x0000001FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2784206917Smarius    { LIT64( 0x0000000FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2785206917Smarius    { LIT64( 0x00000007FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2786206917Smarius    { LIT64( 0x00000003FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2787206917Smarius    { LIT64( 0x00000001FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2788206917Smarius    { LIT64( 0x00000000FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2789206917Smarius    { LIT64( 0x000000007FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2790206917Smarius    { LIT64( 0x000000003FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2791206917Smarius    { LIT64( 0x000000001FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2792206917Smarius    { LIT64( 0x000000000FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2793206917Smarius    { LIT64( 0x0000000007FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2794206917Smarius    { LIT64( 0x0000000003FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2795206917Smarius    { LIT64( 0x0000000001FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2796206917Smarius    { LIT64( 0x0000000000FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2797206917Smarius    { LIT64( 0x00000000007FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2798206917Smarius    { LIT64( 0x00000000003FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2799206917Smarius    { LIT64( 0x00000000001FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2800206917Smarius    { LIT64( 0x00000000000FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2801206917Smarius    { LIT64( 0x000000000007FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2802206917Smarius    { LIT64( 0x000000000003FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2803206917Smarius    { LIT64( 0x000000000001FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2804206917Smarius    { LIT64( 0x000000000000FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2805206917Smarius    { LIT64( 0x0000000000007FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2806206917Smarius    { LIT64( 0x0000000000003FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2807206917Smarius    { LIT64( 0x0000000000001FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2808206917Smarius    { LIT64( 0x0000000000000FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2809206917Smarius    { LIT64( 0x00000000000007FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2810206917Smarius    { LIT64( 0x00000000000003FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2811206917Smarius    { LIT64( 0x00000000000001FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2812206917Smarius    { LIT64( 0x00000000000000FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2813206917Smarius    { LIT64( 0x000000000000007F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2814206917Smarius    { LIT64( 0x000000000000003F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2815206917Smarius    { LIT64( 0x000000000000001F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2816206917Smarius    { LIT64( 0x000000000000000F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2817206917Smarius    { LIT64( 0x0000000000000007 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2818206917Smarius    { LIT64( 0x0000000000000003 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2819206917Smarius    { LIT64( 0x0000000000000001 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2820206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2821206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
2822206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x3FFFFFFFFFFFFFFF ) },
2823206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x1FFFFFFFFFFFFFFF ) },
2824206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0FFFFFFFFFFFFFFF ) },
2825206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x07FFFFFFFFFFFFFF ) },
2826206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x03FFFFFFFFFFFFFF ) },
2827206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x01FFFFFFFFFFFFFF ) },
2828206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00FFFFFFFFFFFFFF ) },
2829206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x007FFFFFFFFFFFFF ) },
2830206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x003FFFFFFFFFFFFF ) },
2831206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x001FFFFFFFFFFFFF ) },
2832206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000FFFFFFFFFFFFF ) },
2833206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0007FFFFFFFFFFFF ) },
2834206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0003FFFFFFFFFFFF ) },
2835206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0001FFFFFFFFFFFF ) },
2836206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000FFFFFFFFFFFF ) },
2837206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00007FFFFFFFFFFF ) },
2838206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00003FFFFFFFFFFF ) },
2839206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00001FFFFFFFFFFF ) },
2840206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000FFFFFFFFFFF ) },
2841206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000007FFFFFFFFFF ) },
2842206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000003FFFFFFFFFF ) },
2843206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000001FFFFFFFFFF ) },
2844206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000FFFFFFFFFF ) },
2845206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000007FFFFFFFFF ) },
2846206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000003FFFFFFFFF ) },
2847206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000001FFFFFFFFF ) },
2848206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000FFFFFFFFF ) },
2849206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000007FFFFFFFF ) },
2850206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000003FFFFFFFF ) },
2851206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000001FFFFFFFF ) },
2852206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000FFFFFFFF ) },
2853206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000007FFFFFFF ) },
2854206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000003FFFFFFF ) },
2855206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000001FFFFFFF ) },
2856206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000FFFFFFF ) },
2857206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000007FFFFFF ) },
2858206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000003FFFFFF ) },
2859206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001FFFFFF ) },
2860206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000FFFFFF ) },
2861206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000007FFFFF ) },
2862206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000003FFFFF ) },
2863206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000001FFFFF ) },
2864206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000FFFFF ) },
2865206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000007FFFF ) },
2866206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000003FFFF ) },
2867206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000001FFFF ) },
2868206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000FFFF ) },
2869206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000007FFF ) },
2870206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000003FFF ) },
2871206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001FFF ) },
2872206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000FFF ) },
2873206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000007FF ) },
2874206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000003FF ) },
2875206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000001FF ) },
2876206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000000FF ) },
2877206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000007F ) },
2878206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000003F ) },
2879206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000001F ) },
2880206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000000F ) },
2881206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000007 ) },
2882206917Smarius    { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000003 ) }
2883206917Smarius};
2884206917Smarius
2885206917Smariusstatic const uint32 float128NumQInP1 = float128NumQIn * float128NumP1;
2886206917Smariusstatic const uint32 float128NumQOutP1 = float128NumQOut * float128NumP1;
2887206917Smarius
2888206917Smariusstatic float128 float128NextQInP1( sequenceT *sequencePtr )
2889206917Smarius{
2890206917Smarius    int16 expNum, sigNum;
2891206917Smarius    float128 z;
2892206917Smarius
2893206917Smarius    sigNum = sequencePtr->term1Num;
2894206917Smarius    expNum = sequencePtr->expNum;
2895206917Smarius    z.low = float128P1[ sigNum ].low;
2896206917Smarius    z.high = float128QIn[ expNum ] | float128P1[ sigNum ].high;
2897206917Smarius    ++sigNum;
2898206917Smarius    if ( float128NumP1 <= sigNum ) {
2899206917Smarius        sigNum = 0;
2900206917Smarius        ++expNum;
2901206917Smarius        if ( float128NumQIn <= expNum ) {
2902206917Smarius            expNum = 0;
2903206917Smarius            sequencePtr->done = TRUE;
2904206917Smarius        }
2905206917Smarius        sequencePtr->expNum = expNum;
2906206917Smarius    }
2907206917Smarius    sequencePtr->term1Num = sigNum;
2908206917Smarius    return z;
2909206917Smarius
2910206917Smarius}
2911206917Smarius
2912206917Smariusstatic float128 float128NextQOutP1( sequenceT *sequencePtr )
2913206917Smarius{
2914206917Smarius    int16 expNum, sigNum;
2915206917Smarius    float128 z;
2916206917Smarius
2917206917Smarius    sigNum = sequencePtr->term1Num;
2918206917Smarius    expNum = sequencePtr->expNum;
2919206917Smarius    z.low = float128P1[ sigNum ].low;
2920206917Smarius    z.high = float128QOut[ expNum ] | float128P1[ sigNum ].high;
2921206917Smarius    ++sigNum;
2922206917Smarius    if ( float128NumP1 <= sigNum ) {
2923206917Smarius        sigNum = 0;
2924206917Smarius        ++expNum;
2925206917Smarius        if ( float128NumQOut <= expNum ) {
2926206917Smarius            expNum = 0;
2927206917Smarius            sequencePtr->done = TRUE;
2928206917Smarius        }
2929206917Smarius        sequencePtr->expNum = expNum;
2930206917Smarius    }
2931206917Smarius    sequencePtr->term1Num = sigNum;
2932206917Smarius    return z;
2933206917Smarius
2934206917Smarius}
2935206917Smarius
2936206917Smariusstatic const uint32 float128NumQInP2 = float128NumQIn * float128NumP2;
2937206917Smariusstatic const uint32 float128NumQOutP2 = float128NumQOut * float128NumP2;
2938206917Smarius
2939206917Smariusstatic float128 float128NextQInP2( sequenceT *sequencePtr )
2940206917Smarius{
2941206917Smarius    int16 expNum, sigNum;
2942206917Smarius    float128 z;
2943206917Smarius
2944206917Smarius    sigNum = sequencePtr->term1Num;
2945206917Smarius    expNum = sequencePtr->expNum;
2946206917Smarius    z.low = float128P2[ sigNum ].low;
2947206917Smarius    z.high = float128QIn[ expNum ] | float128P2[ sigNum ].high;
2948206917Smarius    ++sigNum;
2949206917Smarius    if ( float128NumP2 <= sigNum ) {
2950206917Smarius        sigNum = 0;
2951206917Smarius        ++expNum;
2952206917Smarius        if ( float128NumQIn <= expNum ) {
2953206917Smarius            expNum = 0;
2954206917Smarius            sequencePtr->done = TRUE;
2955206917Smarius        }
2956206917Smarius        sequencePtr->expNum = expNum;
2957206917Smarius    }
2958206917Smarius    sequencePtr->term1Num = sigNum;
2959206917Smarius    return z;
2960206917Smarius
2961206917Smarius}
2962206917Smarius
2963206917Smariusstatic float128 float128NextQOutP2( sequenceT *sequencePtr )
2964206917Smarius{
2965206917Smarius    int16 expNum, sigNum;
2966206917Smarius    float128 z;
2967206917Smarius
2968206917Smarius    sigNum = sequencePtr->term1Num;
2969206917Smarius    expNum = sequencePtr->expNum;
2970206917Smarius    z.low = float128P2[ sigNum ].low;
2971206917Smarius    z.high = float128QOut[ expNum ] | float128P2[ sigNum ].high;
2972206917Smarius    ++sigNum;
2973206917Smarius    if ( float128NumP2 <= sigNum ) {
2974206917Smarius        sigNum = 0;
2975206917Smarius        ++expNum;
2976206917Smarius        if ( float128NumQOut <= expNum ) {
2977206917Smarius            expNum = 0;
2978206917Smarius            sequencePtr->done = TRUE;
2979206917Smarius        }
2980206917Smarius        sequencePtr->expNum = expNum;
2981206917Smarius    }
2982206917Smarius    sequencePtr->term1Num = sigNum;
2983206917Smarius    return z;
2984206917Smarius
2985206917Smarius}
2986206917Smarius
2987206917Smariusstatic float128 float128RandomQOutP3( void )
2988206917Smarius{
2989206917Smarius    int16 sigNum1, sigNum2;
2990206917Smarius    uint64 sig1Low, sig2Low;
2991206917Smarius    float128 z;
2992206917Smarius
2993206917Smarius    sigNum1 = randomUint8() % float128NumP2;
2994206917Smarius    sigNum2 = randomUint8() % float128NumP2;
2995206917Smarius    sig1Low = float128P2[ sigNum1 ].low;
2996206917Smarius    sig2Low = float128P2[ sigNum2 ].low;
2997206917Smarius    z.low = sig1Low + sig2Low;
2998206917Smarius    z.high =
2999206917Smarius          float128QOut[ randomUint8() % float128NumQOut ]
3000206917Smarius        | (   (   float128P2[ sigNum1 ].high
3001206917Smarius                + float128P2[ sigNum2 ].high
3002206917Smarius                + ( z.low < sig1Low )
3003206917Smarius              )
3004206917Smarius            & LIT64( 0x0000FFFFFFFFFFFF )
3005206917Smarius          );
3006206917Smarius    return z;
3007206917Smarius
3008206917Smarius}
3009206917Smarius
3010206917Smariusstatic float128 float128RandomQOutPInf( void )
3011206917Smarius{
3012206917Smarius    float128 z;
3013206917Smarius
3014206917Smarius    z.low = randomUint64();
3015206917Smarius    z.high =
3016206917Smarius          float128QOut[ randomUint8() % float128NumQOut ]
3017206917Smarius        | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
3018206917Smarius    return z;
3019206917Smarius
3020206917Smarius}
3021206917Smarius
3022206917Smariusenum {
3023206917Smarius    float128NumQInfWeightMasks = 14
3024206917Smarius};
3025206917Smarius
3026206917Smariusstatic const uint64 float128QInfWeightMasks[ float128NumQInfWeightMasks ] = {
3027206917Smarius    LIT64( 0x7FFF000000000000 ),
3028206917Smarius    LIT64( 0x7FFF000000000000 ),
3029206917Smarius    LIT64( 0x3FFF000000000000 ),
3030206917Smarius    LIT64( 0x1FFF000000000000 ),
3031206917Smarius    LIT64( 0x07FF000000000000 ),
3032206917Smarius    LIT64( 0x07FF000000000000 ),
3033206917Smarius    LIT64( 0x03FF000000000000 ),
3034206917Smarius    LIT64( 0x01FF000000000000 ),
3035206917Smarius    LIT64( 0x00FF000000000000 ),
3036206917Smarius    LIT64( 0x007F000000000000 ),
3037206917Smarius    LIT64( 0x003F000000000000 ),
3038206917Smarius    LIT64( 0x001F000000000000 ),
3039206917Smarius    LIT64( 0x000F000000000000 ),
3040206917Smarius    LIT64( 0x0007000000000000 )
3041206917Smarius};
3042206917Smarius
3043206917Smariusstatic const uint64 float128QInfWeightOffsets[ float128NumQInfWeightMasks ] = {
3044206917Smarius    LIT64( 0x0000000000000000 ),
3045206917Smarius    LIT64( 0x0000000000000000 ),
3046206917Smarius    LIT64( 0x2000000000000000 ),
3047206917Smarius    LIT64( 0x3000000000000000 ),
3048206917Smarius    LIT64( 0x3800000000000000 ),
3049206917Smarius    LIT64( 0x3C00000000000000 ),
3050206917Smarius    LIT64( 0x3E00000000000000 ),
3051206917Smarius    LIT64( 0x3F00000000000000 ),
3052206917Smarius    LIT64( 0x3F80000000000000 ),
3053206917Smarius    LIT64( 0x3FC0000000000000 ),
3054206917Smarius    LIT64( 0x3FE0000000000000 ),
3055206917Smarius    LIT64( 0x3FF0000000000000 ),
3056206917Smarius    LIT64( 0x3FF8000000000000 ),
3057206917Smarius    LIT64( 0x3FFC000000000000 )
3058206917Smarius};
3059206917Smarius
3060206917Smariusstatic float128 float128RandomQInfP3( void )
3061206917Smarius{
3062206917Smarius    int16 sigNum1, sigNum2;
3063206917Smarius    uint64 sig1Low, sig2Low;
3064206917Smarius    int8 weightMaskNum;
3065206917Smarius    float128 z;
3066206917Smarius
3067206917Smarius    sigNum1 = randomUint8() % float128NumP2;
3068206917Smarius    sigNum2 = randomUint8() % float128NumP2;
3069206917Smarius    sig1Low = float128P2[ sigNum1 ].low;
3070206917Smarius    sig2Low = float128P2[ sigNum2 ].low;
3071206917Smarius    z.low = sig1Low + sig2Low;
3072206917Smarius    weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
3073206917Smarius    z.high =
3074206917Smarius          ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
3075206917Smarius        | (   (   ( ( (uint64) randomUint16() )<<48 )
3076206917Smarius                & float128QInfWeightMasks[ weightMaskNum ] )
3077206917Smarius            + float128QInfWeightOffsets[ weightMaskNum ]
3078206917Smarius          )
3079206917Smarius        | (   (   float128P2[ sigNum1 ].high
3080206917Smarius                + float128P2[ sigNum2 ].high
3081206917Smarius                + ( z.low < sig1Low )
3082206917Smarius              )
3083206917Smarius            & LIT64( 0x0000FFFFFFFFFFFF )
3084206917Smarius          );
3085206917Smarius    return z;
3086206917Smarius
3087206917Smarius}
3088206917Smarius
3089206917Smariusstatic float128 float128RandomQInfPInf( void )
3090206917Smarius{
3091206917Smarius    int8 weightMaskNum;
3092206917Smarius    float128 z;
3093206917Smarius
3094206917Smarius    weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
3095206917Smarius    z.low = randomUint64();
3096206917Smarius    z.high =
3097206917Smarius          ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
3098206917Smarius        | (   (   ( ( (uint64) randomUint16() )<<48 )
3099206917Smarius                & float128QInfWeightMasks[ weightMaskNum ] )
3100206917Smarius            + float128QInfWeightOffsets[ weightMaskNum ]
3101206917Smarius          )
3102206917Smarius        | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
3103206917Smarius    return z;
3104206917Smarius
3105206917Smarius}
3106206917Smarius
3107206917Smariusstatic float128 float128Random( void )
3108206917Smarius{
3109206917Smarius
3110206917Smarius    switch ( randomUint8() & 7 ) {
3111206917Smarius     case 0:
3112206917Smarius     case 1:
3113206917Smarius     case 2:
3114206917Smarius        return float128RandomQOutP3();
3115206917Smarius     case 3:
3116206917Smarius        return float128RandomQOutPInf();
3117206917Smarius     case 4:
3118206917Smarius     case 5:
3119206917Smarius     case 6:
3120206917Smarius        return float128RandomQInfP3();
3121207151Smarius     default:
3122206917Smarius        return float128RandomQInfPInf();
3123206917Smarius    }
3124206917Smarius
3125206917Smarius}
3126206917Smarius
3127206917Smarius#endif
3128206917Smarius
3129206917Smariusstatic int8 level = 0;
3130206917Smarius
3131206917Smariusvoid testCases_setLevel( int8 levelIn )
3132206917Smarius{
3133206917Smarius
3134206917Smarius    if ( ( levelIn < 1 ) || ( 2 < levelIn ) ) {
3135206917Smarius        fail( "Invalid testing level: %d", levelIn );
3136206917Smarius    }
3137206917Smarius    level = levelIn;
3138206917Smarius
3139206917Smarius}
3140206917Smarius
3141206917Smariusstatic int8 sequenceType;
3142206917Smariusstatic sequenceT sequenceA, sequenceB;
3143206917Smariusstatic int8 subcase;
3144206917Smarius
3145206917Smariusuint32 testCases_total;
3146206917Smariusflag testCases_done;
3147206917Smarius
3148206917Smariusstatic float32 current_a_float32;
3149206917Smariusstatic float32 current_b_float32;
3150206917Smariusstatic float64 current_a_float64;
3151206917Smariusstatic float64 current_b_float64;
3152206917Smarius#ifdef FLOATX80
3153206917Smariusstatic floatx80 current_a_floatx80;
3154206917Smariusstatic floatx80 current_b_floatx80;
3155206917Smarius#endif
3156206917Smarius#ifdef FLOAT128
3157206917Smariusstatic float128 current_a_float128;
3158206917Smariusstatic float128 current_b_float128;
3159206917Smarius#endif
3160206917Smarius
3161206917Smariusvoid testCases_initSequence( int8 sequenceTypeIn )
3162206917Smarius{
3163206917Smarius
3164206917Smarius    sequenceType = sequenceTypeIn;
3165206917Smarius    sequenceA.term2Num = 0;
3166206917Smarius    sequenceA.term1Num = 0;
3167206917Smarius    sequenceA.expNum = 0;
3168206917Smarius    sequenceA.done = FALSE;
3169206917Smarius    sequenceB.term2Num = 0;
3170206917Smarius    sequenceB.term1Num = 0;
3171206917Smarius    sequenceB.expNum = 0;
3172206917Smarius    sequenceB.done = FALSE;
3173206917Smarius    subcase = 0;
3174206917Smarius    switch ( level ) {
3175206917Smarius     case 1:
3176206917Smarius        switch ( sequenceTypeIn ) {
3177206917Smarius         case testCases_sequence_a_int32:
3178206917Smarius            testCases_total = 3 * int32NumP1;
3179206917Smarius            break;
3180206917Smarius#ifdef BITS64
3181206917Smarius         case testCases_sequence_a_int64:
3182206917Smarius            testCases_total = 3 * int64NumP1;
3183206917Smarius            break;
3184206917Smarius#endif
3185206917Smarius         case testCases_sequence_a_float32:
3186206917Smarius            testCases_total = 3 * float32NumQOutP1;
3187206917Smarius            break;
3188206917Smarius         case testCases_sequence_ab_float32:
3189206917Smarius            testCases_total = 6 * float32NumQInP1 * float32NumQInP1;
3190206917Smarius            current_a_float32 = float32NextQInP1( &sequenceA );
3191206917Smarius            break;
3192206917Smarius         case testCases_sequence_a_float64:
3193206917Smarius            testCases_total = 3 * float64NumQOutP1;
3194206917Smarius            break;
3195206917Smarius         case testCases_sequence_ab_float64:
3196206917Smarius            testCases_total = 6 * float64NumQInP1 * float64NumQInP1;
3197206917Smarius            current_a_float64 = float64NextQInP1( &sequenceA );
3198206917Smarius            break;
3199206917Smarius#ifdef FLOATX80
3200206917Smarius         case testCases_sequence_a_floatx80:
3201206917Smarius            testCases_total = 3 * floatx80NumQOutP1;
3202206917Smarius            break;
3203206917Smarius         case testCases_sequence_ab_floatx80:
3204206917Smarius            testCases_total = 6 * floatx80NumQInP1 * floatx80NumQInP1;
3205206917Smarius            current_a_floatx80 = floatx80NextQInP1( &sequenceA );
3206206917Smarius            break;
3207206917Smarius#endif
3208206917Smarius#ifdef FLOAT128
3209206917Smarius         case testCases_sequence_a_float128:
3210206917Smarius            testCases_total = 3 * float128NumQOutP1;
3211206917Smarius            break;
3212206917Smarius         case testCases_sequence_ab_float128:
3213206917Smarius            testCases_total = 6 * float128NumQInP1 * float128NumQInP1;
3214206917Smarius            current_a_float128 = float128NextQInP1( &sequenceA );
3215206917Smarius            break;
3216206917Smarius#endif
3217206917Smarius        }
3218206917Smarius        break;
3219206917Smarius     case 2:
3220206917Smarius        switch ( sequenceTypeIn ) {
3221206917Smarius         case testCases_sequence_a_int32:
3222206917Smarius            testCases_total = 2 * int32NumP2;
3223206917Smarius            break;
3224206917Smarius#ifdef BITS64
3225206917Smarius         case testCases_sequence_a_int64:
3226206917Smarius            testCases_total = 2 * int64NumP2;
3227206917Smarius            break;
3228206917Smarius#endif
3229206917Smarius         case testCases_sequence_a_float32:
3230206917Smarius            testCases_total = 2 * float32NumQOutP2;
3231206917Smarius            break;
3232206917Smarius         case testCases_sequence_ab_float32:
3233206917Smarius            testCases_total = 2 * float32NumQInP2 * float32NumQInP2;
3234206917Smarius            current_a_float32 = float32NextQInP2( &sequenceA );
3235206917Smarius            break;
3236206917Smarius         case testCases_sequence_a_float64:
3237206917Smarius            testCases_total = 2 * float64NumQOutP2;
3238206917Smarius            break;
3239206917Smarius         case testCases_sequence_ab_float64:
3240206917Smarius            testCases_total = 2 * float64NumQInP2 * float64NumQInP2;
3241206917Smarius            current_a_float64 = float64NextQInP2( &sequenceA );
3242206917Smarius            break;
3243206917Smarius#ifdef FLOATX80
3244206917Smarius         case testCases_sequence_a_floatx80:
3245206917Smarius            testCases_total = 2 * floatx80NumQOutP2;
3246206917Smarius            break;
3247206917Smarius         case testCases_sequence_ab_floatx80:
3248206917Smarius            testCases_total = 2 * floatx80NumQInP2 * floatx80NumQInP2;
3249206917Smarius            current_a_floatx80 = floatx80NextQInP2( &sequenceA );
3250206917Smarius            break;
3251206917Smarius#endif
3252206917Smarius#ifdef FLOAT128
3253206917Smarius         case testCases_sequence_a_float128:
3254206917Smarius            testCases_total = 2 * float128NumQOutP2;
3255206917Smarius            break;
3256206917Smarius         case testCases_sequence_ab_float128:
3257206917Smarius            testCases_total = 2 * float128NumQInP2 * float128NumQInP2;
3258206917Smarius            current_a_float128 = float128NextQInP2( &sequenceA );
3259206917Smarius            break;
3260206917Smarius#endif
3261206917Smarius        }
3262206917Smarius        break;
3263206917Smarius    }
3264206917Smarius    testCases_done = FALSE;
3265206917Smarius
3266206917Smarius}
3267206917Smarius
3268206917Smariusint32 testCases_a_int32;
3269206917Smarius#ifdef BITS64
3270206917Smariusint64 testCases_a_int64;
3271206917Smarius#endif
3272206917Smariusfloat32 testCases_a_float32;
3273206917Smariusfloat32 testCases_b_float32;
3274206917Smariusfloat64 testCases_a_float64;
3275206917Smariusfloat64 testCases_b_float64;
3276206917Smarius#ifdef FLOATX80
3277206917Smariusfloatx80 testCases_a_floatx80;
3278206917Smariusfloatx80 testCases_b_floatx80;
3279206917Smarius#endif
3280206917Smarius#ifdef FLOAT128
3281206917Smariusfloat128 testCases_a_float128;
3282206917Smariusfloat128 testCases_b_float128;
3283206917Smarius#endif
3284206917Smarius
3285206917Smariusvoid testCases_next( void )
3286206917Smarius{
3287206917Smarius
3288206917Smarius    switch ( level ) {
3289206917Smarius     case 1:
3290206917Smarius        switch ( sequenceType ) {
3291206917Smarius         case testCases_sequence_a_int32:
3292206917Smarius            switch ( subcase ) {
3293206917Smarius             case 0:
3294206917Smarius                testCases_a_int32 = int32RandomP3();
3295206917Smarius                break;
3296206917Smarius             case 1:
3297206917Smarius                testCases_a_int32 = int32RandomPInf();
3298206917Smarius                break;
3299206917Smarius             case 2:
3300206917Smarius                testCases_a_int32 = int32NextP1( &sequenceA );
3301206917Smarius                testCases_done = sequenceA.done;
3302206917Smarius                subcase = -1;
3303206917Smarius                break;
3304206917Smarius            }
3305206917Smarius            ++subcase;
3306206917Smarius            break;
3307206917Smarius#ifdef BITS64
3308206917Smarius         case testCases_sequence_a_int64:
3309206917Smarius            switch ( subcase ) {
3310206917Smarius             case 0:
3311206917Smarius                testCases_a_int64 = int64RandomP3();
3312206917Smarius                break;
3313206917Smarius             case 1:
3314206917Smarius                testCases_a_int64 = int64RandomPInf();
3315206917Smarius                break;
3316206917Smarius             case 2:
3317206917Smarius                testCases_a_int64 = int64NextP1( &sequenceA );
3318206917Smarius                testCases_done = sequenceA.done;
3319206917Smarius                subcase = -1;
3320206917Smarius                break;
3321206917Smarius            }
3322206917Smarius            ++subcase;
3323206917Smarius            break;
3324206917Smarius#endif
3325206917Smarius         case testCases_sequence_a_float32:
3326206917Smarius            switch ( subcase ) {
3327206917Smarius             case 0:
3328206917Smarius             case 1:
3329206917Smarius                testCases_a_float32 = float32Random();
3330206917Smarius                break;
3331206917Smarius             case 2:
3332206917Smarius                testCases_a_float32 = float32NextQOutP1( &sequenceA );
3333206917Smarius                testCases_done = sequenceA.done;
3334206917Smarius                subcase = -1;
3335206917Smarius                break;
3336206917Smarius            }
3337206917Smarius            ++subcase;
3338206917Smarius            break;
3339206917Smarius         case testCases_sequence_ab_float32:
3340206917Smarius            switch ( subcase ) {
3341206917Smarius             case 0:
3342206917Smarius                if ( sequenceB.done ) {
3343206917Smarius                    sequenceB.done = FALSE;
3344206917Smarius                    current_a_float32 = float32NextQInP1( &sequenceA );
3345206917Smarius                }
3346206917Smarius                current_b_float32 = float32NextQInP1( &sequenceB );
3347206917Smarius             case 2:
3348206917Smarius             case 4:
3349206917Smarius                testCases_a_float32 = float32Random();
3350206917Smarius                testCases_b_float32 = float32Random();
3351206917Smarius                break;
3352206917Smarius             case 1:
3353206917Smarius                testCases_a_float32 = current_a_float32;
3354206917Smarius                testCases_b_float32 = float32Random();
3355206917Smarius                break;
3356206917Smarius             case 3:
3357206917Smarius                testCases_a_float32 = float32Random();
3358206917Smarius                testCases_b_float32 = current_b_float32;
3359206917Smarius                break;
3360206917Smarius             case 5:
3361206917Smarius                testCases_a_float32 = current_a_float32;
3362206917Smarius                testCases_b_float32 = current_b_float32;
3363206917Smarius                testCases_done = sequenceA.done & sequenceB.done;
3364206917Smarius                subcase = -1;
3365206917Smarius                break;
3366206917Smarius            }
3367206917Smarius            ++subcase;
3368206917Smarius            break;
3369206917Smarius         case testCases_sequence_a_float64:
3370206917Smarius            switch ( subcase ) {
3371206917Smarius             case 0:
3372206917Smarius             case 1:
3373206917Smarius                testCases_a_float64 = float64Random();
3374206917Smarius                break;
3375206917Smarius             case 2:
3376206917Smarius                testCases_a_float64 = float64NextQOutP1( &sequenceA );
3377206917Smarius                testCases_done = sequenceA.done;
3378206917Smarius                subcase = -1;
3379206917Smarius                break;
3380206917Smarius            }
3381206917Smarius            ++subcase;
3382206917Smarius            break;
3383206917Smarius         case testCases_sequence_ab_float64:
3384206917Smarius            switch ( subcase ) {
3385206917Smarius             case 0:
3386206917Smarius                if ( sequenceB.done ) {
3387206917Smarius                    sequenceB.done = FALSE;
3388206917Smarius                    current_a_float64 = float64NextQInP1( &sequenceA );
3389206917Smarius                }
3390206917Smarius                current_b_float64 = float64NextQInP1( &sequenceB );
3391206917Smarius             case 2:
3392206917Smarius             case 4:
3393206917Smarius                testCases_a_float64 = float64Random();
3394206917Smarius                testCases_b_float64 = float64Random();
3395206917Smarius                break;
3396206917Smarius             case 1:
3397206917Smarius                testCases_a_float64 = current_a_float64;
3398206917Smarius                testCases_b_float64 = float64Random();
3399206917Smarius                break;
3400206917Smarius             case 3:
3401206917Smarius                testCases_a_float64 = float64Random();
3402206917Smarius                testCases_b_float64 = current_b_float64;
3403206917Smarius                break;
3404206917Smarius             case 5:
3405206917Smarius                testCases_a_float64 = current_a_float64;
3406206917Smarius                testCases_b_float64 = current_b_float64;
3407206917Smarius                testCases_done = sequenceA.done & sequenceB.done;
3408206917Smarius                subcase = -1;
3409206917Smarius                break;
3410206917Smarius            }
3411206917Smarius            ++subcase;
3412206917Smarius            break;
3413206917Smarius#ifdef FLOATX80
3414206917Smarius         case testCases_sequence_a_floatx80:
3415206917Smarius            switch ( subcase ) {
3416206917Smarius             case 0:
3417206917Smarius             case 1:
3418206917Smarius                testCases_a_floatx80 = floatx80Random();
3419206917Smarius                break;
3420206917Smarius             case 2:
3421206917Smarius                testCases_a_floatx80 = floatx80NextQOutP1( &sequenceA );
3422206917Smarius                testCases_done = sequenceA.done;
3423206917Smarius                subcase = -1;
3424206917Smarius                break;
3425206917Smarius            }
3426206917Smarius            ++subcase;
3427206917Smarius            break;
3428206917Smarius         case testCases_sequence_ab_floatx80:
3429206917Smarius            switch ( subcase ) {
3430206917Smarius             case 0:
3431206917Smarius                if ( sequenceB.done ) {
3432206917Smarius                    sequenceB.done = FALSE;
3433206917Smarius                    current_a_floatx80 = floatx80NextQInP1( &sequenceA );
3434206917Smarius                }
3435206917Smarius                current_b_floatx80 = floatx80NextQInP1( &sequenceB );
3436206917Smarius             case 2:
3437206917Smarius             case 4:
3438206917Smarius                testCases_a_floatx80 = floatx80Random();
3439206917Smarius                testCases_b_floatx80 = floatx80Random();
3440206917Smarius                break;
3441206917Smarius             case 1:
3442206917Smarius                testCases_a_floatx80 = current_a_floatx80;
3443206917Smarius                testCases_b_floatx80 = floatx80Random();
3444206917Smarius                break;
3445206917Smarius             case 3:
3446206917Smarius                testCases_a_floatx80 = floatx80Random();
3447206917Smarius                testCases_b_floatx80 = current_b_floatx80;
3448206917Smarius                break;
3449206917Smarius             case 5:
3450206917Smarius                testCases_a_floatx80 = current_a_floatx80;
3451206917Smarius                testCases_b_floatx80 = current_b_floatx80;
3452206917Smarius                testCases_done = sequenceA.done & sequenceB.done;
3453206917Smarius                subcase = -1;
3454206917Smarius                break;
3455206917Smarius            }
3456206917Smarius            ++subcase;
3457206917Smarius            break;
3458206917Smarius#endif
3459206917Smarius#ifdef FLOAT128
3460206917Smarius         case testCases_sequence_a_float128:
3461206917Smarius            switch ( subcase ) {
3462206917Smarius             case 0:
3463206917Smarius             case 1:
3464206917Smarius                testCases_a_float128 = float128Random();
3465206917Smarius                break;
3466206917Smarius             case 2:
3467206917Smarius                testCases_a_float128 = float128NextQOutP1( &sequenceA );
3468206917Smarius                testCases_done = sequenceA.done;
3469206917Smarius                subcase = -1;
3470206917Smarius                break;
3471206917Smarius            }
3472206917Smarius            ++subcase;
3473206917Smarius            break;
3474206917Smarius         case testCases_sequence_ab_float128:
3475206917Smarius            switch ( subcase ) {
3476206917Smarius             case 0:
3477206917Smarius                if ( sequenceB.done ) {
3478206917Smarius                    sequenceB.done = FALSE;
3479206917Smarius                    current_a_float128 = float128NextQInP1( &sequenceA );
3480206917Smarius                }
3481206917Smarius                current_b_float128 = float128NextQInP1( &sequenceB );
3482206917Smarius             case 2:
3483206917Smarius             case 4:
3484206917Smarius                testCases_a_float128 = float128Random();
3485206917Smarius                testCases_b_float128 = float128Random();
3486206917Smarius                break;
3487206917Smarius             case 1:
3488206917Smarius                testCases_a_float128 = current_a_float128;
3489206917Smarius                testCases_b_float128 = float128Random();
3490206917Smarius                break;
3491206917Smarius             case 3:
3492206917Smarius                testCases_a_float128 = float128Random();
3493206917Smarius                testCases_b_float128 = current_b_float128;
3494206917Smarius                break;
3495206917Smarius             case 5:
3496206917Smarius                testCases_a_float128 = current_a_float128;
3497206917Smarius                testCases_b_float128 = current_b_float128;
3498206917Smarius                testCases_done = sequenceA.done & sequenceB.done;
3499206917Smarius                subcase = -1;
3500206917Smarius                break;
3501206917Smarius            }
3502206917Smarius            ++subcase;
3503206917Smarius            break;
3504206917Smarius#endif
3505206917Smarius        }
3506206917Smarius        break;
3507206917Smarius     case 2:
3508206917Smarius        switch ( sequenceType ) {
3509206917Smarius         case testCases_sequence_a_int32:
3510206917Smarius            switch ( subcase ) {
3511206917Smarius             case 0:
3512206917Smarius                testCases_a_int32 = int32RandomP3();
3513206917Smarius                break;
3514206917Smarius             case 2:
3515206917Smarius                testCases_a_int32 = int32RandomPInf();
3516206917Smarius                break;
3517206917Smarius             case 3:
3518206917Smarius                subcase = -1;
3519206917Smarius             case 1:
3520206917Smarius                testCases_a_int32 = int32NextP2( &sequenceA );
3521206917Smarius                testCases_done = sequenceA.done;
3522206917Smarius                break;
3523206917Smarius            }
3524206917Smarius            ++subcase;
3525206917Smarius            break;
3526206917Smarius#ifdef BITS64
3527206917Smarius         case testCases_sequence_a_int64:
3528206917Smarius            switch ( subcase ) {
3529206917Smarius             case 0:
3530206917Smarius                testCases_a_int64 = int64RandomP3();
3531206917Smarius                break;
3532206917Smarius             case 2:
3533206917Smarius                testCases_a_int64 = int64RandomPInf();
3534206917Smarius                break;
3535206917Smarius             case 3:
3536206917Smarius                subcase = -1;
3537206917Smarius             case 1:
3538206917Smarius                testCases_a_int64 = int64NextP2( &sequenceA );
3539206917Smarius                testCases_done = sequenceA.done;
3540206917Smarius                break;
3541206917Smarius            }
3542206917Smarius            ++subcase;
3543206917Smarius            break;
3544206917Smarius#endif
3545206917Smarius         case testCases_sequence_a_float32:
3546206917Smarius            switch ( subcase ) {
3547206917Smarius             case 0:
3548206917Smarius                testCases_a_float32 = float32Random();
3549206917Smarius                break;
3550206917Smarius             case 1:
3551206917Smarius                testCases_a_float32 = float32NextQOutP2( &sequenceA );
3552206917Smarius                testCases_done = sequenceA.done;
3553206917Smarius                subcase = -1;
3554206917Smarius                break;
3555206917Smarius            }
3556206917Smarius            ++subcase;
3557206917Smarius            break;
3558206917Smarius         case testCases_sequence_ab_float32:
3559206917Smarius            switch ( subcase ) {
3560206917Smarius             case 0:
3561206917Smarius                testCases_a_float32 = float32Random();
3562206917Smarius                testCases_b_float32 = float32Random();
3563206917Smarius                break;
3564206917Smarius             case 1:
3565206917Smarius                if ( sequenceB.done ) {
3566206917Smarius                    sequenceB.done = FALSE;
3567206917Smarius                    current_a_float32 = float32NextQInP2( &sequenceA );
3568206917Smarius                }
3569206917Smarius                testCases_a_float32 = current_a_float32;
3570206917Smarius                testCases_b_float32 = float32NextQInP2( &sequenceB );
3571206917Smarius                testCases_done = sequenceA.done & sequenceB.done;
3572206917Smarius                subcase = -1;
3573206917Smarius                break;
3574206917Smarius            }
3575206917Smarius            ++subcase;
3576206917Smarius            break;
3577206917Smarius         case testCases_sequence_a_float64:
3578206917Smarius            switch ( subcase ) {
3579206917Smarius             case 0:
3580206917Smarius                testCases_a_float64 = float64Random();
3581206917Smarius                break;
3582206917Smarius             case 1:
3583206917Smarius                testCases_a_float64 = float64NextQOutP2( &sequenceA );
3584206917Smarius                testCases_done = sequenceA.done;
3585206917Smarius                subcase = -1;
3586206917Smarius                break;
3587206917Smarius            }
3588206917Smarius            ++subcase;
3589206917Smarius            break;
3590206917Smarius         case testCases_sequence_ab_float64:
3591206917Smarius            switch ( subcase ) {
3592206917Smarius             case 0:
3593206917Smarius                testCases_a_float64 = float64Random();
3594206917Smarius                testCases_b_float64 = float64Random();
3595206917Smarius                break;
3596206917Smarius             case 1:
3597206917Smarius                if ( sequenceB.done ) {
3598206917Smarius                    sequenceB.done = FALSE;
3599206917Smarius                    current_a_float64 = float64NextQInP2( &sequenceA );
3600206917Smarius                }
3601206917Smarius                testCases_a_float64 = current_a_float64;
3602206917Smarius                testCases_b_float64 = float64NextQInP2( &sequenceB );
3603206917Smarius                testCases_done = sequenceA.done & sequenceB.done;
3604206917Smarius                subcase = -1;
3605206917Smarius                break;
3606206917Smarius            }
3607206917Smarius            ++subcase;
3608206917Smarius            break;
3609206917Smarius#ifdef FLOATX80
3610206917Smarius         case testCases_sequence_a_floatx80:
3611206917Smarius            switch ( subcase ) {
3612206917Smarius             case 0:
3613206917Smarius                testCases_a_floatx80 = floatx80Random();
3614206917Smarius                break;
3615206917Smarius             case 1:
3616206917Smarius                testCases_a_floatx80 = floatx80NextQOutP2( &sequenceA );
3617206917Smarius                testCases_done = sequenceA.done;
3618206917Smarius                subcase = -1;
3619206917Smarius                break;
3620206917Smarius            }
3621206917Smarius            ++subcase;
3622206917Smarius            break;
3623206917Smarius         case testCases_sequence_ab_floatx80:
3624206917Smarius            switch ( subcase ) {
3625206917Smarius             case 0:
3626206917Smarius                testCases_a_floatx80 = floatx80Random();
3627206917Smarius                testCases_b_floatx80 = floatx80Random();
3628206917Smarius                break;
3629206917Smarius             case 1:
3630206917Smarius                if ( sequenceB.done ) {
3631206917Smarius                    sequenceB.done = FALSE;
3632206917Smarius                    current_a_floatx80 = floatx80NextQInP2( &sequenceA );
3633206917Smarius                }
3634206917Smarius                testCases_a_floatx80 = current_a_floatx80;
3635206917Smarius                testCases_b_floatx80 = floatx80NextQInP2( &sequenceB );
3636206917Smarius                testCases_done = sequenceA.done & sequenceB.done;
3637206917Smarius                subcase = -1;
3638206917Smarius                break;
3639206917Smarius            }
3640206917Smarius            ++subcase;
3641206917Smarius            break;
3642206917Smarius#endif
3643206917Smarius#ifdef FLOAT128
3644206917Smarius         case testCases_sequence_a_float128:
3645206917Smarius            switch ( subcase ) {
3646206917Smarius             case 0:
3647206917Smarius                testCases_a_float128 = float128Random();
3648206917Smarius                break;
3649206917Smarius             case 1:
3650206917Smarius                testCases_a_float128 = float128NextQOutP2( &sequenceA );
3651206917Smarius                testCases_done = sequenceA.done;
3652206917Smarius                subcase = -1;
3653206917Smarius                break;
3654206917Smarius            }
3655206917Smarius            ++subcase;
3656206917Smarius            break;
3657206917Smarius         case testCases_sequence_ab_float128:
3658206917Smarius            switch ( subcase ) {
3659206917Smarius             case 0:
3660206917Smarius                testCases_a_float128 = float128Random();
3661206917Smarius                testCases_b_float128 = float128Random();
3662206917Smarius                break;
3663206917Smarius             case 1:
3664206917Smarius                if ( sequenceB.done ) {
3665206917Smarius                    sequenceB.done = FALSE;
3666206917Smarius                    current_a_float128 = float128NextQInP2( &sequenceA );
3667206917Smarius                }
3668206917Smarius                testCases_a_float128 = current_a_float128;
3669206917Smarius                testCases_b_float128 = float128NextQInP2( &sequenceB );
3670206917Smarius                testCases_done = sequenceA.done & sequenceB.done;
3671206917Smarius                subcase = -1;
3672206917Smarius                break;
3673206917Smarius            }
3674206917Smarius            ++subcase;
3675206917Smarius            break;
3676206917Smarius#endif
3677206917Smarius        }
3678206917Smarius        break;
3679206917Smarius    }
3680206917Smarius
3681206917Smarius}
3682206917Smarius
3683