1*ce099b40Smartin /*	$NetBSD: testCases.c,v 1.5 2008/04/28 20:23:04 martin Exp $	*/
289f51f80Sross 
389f51f80Sross /* This is a derivative work. */
489f51f80Sross 
589f51f80Sross /*-
689f51f80Sross  * Copyright (c) 2001 The NetBSD Foundation, Inc.
789f51f80Sross  * All rights reserved.
889f51f80Sross  *
989f51f80Sross  * This code is derived from software contributed to The NetBSD Foundation
1089f51f80Sross  * by Ross Harvey.
1189f51f80Sross  *
1289f51f80Sross  * Redistribution and use in source and binary forms, with or without
1389f51f80Sross  * modification, are permitted provided that the following conditions
1489f51f80Sross  * are met:
1589f51f80Sross  * 1. Redistributions of source code must retain the above copyright
1689f51f80Sross  *    notice, this list of conditions and the following disclaimer.
1789f51f80Sross  * 2. Redistributions in binary form must reproduce the above copyright
1889f51f80Sross  *    notice, this list of conditions and the following disclaimer in the
1989f51f80Sross  *    documentation and/or other materials provided with the distribution.
2089f51f80Sross  *
2189f51f80Sross  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2289f51f80Sross  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2389f51f80Sross  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2489f51f80Sross  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2589f51f80Sross  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2689f51f80Sross  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2789f51f80Sross  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2889f51f80Sross  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2989f51f80Sross  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3089f51f80Sross  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3189f51f80Sross  * POSSIBILITY OF SUCH DAMAGE.
3289f51f80Sross  */
33122b058aSross 
34122b058aSross /*
35122b058aSross ===============================================================================
36122b058aSross 
37122b058aSross This C source file is part of TestFloat, Release 2a, a package of programs
38122b058aSross for testing the correctness of floating-point arithmetic complying to the
39122b058aSross IEC/IEEE Standard for Floating-Point.
40122b058aSross 
41122b058aSross Written by John R. Hauser.  More information is available through the Web
42122b058aSross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
43122b058aSross 
44122b058aSross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
45122b058aSross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
46122b058aSross TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
47122b058aSross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
48122b058aSross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
49122b058aSross 
50122b058aSross Derivative works are acceptable, even for commercial purposes, so long as
51122b058aSross (1) they include prominent notice that the work is derivative, and (2) they
52122b058aSross include prominent notice akin to these four paragraphs for those parts of
53122b058aSross this code that are retained.
54122b058aSross 
55122b058aSross ===============================================================================
56122b058aSross */
57122b058aSross 
58a9cb2700Sross #include <stdlib.h>
59a9cb2700Sross 
60122b058aSross #include "milieu.h"
61122b058aSross #include "fail.h"
62122b058aSross #include "softfloat.h"
63122b058aSross #include "testCases.h"
64a9cb2700Sross #include "random.h"
65122b058aSross 
66122b058aSross typedef struct {
67122b058aSross     int16 expNum, term1Num, term2Num;
68122b058aSross     flag done;
69122b058aSross } sequenceT;
70122b058aSross 
71122b058aSross enum {
72122b058aSross     int32NumP1 = 124
73122b058aSross };
74122b058aSross 
75122b058aSross static const uint32 int32P1[ int32NumP1 ] = {
76122b058aSross     0x00000000,
77122b058aSross     0x00000001,
78122b058aSross     0x00000002,
79122b058aSross     0x00000004,
80122b058aSross     0x00000008,
81122b058aSross     0x00000010,
82122b058aSross     0x00000020,
83122b058aSross     0x00000040,
84122b058aSross     0x00000080,
85122b058aSross     0x00000100,
86122b058aSross     0x00000200,
87122b058aSross     0x00000400,
88122b058aSross     0x00000800,
89122b058aSross     0x00001000,
90122b058aSross     0x00002000,
91122b058aSross     0x00004000,
92122b058aSross     0x00008000,
93122b058aSross     0x00010000,
94122b058aSross     0x00020000,
95122b058aSross     0x00040000,
96122b058aSross     0x00080000,
97122b058aSross     0x00100000,
98122b058aSross     0x00200000,
99122b058aSross     0x00400000,
100122b058aSross     0x00800000,
101122b058aSross     0x01000000,
102122b058aSross     0x02000000,
103122b058aSross     0x04000000,
104122b058aSross     0x08000000,
105122b058aSross     0x10000000,
106122b058aSross     0x20000000,
107122b058aSross     0x40000000,
108122b058aSross     0x80000000,
109122b058aSross     0xC0000000,
110122b058aSross     0xE0000000,
111122b058aSross     0xF0000000,
112122b058aSross     0xF8000000,
113122b058aSross     0xFC000000,
114122b058aSross     0xFE000000,
115122b058aSross     0xFF000000,
116122b058aSross     0xFF800000,
117122b058aSross     0xFFC00000,
118122b058aSross     0xFFE00000,
119122b058aSross     0xFFF00000,
120122b058aSross     0xFFF80000,
121122b058aSross     0xFFFC0000,
122122b058aSross     0xFFFE0000,
123122b058aSross     0xFFFF0000,
124122b058aSross     0xFFFF8000,
125122b058aSross     0xFFFFC000,
126122b058aSross     0xFFFFE000,
127122b058aSross     0xFFFFF000,
128122b058aSross     0xFFFFF800,
129122b058aSross     0xFFFFFC00,
130122b058aSross     0xFFFFFE00,
131122b058aSross     0xFFFFFF00,
132122b058aSross     0xFFFFFF80,
133122b058aSross     0xFFFFFFC0,
134122b058aSross     0xFFFFFFE0,
135122b058aSross     0xFFFFFFF0,
136122b058aSross     0xFFFFFFF8,
137122b058aSross     0xFFFFFFFC,
138122b058aSross     0xFFFFFFFE,
139122b058aSross     0xFFFFFFFF,
140122b058aSross     0xFFFFFFFD,
141122b058aSross     0xFFFFFFFB,
142122b058aSross     0xFFFFFFF7,
143122b058aSross     0xFFFFFFEF,
144122b058aSross     0xFFFFFFDF,
145122b058aSross     0xFFFFFFBF,
146122b058aSross     0xFFFFFF7F,
147122b058aSross     0xFFFFFEFF,
148122b058aSross     0xFFFFFDFF,
149122b058aSross     0xFFFFFBFF,
150122b058aSross     0xFFFFF7FF,
151122b058aSross     0xFFFFEFFF,
152122b058aSross     0xFFFFDFFF,
153122b058aSross     0xFFFFBFFF,
154122b058aSross     0xFFFF7FFF,
155122b058aSross     0xFFFEFFFF,
156122b058aSross     0xFFFDFFFF,
157122b058aSross     0xFFFBFFFF,
158122b058aSross     0xFFF7FFFF,
159122b058aSross     0xFFEFFFFF,
160122b058aSross     0xFFDFFFFF,
161122b058aSross     0xFFBFFFFF,
162122b058aSross     0xFF7FFFFF,
163122b058aSross     0xFEFFFFFF,
164122b058aSross     0xFDFFFFFF,
165122b058aSross     0xFBFFFFFF,
166122b058aSross     0xF7FFFFFF,
167122b058aSross     0xEFFFFFFF,
168122b058aSross     0xDFFFFFFF,
169122b058aSross     0xBFFFFFFF,
170122b058aSross     0x7FFFFFFF,
171122b058aSross     0x3FFFFFFF,
172122b058aSross     0x1FFFFFFF,
173122b058aSross     0x0FFFFFFF,
174122b058aSross     0x07FFFFFF,
175122b058aSross     0x03FFFFFF,
176122b058aSross     0x01FFFFFF,
177122b058aSross     0x00FFFFFF,
178122b058aSross     0x007FFFFF,
179122b058aSross     0x003FFFFF,
180122b058aSross     0x001FFFFF,
181122b058aSross     0x000FFFFF,
182122b058aSross     0x0007FFFF,
183122b058aSross     0x0003FFFF,
184122b058aSross     0x0001FFFF,
185122b058aSross     0x0000FFFF,
186122b058aSross     0x00007FFF,
187122b058aSross     0x00003FFF,
188122b058aSross     0x00001FFF,
189122b058aSross     0x00000FFF,
190122b058aSross     0x000007FF,
191122b058aSross     0x000003FF,
192122b058aSross     0x000001FF,
193122b058aSross     0x000000FF,
194122b058aSross     0x0000007F,
195122b058aSross     0x0000003F,
196122b058aSross     0x0000001F,
197122b058aSross     0x0000000F,
198122b058aSross     0x00000007,
199122b058aSross     0x00000003
200122b058aSross };
201122b058aSross 
int32NextP1(sequenceT * sequencePtr)202122b058aSross static int32 int32NextP1( sequenceT *sequencePtr )
203122b058aSross {
204122b058aSross     uint8 termNum;
205122b058aSross     int32 z;
206122b058aSross 
207122b058aSross     termNum = sequencePtr->term1Num;
208122b058aSross     z = int32P1[ termNum ];
209122b058aSross     ++termNum;
210122b058aSross     if ( int32NumP1 <= termNum ) {
211122b058aSross         termNum = 0;
212122b058aSross         sequencePtr->done = TRUE;
213122b058aSross     }
214122b058aSross     sequencePtr->term1Num = termNum;
215122b058aSross     return (sbits32) z;
216122b058aSross 
217122b058aSross }
218122b058aSross 
219122b058aSross static const int32 int32NumP2 = ( int32NumP1 * int32NumP1 + int32NumP1 ) / 2;
220122b058aSross 
int32NextP2(sequenceT * sequencePtr)221122b058aSross static int32 int32NextP2( sequenceT *sequencePtr )
222122b058aSross {
223122b058aSross     uint8 term1Num, term2Num;
224122b058aSross     int32 z;
225122b058aSross 
226122b058aSross     term2Num = sequencePtr->term2Num;
227122b058aSross     term1Num = sequencePtr->term1Num;
228122b058aSross     z = int32P1[ term1Num ] + int32P1[ term2Num ];
229122b058aSross     ++term2Num;
230122b058aSross     if ( int32NumP1 <= term2Num ) {
231122b058aSross         ++term1Num;
232122b058aSross         if ( int32NumP1 <= term1Num ) {
233122b058aSross             term1Num = 0;
234122b058aSross             sequencePtr->done = TRUE;
235122b058aSross         }
236122b058aSross         term2Num = term1Num;
237122b058aSross         sequencePtr->term1Num = term1Num;
238122b058aSross     }
239122b058aSross     sequencePtr->term2Num = term2Num;
240122b058aSross     return (sbits32) z;
241122b058aSross 
242122b058aSross }
243122b058aSross 
int32RandomP3(void)244122b058aSross static int32 int32RandomP3( void )
245122b058aSross {
246122b058aSross 
247122b058aSross     return
248122b058aSross         (sbits32) (
249122b058aSross               int32P1[ randomUint8() % int32NumP1 ]
250122b058aSross             + int32P1[ randomUint8() % int32NumP1 ]
251122b058aSross             + int32P1[ randomUint8() % int32NumP1 ]
252122b058aSross         );
253122b058aSross 
254122b058aSross }
255122b058aSross 
256122b058aSross enum {
257122b058aSross     int32NumPInfWeightMasks = 29
258122b058aSross };
259122b058aSross 
260122b058aSross static const uint32 int32PInfWeightMasks[ int32NumPInfWeightMasks ] = {
261122b058aSross     0xFFFFFFFF,
262122b058aSross     0x7FFFFFFF,
263122b058aSross     0x3FFFFFFF,
264122b058aSross     0x1FFFFFFF,
265122b058aSross     0x0FFFFFFF,
266122b058aSross     0x07FFFFFF,
267122b058aSross     0x03FFFFFF,
268122b058aSross     0x01FFFFFF,
269122b058aSross     0x00FFFFFF,
270122b058aSross     0x007FFFFF,
271122b058aSross     0x003FFFFF,
272122b058aSross     0x001FFFFF,
273122b058aSross     0x000FFFFF,
274122b058aSross     0x0007FFFF,
275122b058aSross     0x0003FFFF,
276122b058aSross     0x0001FFFF,
277122b058aSross     0x0000FFFF,
278122b058aSross     0x00007FFF,
279122b058aSross     0x00003FFF,
280122b058aSross     0x00001FFF,
281122b058aSross     0x00000FFF,
282122b058aSross     0x000007FF,
283122b058aSross     0x000003FF,
284122b058aSross     0x000001FF,
285122b058aSross     0x000000FF,
286122b058aSross     0x0000007F,
287122b058aSross     0x0000003F,
288122b058aSross     0x0000001F,
289122b058aSross     0x0000000F
290122b058aSross };
291122b058aSross 
292122b058aSross static const uint32 int32PInfWeightOffsets[ int32NumPInfWeightMasks ] = {
293122b058aSross     0x00000000,
294122b058aSross     0xC0000000,
295122b058aSross     0xE0000000,
296122b058aSross     0xF0000000,
297122b058aSross     0xF8000000,
298122b058aSross     0xFC000000,
299122b058aSross     0xFE000000,
300122b058aSross     0xFF000000,
301122b058aSross     0xFF800000,
302122b058aSross     0xFFC00000,
303122b058aSross     0xFFE00000,
304122b058aSross     0xFFF00000,
305122b058aSross     0xFFF80000,
306122b058aSross     0xFFFC0000,
307122b058aSross     0xFFFE0000,
308122b058aSross     0xFFFF0000,
309122b058aSross     0xFFFF8000,
310122b058aSross     0xFFFFC000,
311122b058aSross     0xFFFFE000,
312122b058aSross     0xFFFFF000,
313122b058aSross     0xFFFFF800,
314122b058aSross     0xFFFFFC00,
315122b058aSross     0xFFFFFE00,
316122b058aSross     0xFFFFFF00,
317122b058aSross     0xFFFFFF80,
318122b058aSross     0xFFFFFFC0,
319122b058aSross     0xFFFFFFE0,
320122b058aSross     0xFFFFFFF0,
321122b058aSross     0xFFFFFFF8
322122b058aSross };
323122b058aSross 
int32RandomPInf(void)324122b058aSross static int32 int32RandomPInf( void )
325122b058aSross {
326122b058aSross     int8 weightMaskNum;
327122b058aSross 
328122b058aSross     weightMaskNum = randomUint8() % int32NumPInfWeightMasks;
329122b058aSross     return
330122b058aSross         (sbits32) (
331122b058aSross               ( randomUint32() & int32PInfWeightMasks[ weightMaskNum ] )
332122b058aSross             + int32PInfWeightOffsets[ weightMaskNum ]
333122b058aSross         );
334122b058aSross 
335122b058aSross }
336122b058aSross 
337122b058aSross #ifdef BITS64
338122b058aSross 
339122b058aSross enum {
340122b058aSross     int64NumP1 = 252
341122b058aSross };
342122b058aSross 
343122b058aSross static const uint64 int64P1[ int64NumP1 ] = {
344122b058aSross     LIT64( 0x0000000000000000 ),
345122b058aSross     LIT64( 0x0000000000000001 ),
346122b058aSross     LIT64( 0x0000000000000002 ),
347122b058aSross     LIT64( 0x0000000000000004 ),
348122b058aSross     LIT64( 0x0000000000000008 ),
349122b058aSross     LIT64( 0x0000000000000010 ),
350122b058aSross     LIT64( 0x0000000000000020 ),
351122b058aSross     LIT64( 0x0000000000000040 ),
352122b058aSross     LIT64( 0x0000000000000080 ),
353122b058aSross     LIT64( 0x0000000000000100 ),
354122b058aSross     LIT64( 0x0000000000000200 ),
355122b058aSross     LIT64( 0x0000000000000400 ),
356122b058aSross     LIT64( 0x0000000000000800 ),
357122b058aSross     LIT64( 0x0000000000001000 ),
358122b058aSross     LIT64( 0x0000000000002000 ),
359122b058aSross     LIT64( 0x0000000000004000 ),
360122b058aSross     LIT64( 0x0000000000008000 ),
361122b058aSross     LIT64( 0x0000000000010000 ),
362122b058aSross     LIT64( 0x0000000000020000 ),
363122b058aSross     LIT64( 0x0000000000040000 ),
364122b058aSross     LIT64( 0x0000000000080000 ),
365122b058aSross     LIT64( 0x0000000000100000 ),
366122b058aSross     LIT64( 0x0000000000200000 ),
367122b058aSross     LIT64( 0x0000000000400000 ),
368122b058aSross     LIT64( 0x0000000000800000 ),
369122b058aSross     LIT64( 0x0000000001000000 ),
370122b058aSross     LIT64( 0x0000000002000000 ),
371122b058aSross     LIT64( 0x0000000004000000 ),
372122b058aSross     LIT64( 0x0000000008000000 ),
373122b058aSross     LIT64( 0x0000000010000000 ),
374122b058aSross     LIT64( 0x0000000020000000 ),
375122b058aSross     LIT64( 0x0000000040000000 ),
376122b058aSross     LIT64( 0x0000000080000000 ),
377122b058aSross     LIT64( 0x0000000100000000 ),
378122b058aSross     LIT64( 0x0000000200000000 ),
379122b058aSross     LIT64( 0x0000000400000000 ),
380122b058aSross     LIT64( 0x0000000800000000 ),
381122b058aSross     LIT64( 0x0000001000000000 ),
382122b058aSross     LIT64( 0x0000002000000000 ),
383122b058aSross     LIT64( 0x0000004000000000 ),
384122b058aSross     LIT64( 0x0000008000000000 ),
385122b058aSross     LIT64( 0x0000010000000000 ),
386122b058aSross     LIT64( 0x0000020000000000 ),
387122b058aSross     LIT64( 0x0000040000000000 ),
388122b058aSross     LIT64( 0x0000080000000000 ),
389122b058aSross     LIT64( 0x0000100000000000 ),
390122b058aSross     LIT64( 0x0000200000000000 ),
391122b058aSross     LIT64( 0x0000400000000000 ),
392122b058aSross     LIT64( 0x0000800000000000 ),
393122b058aSross     LIT64( 0x0001000000000000 ),
394122b058aSross     LIT64( 0x0002000000000000 ),
395122b058aSross     LIT64( 0x0004000000000000 ),
396122b058aSross     LIT64( 0x0008000000000000 ),
397122b058aSross     LIT64( 0x0010000000000000 ),
398122b058aSross     LIT64( 0x0020000000000000 ),
399122b058aSross     LIT64( 0x0040000000000000 ),
400122b058aSross     LIT64( 0x0080000000000000 ),
401122b058aSross     LIT64( 0x0100000000000000 ),
402122b058aSross     LIT64( 0x0200000000000000 ),
403122b058aSross     LIT64( 0x0400000000000000 ),
404122b058aSross     LIT64( 0x0800000000000000 ),
405122b058aSross     LIT64( 0x1000000000000000 ),
406122b058aSross     LIT64( 0x2000000000000000 ),
407122b058aSross     LIT64( 0x4000000000000000 ),
408122b058aSross     LIT64( 0x8000000000000000 ),
409122b058aSross     LIT64( 0xC000000000000000 ),
410122b058aSross     LIT64( 0xE000000000000000 ),
411122b058aSross     LIT64( 0xF000000000000000 ),
412122b058aSross     LIT64( 0xF800000000000000 ),
413122b058aSross     LIT64( 0xFC00000000000000 ),
414122b058aSross     LIT64( 0xFE00000000000000 ),
415122b058aSross     LIT64( 0xFF00000000000000 ),
416122b058aSross     LIT64( 0xFF80000000000000 ),
417122b058aSross     LIT64( 0xFFC0000000000000 ),
418122b058aSross     LIT64( 0xFFE0000000000000 ),
419122b058aSross     LIT64( 0xFFF0000000000000 ),
420122b058aSross     LIT64( 0xFFF8000000000000 ),
421122b058aSross     LIT64( 0xFFFC000000000000 ),
422122b058aSross     LIT64( 0xFFFE000000000000 ),
423122b058aSross     LIT64( 0xFFFF000000000000 ),
424122b058aSross     LIT64( 0xFFFF800000000000 ),
425122b058aSross     LIT64( 0xFFFFC00000000000 ),
426122b058aSross     LIT64( 0xFFFFE00000000000 ),
427122b058aSross     LIT64( 0xFFFFF00000000000 ),
428122b058aSross     LIT64( 0xFFFFF80000000000 ),
429122b058aSross     LIT64( 0xFFFFFC0000000000 ),
430122b058aSross     LIT64( 0xFFFFFE0000000000 ),
431122b058aSross     LIT64( 0xFFFFFF0000000000 ),
432122b058aSross     LIT64( 0xFFFFFF8000000000 ),
433122b058aSross     LIT64( 0xFFFFFFC000000000 ),
434122b058aSross     LIT64( 0xFFFFFFE000000000 ),
435122b058aSross     LIT64( 0xFFFFFFF000000000 ),
436122b058aSross     LIT64( 0xFFFFFFF800000000 ),
437122b058aSross     LIT64( 0xFFFFFFFC00000000 ),
438122b058aSross     LIT64( 0xFFFFFFFE00000000 ),
439122b058aSross     LIT64( 0xFFFFFFFF00000000 ),
440122b058aSross     LIT64( 0xFFFFFFFF80000000 ),
441122b058aSross     LIT64( 0xFFFFFFFFC0000000 ),
442122b058aSross     LIT64( 0xFFFFFFFFE0000000 ),
443122b058aSross     LIT64( 0xFFFFFFFFF0000000 ),
444122b058aSross     LIT64( 0xFFFFFFFFF8000000 ),
445122b058aSross     LIT64( 0xFFFFFFFFFC000000 ),
446122b058aSross     LIT64( 0xFFFFFFFFFE000000 ),
447122b058aSross     LIT64( 0xFFFFFFFFFF000000 ),
448122b058aSross     LIT64( 0xFFFFFFFFFF800000 ),
449122b058aSross     LIT64( 0xFFFFFFFFFFC00000 ),
450122b058aSross     LIT64( 0xFFFFFFFFFFE00000 ),
451122b058aSross     LIT64( 0xFFFFFFFFFFF00000 ),
452122b058aSross     LIT64( 0xFFFFFFFFFFF80000 ),
453122b058aSross     LIT64( 0xFFFFFFFFFFFC0000 ),
454122b058aSross     LIT64( 0xFFFFFFFFFFFE0000 ),
455122b058aSross     LIT64( 0xFFFFFFFFFFFF0000 ),
456122b058aSross     LIT64( 0xFFFFFFFFFFFF8000 ),
457122b058aSross     LIT64( 0xFFFFFFFFFFFFC000 ),
458122b058aSross     LIT64( 0xFFFFFFFFFFFFE000 ),
459122b058aSross     LIT64( 0xFFFFFFFFFFFFF000 ),
460122b058aSross     LIT64( 0xFFFFFFFFFFFFF800 ),
461122b058aSross     LIT64( 0xFFFFFFFFFFFFFC00 ),
462122b058aSross     LIT64( 0xFFFFFFFFFFFFFE00 ),
463122b058aSross     LIT64( 0xFFFFFFFFFFFFFF00 ),
464122b058aSross     LIT64( 0xFFFFFFFFFFFFFF80 ),
465122b058aSross     LIT64( 0xFFFFFFFFFFFFFFC0 ),
466122b058aSross     LIT64( 0xFFFFFFFFFFFFFFE0 ),
467122b058aSross     LIT64( 0xFFFFFFFFFFFFFFF0 ),
468122b058aSross     LIT64( 0xFFFFFFFFFFFFFFF8 ),
469122b058aSross     LIT64( 0xFFFFFFFFFFFFFFFC ),
470122b058aSross     LIT64( 0xFFFFFFFFFFFFFFFE ),
471122b058aSross     LIT64( 0xFFFFFFFFFFFFFFFF ),
472122b058aSross     LIT64( 0xFFFFFFFFFFFFFFFD ),
473122b058aSross     LIT64( 0xFFFFFFFFFFFFFFFB ),
474122b058aSross     LIT64( 0xFFFFFFFFFFFFFFF7 ),
475122b058aSross     LIT64( 0xFFFFFFFFFFFFFFEF ),
476122b058aSross     LIT64( 0xFFFFFFFFFFFFFFDF ),
477122b058aSross     LIT64( 0xFFFFFFFFFFFFFFBF ),
478122b058aSross     LIT64( 0xFFFFFFFFFFFFFF7F ),
479122b058aSross     LIT64( 0xFFFFFFFFFFFFFEFF ),
480122b058aSross     LIT64( 0xFFFFFFFFFFFFFDFF ),
481122b058aSross     LIT64( 0xFFFFFFFFFFFFFBFF ),
482122b058aSross     LIT64( 0xFFFFFFFFFFFFF7FF ),
483122b058aSross     LIT64( 0xFFFFFFFFFFFFEFFF ),
484122b058aSross     LIT64( 0xFFFFFFFFFFFFDFFF ),
485122b058aSross     LIT64( 0xFFFFFFFFFFFFBFFF ),
486122b058aSross     LIT64( 0xFFFFFFFFFFFF7FFF ),
487122b058aSross     LIT64( 0xFFFFFFFFFFFEFFFF ),
488122b058aSross     LIT64( 0xFFFFFFFFFFFDFFFF ),
489122b058aSross     LIT64( 0xFFFFFFFFFFFBFFFF ),
490122b058aSross     LIT64( 0xFFFFFFFFFFF7FFFF ),
491122b058aSross     LIT64( 0xFFFFFFFFFFEFFFFF ),
492122b058aSross     LIT64( 0xFFFFFFFFFFDFFFFF ),
493122b058aSross     LIT64( 0xFFFFFFFFFFBFFFFF ),
494122b058aSross     LIT64( 0xFFFFFFFFFF7FFFFF ),
495122b058aSross     LIT64( 0xFFFFFFFFFEFFFFFF ),
496122b058aSross     LIT64( 0xFFFFFFFFFDFFFFFF ),
497122b058aSross     LIT64( 0xFFFFFFFFFBFFFFFF ),
498122b058aSross     LIT64( 0xFFFFFFFFF7FFFFFF ),
499122b058aSross     LIT64( 0xFFFFFFFFEFFFFFFF ),
500122b058aSross     LIT64( 0xFFFFFFFFDFFFFFFF ),
501122b058aSross     LIT64( 0xFFFFFFFFBFFFFFFF ),
502122b058aSross     LIT64( 0xFFFFFFFF7FFFFFFF ),
503122b058aSross     LIT64( 0xFFFFFFFEFFFFFFFF ),
504122b058aSross     LIT64( 0xFFFFFFFDFFFFFFFF ),
505122b058aSross     LIT64( 0xFFFFFFFBFFFFFFFF ),
506122b058aSross     LIT64( 0xFFFFFFF7FFFFFFFF ),
507122b058aSross     LIT64( 0xFFFFFFEFFFFFFFFF ),
508122b058aSross     LIT64( 0xFFFFFFDFFFFFFFFF ),
509122b058aSross     LIT64( 0xFFFFFFBFFFFFFFFF ),
510122b058aSross     LIT64( 0xFFFFFF7FFFFFFFFF ),
511122b058aSross     LIT64( 0xFFFFFEFFFFFFFFFF ),
512122b058aSross     LIT64( 0xFFFFFDFFFFFFFFFF ),
513122b058aSross     LIT64( 0xFFFFFBFFFFFFFFFF ),
514122b058aSross     LIT64( 0xFFFFF7FFFFFFFFFF ),
515122b058aSross     LIT64( 0xFFFFEFFFFFFFFFFF ),
516122b058aSross     LIT64( 0xFFFFDFFFFFFFFFFF ),
517122b058aSross     LIT64( 0xFFFFBFFFFFFFFFFF ),
518122b058aSross     LIT64( 0xFFFF7FFFFFFFFFFF ),
519122b058aSross     LIT64( 0xFFFEFFFFFFFFFFFF ),
520122b058aSross     LIT64( 0xFFFDFFFFFFFFFFFF ),
521122b058aSross     LIT64( 0xFFFBFFFFFFFFFFFF ),
522122b058aSross     LIT64( 0xFFF7FFFFFFFFFFFF ),
523122b058aSross     LIT64( 0xFFEFFFFFFFFFFFFF ),
524122b058aSross     LIT64( 0xFFDFFFFFFFFFFFFF ),
525122b058aSross     LIT64( 0xFFBFFFFFFFFFFFFF ),
526122b058aSross     LIT64( 0xFF7FFFFFFFFFFFFF ),
527122b058aSross     LIT64( 0xFEFFFFFFFFFFFFFF ),
528122b058aSross     LIT64( 0xFDFFFFFFFFFFFFFF ),
529122b058aSross     LIT64( 0xFBFFFFFFFFFFFFFF ),
530122b058aSross     LIT64( 0xF7FFFFFFFFFFFFFF ),
531122b058aSross     LIT64( 0xEFFFFFFFFFFFFFFF ),
532122b058aSross     LIT64( 0xDFFFFFFFFFFFFFFF ),
533122b058aSross     LIT64( 0xBFFFFFFFFFFFFFFF ),
534122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFF ),
535122b058aSross     LIT64( 0x3FFFFFFFFFFFFFFF ),
536122b058aSross     LIT64( 0x1FFFFFFFFFFFFFFF ),
537122b058aSross     LIT64( 0x0FFFFFFFFFFFFFFF ),
538122b058aSross     LIT64( 0x07FFFFFFFFFFFFFF ),
539122b058aSross     LIT64( 0x03FFFFFFFFFFFFFF ),
540122b058aSross     LIT64( 0x01FFFFFFFFFFFFFF ),
541122b058aSross     LIT64( 0x00FFFFFFFFFFFFFF ),
542122b058aSross     LIT64( 0x007FFFFFFFFFFFFF ),
543122b058aSross     LIT64( 0x003FFFFFFFFFFFFF ),
544122b058aSross     LIT64( 0x001FFFFFFFFFFFFF ),
545122b058aSross     LIT64( 0x000FFFFFFFFFFFFF ),
546122b058aSross     LIT64( 0x0007FFFFFFFFFFFF ),
547122b058aSross     LIT64( 0x0003FFFFFFFFFFFF ),
548122b058aSross     LIT64( 0x0001FFFFFFFFFFFF ),
549122b058aSross     LIT64( 0x0000FFFFFFFFFFFF ),
550122b058aSross     LIT64( 0x00007FFFFFFFFFFF ),
551122b058aSross     LIT64( 0x00003FFFFFFFFFFF ),
552122b058aSross     LIT64( 0x00001FFFFFFFFFFF ),
553122b058aSross     LIT64( 0x00000FFFFFFFFFFF ),
554122b058aSross     LIT64( 0x000007FFFFFFFFFF ),
555122b058aSross     LIT64( 0x000003FFFFFFFFFF ),
556122b058aSross     LIT64( 0x000001FFFFFFFFFF ),
557122b058aSross     LIT64( 0x000000FFFFFFFFFF ),
558122b058aSross     LIT64( 0x0000007FFFFFFFFF ),
559122b058aSross     LIT64( 0x0000003FFFFFFFFF ),
560122b058aSross     LIT64( 0x0000001FFFFFFFFF ),
561122b058aSross     LIT64( 0x0000000FFFFFFFFF ),
562122b058aSross     LIT64( 0x00000007FFFFFFFF ),
563122b058aSross     LIT64( 0x00000003FFFFFFFF ),
564122b058aSross     LIT64( 0x00000001FFFFFFFF ),
565122b058aSross     LIT64( 0x00000000FFFFFFFF ),
566122b058aSross     LIT64( 0x000000007FFFFFFF ),
567122b058aSross     LIT64( 0x000000003FFFFFFF ),
568122b058aSross     LIT64( 0x000000001FFFFFFF ),
569122b058aSross     LIT64( 0x000000000FFFFFFF ),
570122b058aSross     LIT64( 0x0000000007FFFFFF ),
571122b058aSross     LIT64( 0x0000000003FFFFFF ),
572122b058aSross     LIT64( 0x0000000001FFFFFF ),
573122b058aSross     LIT64( 0x0000000000FFFFFF ),
574122b058aSross     LIT64( 0x00000000007FFFFF ),
575122b058aSross     LIT64( 0x00000000003FFFFF ),
576122b058aSross     LIT64( 0x00000000001FFFFF ),
577122b058aSross     LIT64( 0x00000000000FFFFF ),
578122b058aSross     LIT64( 0x000000000007FFFF ),
579122b058aSross     LIT64( 0x000000000003FFFF ),
580122b058aSross     LIT64( 0x000000000001FFFF ),
581122b058aSross     LIT64( 0x000000000000FFFF ),
582122b058aSross     LIT64( 0x0000000000007FFF ),
583122b058aSross     LIT64( 0x0000000000003FFF ),
584122b058aSross     LIT64( 0x0000000000001FFF ),
585122b058aSross     LIT64( 0x0000000000000FFF ),
586122b058aSross     LIT64( 0x00000000000007FF ),
587122b058aSross     LIT64( 0x00000000000003FF ),
588122b058aSross     LIT64( 0x00000000000001FF ),
589122b058aSross     LIT64( 0x00000000000000FF ),
590122b058aSross     LIT64( 0x000000000000007F ),
591122b058aSross     LIT64( 0x000000000000003F ),
592122b058aSross     LIT64( 0x000000000000001F ),
593122b058aSross     LIT64( 0x000000000000000F ),
594122b058aSross     LIT64( 0x0000000000000007 ),
595122b058aSross     LIT64( 0x0000000000000003 )
596122b058aSross };
597122b058aSross 
int64NextP1(sequenceT * sequencePtr)598122b058aSross static int64 int64NextP1( sequenceT *sequencePtr )
599122b058aSross {
600122b058aSross     uint8 termNum;
601122b058aSross     int64 z;
602122b058aSross 
603122b058aSross     termNum = sequencePtr->term1Num;
604122b058aSross     z = int64P1[ termNum ];
605122b058aSross     ++termNum;
606122b058aSross     if ( int64NumP1 <= termNum ) {
607122b058aSross         termNum = 0;
608122b058aSross         sequencePtr->done = TRUE;
609122b058aSross     }
610122b058aSross     sequencePtr->term1Num = termNum;
611122b058aSross     return (sbits64) z;
612122b058aSross 
613122b058aSross }
614122b058aSross 
615122b058aSross static const int64 int64NumP2 = ( int64NumP1 * int64NumP1 + int64NumP1 ) / 2;
616122b058aSross 
int64NextP2(sequenceT * sequencePtr)617122b058aSross static int64 int64NextP2( sequenceT *sequencePtr )
618122b058aSross {
619122b058aSross     uint8 term1Num, term2Num;
620122b058aSross     int64 z;
621122b058aSross 
622122b058aSross     term2Num = sequencePtr->term2Num;
623122b058aSross     term1Num = sequencePtr->term1Num;
624122b058aSross     z = int64P1[ term1Num ] + int64P1[ term2Num ];
625122b058aSross     ++term2Num;
626122b058aSross     if ( int64NumP1 <= term2Num ) {
627122b058aSross         ++term1Num;
628122b058aSross         if ( int64NumP1 <= term1Num ) {
629122b058aSross             term1Num = 0;
630122b058aSross             sequencePtr->done = TRUE;
631122b058aSross         }
632122b058aSross         term2Num = term1Num;
633122b058aSross         sequencePtr->term1Num = term1Num;
634122b058aSross     }
635122b058aSross     sequencePtr->term2Num = term2Num;
636122b058aSross     return (sbits64) z;
637122b058aSross 
638122b058aSross }
639122b058aSross 
int64RandomP3(void)640122b058aSross static int64 int64RandomP3( void )
641122b058aSross {
642122b058aSross 
643122b058aSross     return
644122b058aSross         (sbits64) (
645122b058aSross               int64P1[ randomUint8() % int64NumP1 ]
646122b058aSross             + int64P1[ randomUint8() % int64NumP1 ]
647122b058aSross             + int64P1[ randomUint8() % int64NumP1 ]
648122b058aSross         );
649122b058aSross 
650122b058aSross }
651122b058aSross 
652122b058aSross enum {
653122b058aSross     int64NumPInfWeightMasks = 61
654122b058aSross };
655122b058aSross 
656122b058aSross static const uint64 int64PInfWeightMasks[ int64NumPInfWeightMasks ] = {
657122b058aSross     LIT64( 0xFFFFFFFFFFFFFFFF ),
658122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFF ),
659122b058aSross     LIT64( 0x3FFFFFFFFFFFFFFF ),
660122b058aSross     LIT64( 0x1FFFFFFFFFFFFFFF ),
661122b058aSross     LIT64( 0x0FFFFFFFFFFFFFFF ),
662122b058aSross     LIT64( 0x07FFFFFFFFFFFFFF ),
663122b058aSross     LIT64( 0x03FFFFFFFFFFFFFF ),
664122b058aSross     LIT64( 0x01FFFFFFFFFFFFFF ),
665122b058aSross     LIT64( 0x00FFFFFFFFFFFFFF ),
666122b058aSross     LIT64( 0x007FFFFFFFFFFFFF ),
667122b058aSross     LIT64( 0x003FFFFFFFFFFFFF ),
668122b058aSross     LIT64( 0x001FFFFFFFFFFFFF ),
669122b058aSross     LIT64( 0x000FFFFFFFFFFFFF ),
670122b058aSross     LIT64( 0x0007FFFFFFFFFFFF ),
671122b058aSross     LIT64( 0x0003FFFFFFFFFFFF ),
672122b058aSross     LIT64( 0x0001FFFFFFFFFFFF ),
673122b058aSross     LIT64( 0x0000FFFFFFFFFFFF ),
674122b058aSross     LIT64( 0x00007FFFFFFFFFFF ),
675122b058aSross     LIT64( 0x00003FFFFFFFFFFF ),
676122b058aSross     LIT64( 0x00001FFFFFFFFFFF ),
677122b058aSross     LIT64( 0x00000FFFFFFFFFFF ),
678122b058aSross     LIT64( 0x000007FFFFFFFFFF ),
679122b058aSross     LIT64( 0x000003FFFFFFFFFF ),
680122b058aSross     LIT64( 0x000001FFFFFFFFFF ),
681122b058aSross     LIT64( 0x000000FFFFFFFFFF ),
682122b058aSross     LIT64( 0x0000007FFFFFFFFF ),
683122b058aSross     LIT64( 0x0000003FFFFFFFFF ),
684122b058aSross     LIT64( 0x0000001FFFFFFFFF ),
685122b058aSross     LIT64( 0x0000000FFFFFFFFF ),
686122b058aSross     LIT64( 0x00000007FFFFFFFF ),
687122b058aSross     LIT64( 0x00000003FFFFFFFF ),
688122b058aSross     LIT64( 0x00000001FFFFFFFF ),
689122b058aSross     LIT64( 0x00000000FFFFFFFF ),
690122b058aSross     LIT64( 0x000000007FFFFFFF ),
691122b058aSross     LIT64( 0x000000003FFFFFFF ),
692122b058aSross     LIT64( 0x000000001FFFFFFF ),
693122b058aSross     LIT64( 0x000000000FFFFFFF ),
694122b058aSross     LIT64( 0x0000000007FFFFFF ),
695122b058aSross     LIT64( 0x0000000003FFFFFF ),
696122b058aSross     LIT64( 0x0000000001FFFFFF ),
697122b058aSross     LIT64( 0x0000000000FFFFFF ),
698122b058aSross     LIT64( 0x00000000007FFFFF ),
699122b058aSross     LIT64( 0x00000000003FFFFF ),
700122b058aSross     LIT64( 0x00000000001FFFFF ),
701122b058aSross     LIT64( 0x00000000000FFFFF ),
702122b058aSross     LIT64( 0x000000000007FFFF ),
703122b058aSross     LIT64( 0x000000000003FFFF ),
704122b058aSross     LIT64( 0x000000000001FFFF ),
705122b058aSross     LIT64( 0x000000000000FFFF ),
706122b058aSross     LIT64( 0x0000000000007FFF ),
707122b058aSross     LIT64( 0x0000000000003FFF ),
708122b058aSross     LIT64( 0x0000000000001FFF ),
709122b058aSross     LIT64( 0x0000000000000FFF ),
710122b058aSross     LIT64( 0x00000000000007FF ),
711122b058aSross     LIT64( 0x00000000000003FF ),
712122b058aSross     LIT64( 0x00000000000001FF ),
713122b058aSross     LIT64( 0x00000000000000FF ),
714122b058aSross     LIT64( 0x000000000000007F ),
715122b058aSross     LIT64( 0x000000000000003F ),
716122b058aSross     LIT64( 0x000000000000001F ),
717122b058aSross     LIT64( 0x000000000000000F )
718122b058aSross };
719122b058aSross 
720122b058aSross static const uint64 int64PInfWeightOffsets[ int64NumPInfWeightMasks ] = {
721122b058aSross     LIT64( 0x0000000000000000 ),
722122b058aSross     LIT64( 0xC000000000000000 ),
723122b058aSross     LIT64( 0xE000000000000000 ),
724122b058aSross     LIT64( 0xF000000000000000 ),
725122b058aSross     LIT64( 0xF800000000000000 ),
726122b058aSross     LIT64( 0xFC00000000000000 ),
727122b058aSross     LIT64( 0xFE00000000000000 ),
728122b058aSross     LIT64( 0xFF00000000000000 ),
729122b058aSross     LIT64( 0xFF80000000000000 ),
730122b058aSross     LIT64( 0xFFC0000000000000 ),
731122b058aSross     LIT64( 0xFFE0000000000000 ),
732122b058aSross     LIT64( 0xFFF0000000000000 ),
733122b058aSross     LIT64( 0xFFF8000000000000 ),
734122b058aSross     LIT64( 0xFFFC000000000000 ),
735122b058aSross     LIT64( 0xFFFE000000000000 ),
736122b058aSross     LIT64( 0xFFFF000000000000 ),
737122b058aSross     LIT64( 0xFFFF800000000000 ),
738122b058aSross     LIT64( 0xFFFFC00000000000 ),
739122b058aSross     LIT64( 0xFFFFE00000000000 ),
740122b058aSross     LIT64( 0xFFFFF00000000000 ),
741122b058aSross     LIT64( 0xFFFFF80000000000 ),
742122b058aSross     LIT64( 0xFFFFFC0000000000 ),
743122b058aSross     LIT64( 0xFFFFFE0000000000 ),
744122b058aSross     LIT64( 0xFFFFFF0000000000 ),
745122b058aSross     LIT64( 0xFFFFFF8000000000 ),
746122b058aSross     LIT64( 0xFFFFFFC000000000 ),
747122b058aSross     LIT64( 0xFFFFFFE000000000 ),
748122b058aSross     LIT64( 0xFFFFFFF000000000 ),
749122b058aSross     LIT64( 0xFFFFFFF800000000 ),
750122b058aSross     LIT64( 0xFFFFFFFC00000000 ),
751122b058aSross     LIT64( 0xFFFFFFFE00000000 ),
752122b058aSross     LIT64( 0xFFFFFFFF00000000 ),
753122b058aSross     LIT64( 0xFFFFFFFF80000000 ),
754122b058aSross     LIT64( 0xFFFFFFFFC0000000 ),
755122b058aSross     LIT64( 0xFFFFFFFFE0000000 ),
756122b058aSross     LIT64( 0xFFFFFFFFF0000000 ),
757122b058aSross     LIT64( 0xFFFFFFFFF8000000 ),
758122b058aSross     LIT64( 0xFFFFFFFFFC000000 ),
759122b058aSross     LIT64( 0xFFFFFFFFFE000000 ),
760122b058aSross     LIT64( 0xFFFFFFFFFF000000 ),
761122b058aSross     LIT64( 0xFFFFFFFFFF800000 ),
762122b058aSross     LIT64( 0xFFFFFFFFFFC00000 ),
763122b058aSross     LIT64( 0xFFFFFFFFFFE00000 ),
764122b058aSross     LIT64( 0xFFFFFFFFFFF00000 ),
765122b058aSross     LIT64( 0xFFFFFFFFFFF80000 ),
766122b058aSross     LIT64( 0xFFFFFFFFFFFC0000 ),
767122b058aSross     LIT64( 0xFFFFFFFFFFFE0000 ),
768122b058aSross     LIT64( 0xFFFFFFFFFFFF0000 ),
769122b058aSross     LIT64( 0xFFFFFFFFFFFF8000 ),
770122b058aSross     LIT64( 0xFFFFFFFFFFFFC000 ),
771122b058aSross     LIT64( 0xFFFFFFFFFFFFE000 ),
772122b058aSross     LIT64( 0xFFFFFFFFFFFFF000 ),
773122b058aSross     LIT64( 0xFFFFFFFFFFFFF800 ),
774122b058aSross     LIT64( 0xFFFFFFFFFFFFFC00 ),
775122b058aSross     LIT64( 0xFFFFFFFFFFFFFE00 ),
776122b058aSross     LIT64( 0xFFFFFFFFFFFFFF00 ),
777122b058aSross     LIT64( 0xFFFFFFFFFFFFFF80 ),
778122b058aSross     LIT64( 0xFFFFFFFFFFFFFFC0 ),
779122b058aSross     LIT64( 0xFFFFFFFFFFFFFFE0 ),
780122b058aSross     LIT64( 0xFFFFFFFFFFFFFFF0 ),
781122b058aSross     LIT64( 0xFFFFFFFFFFFFFFF8 )
782122b058aSross };
783122b058aSross 
int64RandomPInf(void)784122b058aSross static int64 int64RandomPInf( void )
785122b058aSross {
786122b058aSross     int8 weightMaskNum;
787122b058aSross 
788122b058aSross     weightMaskNum = randomUint8() % int64NumPInfWeightMasks;
789122b058aSross     return
790122b058aSross         (sbits64) (
791122b058aSross               ( randomUint64() & int64PInfWeightMasks[ weightMaskNum ] )
792122b058aSross             + int64PInfWeightOffsets[ weightMaskNum ]
793122b058aSross         );
794122b058aSross 
795122b058aSross }
796122b058aSross 
797122b058aSross #endif
798122b058aSross 
799122b058aSross enum {
800122b058aSross     float32NumQIn  = 22,
801122b058aSross     float32NumQOut = 50,
802122b058aSross     float32NumP1   =  4,
803122b058aSross     float32NumP2   = 88
804122b058aSross };
805122b058aSross 
806122b058aSross static const uint32 float32QIn[ float32NumQIn ] = {
807122b058aSross     0x00000000,		/* positive, subnormal		*/
808122b058aSross     0x00800000,		/* positive, -126		*/
809122b058aSross     0x33800000,		/* positive,  -24		*/
810122b058aSross     0x3E800000,		/* positive,   -2		*/
811122b058aSross     0x3F000000,		/* positive,   -1		*/
812122b058aSross     0x3F800000,		/* positive,    0		*/
813122b058aSross     0x40000000,		/* positive,    1		*/
814122b058aSross     0x40800000,		/* positive,    2		*/
815122b058aSross     0x4B800000,		/* positive,   24		*/
816122b058aSross     0x7F000000,		/* positive,  127		*/
817122b058aSross     0x7F800000,		/* positive, infinity or NaN	*/
818122b058aSross     0x80000000,		/* negative, subnormal		*/
819122b058aSross     0x80800000,		/* negative, -126		*/
820122b058aSross     0xB3800000,		/* negative,  -24		*/
821122b058aSross     0xBE800000,		/* negative,   -2		*/
822122b058aSross     0xBF000000,		/* negative,   -1		*/
823122b058aSross     0xBF800000,		/* negative,    0		*/
824122b058aSross     0xC0000000,		/* negative,    1		*/
825122b058aSross     0xC0800000,		/* negative,    2		*/
826122b058aSross     0xCB800000,		/* negative,   24		*/
827122b058aSross     0xFE800000,		/* negative,  126		*/
828122b058aSross     0xFF800000		/* negative, infinity or NaN	*/
829122b058aSross };
830122b058aSross 
831122b058aSross static const uint32 float32QOut[ float32NumQOut ] = {
832122b058aSross     0x00000000,		/* positive, subnormal		*/
833122b058aSross     0x00800000,		/* positive, -126		*/
834122b058aSross     0x01000000,		/* positive, -125		*/
835122b058aSross     0x33800000,		/* positive,  -24		*/
836122b058aSross     0x3D800000,		/* positive,   -4		*/
837122b058aSross     0x3E000000,		/* positive,   -3		*/
838122b058aSross     0x3E800000,		/* positive,   -2		*/
839122b058aSross     0x3F000000,		/* positive,   -1		*/
840122b058aSross     0x3F800000,		/* positive,    0		*/
841122b058aSross     0x40000000,		/* positive,    1		*/
842122b058aSross     0x40800000,		/* positive,    2		*/
843122b058aSross     0x41000000,		/* positive,    3		*/
844122b058aSross     0x41800000,		/* positive,    4		*/
845122b058aSross     0x4B800000,		/* positive,   24		*/
846122b058aSross     0x4E000000,		/* positive,   29		*/
847122b058aSross     0x4E800000,		/* positive,   30		*/
848122b058aSross     0x4F000000,		/* positive,   31		*/
849122b058aSross     0x4F800000,		/* positive,   32		*/
850122b058aSross     0x5E000000,		/* positive,   61		*/
851122b058aSross     0x5E800000,		/* positive,   62		*/
852122b058aSross     0x5F000000,		/* positive,   63		*/
853122b058aSross     0x5F800000,		/* positive,   64		*/
854122b058aSross     0x7E800000,		/* positive,  126		*/
855122b058aSross     0x7F000000,		/* positive,  127		*/
856122b058aSross     0x7F800000,		/* positive, infinity or NaN	*/
857122b058aSross     0x80000000,		/* negative, subnormal		*/
858122b058aSross     0x80800000,		/* negative, -126		*/
859122b058aSross     0x81000000,		/* negative, -125		*/
860122b058aSross     0xB3800000,		/* negative,  -24		*/
861122b058aSross     0xBD800000,		/* negative,   -4		*/
862122b058aSross     0xBE000000,		/* negative,   -3		*/
863122b058aSross     0xBE800000,		/* negative,   -2		*/
864122b058aSross     0xBF000000,		/* negative,   -1		*/
865122b058aSross     0xBF800000,		/* negative,    0		*/
866122b058aSross     0xC0000000,		/* negative,    1		*/
867122b058aSross     0xC0800000,		/* negative,    2		*/
868122b058aSross     0xC1000000,		/* negative,    3		*/
869122b058aSross     0xC1800000,		/* negative,    4		*/
870122b058aSross     0xCB800000,		/* negative,   24		*/
871122b058aSross     0xCE000000,		/* negative,   29		*/
872122b058aSross     0xCE800000,		/* negative,   30		*/
873122b058aSross     0xCF000000,		/* negative,   31		*/
874122b058aSross     0xCF800000,		/* negative,   32		*/
875122b058aSross     0xDE000000,		/* negative,   61		*/
876122b058aSross     0xDE800000,		/* negative,   62		*/
877122b058aSross     0xDF000000,		/* negative,   63		*/
878122b058aSross     0xDF800000,		/* negative,   64		*/
879122b058aSross     0xFE800000,		/* negative,  126		*/
880122b058aSross     0xFF000000,		/* negative,  127		*/
881122b058aSross     0xFF800000		/* negative, infinity or NaN	*/
882122b058aSross };
883122b058aSross 
884122b058aSross static const uint32 float32P1[ float32NumP1 ] = {
885122b058aSross     0x00000000,
886122b058aSross     0x00000001,
887122b058aSross     0x007FFFFF,
888122b058aSross     0x007FFFFE
889122b058aSross };
890122b058aSross 
891122b058aSross static const uint32 float32P2[ float32NumP2 ] = {
892122b058aSross     0x00000000,
893122b058aSross     0x00000001,
894122b058aSross     0x00000002,
895122b058aSross     0x00000004,
896122b058aSross     0x00000008,
897122b058aSross     0x00000010,
898122b058aSross     0x00000020,
899122b058aSross     0x00000040,
900122b058aSross     0x00000080,
901122b058aSross     0x00000100,
902122b058aSross     0x00000200,
903122b058aSross     0x00000400,
904122b058aSross     0x00000800,
905122b058aSross     0x00001000,
906122b058aSross     0x00002000,
907122b058aSross     0x00004000,
908122b058aSross     0x00008000,
909122b058aSross     0x00010000,
910122b058aSross     0x00020000,
911122b058aSross     0x00040000,
912122b058aSross     0x00080000,
913122b058aSross     0x00100000,
914122b058aSross     0x00200000,
915122b058aSross     0x00400000,
916122b058aSross     0x00600000,
917122b058aSross     0x00700000,
918122b058aSross     0x00780000,
919122b058aSross     0x007C0000,
920122b058aSross     0x007E0000,
921122b058aSross     0x007F0000,
922122b058aSross     0x007F8000,
923122b058aSross     0x007FC000,
924122b058aSross     0x007FE000,
925122b058aSross     0x007FF000,
926122b058aSross     0x007FF800,
927122b058aSross     0x007FFC00,
928122b058aSross     0x007FFE00,
929122b058aSross     0x007FFF00,
930122b058aSross     0x007FFF80,
931122b058aSross     0x007FFFC0,
932122b058aSross     0x007FFFE0,
933122b058aSross     0x007FFFF0,
934122b058aSross     0x007FFFF8,
935122b058aSross     0x007FFFFC,
936122b058aSross     0x007FFFFE,
937122b058aSross     0x007FFFFF,
938122b058aSross     0x007FFFFD,
939122b058aSross     0x007FFFFB,
940122b058aSross     0x007FFFF7,
941122b058aSross     0x007FFFEF,
942122b058aSross     0x007FFFDF,
943122b058aSross     0x007FFFBF,
944122b058aSross     0x007FFF7F,
945122b058aSross     0x007FFEFF,
946122b058aSross     0x007FFDFF,
947122b058aSross     0x007FFBFF,
948122b058aSross     0x007FF7FF,
949122b058aSross     0x007FEFFF,
950122b058aSross     0x007FDFFF,
951122b058aSross     0x007FBFFF,
952122b058aSross     0x007F7FFF,
953122b058aSross     0x007EFFFF,
954122b058aSross     0x007DFFFF,
955122b058aSross     0x007BFFFF,
956122b058aSross     0x0077FFFF,
957122b058aSross     0x006FFFFF,
958122b058aSross     0x005FFFFF,
959122b058aSross     0x003FFFFF,
960122b058aSross     0x001FFFFF,
961122b058aSross     0x000FFFFF,
962122b058aSross     0x0007FFFF,
963122b058aSross     0x0003FFFF,
964122b058aSross     0x0001FFFF,
965122b058aSross     0x0000FFFF,
966122b058aSross     0x00007FFF,
967122b058aSross     0x00003FFF,
968122b058aSross     0x00001FFF,
969122b058aSross     0x00000FFF,
970122b058aSross     0x000007FF,
971122b058aSross     0x000003FF,
972122b058aSross     0x000001FF,
973122b058aSross     0x000000FF,
974122b058aSross     0x0000007F,
975122b058aSross     0x0000003F,
976122b058aSross     0x0000001F,
977122b058aSross     0x0000000F,
978122b058aSross     0x00000007,
979122b058aSross     0x00000003
980122b058aSross };
981122b058aSross 
982122b058aSross static const uint32 float32NumQInP1 = float32NumQIn * float32NumP1;
983122b058aSross static const uint32 float32NumQOutP1 = float32NumQOut * float32NumP1;
984122b058aSross 
float32NextQInP1(sequenceT * sequencePtr)985122b058aSross static float32 float32NextQInP1( sequenceT *sequencePtr )
986122b058aSross {
987122b058aSross     uint8 expNum, sigNum;
988122b058aSross     float32 z;
989122b058aSross 
990122b058aSross     sigNum = sequencePtr->term1Num;
991122b058aSross     expNum = sequencePtr->expNum;
992122b058aSross     z = float32QIn[ expNum ] | float32P1[ sigNum ];
993122b058aSross     ++sigNum;
994122b058aSross     if ( float32NumP1 <= sigNum ) {
995122b058aSross         sigNum = 0;
996122b058aSross         ++expNum;
997122b058aSross         if ( float32NumQIn <= expNum ) {
998122b058aSross             expNum = 0;
999122b058aSross             sequencePtr->done = TRUE;
1000122b058aSross         }
1001122b058aSross         sequencePtr->expNum = expNum;
1002122b058aSross     }
1003122b058aSross     sequencePtr->term1Num = sigNum;
1004122b058aSross     return z;
1005122b058aSross 
1006122b058aSross }
1007122b058aSross 
float32NextQOutP1(sequenceT * sequencePtr)1008122b058aSross static float32 float32NextQOutP1( sequenceT *sequencePtr )
1009122b058aSross {
1010122b058aSross     uint8 expNum, sigNum;
1011122b058aSross     float32 z;
1012122b058aSross 
1013122b058aSross     sigNum = sequencePtr->term1Num;
1014122b058aSross     expNum = sequencePtr->expNum;
1015122b058aSross     z = float32QOut[ expNum ] | float32P1[ sigNum ];
1016122b058aSross     ++sigNum;
1017122b058aSross     if ( float32NumP1 <= sigNum ) {
1018122b058aSross         sigNum = 0;
1019122b058aSross         ++expNum;
1020122b058aSross         if ( float32NumQOut <= expNum ) {
1021122b058aSross             expNum = 0;
1022122b058aSross             sequencePtr->done = TRUE;
1023122b058aSross         }
1024122b058aSross         sequencePtr->expNum = expNum;
1025122b058aSross     }
1026122b058aSross     sequencePtr->term1Num = sigNum;
1027122b058aSross     return z;
1028122b058aSross 
1029122b058aSross }
1030122b058aSross 
1031122b058aSross static const uint32 float32NumQInP2 = float32NumQIn * float32NumP2;
1032122b058aSross static const uint32 float32NumQOutP2 = float32NumQOut * float32NumP2;
1033122b058aSross 
float32NextQInP2(sequenceT * sequencePtr)1034122b058aSross static float32 float32NextQInP2( sequenceT *sequencePtr )
1035122b058aSross {
1036122b058aSross     uint8 expNum, sigNum;
1037122b058aSross     float32 z;
1038122b058aSross 
1039122b058aSross     sigNum = sequencePtr->term1Num;
1040122b058aSross     expNum = sequencePtr->expNum;
1041122b058aSross     z = float32QIn[ expNum ] | float32P2[ sigNum ];
1042122b058aSross     ++sigNum;
1043122b058aSross     if ( float32NumP2 <= sigNum ) {
1044122b058aSross         sigNum = 0;
1045122b058aSross         ++expNum;
1046122b058aSross         if ( float32NumQIn <= expNum ) {
1047122b058aSross             expNum = 0;
1048122b058aSross             sequencePtr->done = TRUE;
1049122b058aSross         }
1050122b058aSross         sequencePtr->expNum = expNum;
1051122b058aSross     }
1052122b058aSross     sequencePtr->term1Num = sigNum;
1053122b058aSross     return z;
1054122b058aSross 
1055122b058aSross }
1056122b058aSross 
float32NextQOutP2(sequenceT * sequencePtr)1057122b058aSross static float32 float32NextQOutP2( sequenceT *sequencePtr )
1058122b058aSross {
1059122b058aSross     uint8 expNum, sigNum;
1060122b058aSross     float32 z;
1061122b058aSross 
1062122b058aSross     sigNum = sequencePtr->term1Num;
1063122b058aSross     expNum = sequencePtr->expNum;
1064122b058aSross     z = float32QOut[ expNum ] | float32P2[ sigNum ];
1065122b058aSross     ++sigNum;
1066122b058aSross     if ( float32NumP2 <= sigNum ) {
1067122b058aSross         sigNum = 0;
1068122b058aSross         ++expNum;
1069122b058aSross         if ( float32NumQOut <= expNum ) {
1070122b058aSross             expNum = 0;
1071122b058aSross             sequencePtr->done = TRUE;
1072122b058aSross         }
1073122b058aSross         sequencePtr->expNum = expNum;
1074122b058aSross     }
1075122b058aSross     sequencePtr->term1Num = sigNum;
1076122b058aSross     return z;
1077122b058aSross 
1078122b058aSross }
1079122b058aSross 
float32RandomQOutP3(void)1080122b058aSross static float32 float32RandomQOutP3( void )
1081122b058aSross {
1082122b058aSross 
1083122b058aSross     return
1084122b058aSross           float32QOut[ randomUint8() % float32NumQOut ]
1085122b058aSross         | (   (   float32P2[ randomUint8() % float32NumP2 ]
1086122b058aSross                 + float32P2[ randomUint8() % float32NumP2 ] )
1087122b058aSross             & 0x007FFFFF );
1088122b058aSross 
1089122b058aSross }
1090122b058aSross 
float32RandomQOutPInf(void)1091122b058aSross static float32 float32RandomQOutPInf( void )
1092122b058aSross {
1093122b058aSross 
1094122b058aSross     return
1095122b058aSross           float32QOut[ randomUint8() % float32NumQOut ]
1096122b058aSross         | ( randomUint32() & 0x007FFFFF );
1097122b058aSross 
1098122b058aSross }
1099122b058aSross 
1100122b058aSross enum {
1101122b058aSross     float32NumQInfWeightMasks = 7
1102122b058aSross };
1103122b058aSross 
1104122b058aSross static const uint32 float32QInfWeightMasks[ float32NumQInfWeightMasks ] = {
1105122b058aSross     0x7F800000,
1106122b058aSross     0x7F800000,
1107122b058aSross     0x3F800000,
1108122b058aSross     0x1F800000,
1109122b058aSross     0x0F800000,
1110122b058aSross     0x07800000,
1111122b058aSross     0x03800000
1112122b058aSross };
1113122b058aSross 
1114122b058aSross static const uint32 float32QInfWeightOffsets[ float32NumQInfWeightMasks ] = {
1115122b058aSross     0x00000000,
1116122b058aSross     0x00000000,
1117122b058aSross     0x20000000,
1118122b058aSross     0x30000000,
1119122b058aSross     0x38000000,
1120122b058aSross     0x3C000000,
1121122b058aSross     0x3E000000
1122122b058aSross };
1123122b058aSross 
float32RandomQInfP3(void)1124122b058aSross static float32 float32RandomQInfP3( void )
1125122b058aSross {
1126122b058aSross     int8 weightMaskNum;
1127122b058aSross 
1128122b058aSross     weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
1129122b058aSross     return
1130122b058aSross           ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1131122b058aSross         | (   (   ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
1132122b058aSross                 & float32QInfWeightMasks[ weightMaskNum ] )
1133122b058aSross             + float32QInfWeightOffsets[ weightMaskNum ]
1134122b058aSross           )
1135122b058aSross         | (   (   float32P2[ randomUint8() % float32NumP2 ]
1136122b058aSross                 + float32P2[ randomUint8() % float32NumP2 ] )
1137122b058aSross             & 0x007FFFFF );
1138122b058aSross 
1139122b058aSross }
1140122b058aSross 
float32RandomQInfPInf(void)1141122b058aSross static float32 float32RandomQInfPInf( void )
1142122b058aSross {
1143122b058aSross     int8 weightMaskNum;
1144122b058aSross 
1145122b058aSross     weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
1146122b058aSross     return
1147122b058aSross           ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1148122b058aSross         | (   (   ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
1149122b058aSross                 & float32QInfWeightMasks[ weightMaskNum ] )
1150122b058aSross             + float32QInfWeightOffsets[ weightMaskNum ]
1151122b058aSross           )
1152122b058aSross         | ( randomUint32() & 0x007FFFFF );
1153122b058aSross 
1154122b058aSross }
1155122b058aSross 
float32Random(void)1156122b058aSross static float32 float32Random( void )
1157122b058aSross {
1158122b058aSross 
1159122b058aSross     switch ( randomUint8() & 7 ) {
1160122b058aSross      case 0:
1161122b058aSross      case 1:
1162122b058aSross      case 2:
1163122b058aSross         return float32RandomQOutP3();
1164122b058aSross      case 3:
1165122b058aSross         return float32RandomQOutPInf();
1166122b058aSross      case 4:
1167122b058aSross      case 5:
1168122b058aSross      case 6:
1169122b058aSross         return float32RandomQInfP3();
1170122b058aSross      case 7:
1171122b058aSross         return float32RandomQInfPInf();
1172122b058aSross     }
1173a9cb2700Sross     abort();
1174a9cb2700Sross     return 0;
1175122b058aSross }
1176122b058aSross 
1177122b058aSross #ifdef BITS64
1178122b058aSross #define SETFLOAT64( z, zHigh, zLow ) z = ( ( (float64) zHigh )<<32 ) | zLow
1179122b058aSross #else
1180122b058aSross #define SETFLOAT64( z, zHigh, zLow ) z.low = zLow; z.high = zHigh
1181122b058aSross #endif
1182122b058aSross 
1183122b058aSross enum {
1184122b058aSross     float64NumQIn  =  22,
1185122b058aSross     float64NumQOut =  64,
1186122b058aSross     float64NumP1   =   4,
1187122b058aSross     float64NumP2   = 204
1188122b058aSross };
1189122b058aSross 
1190122b058aSross static const uint32 float64QIn[ float64NumQIn ] = {
1191122b058aSross     0x00000000,		/* positive, subnormal		*/
1192122b058aSross     0x00100000,		/* positive, -1022		*/
1193122b058aSross     0x3CA00000,		/* positive,   -53		*/
1194122b058aSross     0x3FD00000,		/* positive,    -2		*/
1195122b058aSross     0x3FE00000,		/* positive,    -1		*/
1196122b058aSross     0x3FF00000,		/* positive,     0		*/
1197122b058aSross     0x40000000,		/* positive,     1		*/
1198122b058aSross     0x40100000,		/* positive,     2		*/
1199122b058aSross     0x43400000,		/* positive,    53		*/
1200122b058aSross     0x7FE00000,		/* positive,  1023		*/
1201122b058aSross     0x7FF00000,		/* positive, infinity or NaN	*/
1202122b058aSross     0x80000000,		/* negative, subnormal		*/
1203122b058aSross     0x80100000,		/* negative, -1022		*/
1204122b058aSross     0xBCA00000,		/* negative,   -53		*/
1205122b058aSross     0xBFD00000,		/* negative,    -2		*/
1206122b058aSross     0xBFE00000,		/* negative,    -1		*/
1207122b058aSross     0xBFF00000,		/* negative,     0		*/
1208122b058aSross     0xC0000000,		/* negative,     1		*/
1209122b058aSross     0xC0100000,		/* negative,     2		*/
1210122b058aSross     0xC3400000,		/* negative,    53		*/
1211122b058aSross     0xFFE00000,		/* negative,  1023		*/
1212122b058aSross     0xFFF00000		/* negative, infinity or NaN	*/
1213122b058aSross };
1214122b058aSross 
1215122b058aSross static const uint32 float64QOut[ float64NumQOut ] = {
1216122b058aSross     0x00000000,		/* positive, subnormal		*/
1217122b058aSross     0x00100000,		/* positive, -1022		*/
1218122b058aSross     0x00200000,		/* positive, -1021		*/
1219122b058aSross     0x37E00000,		/* positive,  -129		*/
1220122b058aSross     0x37F00000,		/* positive,  -128		*/
1221122b058aSross     0x38000000,		/* positive,  -127		*/
1222122b058aSross     0x38100000,		/* positive,  -126		*/
1223122b058aSross     0x3CA00000,		/* positive,   -53		*/
1224122b058aSross     0x3FB00000,		/* positive,    -4		*/
1225122b058aSross     0x3FC00000,		/* positive,    -3		*/
1226122b058aSross     0x3FD00000,		/* positive,    -2		*/
1227122b058aSross     0x3FE00000,		/* positive,    -1		*/
1228122b058aSross     0x3FF00000,		/* positive,     0		*/
1229122b058aSross     0x40000000,		/* positive,     1		*/
1230122b058aSross     0x40100000,		/* positive,     2		*/
1231122b058aSross     0x40200000,		/* positive,     3		*/
1232122b058aSross     0x40300000,		/* positive,     4		*/
1233122b058aSross     0x41C00000,		/* positive,    29		*/
1234122b058aSross     0x41D00000,		/* positive,    30		*/
1235122b058aSross     0x41E00000,		/* positive,    31		*/
1236122b058aSross     0x41F00000,		/* positive,    32		*/
1237122b058aSross     0x43400000,		/* positive,    53		*/
1238122b058aSross     0x43C00000,		/* positive,    61		*/
1239122b058aSross     0x43D00000,		/* positive,    62		*/
1240122b058aSross     0x43E00000,		/* positive,    63		*/
1241122b058aSross     0x43F00000,		/* positive,    64		*/
1242122b058aSross     0x47E00000,		/* positive,   127		*/
1243122b058aSross     0x47F00000,		/* positive,   128		*/
1244122b058aSross     0x48000000,		/* positive,   129		*/
1245122b058aSross     0x7FD00000,		/* positive,  1022		*/
1246122b058aSross     0x7FE00000,		/* positive,  1023		*/
1247122b058aSross     0x7FF00000,		/* positive, infinity or NaN	*/
1248122b058aSross     0x80000000,		/* negative, subnormal		*/
1249122b058aSross     0x80100000,		/* negative, -1022		*/
1250122b058aSross     0x80200000,		/* negative, -1021		*/
1251122b058aSross     0xB7E00000,		/* negative,  -129		*/
1252122b058aSross     0xB7F00000,		/* negative,  -128		*/
1253122b058aSross     0xB8000000,		/* negative,  -127		*/
1254122b058aSross     0xB8100000,		/* negative,  -126		*/
1255122b058aSross     0xBCA00000,		/* negative,   -53		*/
1256122b058aSross     0xBFB00000,		/* negative,    -4		*/
1257122b058aSross     0xBFC00000,		/* negative,    -3		*/
1258122b058aSross     0xBFD00000,		/* negative,    -2		*/
1259122b058aSross     0xBFE00000,		/* negative,    -1		*/
1260122b058aSross     0xBFF00000,		/* negative,     0		*/
1261122b058aSross     0xC0000000,		/* negative,     1		*/
1262122b058aSross     0xC0100000,		/* negative,     2		*/
1263122b058aSross     0xC0200000,		/* negative,     3		*/
1264122b058aSross     0xC0300000,		/* negative,     4		*/
1265122b058aSross     0xC1C00000,		/* negative,    29		*/
1266122b058aSross     0xC1D00000,		/* negative,    30		*/
1267122b058aSross     0xC1E00000,		/* negative,    31		*/
1268122b058aSross     0xC1F00000,		/* negative,    32		*/
1269122b058aSross     0xC3400000,		/* negative,    53		*/
1270122b058aSross     0xC3C00000,		/* negative,    61		*/
1271122b058aSross     0xC3D00000,		/* negative,    62		*/
1272122b058aSross     0xC3E00000,		/* negative,    63		*/
1273122b058aSross     0xC3F00000,		/* negative,    64		*/
1274122b058aSross     0xC7E00000,		/* negative,   127		*/
1275122b058aSross     0xC7F00000,		/* negative,   128		*/
1276122b058aSross     0xC8000000,		/* negative,   129		*/
1277122b058aSross     0xFFD00000,		/* negative,  1022		*/
1278122b058aSross     0xFFE00000,		/* negative,  1023		*/
1279122b058aSross     0xFFF00000		/* negative, infinity or NaN	*/
1280122b058aSross };
1281122b058aSross 
1282122b058aSross static const struct { bits32 high, low; } float64P1[ float64NumP1 ] = {
1283122b058aSross     { 0x00000000, 0x00000000 },
1284122b058aSross     { 0x00000000, 0x00000001 },
1285122b058aSross     { 0x000FFFFF, 0xFFFFFFFF },
1286122b058aSross     { 0x000FFFFF, 0xFFFFFFFE }
1287122b058aSross };
1288122b058aSross 
1289122b058aSross static const struct { bits32 high, low; } float64P2[ float64NumP2 ] = {
1290122b058aSross     { 0x00000000, 0x00000000 },
1291122b058aSross     { 0x00000000, 0x00000001 },
1292122b058aSross     { 0x00000000, 0x00000002 },
1293122b058aSross     { 0x00000000, 0x00000004 },
1294122b058aSross     { 0x00000000, 0x00000008 },
1295122b058aSross     { 0x00000000, 0x00000010 },
1296122b058aSross     { 0x00000000, 0x00000020 },
1297122b058aSross     { 0x00000000, 0x00000040 },
1298122b058aSross     { 0x00000000, 0x00000080 },
1299122b058aSross     { 0x00000000, 0x00000100 },
1300122b058aSross     { 0x00000000, 0x00000200 },
1301122b058aSross     { 0x00000000, 0x00000400 },
1302122b058aSross     { 0x00000000, 0x00000800 },
1303122b058aSross     { 0x00000000, 0x00001000 },
1304122b058aSross     { 0x00000000, 0x00002000 },
1305122b058aSross     { 0x00000000, 0x00004000 },
1306122b058aSross     { 0x00000000, 0x00008000 },
1307122b058aSross     { 0x00000000, 0x00010000 },
1308122b058aSross     { 0x00000000, 0x00020000 },
1309122b058aSross     { 0x00000000, 0x00040000 },
1310122b058aSross     { 0x00000000, 0x00080000 },
1311122b058aSross     { 0x00000000, 0x00100000 },
1312122b058aSross     { 0x00000000, 0x00200000 },
1313122b058aSross     { 0x00000000, 0x00400000 },
1314122b058aSross     { 0x00000000, 0x00800000 },
1315122b058aSross     { 0x00000000, 0x01000000 },
1316122b058aSross     { 0x00000000, 0x02000000 },
1317122b058aSross     { 0x00000000, 0x04000000 },
1318122b058aSross     { 0x00000000, 0x08000000 },
1319122b058aSross     { 0x00000000, 0x10000000 },
1320122b058aSross     { 0x00000000, 0x20000000 },
1321122b058aSross     { 0x00000000, 0x40000000 },
1322122b058aSross     { 0x00000000, 0x80000000 },
1323122b058aSross     { 0x00000001, 0x00000000 },
1324122b058aSross     { 0x00000002, 0x00000000 },
1325122b058aSross     { 0x00000004, 0x00000000 },
1326122b058aSross     { 0x00000008, 0x00000000 },
1327122b058aSross     { 0x00000010, 0x00000000 },
1328122b058aSross     { 0x00000020, 0x00000000 },
1329122b058aSross     { 0x00000040, 0x00000000 },
1330122b058aSross     { 0x00000080, 0x00000000 },
1331122b058aSross     { 0x00000100, 0x00000000 },
1332122b058aSross     { 0x00000200, 0x00000000 },
1333122b058aSross     { 0x00000400, 0x00000000 },
1334122b058aSross     { 0x00000800, 0x00000000 },
1335122b058aSross     { 0x00001000, 0x00000000 },
1336122b058aSross     { 0x00002000, 0x00000000 },
1337122b058aSross     { 0x00004000, 0x00000000 },
1338122b058aSross     { 0x00008000, 0x00000000 },
1339122b058aSross     { 0x00010000, 0x00000000 },
1340122b058aSross     { 0x00020000, 0x00000000 },
1341122b058aSross     { 0x00040000, 0x00000000 },
1342122b058aSross     { 0x00080000, 0x00000000 },
1343122b058aSross     { 0x000C0000, 0x00000000 },
1344122b058aSross     { 0x000E0000, 0x00000000 },
1345122b058aSross     { 0x000F0000, 0x00000000 },
1346122b058aSross     { 0x000F8000, 0x00000000 },
1347122b058aSross     { 0x000FC000, 0x00000000 },
1348122b058aSross     { 0x000FE000, 0x00000000 },
1349122b058aSross     { 0x000FF000, 0x00000000 },
1350122b058aSross     { 0x000FF800, 0x00000000 },
1351122b058aSross     { 0x000FFC00, 0x00000000 },
1352122b058aSross     { 0x000FFE00, 0x00000000 },
1353122b058aSross     { 0x000FFF00, 0x00000000 },
1354122b058aSross     { 0x000FFF80, 0x00000000 },
1355122b058aSross     { 0x000FFFC0, 0x00000000 },
1356122b058aSross     { 0x000FFFE0, 0x00000000 },
1357122b058aSross     { 0x000FFFF0, 0x00000000 },
1358122b058aSross     { 0x000FFFF8, 0x00000000 },
1359122b058aSross     { 0x000FFFFC, 0x00000000 },
1360122b058aSross     { 0x000FFFFE, 0x00000000 },
1361122b058aSross     { 0x000FFFFF, 0x00000000 },
1362122b058aSross     { 0x000FFFFF, 0x80000000 },
1363122b058aSross     { 0x000FFFFF, 0xC0000000 },
1364122b058aSross     { 0x000FFFFF, 0xE0000000 },
1365122b058aSross     { 0x000FFFFF, 0xF0000000 },
1366122b058aSross     { 0x000FFFFF, 0xF8000000 },
1367122b058aSross     { 0x000FFFFF, 0xFC000000 },
1368122b058aSross     { 0x000FFFFF, 0xFE000000 },
1369122b058aSross     { 0x000FFFFF, 0xFF000000 },
1370122b058aSross     { 0x000FFFFF, 0xFF800000 },
1371122b058aSross     { 0x000FFFFF, 0xFFC00000 },
1372122b058aSross     { 0x000FFFFF, 0xFFE00000 },
1373122b058aSross     { 0x000FFFFF, 0xFFF00000 },
1374122b058aSross     { 0x000FFFFF, 0xFFF80000 },
1375122b058aSross     { 0x000FFFFF, 0xFFFC0000 },
1376122b058aSross     { 0x000FFFFF, 0xFFFE0000 },
1377122b058aSross     { 0x000FFFFF, 0xFFFF0000 },
1378122b058aSross     { 0x000FFFFF, 0xFFFF8000 },
1379122b058aSross     { 0x000FFFFF, 0xFFFFC000 },
1380122b058aSross     { 0x000FFFFF, 0xFFFFE000 },
1381122b058aSross     { 0x000FFFFF, 0xFFFFF000 },
1382122b058aSross     { 0x000FFFFF, 0xFFFFF800 },
1383122b058aSross     { 0x000FFFFF, 0xFFFFFC00 },
1384122b058aSross     { 0x000FFFFF, 0xFFFFFE00 },
1385122b058aSross     { 0x000FFFFF, 0xFFFFFF00 },
1386122b058aSross     { 0x000FFFFF, 0xFFFFFF80 },
1387122b058aSross     { 0x000FFFFF, 0xFFFFFFC0 },
1388122b058aSross     { 0x000FFFFF, 0xFFFFFFE0 },
1389122b058aSross     { 0x000FFFFF, 0xFFFFFFF0 },
1390122b058aSross     { 0x000FFFFF, 0xFFFFFFF8 },
1391122b058aSross     { 0x000FFFFF, 0xFFFFFFFC },
1392122b058aSross     { 0x000FFFFF, 0xFFFFFFFE },
1393122b058aSross     { 0x000FFFFF, 0xFFFFFFFF },
1394122b058aSross     { 0x000FFFFF, 0xFFFFFFFD },
1395122b058aSross     { 0x000FFFFF, 0xFFFFFFFB },
1396122b058aSross     { 0x000FFFFF, 0xFFFFFFF7 },
1397122b058aSross     { 0x000FFFFF, 0xFFFFFFEF },
1398122b058aSross     { 0x000FFFFF, 0xFFFFFFDF },
1399122b058aSross     { 0x000FFFFF, 0xFFFFFFBF },
1400122b058aSross     { 0x000FFFFF, 0xFFFFFF7F },
1401122b058aSross     { 0x000FFFFF, 0xFFFFFEFF },
1402122b058aSross     { 0x000FFFFF, 0xFFFFFDFF },
1403122b058aSross     { 0x000FFFFF, 0xFFFFFBFF },
1404122b058aSross     { 0x000FFFFF, 0xFFFFF7FF },
1405122b058aSross     { 0x000FFFFF, 0xFFFFEFFF },
1406122b058aSross     { 0x000FFFFF, 0xFFFFDFFF },
1407122b058aSross     { 0x000FFFFF, 0xFFFFBFFF },
1408122b058aSross     { 0x000FFFFF, 0xFFFF7FFF },
1409122b058aSross     { 0x000FFFFF, 0xFFFEFFFF },
1410122b058aSross     { 0x000FFFFF, 0xFFFDFFFF },
1411122b058aSross     { 0x000FFFFF, 0xFFFBFFFF },
1412122b058aSross     { 0x000FFFFF, 0xFFF7FFFF },
1413122b058aSross     { 0x000FFFFF, 0xFFEFFFFF },
1414122b058aSross     { 0x000FFFFF, 0xFFDFFFFF },
1415122b058aSross     { 0x000FFFFF, 0xFFBFFFFF },
1416122b058aSross     { 0x000FFFFF, 0xFF7FFFFF },
1417122b058aSross     { 0x000FFFFF, 0xFEFFFFFF },
1418122b058aSross     { 0x000FFFFF, 0xFDFFFFFF },
1419122b058aSross     { 0x000FFFFF, 0xFBFFFFFF },
1420122b058aSross     { 0x000FFFFF, 0xF7FFFFFF },
1421122b058aSross     { 0x000FFFFF, 0xEFFFFFFF },
1422122b058aSross     { 0x000FFFFF, 0xDFFFFFFF },
1423122b058aSross     { 0x000FFFFF, 0xBFFFFFFF },
1424122b058aSross     { 0x000FFFFF, 0x7FFFFFFF },
1425122b058aSross     { 0x000FFFFE, 0xFFFFFFFF },
1426122b058aSross     { 0x000FFFFD, 0xFFFFFFFF },
1427122b058aSross     { 0x000FFFFB, 0xFFFFFFFF },
1428122b058aSross     { 0x000FFFF7, 0xFFFFFFFF },
1429122b058aSross     { 0x000FFFEF, 0xFFFFFFFF },
1430122b058aSross     { 0x000FFFDF, 0xFFFFFFFF },
1431122b058aSross     { 0x000FFFBF, 0xFFFFFFFF },
1432122b058aSross     { 0x000FFF7F, 0xFFFFFFFF },
1433122b058aSross     { 0x000FFEFF, 0xFFFFFFFF },
1434122b058aSross     { 0x000FFDFF, 0xFFFFFFFF },
1435122b058aSross     { 0x000FFBFF, 0xFFFFFFFF },
1436122b058aSross     { 0x000FF7FF, 0xFFFFFFFF },
1437122b058aSross     { 0x000FEFFF, 0xFFFFFFFF },
1438122b058aSross     { 0x000FDFFF, 0xFFFFFFFF },
1439122b058aSross     { 0x000FBFFF, 0xFFFFFFFF },
1440122b058aSross     { 0x000F7FFF, 0xFFFFFFFF },
1441122b058aSross     { 0x000EFFFF, 0xFFFFFFFF },
1442122b058aSross     { 0x000DFFFF, 0xFFFFFFFF },
1443122b058aSross     { 0x000BFFFF, 0xFFFFFFFF },
1444122b058aSross     { 0x0007FFFF, 0xFFFFFFFF },
1445122b058aSross     { 0x0003FFFF, 0xFFFFFFFF },
1446122b058aSross     { 0x0001FFFF, 0xFFFFFFFF },
1447122b058aSross     { 0x0000FFFF, 0xFFFFFFFF },
1448122b058aSross     { 0x00007FFF, 0xFFFFFFFF },
1449122b058aSross     { 0x00003FFF, 0xFFFFFFFF },
1450122b058aSross     { 0x00001FFF, 0xFFFFFFFF },
1451122b058aSross     { 0x00000FFF, 0xFFFFFFFF },
1452122b058aSross     { 0x000007FF, 0xFFFFFFFF },
1453122b058aSross     { 0x000003FF, 0xFFFFFFFF },
1454122b058aSross     { 0x000001FF, 0xFFFFFFFF },
1455122b058aSross     { 0x000000FF, 0xFFFFFFFF },
1456122b058aSross     { 0x0000007F, 0xFFFFFFFF },
1457122b058aSross     { 0x0000003F, 0xFFFFFFFF },
1458122b058aSross     { 0x0000001F, 0xFFFFFFFF },
1459122b058aSross     { 0x0000000F, 0xFFFFFFFF },
1460122b058aSross     { 0x00000007, 0xFFFFFFFF },
1461122b058aSross     { 0x00000003, 0xFFFFFFFF },
1462122b058aSross     { 0x00000001, 0xFFFFFFFF },
1463122b058aSross     { 0x00000000, 0xFFFFFFFF },
1464122b058aSross     { 0x00000000, 0x7FFFFFFF },
1465122b058aSross     { 0x00000000, 0x3FFFFFFF },
1466122b058aSross     { 0x00000000, 0x1FFFFFFF },
1467122b058aSross     { 0x00000000, 0x0FFFFFFF },
1468122b058aSross     { 0x00000000, 0x07FFFFFF },
1469122b058aSross     { 0x00000000, 0x03FFFFFF },
1470122b058aSross     { 0x00000000, 0x01FFFFFF },
1471122b058aSross     { 0x00000000, 0x00FFFFFF },
1472122b058aSross     { 0x00000000, 0x007FFFFF },
1473122b058aSross     { 0x00000000, 0x003FFFFF },
1474122b058aSross     { 0x00000000, 0x001FFFFF },
1475122b058aSross     { 0x00000000, 0x000FFFFF },
1476122b058aSross     { 0x00000000, 0x0007FFFF },
1477122b058aSross     { 0x00000000, 0x0003FFFF },
1478122b058aSross     { 0x00000000, 0x0001FFFF },
1479122b058aSross     { 0x00000000, 0x0000FFFF },
1480122b058aSross     { 0x00000000, 0x00007FFF },
1481122b058aSross     { 0x00000000, 0x00003FFF },
1482122b058aSross     { 0x00000000, 0x00001FFF },
1483122b058aSross     { 0x00000000, 0x00000FFF },
1484122b058aSross     { 0x00000000, 0x000007FF },
1485122b058aSross     { 0x00000000, 0x000003FF },
1486122b058aSross     { 0x00000000, 0x000001FF },
1487122b058aSross     { 0x00000000, 0x000000FF },
1488122b058aSross     { 0x00000000, 0x0000007F },
1489122b058aSross     { 0x00000000, 0x0000003F },
1490122b058aSross     { 0x00000000, 0x0000001F },
1491122b058aSross     { 0x00000000, 0x0000000F },
1492122b058aSross     { 0x00000000, 0x00000007 },
1493122b058aSross     { 0x00000000, 0x00000003 }
1494122b058aSross };
1495122b058aSross 
1496122b058aSross static const uint32 float64NumQInP1 = float64NumQIn * float64NumP1;
1497122b058aSross static const uint32 float64NumQOutP1 = float64NumQOut * float64NumP1;
1498122b058aSross 
float64NextQInP1(sequenceT * sequencePtr)1499122b058aSross static float64 float64NextQInP1( sequenceT *sequencePtr )
1500122b058aSross {
1501122b058aSross     uint8 expNum, sigNum;
1502122b058aSross     float64 z;
1503122b058aSross 
1504122b058aSross     sigNum = sequencePtr->term1Num;
1505122b058aSross     expNum = sequencePtr->expNum;
1506122b058aSross     SETFLOAT64(
1507122b058aSross         z,
1508122b058aSross         float64QIn[ expNum ] | float64P1[ sigNum ].high,
1509122b058aSross         float64P1[ sigNum ].low
1510122b058aSross     );
1511122b058aSross     ++sigNum;
1512122b058aSross     if ( float64NumP1 <= sigNum ) {
1513122b058aSross         sigNum = 0;
1514122b058aSross         ++expNum;
1515122b058aSross         if ( float64NumQIn <= expNum ) {
1516122b058aSross             expNum = 0;
1517122b058aSross             sequencePtr->done = TRUE;
1518122b058aSross         }
1519122b058aSross         sequencePtr->expNum = expNum;
1520122b058aSross     }
1521122b058aSross     sequencePtr->term1Num = sigNum;
1522122b058aSross     return z;
1523122b058aSross 
1524122b058aSross }
1525122b058aSross 
float64NextQOutP1(sequenceT * sequencePtr)1526122b058aSross static float64 float64NextQOutP1( sequenceT *sequencePtr )
1527122b058aSross {
1528122b058aSross     uint8 expNum, sigNum;
1529122b058aSross     float64 z;
1530122b058aSross 
1531122b058aSross     sigNum = sequencePtr->term1Num;
1532122b058aSross     expNum = sequencePtr->expNum;
1533122b058aSross     SETFLOAT64(
1534122b058aSross         z,
1535122b058aSross         float64QOut[ expNum ] | float64P1[ sigNum ].high,
1536122b058aSross         float64P1[ sigNum ].low
1537122b058aSross     );
1538122b058aSross     ++sigNum;
1539122b058aSross     if ( float64NumP1 <= sigNum ) {
1540122b058aSross         sigNum = 0;
1541122b058aSross         ++expNum;
1542122b058aSross         if ( float64NumQOut <= expNum ) {
1543122b058aSross             expNum = 0;
1544122b058aSross             sequencePtr->done = TRUE;
1545122b058aSross         }
1546122b058aSross         sequencePtr->expNum = expNum;
1547122b058aSross     }
1548122b058aSross     sequencePtr->term1Num = sigNum;
1549122b058aSross     return z;
1550122b058aSross 
1551122b058aSross }
1552122b058aSross 
1553122b058aSross static const uint32 float64NumQInP2 = float64NumQIn * float64NumP2;
1554122b058aSross static const uint32 float64NumQOutP2 = float64NumQOut * float64NumP2;
1555122b058aSross 
float64NextQInP2(sequenceT * sequencePtr)1556122b058aSross static float64 float64NextQInP2( sequenceT *sequencePtr )
1557122b058aSross {
1558122b058aSross     uint8 expNum, sigNum;
1559122b058aSross     float64 z;
1560122b058aSross 
1561122b058aSross     sigNum = sequencePtr->term1Num;
1562122b058aSross     expNum = sequencePtr->expNum;
1563122b058aSross     SETFLOAT64(
1564122b058aSross         z,
1565122b058aSross         float64QIn[ expNum ] | float64P2[ sigNum ].high,
1566122b058aSross         float64P2[ sigNum ].low
1567122b058aSross     );
1568122b058aSross     ++sigNum;
1569122b058aSross     if ( float64NumP2 <= sigNum ) {
1570122b058aSross         sigNum = 0;
1571122b058aSross         ++expNum;
1572122b058aSross         if ( float64NumQIn <= expNum ) {
1573122b058aSross             expNum = 0;
1574122b058aSross             sequencePtr->done = TRUE;
1575122b058aSross         }
1576122b058aSross         sequencePtr->expNum = expNum;
1577122b058aSross     }
1578122b058aSross     sequencePtr->term1Num = sigNum;
1579122b058aSross     return z;
1580122b058aSross 
1581122b058aSross }
1582122b058aSross 
float64NextQOutP2(sequenceT * sequencePtr)1583122b058aSross static float64 float64NextQOutP2( sequenceT *sequencePtr )
1584122b058aSross {
1585122b058aSross     uint8 expNum, sigNum;
1586122b058aSross     float64 z;
1587122b058aSross 
1588122b058aSross     sigNum = sequencePtr->term1Num;
1589122b058aSross     expNum = sequencePtr->expNum;
1590122b058aSross     SETFLOAT64(
1591122b058aSross         z,
1592122b058aSross         float64QOut[ expNum ] | float64P2[ sigNum ].high,
1593122b058aSross         float64P2[ sigNum ].low
1594122b058aSross     );
1595122b058aSross     ++sigNum;
1596122b058aSross     if ( float64NumP2 <= sigNum ) {
1597122b058aSross         sigNum = 0;
1598122b058aSross         ++expNum;
1599122b058aSross         if ( float64NumQOut <= expNum ) {
1600122b058aSross             expNum = 0;
1601122b058aSross             sequencePtr->done = TRUE;
1602122b058aSross         }
1603122b058aSross         sequencePtr->expNum = expNum;
1604122b058aSross     }
1605122b058aSross     sequencePtr->term1Num = sigNum;
1606122b058aSross     return z;
1607122b058aSross 
1608122b058aSross }
1609122b058aSross 
float64RandomQOutP3(void)1610122b058aSross static float64 float64RandomQOutP3( void )
1611122b058aSross {
1612122b058aSross     int8 sigNum1, sigNum2;
1613122b058aSross     uint32 sig1Low, sig2Low, zLow;
1614122b058aSross     float64 z;
1615122b058aSross 
1616122b058aSross     sigNum1 = randomUint8() % float64NumP2;
1617122b058aSross     sigNum2 = randomUint8() % float64NumP2;
1618122b058aSross     sig1Low = float64P2[ sigNum1 ].low;
1619122b058aSross     sig2Low = float64P2[ sigNum2 ].low;
1620122b058aSross     zLow = sig1Low + sig2Low;
1621122b058aSross     SETFLOAT64(
1622122b058aSross         z,
1623122b058aSross           float64QOut[ randomUint8() % float64NumQOut ]
1624122b058aSross         | (   (   float64P2[ sigNum1 ].high
1625122b058aSross                 + float64P2[ sigNum2 ].high
1626122b058aSross                 + ( zLow < sig1Low )
1627122b058aSross               )
1628122b058aSross             & 0x000FFFFF
1629122b058aSross           ),
1630122b058aSross         zLow
1631122b058aSross     );
1632122b058aSross     return z;
1633122b058aSross 
1634122b058aSross }
1635122b058aSross 
float64RandomQOutPInf(void)1636122b058aSross static float64 float64RandomQOutPInf( void )
1637122b058aSross {
1638122b058aSross     float64 z;
1639122b058aSross 
1640122b058aSross     SETFLOAT64(
1641122b058aSross         z,
1642122b058aSross           float64QOut[ randomUint8() % float64NumQOut ]
1643122b058aSross         | ( randomUint32() & 0x000FFFFF ),
1644122b058aSross         randomUint32()
1645122b058aSross     );
1646122b058aSross     return z;
1647122b058aSross 
1648122b058aSross }
1649122b058aSross 
1650122b058aSross enum {
1651122b058aSross     float64NumQInfWeightMasks = 10
1652122b058aSross };
1653122b058aSross 
1654122b058aSross static const uint32 float64QInfWeightMasks[ float64NumQInfWeightMasks ] = {
1655122b058aSross     0x7FF00000,
1656122b058aSross     0x7FF00000,
1657122b058aSross     0x3FF00000,
1658122b058aSross     0x1FF00000,
1659122b058aSross     0x0FF00000,
1660122b058aSross     0x07F00000,
1661122b058aSross     0x03F00000,
1662122b058aSross     0x01F00000,
1663122b058aSross     0x00F00000,
1664122b058aSross     0x00700000
1665122b058aSross };
1666122b058aSross 
1667122b058aSross static const uint32 float64QInfWeightOffsets[ float64NumQInfWeightMasks ] = {
1668122b058aSross     0x00000000,
1669122b058aSross     0x00000000,
1670122b058aSross     0x20000000,
1671122b058aSross     0x30000000,
1672122b058aSross     0x38000000,
1673122b058aSross     0x3C000000,
1674122b058aSross     0x3E000000,
1675122b058aSross     0x3F000000,
1676122b058aSross     0x3F800000,
1677122b058aSross     0x3FC00000
1678122b058aSross };
1679122b058aSross 
float64RandomQInfP3(void)1680122b058aSross static float64 float64RandomQInfP3( void )
1681122b058aSross {
1682122b058aSross     int8 sigNum1, sigNum2;
1683122b058aSross     uint32 sig1Low, sig2Low, zLow;
1684122b058aSross     int8 weightMaskNum;
1685122b058aSross     float64 z;
1686122b058aSross 
1687122b058aSross     sigNum1 = randomUint8() % float64NumP2;
1688122b058aSross     sigNum2 = randomUint8() % float64NumP2;
1689122b058aSross     sig1Low = float64P2[ sigNum1 ].low;
1690122b058aSross     sig2Low = float64P2[ sigNum2 ].low;
1691122b058aSross     zLow = sig1Low + sig2Low;
1692122b058aSross     weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
1693122b058aSross     SETFLOAT64(
1694122b058aSross         z,
1695122b058aSross           ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1696122b058aSross         | (   (   ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
1697122b058aSross                 & float64QInfWeightMasks[ weightMaskNum ] )
1698122b058aSross             + float64QInfWeightOffsets[ weightMaskNum ]
1699122b058aSross           )
1700122b058aSross         | (   (   float64P2[ sigNum1 ].high
1701122b058aSross                 + float64P2[ sigNum2 ].high
1702122b058aSross                 + ( zLow < sig1Low )
1703122b058aSross               )
1704122b058aSross             & 0x000FFFFF
1705122b058aSross           ),
1706122b058aSross         zLow
1707122b058aSross     );
1708122b058aSross     return z;
1709122b058aSross 
1710122b058aSross }
1711122b058aSross 
float64RandomQInfPInf(void)1712122b058aSross static float64 float64RandomQInfPInf( void )
1713122b058aSross {
1714122b058aSross     int8 weightMaskNum;
1715122b058aSross     float64 z;
1716122b058aSross 
1717122b058aSross     weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
1718122b058aSross     SETFLOAT64(
1719122b058aSross         z,
1720122b058aSross           ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1721122b058aSross         | (   (   ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
1722122b058aSross                 & float64QInfWeightMasks[ weightMaskNum ] )
1723122b058aSross             + float64QInfWeightOffsets[ weightMaskNum ]
1724122b058aSross           )
1725122b058aSross         | ( randomUint32() & 0x000FFFFF ),
1726122b058aSross         randomUint32()
1727122b058aSross     );
1728122b058aSross     return z;
1729122b058aSross 
1730122b058aSross }
1731122b058aSross 
float64Random(void)1732122b058aSross static float64 float64Random( void )
1733122b058aSross {
1734122b058aSross 
1735122b058aSross     switch ( randomUint8() & 7 ) {
1736122b058aSross      case 0:
1737122b058aSross      case 1:
1738122b058aSross      case 2:
1739122b058aSross         return float64RandomQOutP3();
1740122b058aSross      case 3:
1741122b058aSross         return float64RandomQOutPInf();
1742122b058aSross      case 4:
1743122b058aSross      case 5:
1744122b058aSross      case 6:
1745122b058aSross         return float64RandomQInfP3();
1746122b058aSross      case 7:
1747122b058aSross         return float64RandomQInfPInf();
1748122b058aSross     }
1749a9cb2700Sross     abort();
1750a9cb2700Sross     return 0;
1751122b058aSross }
1752122b058aSross 
1753122b058aSross #ifdef FLOATX80
1754122b058aSross 
1755122b058aSross enum {
1756122b058aSross     floatx80NumQIn  =  22,
1757122b058aSross     floatx80NumQOut =  76,
1758122b058aSross     floatx80NumP1   =   4,
1759122b058aSross     floatx80NumP2   = 248
1760122b058aSross };
1761122b058aSross 
1762122b058aSross static const uint16 floatx80QIn[ floatx80NumQIn ] = {
1763122b058aSross     0x0000,		/* positive, subnormal		*/
1764122b058aSross     0x0001,		/* positive, -16382		*/
1765122b058aSross     0x3FBF,		/* positive,    -64		*/
1766122b058aSross     0x3FFD,		/* positive,     -2		*/
1767122b058aSross     0x3FFE,		/* positive,     -1		*/
1768122b058aSross     0x3FFF,		/* positive,      0		*/
1769122b058aSross     0x4000,		/* positive,      1		*/
1770122b058aSross     0x4001,		/* positive,      2		*/
1771122b058aSross     0x403F,		/* positive,     64		*/
1772122b058aSross     0x7FFE,		/* positive,  16383		*/
1773122b058aSross     0x7FFF,		/* positive, infinity or NaN	*/
1774122b058aSross     0x8000,		/* negative, subnormal		*/
1775122b058aSross     0x8001,		/* negative, -16382		*/
1776122b058aSross     0xBFBF,		/* negative,    -64		*/
1777122b058aSross     0xBFFD,		/* negative,     -2		*/
1778122b058aSross     0xBFFE,		/* negative,     -1		*/
1779122b058aSross     0xBFFF,		/* negative,      0		*/
1780122b058aSross     0xC000,		/* negative,      1		*/
1781122b058aSross     0xC001,		/* negative,      2		*/
1782122b058aSross     0xC03F,		/* negative,     64		*/
1783122b058aSross     0xFFFE,		/* negative,  16383		*/
1784122b058aSross     0xFFFF		/* negative, infinity or NaN	*/
1785122b058aSross };
1786122b058aSross 
1787122b058aSross static const uint16 floatx80QOut[ floatx80NumQOut ] = {
1788122b058aSross     0x0000,		/* positive, subnormal		*/
1789122b058aSross     0x0001,		/* positive, -16382		*/
1790122b058aSross     0x0002,		/* positive, -16381		*/
1791122b058aSross     0x3BFE,		/* positive,  -1025		*/
1792122b058aSross     0x3BFF,		/* positive,  -1024		*/
1793122b058aSross     0x3C00,		/* positive,  -1023		*/
1794122b058aSross     0x3C01,		/* positive,  -1022		*/
1795122b058aSross     0x3F7E,		/* positive,   -129		*/
1796122b058aSross     0x3F7F,		/* positive,   -128		*/
1797122b058aSross     0x3F80,		/* positive,   -127		*/
1798122b058aSross     0x3F81,		/* positive,   -126		*/
1799122b058aSross     0x3FBF,		/* positive,    -64		*/
1800122b058aSross     0x3FFB,		/* positive,     -4		*/
1801122b058aSross     0x3FFC,		/* positive,     -3		*/
1802122b058aSross     0x3FFD,		/* positive,     -2		*/
1803122b058aSross     0x3FFE,		/* positive,     -1		*/
1804122b058aSross     0x3FFF,		/* positive,      0		*/
1805122b058aSross     0x4000,		/* positive,      1		*/
1806122b058aSross     0x4001,		/* positive,      2		*/
1807122b058aSross     0x4002,		/* positive,      3		*/
1808122b058aSross     0x4003,		/* positive,      4		*/
1809122b058aSross     0x401C,		/* positive,     29		*/
1810122b058aSross     0x401D,		/* positive,     30		*/
1811122b058aSross     0x401E,		/* positive,     31		*/
1812122b058aSross     0x401F,		/* positive,     32		*/
1813122b058aSross     0x403C,		/* positive,     61		*/
1814122b058aSross     0x403D,		/* positive,     62		*/
1815122b058aSross     0x403E,		/* positive,     63		*/
1816122b058aSross     0x403F,		/* positive,     64		*/
1817122b058aSross     0x407E,		/* positive,    127		*/
1818122b058aSross     0x407F,		/* positive,    128		*/
1819122b058aSross     0x4080,		/* positive,    129		*/
1820122b058aSross     0x43FE,		/* positive,   1023		*/
1821122b058aSross     0x43FF,		/* positive,   1024		*/
1822122b058aSross     0x4400,		/* positive,   1025		*/
1823122b058aSross     0x7FFD,		/* positive,  16382		*/
1824122b058aSross     0x7FFE,		/* positive,  16383		*/
1825122b058aSross     0x7FFF,		/* positive, infinity or NaN	*/
1826122b058aSross     0x8000,		/* negative, subnormal		*/
1827122b058aSross     0x8001,		/* negative, -16382		*/
1828122b058aSross     0x8002,		/* negative, -16381		*/
1829122b058aSross     0xBBFE,		/* negative,  -1025		*/
1830122b058aSross     0xBBFF,		/* negative,  -1024		*/
1831122b058aSross     0xBC00,		/* negative,  -1023		*/
1832122b058aSross     0xBC01,		/* negative,  -1022		*/
1833122b058aSross     0xBF7E,		/* negative,   -129		*/
1834122b058aSross     0xBF7F,		/* negative,   -128		*/
1835122b058aSross     0xBF80,		/* negative,   -127		*/
1836122b058aSross     0xBF81,		/* negative,   -126		*/
1837122b058aSross     0xBFBF,		/* negative,    -64		*/
1838122b058aSross     0xBFFB,		/* negative,     -4		*/
1839122b058aSross     0xBFFC,		/* negative,     -3		*/
1840122b058aSross     0xBFFD,		/* negative,     -2		*/
1841122b058aSross     0xBFFE,		/* negative,     -1		*/
1842122b058aSross     0xBFFF,		/* negative,      0		*/
1843122b058aSross     0xC000,		/* negative,      1		*/
1844122b058aSross     0xC001,		/* negative,      2		*/
1845122b058aSross     0xC002,		/* negative,      3		*/
1846122b058aSross     0xC003,		/* negative,      4		*/
1847122b058aSross     0xC01C,		/* negative,     29		*/
1848122b058aSross     0xC01D,		/* negative,     30		*/
1849122b058aSross     0xC01E,		/* negative,     31		*/
1850122b058aSross     0xC01F,		/* negative,     32		*/
1851122b058aSross     0xC03C,		/* negative,     61		*/
1852122b058aSross     0xC03D,		/* negative,     62		*/
1853122b058aSross     0xC03E,		/* negative,     63		*/
1854122b058aSross     0xC03F,		/* negative,     64		*/
1855122b058aSross     0xC07E,		/* negative,    127		*/
1856122b058aSross     0xC07F,		/* negative,    128		*/
1857122b058aSross     0xC080,		/* negative,    129		*/
1858122b058aSross     0xC3FE,		/* negative,   1023		*/
1859122b058aSross     0xC3FF,		/* negative,   1024		*/
1860122b058aSross     0xC400,		/* negative,   1025		*/
1861122b058aSross     0xFFFD,		/* negative,  16382		*/
1862122b058aSross     0xFFFE,		/* negative,  16383		*/
1863122b058aSross     0xFFFF		/* negative, infinity or NaN	*/
1864122b058aSross };
1865122b058aSross 
1866122b058aSross static const bits64 floatx80P1[ floatx80NumP1 ] = {
1867122b058aSross     LIT64( 0x0000000000000000 ),
1868122b058aSross     LIT64( 0x0000000000000001 ),
1869122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFF ),
1870122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFE )
1871122b058aSross };
1872122b058aSross 
1873122b058aSross static const bits64 floatx80P2[ floatx80NumP2 ] = {
1874122b058aSross     LIT64( 0x0000000000000000 ),
1875122b058aSross     LIT64( 0x0000000000000001 ),
1876122b058aSross     LIT64( 0x0000000000000002 ),
1877122b058aSross     LIT64( 0x0000000000000004 ),
1878122b058aSross     LIT64( 0x0000000000000008 ),
1879122b058aSross     LIT64( 0x0000000000000010 ),
1880122b058aSross     LIT64( 0x0000000000000020 ),
1881122b058aSross     LIT64( 0x0000000000000040 ),
1882122b058aSross     LIT64( 0x0000000000000080 ),
1883122b058aSross     LIT64( 0x0000000000000100 ),
1884122b058aSross     LIT64( 0x0000000000000200 ),
1885122b058aSross     LIT64( 0x0000000000000400 ),
1886122b058aSross     LIT64( 0x0000000000000800 ),
1887122b058aSross     LIT64( 0x0000000000001000 ),
1888122b058aSross     LIT64( 0x0000000000002000 ),
1889122b058aSross     LIT64( 0x0000000000004000 ),
1890122b058aSross     LIT64( 0x0000000000008000 ),
1891122b058aSross     LIT64( 0x0000000000010000 ),
1892122b058aSross     LIT64( 0x0000000000020000 ),
1893122b058aSross     LIT64( 0x0000000000040000 ),
1894122b058aSross     LIT64( 0x0000000000080000 ),
1895122b058aSross     LIT64( 0x0000000000100000 ),
1896122b058aSross     LIT64( 0x0000000000200000 ),
1897122b058aSross     LIT64( 0x0000000000400000 ),
1898122b058aSross     LIT64( 0x0000000000800000 ),
1899122b058aSross     LIT64( 0x0000000001000000 ),
1900122b058aSross     LIT64( 0x0000000002000000 ),
1901122b058aSross     LIT64( 0x0000000004000000 ),
1902122b058aSross     LIT64( 0x0000000008000000 ),
1903122b058aSross     LIT64( 0x0000000010000000 ),
1904122b058aSross     LIT64( 0x0000000020000000 ),
1905122b058aSross     LIT64( 0x0000000040000000 ),
1906122b058aSross     LIT64( 0x0000000080000000 ),
1907122b058aSross     LIT64( 0x0000000100000000 ),
1908122b058aSross     LIT64( 0x0000000200000000 ),
1909122b058aSross     LIT64( 0x0000000400000000 ),
1910122b058aSross     LIT64( 0x0000000800000000 ),
1911122b058aSross     LIT64( 0x0000001000000000 ),
1912122b058aSross     LIT64( 0x0000002000000000 ),
1913122b058aSross     LIT64( 0x0000004000000000 ),
1914122b058aSross     LIT64( 0x0000008000000000 ),
1915122b058aSross     LIT64( 0x0000010000000000 ),
1916122b058aSross     LIT64( 0x0000020000000000 ),
1917122b058aSross     LIT64( 0x0000040000000000 ),
1918122b058aSross     LIT64( 0x0000080000000000 ),
1919122b058aSross     LIT64( 0x0000100000000000 ),
1920122b058aSross     LIT64( 0x0000200000000000 ),
1921122b058aSross     LIT64( 0x0000400000000000 ),
1922122b058aSross     LIT64( 0x0000800000000000 ),
1923122b058aSross     LIT64( 0x0001000000000000 ),
1924122b058aSross     LIT64( 0x0002000000000000 ),
1925122b058aSross     LIT64( 0x0004000000000000 ),
1926122b058aSross     LIT64( 0x0008000000000000 ),
1927122b058aSross     LIT64( 0x0010000000000000 ),
1928122b058aSross     LIT64( 0x0020000000000000 ),
1929122b058aSross     LIT64( 0x0040000000000000 ),
1930122b058aSross     LIT64( 0x0080000000000000 ),
1931122b058aSross     LIT64( 0x0100000000000000 ),
1932122b058aSross     LIT64( 0x0200000000000000 ),
1933122b058aSross     LIT64( 0x0400000000000000 ),
1934122b058aSross     LIT64( 0x0800000000000000 ),
1935122b058aSross     LIT64( 0x1000000000000000 ),
1936122b058aSross     LIT64( 0x2000000000000000 ),
1937122b058aSross     LIT64( 0x4000000000000000 ),
1938122b058aSross     LIT64( 0x6000000000000000 ),
1939122b058aSross     LIT64( 0x7000000000000000 ),
1940122b058aSross     LIT64( 0x7800000000000000 ),
1941122b058aSross     LIT64( 0x7C00000000000000 ),
1942122b058aSross     LIT64( 0x7E00000000000000 ),
1943122b058aSross     LIT64( 0x7F00000000000000 ),
1944122b058aSross     LIT64( 0x7F80000000000000 ),
1945122b058aSross     LIT64( 0x7FC0000000000000 ),
1946122b058aSross     LIT64( 0x7FE0000000000000 ),
1947122b058aSross     LIT64( 0x7FF0000000000000 ),
1948122b058aSross     LIT64( 0x7FF8000000000000 ),
1949122b058aSross     LIT64( 0x7FFC000000000000 ),
1950122b058aSross     LIT64( 0x7FFE000000000000 ),
1951122b058aSross     LIT64( 0x7FFF000000000000 ),
1952122b058aSross     LIT64( 0x7FFF800000000000 ),
1953122b058aSross     LIT64( 0x7FFFC00000000000 ),
1954122b058aSross     LIT64( 0x7FFFE00000000000 ),
1955122b058aSross     LIT64( 0x7FFFF00000000000 ),
1956122b058aSross     LIT64( 0x7FFFF80000000000 ),
1957122b058aSross     LIT64( 0x7FFFFC0000000000 ),
1958122b058aSross     LIT64( 0x7FFFFE0000000000 ),
1959122b058aSross     LIT64( 0x7FFFFF0000000000 ),
1960122b058aSross     LIT64( 0x7FFFFF8000000000 ),
1961122b058aSross     LIT64( 0x7FFFFFC000000000 ),
1962122b058aSross     LIT64( 0x7FFFFFE000000000 ),
1963122b058aSross     LIT64( 0x7FFFFFF000000000 ),
1964122b058aSross     LIT64( 0x7FFFFFF800000000 ),
1965122b058aSross     LIT64( 0x7FFFFFFC00000000 ),
1966122b058aSross     LIT64( 0x7FFFFFFE00000000 ),
1967122b058aSross     LIT64( 0x7FFFFFFF00000000 ),
1968122b058aSross     LIT64( 0x7FFFFFFF80000000 ),
1969122b058aSross     LIT64( 0x7FFFFFFFC0000000 ),
1970122b058aSross     LIT64( 0x7FFFFFFFE0000000 ),
1971122b058aSross     LIT64( 0x7FFFFFFFF0000000 ),
1972122b058aSross     LIT64( 0x7FFFFFFFF8000000 ),
1973122b058aSross     LIT64( 0x7FFFFFFFFC000000 ),
1974122b058aSross     LIT64( 0x7FFFFFFFFE000000 ),
1975122b058aSross     LIT64( 0x7FFFFFFFFF000000 ),
1976122b058aSross     LIT64( 0x7FFFFFFFFF800000 ),
1977122b058aSross     LIT64( 0x7FFFFFFFFFC00000 ),
1978122b058aSross     LIT64( 0x7FFFFFFFFFE00000 ),
1979122b058aSross     LIT64( 0x7FFFFFFFFFF00000 ),
1980122b058aSross     LIT64( 0x7FFFFFFFFFF80000 ),
1981122b058aSross     LIT64( 0x7FFFFFFFFFFC0000 ),
1982122b058aSross     LIT64( 0x7FFFFFFFFFFE0000 ),
1983122b058aSross     LIT64( 0x7FFFFFFFFFFF0000 ),
1984122b058aSross     LIT64( 0x7FFFFFFFFFFF8000 ),
1985122b058aSross     LIT64( 0x7FFFFFFFFFFFC000 ),
1986122b058aSross     LIT64( 0x7FFFFFFFFFFFE000 ),
1987122b058aSross     LIT64( 0x7FFFFFFFFFFFF000 ),
1988122b058aSross     LIT64( 0x7FFFFFFFFFFFF800 ),
1989122b058aSross     LIT64( 0x7FFFFFFFFFFFFC00 ),
1990122b058aSross     LIT64( 0x7FFFFFFFFFFFFE00 ),
1991122b058aSross     LIT64( 0x7FFFFFFFFFFFFF00 ),
1992122b058aSross     LIT64( 0x7FFFFFFFFFFFFF80 ),
1993122b058aSross     LIT64( 0x7FFFFFFFFFFFFFC0 ),
1994122b058aSross     LIT64( 0x7FFFFFFFFFFFFFE0 ),
1995122b058aSross     LIT64( 0x7FFFFFFFFFFFFFF0 ),
1996122b058aSross     LIT64( 0x7FFFFFFFFFFFFFF8 ),
1997122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFC ),
1998122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFE ),
1999122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFF ),
2000122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFD ),
2001122b058aSross     LIT64( 0x7FFFFFFFFFFFFFFB ),
2002122b058aSross     LIT64( 0x7FFFFFFFFFFFFFF7 ),
2003122b058aSross     LIT64( 0x7FFFFFFFFFFFFFEF ),
2004122b058aSross     LIT64( 0x7FFFFFFFFFFFFFDF ),
2005122b058aSross     LIT64( 0x7FFFFFFFFFFFFFBF ),
2006122b058aSross     LIT64( 0x7FFFFFFFFFFFFF7F ),
2007122b058aSross     LIT64( 0x7FFFFFFFFFFFFEFF ),
2008122b058aSross     LIT64( 0x7FFFFFFFFFFFFDFF ),
2009122b058aSross     LIT64( 0x7FFFFFFFFFFFFBFF ),
2010122b058aSross     LIT64( 0x7FFFFFFFFFFFF7FF ),
2011122b058aSross     LIT64( 0x7FFFFFFFFFFFEFFF ),
2012122b058aSross     LIT64( 0x7FFFFFFFFFFFDFFF ),
2013122b058aSross     LIT64( 0x7FFFFFFFFFFFBFFF ),
2014122b058aSross     LIT64( 0x7FFFFFFFFFFF7FFF ),
2015122b058aSross     LIT64( 0x7FFFFFFFFFFEFFFF ),
2016122b058aSross     LIT64( 0x7FFFFFFFFFFDFFFF ),
2017122b058aSross     LIT64( 0x7FFFFFFFFFFBFFFF ),
2018122b058aSross     LIT64( 0x7FFFFFFFFFF7FFFF ),
2019122b058aSross     LIT64( 0x7FFFFFFFFFEFFFFF ),
2020122b058aSross     LIT64( 0x7FFFFFFFFFDFFFFF ),
2021122b058aSross     LIT64( 0x7FFFFFFFFFBFFFFF ),
2022122b058aSross     LIT64( 0x7FFFFFFFFF7FFFFF ),
2023122b058aSross     LIT64( 0x7FFFFFFFFEFFFFFF ),
2024122b058aSross     LIT64( 0x7FFFFFFFFDFFFFFF ),
2025122b058aSross     LIT64( 0x7FFFFFFFFBFFFFFF ),
2026122b058aSross     LIT64( 0x7FFFFFFFF7FFFFFF ),
2027122b058aSross     LIT64( 0x7FFFFFFFEFFFFFFF ),
2028122b058aSross     LIT64( 0x7FFFFFFFDFFFFFFF ),
2029122b058aSross     LIT64( 0x7FFFFFFFBFFFFFFF ),
2030122b058aSross     LIT64( 0x7FFFFFFF7FFFFFFF ),
2031122b058aSross     LIT64( 0x7FFFFFFEFFFFFFFF ),
2032122b058aSross     LIT64( 0x7FFFFFFDFFFFFFFF ),
2033122b058aSross     LIT64( 0x7FFFFFFBFFFFFFFF ),
2034122b058aSross     LIT64( 0x7FFFFFF7FFFFFFFF ),
2035122b058aSross     LIT64( 0x7FFFFFEFFFFFFFFF ),
2036122b058aSross     LIT64( 0x7FFFFFDFFFFFFFFF ),
2037122b058aSross     LIT64( 0x7FFFFFBFFFFFFFFF ),
2038122b058aSross     LIT64( 0x7FFFFF7FFFFFFFFF ),
2039122b058aSross     LIT64( 0x7FFFFEFFFFFFFFFF ),
2040122b058aSross     LIT64( 0x7FFFFDFFFFFFFFFF ),
2041122b058aSross     LIT64( 0x7FFFFBFFFFFFFFFF ),
2042122b058aSross     LIT64( 0x7FFFF7FFFFFFFFFF ),
2043122b058aSross     LIT64( 0x7FFFEFFFFFFFFFFF ),
2044122b058aSross     LIT64( 0x7FFFDFFFFFFFFFFF ),
2045122b058aSross     LIT64( 0x7FFFBFFFFFFFFFFF ),
2046122b058aSross     LIT64( 0x7FFF7FFFFFFFFFFF ),
2047122b058aSross     LIT64( 0x7FFEFFFFFFFFFFFF ),
2048122b058aSross     LIT64( 0x7FFDFFFFFFFFFFFF ),
2049122b058aSross     LIT64( 0x7FFBFFFFFFFFFFFF ),
2050122b058aSross     LIT64( 0x7FF7FFFFFFFFFFFF ),
2051122b058aSross     LIT64( 0x7FEFFFFFFFFFFFFF ),
2052122b058aSross     LIT64( 0x7FDFFFFFFFFFFFFF ),
2053122b058aSross     LIT64( 0x7FBFFFFFFFFFFFFF ),
2054122b058aSross     LIT64( 0x7F7FFFFFFFFFFFFF ),
2055122b058aSross     LIT64( 0x7EFFFFFFFFFFFFFF ),
2056122b058aSross     LIT64( 0x7DFFFFFFFFFFFFFF ),
2057122b058aSross     LIT64( 0x7BFFFFFFFFFFFFFF ),
2058122b058aSross     LIT64( 0x77FFFFFFFFFFFFFF ),
2059122b058aSross     LIT64( 0x6FFFFFFFFFFFFFFF ),
2060122b058aSross     LIT64( 0x5FFFFFFFFFFFFFFF ),
2061122b058aSross     LIT64( 0x3FFFFFFFFFFFFFFF ),
2062122b058aSross     LIT64( 0x1FFFFFFFFFFFFFFF ),
2063122b058aSross     LIT64( 0x0FFFFFFFFFFFFFFF ),
2064122b058aSross     LIT64( 0x07FFFFFFFFFFFFFF ),
2065122b058aSross     LIT64( 0x03FFFFFFFFFFFFFF ),
2066122b058aSross     LIT64( 0x01FFFFFFFFFFFFFF ),
2067122b058aSross     LIT64( 0x00FFFFFFFFFFFFFF ),
2068122b058aSross     LIT64( 0x007FFFFFFFFFFFFF ),
2069122b058aSross     LIT64( 0x003FFFFFFFFFFFFF ),
2070122b058aSross     LIT64( 0x001FFFFFFFFFFFFF ),
2071122b058aSross     LIT64( 0x000FFFFFFFFFFFFF ),
2072122b058aSross     LIT64( 0x0007FFFFFFFFFFFF ),
2073122b058aSross     LIT64( 0x0003FFFFFFFFFFFF ),
2074122b058aSross     LIT64( 0x0001FFFFFFFFFFFF ),
2075122b058aSross     LIT64( 0x0000FFFFFFFFFFFF ),
2076122b058aSross     LIT64( 0x00007FFFFFFFFFFF ),
2077122b058aSross     LIT64( 0x00003FFFFFFFFFFF ),
2078122b058aSross     LIT64( 0x00001FFFFFFFFFFF ),
2079122b058aSross     LIT64( 0x00000FFFFFFFFFFF ),
2080122b058aSross     LIT64( 0x000007FFFFFFFFFF ),
2081122b058aSross     LIT64( 0x000003FFFFFFFFFF ),
2082122b058aSross     LIT64( 0x000001FFFFFFFFFF ),
2083122b058aSross     LIT64( 0x000000FFFFFFFFFF ),
2084122b058aSross     LIT64( 0x0000007FFFFFFFFF ),
2085122b058aSross     LIT64( 0x0000003FFFFFFFFF ),
2086122b058aSross     LIT64( 0x0000001FFFFFFFFF ),
2087122b058aSross     LIT64( 0x0000000FFFFFFFFF ),
2088122b058aSross     LIT64( 0x00000007FFFFFFFF ),
2089122b058aSross     LIT64( 0x00000003FFFFFFFF ),
2090122b058aSross     LIT64( 0x00000001FFFFFFFF ),
2091122b058aSross     LIT64( 0x00000000FFFFFFFF ),
2092122b058aSross     LIT64( 0x000000007FFFFFFF ),
2093122b058aSross     LIT64( 0x000000003FFFFFFF ),
2094122b058aSross     LIT64( 0x000000001FFFFFFF ),
2095122b058aSross     LIT64( 0x000000000FFFFFFF ),
2096122b058aSross     LIT64( 0x0000000007FFFFFF ),
2097122b058aSross     LIT64( 0x0000000003FFFFFF ),
2098122b058aSross     LIT64( 0x0000000001FFFFFF ),
2099122b058aSross     LIT64( 0x0000000000FFFFFF ),
2100122b058aSross     LIT64( 0x00000000007FFFFF ),
2101122b058aSross     LIT64( 0x00000000003FFFFF ),
2102122b058aSross     LIT64( 0x00000000001FFFFF ),
2103122b058aSross     LIT64( 0x00000000000FFFFF ),
2104122b058aSross     LIT64( 0x000000000007FFFF ),
2105122b058aSross     LIT64( 0x000000000003FFFF ),
2106122b058aSross     LIT64( 0x000000000001FFFF ),
2107122b058aSross     LIT64( 0x000000000000FFFF ),
2108122b058aSross     LIT64( 0x0000000000007FFF ),
2109122b058aSross     LIT64( 0x0000000000003FFF ),
2110122b058aSross     LIT64( 0x0000000000001FFF ),
2111122b058aSross     LIT64( 0x0000000000000FFF ),
2112122b058aSross     LIT64( 0x00000000000007FF ),
2113122b058aSross     LIT64( 0x00000000000003FF ),
2114122b058aSross     LIT64( 0x00000000000001FF ),
2115122b058aSross     LIT64( 0x00000000000000FF ),
2116122b058aSross     LIT64( 0x000000000000007F ),
2117122b058aSross     LIT64( 0x000000000000003F ),
2118122b058aSross     LIT64( 0x000000000000001F ),
2119122b058aSross     LIT64( 0x000000000000000F ),
2120122b058aSross     LIT64( 0x0000000000000007 ),
2121122b058aSross     LIT64( 0x0000000000000003 )
2122122b058aSross };
2123122b058aSross 
2124122b058aSross static const uint32 floatx80NumQInP1 = floatx80NumQIn * floatx80NumP1;
2125122b058aSross static const uint32 floatx80NumQOutP1 = floatx80NumQOut * floatx80NumP1;
2126122b058aSross 
floatx80NextQInP1(sequenceT * sequencePtr)2127122b058aSross static floatx80 floatx80NextQInP1( sequenceT *sequencePtr )
2128122b058aSross {
2129122b058aSross     int16 expNum, sigNum;
2130122b058aSross     floatx80 z;
2131122b058aSross 
2132122b058aSross     sigNum = sequencePtr->term1Num;
2133122b058aSross     expNum = sequencePtr->expNum;
2134122b058aSross     z.low = floatx80P1[ sigNum ];
2135122b058aSross     z.high = floatx80QIn[ expNum ];
2136122b058aSross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2137122b058aSross     ++sigNum;
2138122b058aSross     if ( floatx80NumP1 <= sigNum ) {
2139122b058aSross         sigNum = 0;
2140122b058aSross         ++expNum;
2141122b058aSross         if ( floatx80NumQIn <= expNum ) {
2142122b058aSross             expNum = 0;
2143122b058aSross             sequencePtr->done = TRUE;
2144122b058aSross         }
2145122b058aSross         sequencePtr->expNum = expNum;
2146122b058aSross     }
2147122b058aSross     sequencePtr->term1Num = sigNum;
2148122b058aSross     return z;
2149122b058aSross 
2150122b058aSross }
2151122b058aSross 
floatx80NextQOutP1(sequenceT * sequencePtr)2152122b058aSross static floatx80 floatx80NextQOutP1( sequenceT *sequencePtr )
2153122b058aSross {
2154122b058aSross     int16 expNum, sigNum;
2155122b058aSross     floatx80 z;
2156122b058aSross 
2157122b058aSross     sigNum = sequencePtr->term1Num;
2158122b058aSross     expNum = sequencePtr->expNum;
2159122b058aSross     z.low = floatx80P1[ sigNum ];
2160122b058aSross     z.high = floatx80QOut[ expNum ];
2161122b058aSross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2162122b058aSross     ++sigNum;
2163122b058aSross     if ( floatx80NumP1 <= sigNum ) {
2164122b058aSross         sigNum = 0;
2165122b058aSross         ++expNum;
2166122b058aSross         if ( floatx80NumQOut <= expNum ) {
2167122b058aSross             expNum = 0;
2168122b058aSross             sequencePtr->done = TRUE;
2169122b058aSross         }
2170122b058aSross         sequencePtr->expNum = expNum;
2171122b058aSross     }
2172122b058aSross     sequencePtr->term1Num = sigNum;
2173122b058aSross     return z;
2174122b058aSross 
2175122b058aSross }
2176122b058aSross 
2177122b058aSross static const uint32 floatx80NumQInP2 = floatx80NumQIn * floatx80NumP2;
2178122b058aSross static const uint32 floatx80NumQOutP2 = floatx80NumQOut * floatx80NumP2;
2179122b058aSross 
floatx80NextQInP2(sequenceT * sequencePtr)2180122b058aSross static floatx80 floatx80NextQInP2( sequenceT *sequencePtr )
2181122b058aSross {
2182122b058aSross     int16 expNum, sigNum;
2183122b058aSross     floatx80 z;
2184122b058aSross 
2185122b058aSross     sigNum = sequencePtr->term1Num;
2186122b058aSross     expNum = sequencePtr->expNum;
2187122b058aSross     z.low = floatx80P2[ sigNum ];
2188122b058aSross     z.high = floatx80QIn[ expNum ];
2189122b058aSross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2190122b058aSross     ++sigNum;
2191122b058aSross     if ( floatx80NumP2 <= sigNum ) {
2192122b058aSross         sigNum = 0;
2193122b058aSross         ++expNum;
2194122b058aSross         if ( floatx80NumQIn <= expNum ) {
2195122b058aSross             expNum = 0;
2196122b058aSross             sequencePtr->done = TRUE;
2197122b058aSross         }
2198122b058aSross         sequencePtr->expNum = expNum;
2199122b058aSross     }
2200122b058aSross     sequencePtr->term1Num = sigNum;
2201122b058aSross     return z;
2202122b058aSross 
2203122b058aSross }
2204122b058aSross 
floatx80NextQOutP2(sequenceT * sequencePtr)2205122b058aSross static floatx80 floatx80NextQOutP2( sequenceT *sequencePtr )
2206122b058aSross {
2207122b058aSross     int16 expNum, sigNum;
2208122b058aSross     floatx80 z;
2209122b058aSross 
2210122b058aSross     sigNum = sequencePtr->term1Num;
2211122b058aSross     expNum = sequencePtr->expNum;
2212122b058aSross     z.low = floatx80P2[ sigNum ];
2213122b058aSross     z.high = floatx80QOut[ expNum ];
2214122b058aSross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2215122b058aSross     ++sigNum;
2216122b058aSross     if ( floatx80NumP2 <= sigNum ) {
2217122b058aSross         sigNum = 0;
2218122b058aSross         ++expNum;
2219122b058aSross         if ( floatx80NumQOut <= expNum ) {
2220122b058aSross             expNum = 0;
2221122b058aSross             sequencePtr->done = TRUE;
2222122b058aSross         }
2223122b058aSross         sequencePtr->expNum = expNum;
2224122b058aSross     }
2225122b058aSross     sequencePtr->term1Num = sigNum;
2226122b058aSross     return z;
2227122b058aSross 
2228122b058aSross }
2229122b058aSross 
floatx80RandomQOutP3(void)2230122b058aSross static floatx80 floatx80RandomQOutP3( void )
2231122b058aSross {
2232122b058aSross     floatx80 z;
2233122b058aSross 
2234122b058aSross     z.low =
2235122b058aSross           (   floatx80P2[ randomUint8() % floatx80NumP2 ]
2236122b058aSross             + floatx80P2[ randomUint8() % floatx80NumP2 ] )
2237122b058aSross         & LIT64( 0x7FFFFFFFFFFFFFFF );
2238122b058aSross     z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
2239122b058aSross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2240122b058aSross     return z;
2241122b058aSross 
2242122b058aSross }
2243122b058aSross 
floatx80RandomQOutPInf(void)2244122b058aSross static floatx80 floatx80RandomQOutPInf( void )
2245122b058aSross {
2246122b058aSross     floatx80 z;
2247122b058aSross 
2248122b058aSross     z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
2249122b058aSross     z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
2250122b058aSross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2251122b058aSross     return z;
2252122b058aSross 
2253122b058aSross }
2254122b058aSross 
2255122b058aSross enum {
2256122b058aSross     floatx80NumQInfWeightMasks = 14
2257122b058aSross };
2258122b058aSross 
2259122b058aSross static const uint16 floatx80QInfWeightMasks[ floatx80NumQInfWeightMasks ] = {
2260122b058aSross     0x7FFF,
2261122b058aSross     0x7FFF,
2262122b058aSross     0x3FFF,
2263122b058aSross     0x1FFF,
2264122b058aSross     0x07FF,
2265122b058aSross     0x07FF,
2266122b058aSross     0x03FF,
2267122b058aSross     0x01FF,
2268122b058aSross     0x00FF,
2269122b058aSross     0x007F,
2270122b058aSross     0x003F,
2271122b058aSross     0x001F,
2272122b058aSross     0x000F,
2273122b058aSross     0x0007
2274122b058aSross };
2275122b058aSross 
2276122b058aSross static const uint16 floatx80QInfWeightOffsets[ floatx80NumQInfWeightMasks ] = {
2277122b058aSross     0x0000,
2278122b058aSross     0x0000,
2279122b058aSross     0x2000,
2280122b058aSross     0x3000,
2281122b058aSross     0x3800,
2282122b058aSross     0x3C00,
2283122b058aSross     0x3E00,
2284122b058aSross     0x3F00,
2285122b058aSross     0x3F80,
2286122b058aSross     0x3FC0,
2287122b058aSross     0x3FE0,
2288122b058aSross     0x3FF0,
2289122b058aSross     0x3FF8,
2290122b058aSross     0x3FFC
2291122b058aSross };
2292122b058aSross 
floatx80RandomQInfP3(void)2293122b058aSross static floatx80 floatx80RandomQInfP3( void )
2294122b058aSross {
2295122b058aSross     int8 weightMaskNum;
2296122b058aSross     floatx80 z;
2297122b058aSross 
2298122b058aSross     z.low =
2299122b058aSross           (   floatx80P2[ randomUint8() % floatx80NumP2 ]
2300122b058aSross             + floatx80P2[ randomUint8() % floatx80NumP2 ] )
2301122b058aSross         & LIT64( 0x7FFFFFFFFFFFFFFF );
2302122b058aSross     weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
2303122b058aSross     z.high =
2304a9cb2700Sross           randomUint16() & (floatx80QInfWeightMasks[ weightMaskNum ]
2305a9cb2700Sross         + floatx80QInfWeightOffsets[ weightMaskNum ]);
2306122b058aSross     if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
2307122b058aSross     z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
2308122b058aSross     return z;
2309122b058aSross 
2310122b058aSross }
2311122b058aSross 
floatx80RandomQInfPInf(void)2312122b058aSross static floatx80 floatx80RandomQInfPInf( void )
2313122b058aSross {
2314122b058aSross     int8 weightMaskNum;
2315122b058aSross     floatx80 z;
2316122b058aSross 
2317122b058aSross     z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
2318122b058aSross     weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
2319122b058aSross     z.high =
2320a9cb2700Sross           randomUint16() & (floatx80QInfWeightMasks[ weightMaskNum ]
2321a9cb2700Sross         + floatx80QInfWeightOffsets[ weightMaskNum ]);
2322122b058aSross     if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
2323122b058aSross     z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
2324122b058aSross     return z;
2325122b058aSross 
2326122b058aSross }
2327122b058aSross 
floatx80Random(void)2328122b058aSross static floatx80 floatx80Random( void )
2329122b058aSross {
2330122b058aSross 
2331122b058aSross     switch ( randomUint8() & 7 ) {
2332122b058aSross      case 0:
2333122b058aSross      case 1:
2334122b058aSross      case 2:
2335122b058aSross         return floatx80RandomQOutP3();
2336122b058aSross      case 3:
2337122b058aSross         return floatx80RandomQOutPInf();
2338122b058aSross      case 4:
2339122b058aSross      case 5:
2340122b058aSross      case 6:
2341122b058aSross         return floatx80RandomQInfP3();
2342122b058aSross      case 7:
2343a9cb2700Sross 	break;
2344122b058aSross     }
2345a9cb2700Sross     return floatx80RandomQInfPInf();
2346122b058aSross }
2347122b058aSross 
2348122b058aSross #endif
2349122b058aSross 
2350122b058aSross #ifdef FLOAT128
2351122b058aSross 
2352122b058aSross enum {
2353122b058aSross     float128NumQIn  =  22,
2354122b058aSross     float128NumQOut =  78,
2355122b058aSross     float128NumP1   =   4,
2356122b058aSross     float128NumP2   = 443
2357122b058aSross };
2358122b058aSross 
2359122b058aSross static const uint64 float128QIn[ float128NumQIn ] = {
2360122b058aSross     LIT64( 0x0000000000000000 ),	/* positive, subnormal		*/
2361122b058aSross     LIT64( 0x0001000000000000 ),	/* positive, -16382		*/
2362122b058aSross     LIT64( 0x3F8E000000000000 ),	/* positive,   -113		*/
2363122b058aSross     LIT64( 0x3FFD000000000000 ),	/* positive,     -2		*/
2364122b058aSross     LIT64( 0x3FFE000000000000 ),	/* positive,     -1		*/
2365122b058aSross     LIT64( 0x3FFF000000000000 ),	/* positive,      0		*/
2366122b058aSross     LIT64( 0x4000000000000000 ),	/* positive,      1		*/
2367122b058aSross     LIT64( 0x4001000000000000 ),	/* positive,      2		*/
2368122b058aSross     LIT64( 0x4070000000000000 ),	/* positive,    113		*/
2369122b058aSross     LIT64( 0x7FFE000000000000 ),	/* positive,  16383		*/
2370122b058aSross     LIT64( 0x7FFF000000000000 ),	/* positive, infinity or NaN	*/
2371122b058aSross     LIT64( 0x8000000000000000 ),	/* negative, subnormal		*/
2372122b058aSross     LIT64( 0x8001000000000000 ),	/* negative, -16382		*/
2373122b058aSross     LIT64( 0xBF8E000000000000 ),	/* negative,   -113		*/
2374122b058aSross     LIT64( 0xBFFD000000000000 ),	/* negative,     -2		*/
2375122b058aSross     LIT64( 0xBFFE000000000000 ),	/* negative,     -1		*/
2376122b058aSross     LIT64( 0xBFFF000000000000 ),	/* negative,      0		*/
2377122b058aSross     LIT64( 0xC000000000000000 ),	/* negative,      1		*/
2378122b058aSross     LIT64( 0xC001000000000000 ),	/* negative,      2		*/
2379122b058aSross     LIT64( 0xC070000000000000 ),	/* negative,    113		*/
2380122b058aSross     LIT64( 0xFFFE000000000000 ),	/* negative,  16383		*/
2381122b058aSross     LIT64( 0xFFFF000000000000 )		/* negative, infinity or NaN	*/
2382122b058aSross };
2383122b058aSross 
2384122b058aSross static const uint64 float128QOut[ float128NumQOut ] = {
2385122b058aSross     LIT64( 0x0000000000000000 ),	/* positive, subnormal		*/
2386122b058aSross     LIT64( 0x0001000000000000 ),	/* positive, -16382		*/
2387122b058aSross     LIT64( 0x0002000000000000 ),	/* positive, -16381		*/
2388122b058aSross     LIT64( 0x3BFE000000000000 ),	/* positive,  -1025		*/
2389122b058aSross     LIT64( 0x3BFF000000000000 ),	/* positive,  -1024		*/
2390122b058aSross     LIT64( 0x3C00000000000000 ),	/* positive,  -1023		*/
2391122b058aSross     LIT64( 0x3C01000000000000 ),	/* positive,  -1022		*/
2392122b058aSross     LIT64( 0x3F7E000000000000 ),	/* positive,   -129		*/
2393122b058aSross     LIT64( 0x3F7F000000000000 ),	/* positive,   -128		*/
2394122b058aSross     LIT64( 0x3F80000000000000 ),	/* positive,   -127		*/
2395122b058aSross     LIT64( 0x3F81000000000000 ),	/* positive,   -126		*/
2396122b058aSross     LIT64( 0x3F8E000000000000 ),	/* positive,   -113		*/
2397122b058aSross     LIT64( 0x3FFB000000000000 ),	/* positive,     -4		*/
2398122b058aSross     LIT64( 0x3FFC000000000000 ),	/* positive,     -3		*/
2399122b058aSross     LIT64( 0x3FFD000000000000 ),	/* positive,     -2		*/
2400122b058aSross     LIT64( 0x3FFE000000000000 ),	/* positive,     -1		*/
2401122b058aSross     LIT64( 0x3FFF000000000000 ),	/* positive,      0		*/
2402122b058aSross     LIT64( 0x4000000000000000 ),	/* positive,      1		*/
2403122b058aSross     LIT64( 0x4001000000000000 ),	/* positive,      2		*/
2404122b058aSross     LIT64( 0x4002000000000000 ),	/* positive,      3		*/
2405122b058aSross     LIT64( 0x4003000000000000 ),	/* positive,      4		*/
2406122b058aSross     LIT64( 0x401C000000000000 ),	/* positive,     29		*/
2407122b058aSross     LIT64( 0x401D000000000000 ),	/* positive,     30		*/
2408122b058aSross     LIT64( 0x401E000000000000 ),	/* positive,     31		*/
2409122b058aSross     LIT64( 0x401F000000000000 ),	/* positive,     32		*/
2410122b058aSross     LIT64( 0x403C000000000000 ),	/* positive,     61		*/
2411122b058aSross     LIT64( 0x403D000000000000 ),	/* positive,     62		*/
2412122b058aSross     LIT64( 0x403E000000000000 ),	/* positive,     63		*/
2413122b058aSross     LIT64( 0x403F000000000000 ),	/* positive,     64		*/
2414122b058aSross     LIT64( 0x4070000000000000 ),	/* positive,    113		*/
2415122b058aSross     LIT64( 0x407E000000000000 ),	/* positive,    127		*/
2416122b058aSross     LIT64( 0x407F000000000000 ),	/* positive,    128		*/
2417122b058aSross     LIT64( 0x4080000000000000 ),	/* positive,    129		*/
2418122b058aSross     LIT64( 0x43FE000000000000 ),	/* positive,   1023		*/
2419122b058aSross     LIT64( 0x43FF000000000000 ),	/* positive,   1024		*/
2420122b058aSross     LIT64( 0x4400000000000000 ),	/* positive,   1025		*/
2421122b058aSross     LIT64( 0x7FFD000000000000 ),	/* positive,  16382		*/
2422122b058aSross     LIT64( 0x7FFE000000000000 ),	/* positive,  16383		*/
2423122b058aSross     LIT64( 0x7FFF000000000000 ),	/* positive, infinity or NaN	*/
2424122b058aSross     LIT64( 0x8000000000000000 ),	/* negative, subnormal		*/
2425122b058aSross     LIT64( 0x8001000000000000 ),	/* negative, -16382		*/
2426122b058aSross     LIT64( 0x8002000000000000 ),	/* negative, -16381		*/
2427122b058aSross     LIT64( 0xBBFE000000000000 ),	/* negative,  -1025		*/
2428122b058aSross     LIT64( 0xBBFF000000000000 ),	/* negative,  -1024		*/
2429122b058aSross     LIT64( 0xBC00000000000000 ),	/* negative,  -1023		*/
2430122b058aSross     LIT64( 0xBC01000000000000 ),	/* negative,  -1022		*/
2431122b058aSross     LIT64( 0xBF7E000000000000 ),	/* negative,   -129		*/
2432122b058aSross     LIT64( 0xBF7F000000000000 ),	/* negative,   -128		*/
2433122b058aSross     LIT64( 0xBF80000000000000 ),	/* negative,   -127		*/
2434122b058aSross     LIT64( 0xBF81000000000000 ),	/* negative,   -126		*/
2435122b058aSross     LIT64( 0xBF8E000000000000 ),	/* negative,   -113		*/
2436122b058aSross     LIT64( 0xBFFB000000000000 ),	/* negative,     -4		*/
2437122b058aSross     LIT64( 0xBFFC000000000000 ),	/* negative,     -3		*/
2438122b058aSross     LIT64( 0xBFFD000000000000 ),	/* negative,     -2		*/
2439122b058aSross     LIT64( 0xBFFE000000000000 ),	/* negative,     -1		*/
2440122b058aSross     LIT64( 0xBFFF000000000000 ),	/* negative,      0		*/
2441122b058aSross     LIT64( 0xC000000000000000 ),	/* negative,      1		*/
2442122b058aSross     LIT64( 0xC001000000000000 ),	/* negative,      2		*/
2443122b058aSross     LIT64( 0xC002000000000000 ),	/* negative,      3		*/
2444122b058aSross     LIT64( 0xC003000000000000 ),	/* negative,      4		*/
2445122b058aSross     LIT64( 0xC01C000000000000 ),	/* negative,     29		*/
2446122b058aSross     LIT64( 0xC01D000000000000 ),	/* negative,     30		*/
2447122b058aSross     LIT64( 0xC01E000000000000 ),	/* negative,     31		*/
2448122b058aSross     LIT64( 0xC01F000000000000 ),	/* negative,     32		*/
2449122b058aSross     LIT64( 0xC03C000000000000 ),	/* negative,     61		*/
2450122b058aSross     LIT64( 0xC03D000000000000 ),	/* negative,     62		*/
2451122b058aSross     LIT64( 0xC03E000000000000 ),	/* negative,     63		*/
2452122b058aSross     LIT64( 0xC03F000000000000 ),	/* negative,     64		*/
2453122b058aSross     LIT64( 0xC070000000000000 ),	/* negative,    113		*/
2454122b058aSross     LIT64( 0xC07E000000000000 ),	/* negative,    127		*/
2455122b058aSross     LIT64( 0xC07F000000000000 ),	/* negative,    128		*/
2456122b058aSross     LIT64( 0xC080000000000000 ),	/* negative,    129		*/
2457122b058aSross     LIT64( 0xC3FE000000000000 ),	/* negative,   1023		*/
2458122b058aSross     LIT64( 0xC3FF000000000000 ),	/* negative,   1024		*/
2459122b058aSross     LIT64( 0xC400000000000000 ),	/* negative,   1025		*/
2460122b058aSross     LIT64( 0xFFFD000000000000 ),	/* negative,  16382		*/
2461122b058aSross     LIT64( 0xFFFE000000000000 ),	/* negative,  16383		*/
2462122b058aSross     LIT64( 0xFFFF000000000000 )		/* negative, infinity or NaN	*/
2463122b058aSross };
2464122b058aSross 
2465122b058aSross static const struct { bits64 high, low; } float128P1[ float128NumP1 ] = {
2466122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
2467122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
2468122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2469122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) }
2470122b058aSross };
2471122b058aSross 
2472122b058aSross static const struct { bits64 high, low; } float128P2[ float128NumP2 ] = {
2473122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
2474122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
2475122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000002 ) },
2476122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000004 ) },
2477122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000008 ) },
2478122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000010 ) },
2479122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000020 ) },
2480122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000040 ) },
2481122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000080 ) },
2482122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000100 ) },
2483122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000200 ) },
2484122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000400 ) },
2485122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000800 ) },
2486122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001000 ) },
2487122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000002000 ) },
2488122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000004000 ) },
2489122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000008000 ) },
2490122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000010000 ) },
2491122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000020000 ) },
2492122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000040000 ) },
2493122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000080000 ) },
2494122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000100000 ) },
2495122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000200000 ) },
2496122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000400000 ) },
2497122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000800000 ) },
2498122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001000000 ) },
2499122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000002000000 ) },
2500122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000004000000 ) },
2501122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000008000000 ) },
2502122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000010000000 ) },
2503122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000020000000 ) },
2504122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000040000000 ) },
2505122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000080000000 ) },
2506122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000100000000 ) },
2507122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000200000000 ) },
2508122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000400000000 ) },
2509122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000800000000 ) },
2510122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000001000000000 ) },
2511122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000002000000000 ) },
2512122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000004000000000 ) },
2513122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000008000000000 ) },
2514122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000010000000000 ) },
2515122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000020000000000 ) },
2516122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000040000000000 ) },
2517122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000080000000000 ) },
2518122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000100000000000 ) },
2519122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000200000000000 ) },
2520122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000400000000000 ) },
2521122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000800000000000 ) },
2522122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0001000000000000 ) },
2523122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0002000000000000 ) },
2524122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0004000000000000 ) },
2525122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0008000000000000 ) },
2526122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0010000000000000 ) },
2527122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0020000000000000 ) },
2528122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0040000000000000 ) },
2529122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0080000000000000 ) },
2530122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0100000000000000 ) },
2531122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0200000000000000 ) },
2532122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0400000000000000 ) },
2533122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0800000000000000 ) },
2534122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x1000000000000000 ) },
2535122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x2000000000000000 ) },
2536122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x4000000000000000 ) },
2537122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x8000000000000000 ) },
2538122b058aSross     { LIT64( 0x0000000000000001 ), LIT64( 0x0000000000000000 ) },
2539122b058aSross     { LIT64( 0x0000000000000002 ), LIT64( 0x0000000000000000 ) },
2540122b058aSross     { LIT64( 0x0000000000000004 ), LIT64( 0x0000000000000000 ) },
2541122b058aSross     { LIT64( 0x0000000000000008 ), LIT64( 0x0000000000000000 ) },
2542122b058aSross     { LIT64( 0x0000000000000010 ), LIT64( 0x0000000000000000 ) },
2543122b058aSross     { LIT64( 0x0000000000000020 ), LIT64( 0x0000000000000000 ) },
2544122b058aSross     { LIT64( 0x0000000000000040 ), LIT64( 0x0000000000000000 ) },
2545122b058aSross     { LIT64( 0x0000000000000080 ), LIT64( 0x0000000000000000 ) },
2546122b058aSross     { LIT64( 0x0000000000000100 ), LIT64( 0x0000000000000000 ) },
2547122b058aSross     { LIT64( 0x0000000000000200 ), LIT64( 0x0000000000000000 ) },
2548122b058aSross     { LIT64( 0x0000000000000400 ), LIT64( 0x0000000000000000 ) },
2549122b058aSross     { LIT64( 0x0000000000000800 ), LIT64( 0x0000000000000000 ) },
2550122b058aSross     { LIT64( 0x0000000000001000 ), LIT64( 0x0000000000000000 ) },
2551122b058aSross     { LIT64( 0x0000000000002000 ), LIT64( 0x0000000000000000 ) },
2552122b058aSross     { LIT64( 0x0000000000004000 ), LIT64( 0x0000000000000000 ) },
2553122b058aSross     { LIT64( 0x0000000000008000 ), LIT64( 0x0000000000000000 ) },
2554122b058aSross     { LIT64( 0x0000000000010000 ), LIT64( 0x0000000000000000 ) },
2555122b058aSross     { LIT64( 0x0000000000020000 ), LIT64( 0x0000000000000000 ) },
2556122b058aSross     { LIT64( 0x0000000000040000 ), LIT64( 0x0000000000000000 ) },
2557122b058aSross     { LIT64( 0x0000000000080000 ), LIT64( 0x0000000000000000 ) },
2558122b058aSross     { LIT64( 0x0000000000100000 ), LIT64( 0x0000000000000000 ) },
2559122b058aSross     { LIT64( 0x0000000000200000 ), LIT64( 0x0000000000000000 ) },
2560122b058aSross     { LIT64( 0x0000000000400000 ), LIT64( 0x0000000000000000 ) },
2561122b058aSross     { LIT64( 0x0000000000800000 ), LIT64( 0x0000000000000000 ) },
2562122b058aSross     { LIT64( 0x0000000001000000 ), LIT64( 0x0000000000000000 ) },
2563122b058aSross     { LIT64( 0x0000000002000000 ), LIT64( 0x0000000000000000 ) },
2564122b058aSross     { LIT64( 0x0000000004000000 ), LIT64( 0x0000000000000000 ) },
2565122b058aSross     { LIT64( 0x0000000008000000 ), LIT64( 0x0000000000000000 ) },
2566122b058aSross     { LIT64( 0x0000000010000000 ), LIT64( 0x0000000000000000 ) },
2567122b058aSross     { LIT64( 0x0000000020000000 ), LIT64( 0x0000000000000000 ) },
2568122b058aSross     { LIT64( 0x0000000040000000 ), LIT64( 0x0000000000000000 ) },
2569122b058aSross     { LIT64( 0x0000000080000000 ), LIT64( 0x0000000000000000 ) },
2570122b058aSross     { LIT64( 0x0000000100000000 ), LIT64( 0x0000000000000000 ) },
2571122b058aSross     { LIT64( 0x0000000200000000 ), LIT64( 0x0000000000000000 ) },
2572122b058aSross     { LIT64( 0x0000000400000000 ), LIT64( 0x0000000000000000 ) },
2573122b058aSross     { LIT64( 0x0000000800000000 ), LIT64( 0x0000000000000000 ) },
2574122b058aSross     { LIT64( 0x0000001000000000 ), LIT64( 0x0000000000000000 ) },
2575122b058aSross     { LIT64( 0x0000002000000000 ), LIT64( 0x0000000000000000 ) },
2576122b058aSross     { LIT64( 0x0000004000000000 ), LIT64( 0x0000000000000000 ) },
2577122b058aSross     { LIT64( 0x0000008000000000 ), LIT64( 0x0000000000000000 ) },
2578122b058aSross     { LIT64( 0x0000010000000000 ), LIT64( 0x0000000000000000 ) },
2579122b058aSross     { LIT64( 0x0000020000000000 ), LIT64( 0x0000000000000000 ) },
2580122b058aSross     { LIT64( 0x0000040000000000 ), LIT64( 0x0000000000000000 ) },
2581122b058aSross     { LIT64( 0x0000080000000000 ), LIT64( 0x0000000000000000 ) },
2582122b058aSross     { LIT64( 0x0000100000000000 ), LIT64( 0x0000000000000000 ) },
2583122b058aSross     { LIT64( 0x0000200000000000 ), LIT64( 0x0000000000000000 ) },
2584122b058aSross     { LIT64( 0x0000400000000000 ), LIT64( 0x0000000000000000 ) },
2585122b058aSross     { LIT64( 0x0000800000000000 ), LIT64( 0x0000000000000000 ) },
2586122b058aSross     { LIT64( 0x0000C00000000000 ), LIT64( 0x0000000000000000 ) },
2587122b058aSross     { LIT64( 0x0000E00000000000 ), LIT64( 0x0000000000000000 ) },
2588122b058aSross     { LIT64( 0x0000F00000000000 ), LIT64( 0x0000000000000000 ) },
2589122b058aSross     { LIT64( 0x0000F80000000000 ), LIT64( 0x0000000000000000 ) },
2590122b058aSross     { LIT64( 0x0000FC0000000000 ), LIT64( 0x0000000000000000 ) },
2591122b058aSross     { LIT64( 0x0000FE0000000000 ), LIT64( 0x0000000000000000 ) },
2592122b058aSross     { LIT64( 0x0000FF0000000000 ), LIT64( 0x0000000000000000 ) },
2593122b058aSross     { LIT64( 0x0000FF8000000000 ), LIT64( 0x0000000000000000 ) },
2594122b058aSross     { LIT64( 0x0000FFC000000000 ), LIT64( 0x0000000000000000 ) },
2595122b058aSross     { LIT64( 0x0000FFE000000000 ), LIT64( 0x0000000000000000 ) },
2596122b058aSross     { LIT64( 0x0000FFF000000000 ), LIT64( 0x0000000000000000 ) },
2597122b058aSross     { LIT64( 0x0000FFF800000000 ), LIT64( 0x0000000000000000 ) },
2598122b058aSross     { LIT64( 0x0000FFFC00000000 ), LIT64( 0x0000000000000000 ) },
2599122b058aSross     { LIT64( 0x0000FFFE00000000 ), LIT64( 0x0000000000000000 ) },
2600122b058aSross     { LIT64( 0x0000FFFF00000000 ), LIT64( 0x0000000000000000 ) },
2601122b058aSross     { LIT64( 0x0000FFFF80000000 ), LIT64( 0x0000000000000000 ) },
2602122b058aSross     { LIT64( 0x0000FFFFC0000000 ), LIT64( 0x0000000000000000 ) },
2603122b058aSross     { LIT64( 0x0000FFFFE0000000 ), LIT64( 0x0000000000000000 ) },
2604122b058aSross     { LIT64( 0x0000FFFFF0000000 ), LIT64( 0x0000000000000000 ) },
2605122b058aSross     { LIT64( 0x0000FFFFF8000000 ), LIT64( 0x0000000000000000 ) },
2606122b058aSross     { LIT64( 0x0000FFFFFC000000 ), LIT64( 0x0000000000000000 ) },
2607122b058aSross     { LIT64( 0x0000FFFFFE000000 ), LIT64( 0x0000000000000000 ) },
2608122b058aSross     { LIT64( 0x0000FFFFFF000000 ), LIT64( 0x0000000000000000 ) },
2609122b058aSross     { LIT64( 0x0000FFFFFF800000 ), LIT64( 0x0000000000000000 ) },
2610122b058aSross     { LIT64( 0x0000FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },
2611122b058aSross     { LIT64( 0x0000FFFFFFE00000 ), LIT64( 0x0000000000000000 ) },
2612122b058aSross     { LIT64( 0x0000FFFFFFF00000 ), LIT64( 0x0000000000000000 ) },
2613122b058aSross     { LIT64( 0x0000FFFFFFF80000 ), LIT64( 0x0000000000000000 ) },
2614122b058aSross     { LIT64( 0x0000FFFFFFFC0000 ), LIT64( 0x0000000000000000 ) },
2615122b058aSross     { LIT64( 0x0000FFFFFFFE0000 ), LIT64( 0x0000000000000000 ) },
2616122b058aSross     { LIT64( 0x0000FFFFFFFF0000 ), LIT64( 0x0000000000000000 ) },
2617122b058aSross     { LIT64( 0x0000FFFFFFFF8000 ), LIT64( 0x0000000000000000 ) },
2618122b058aSross     { LIT64( 0x0000FFFFFFFFC000 ), LIT64( 0x0000000000000000 ) },
2619122b058aSross     { LIT64( 0x0000FFFFFFFFE000 ), LIT64( 0x0000000000000000 ) },
2620122b058aSross     { LIT64( 0x0000FFFFFFFFF000 ), LIT64( 0x0000000000000000 ) },
2621122b058aSross     { LIT64( 0x0000FFFFFFFFF800 ), LIT64( 0x0000000000000000 ) },
2622122b058aSross     { LIT64( 0x0000FFFFFFFFFC00 ), LIT64( 0x0000000000000000 ) },
2623122b058aSross     { LIT64( 0x0000FFFFFFFFFE00 ), LIT64( 0x0000000000000000 ) },
2624122b058aSross     { LIT64( 0x0000FFFFFFFFFF00 ), LIT64( 0x0000000000000000 ) },
2625122b058aSross     { LIT64( 0x0000FFFFFFFFFF80 ), LIT64( 0x0000000000000000 ) },
2626122b058aSross     { LIT64( 0x0000FFFFFFFFFFC0 ), LIT64( 0x0000000000000000 ) },
2627122b058aSross     { LIT64( 0x0000FFFFFFFFFFE0 ), LIT64( 0x0000000000000000 ) },
2628122b058aSross     { LIT64( 0x0000FFFFFFFFFFF0 ), LIT64( 0x0000000000000000 ) },
2629122b058aSross     { LIT64( 0x0000FFFFFFFFFFF8 ), LIT64( 0x0000000000000000 ) },
2630122b058aSross     { LIT64( 0x0000FFFFFFFFFFFC ), LIT64( 0x0000000000000000 ) },
2631122b058aSross     { LIT64( 0x0000FFFFFFFFFFFE ), LIT64( 0x0000000000000000 ) },
2632122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x0000000000000000 ) },
2633122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x8000000000000000 ) },
2634122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xC000000000000000 ) },
2635122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xE000000000000000 ) },
2636122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF000000000000000 ) },
2637122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF800000000000000 ) },
2638122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFC00000000000000 ) },
2639122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFE00000000000000 ) },
2640122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF00000000000000 ) },
2641122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF80000000000000 ) },
2642122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFC0000000000000 ) },
2643122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFE0000000000000 ) },
2644122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF0000000000000 ) },
2645122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF8000000000000 ) },
2646122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },
2647122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFE000000000000 ) },
2648122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF000000000000 ) },
2649122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF800000000000 ) },
2650122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFC00000000000 ) },
2651122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFE00000000000 ) },
2652122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF00000000000 ) },
2653122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF80000000000 ) },
2654122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFC0000000000 ) },
2655122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFE0000000000 ) },
2656122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF0000000000 ) },
2657122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF8000000000 ) },
2658122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFC000000000 ) },
2659122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFE000000000 ) },
2660122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF000000000 ) },
2661122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF800000000 ) },
2662122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFC00000000 ) },
2663122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFE00000000 ) },
2664122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF00000000 ) },
2665122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF80000000 ) },
2666122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFC0000000 ) },
2667122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFE0000000 ) },
2668122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },
2669122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF8000000 ) },
2670122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFC000000 ) },
2671122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFE000000 ) },
2672122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF000000 ) },
2673122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF800000 ) },
2674122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFC00000 ) },
2675122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFE00000 ) },
2676122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF00000 ) },
2677122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF80000 ) },
2678122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFC0000 ) },
2679122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFE0000 ) },
2680122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF0000 ) },
2681122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF8000 ) },
2682122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFC000 ) },
2683122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFE000 ) },
2684122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF000 ) },
2685122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF800 ) },
2686122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFC00 ) },
2687122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFE00 ) },
2688122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF00 ) },
2689122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF80 ) },
2690122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFC0 ) },
2691122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFE0 ) },
2692122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF0 ) },
2693122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF8 ) },
2694122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFC ) },
2695122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) },
2696122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2697122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFD ) },
2698122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFB ) },
2699122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF7 ) },
2700122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFEF ) },
2701122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFDF ) },
2702122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFBF ) },
2703122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF7F ) },
2704122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFEFF ) },
2705122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFDFF ) },
2706122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFF ) },
2707122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF7FF ) },
2708122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },
2709122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFDFFF ) },
2710122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFBFFF ) },
2711122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF7FFF ) },
2712122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFEFFFF ) },
2713122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFDFFFF ) },
2714122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFBFFFF ) },
2715122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },
2716122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFEFFFFF ) },
2717122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFDFFFFF ) },
2718122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFBFFFFF ) },
2719122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF7FFFFF ) },
2720122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFEFFFFFF ) },
2721122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFDFFFFFF ) },
2722122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFBFFFFFF ) },
2723122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF7FFFFFF ) },
2724122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },
2725122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFDFFFFFFF ) },
2726122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFBFFFFFFF ) },
2727122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF7FFFFFFF ) },
2728122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFFFF ) },
2729122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFDFFFFFFFF ) },
2730122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFBFFFFFFFF ) },
2731122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF7FFFFFFFF ) },
2732122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFEFFFFFFFFF ) },
2733122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFDFFFFFFFFF ) },
2734122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFBFFFFFFFFF ) },
2735122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF7FFFFFFFFF ) },
2736122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFEFFFFFFFFFF ) },
2737122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFDFFFFFFFFFF ) },
2738122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFBFFFFFFFFFF ) },
2739122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF7FFFFFFFFFF ) },
2740122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFEFFFFFFFFFFF ) },
2741122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFDFFFFFFFFFFF ) },
2742122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFBFFFFFFFFFFF ) },
2743122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF7FFFFFFFFFFF ) },
2744122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFEFFFFFFFFFFFF ) },
2745122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFDFFFFFFFFFFFF ) },
2746122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFBFFFFFFFFFFFF ) },
2747122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF7FFFFFFFFFFFF ) },
2748122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFEFFFFFFFFFFFFF ) },
2749122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFDFFFFFFFFFFFFF ) },
2750122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFBFFFFFFFFFFFFF ) },
2751122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF7FFFFFFFFFFFFF ) },
2752122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFEFFFFFFFFFFFFFF ) },
2753122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFDFFFFFFFFFFFFFF ) },
2754122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFBFFFFFFFFFFFFFF ) },
2755122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF7FFFFFFFFFFFFFF ) },
2756122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xEFFFFFFFFFFFFFFF ) },
2757122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xDFFFFFFFFFFFFFFF ) },
2758122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xBFFFFFFFFFFFFFFF ) },
2759122b058aSross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
2760122b058aSross     { LIT64( 0x0000FFFFFFFFFFFD ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2761122b058aSross     { LIT64( 0x0000FFFFFFFFFFFB ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2762122b058aSross     { LIT64( 0x0000FFFFFFFFFFF7 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2763122b058aSross     { LIT64( 0x0000FFFFFFFFFFEF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2764122b058aSross     { LIT64( 0x0000FFFFFFFFFFDF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2765122b058aSross     { LIT64( 0x0000FFFFFFFFFFBF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2766122b058aSross     { LIT64( 0x0000FFFFFFFFFF7F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2767122b058aSross     { LIT64( 0x0000FFFFFFFFFEFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2768122b058aSross     { LIT64( 0x0000FFFFFFFFFDFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2769122b058aSross     { LIT64( 0x0000FFFFFFFFFBFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2770122b058aSross     { LIT64( 0x0000FFFFFFFFF7FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2771122b058aSross     { LIT64( 0x0000FFFFFFFFEFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2772122b058aSross     { LIT64( 0x0000FFFFFFFFDFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2773122b058aSross     { LIT64( 0x0000FFFFFFFFBFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2774122b058aSross     { LIT64( 0x0000FFFFFFFF7FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2775122b058aSross     { LIT64( 0x0000FFFFFFFEFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2776122b058aSross     { LIT64( 0x0000FFFFFFFDFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2777122b058aSross     { LIT64( 0x0000FFFFFFFBFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2778122b058aSross     { LIT64( 0x0000FFFFFFF7FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2779122b058aSross     { LIT64( 0x0000FFFFFFEFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2780122b058aSross     { LIT64( 0x0000FFFFFFDFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2781122b058aSross     { LIT64( 0x0000FFFFFFBFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2782122b058aSross     { LIT64( 0x0000FFFFFF7FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2783122b058aSross     { LIT64( 0x0000FFFFFEFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2784122b058aSross     { LIT64( 0x0000FFFFFDFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2785122b058aSross     { LIT64( 0x0000FFFFFBFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2786122b058aSross     { LIT64( 0x0000FFFFF7FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2787122b058aSross     { LIT64( 0x0000FFFFEFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2788122b058aSross     { LIT64( 0x0000FFFFDFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2789122b058aSross     { LIT64( 0x0000FFFFBFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2790122b058aSross     { LIT64( 0x0000FFFF7FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2791122b058aSross     { LIT64( 0x0000FFFEFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2792122b058aSross     { LIT64( 0x0000FFFDFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2793122b058aSross     { LIT64( 0x0000FFFBFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2794122b058aSross     { LIT64( 0x0000FFF7FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2795122b058aSross     { LIT64( 0x0000FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2796122b058aSross     { LIT64( 0x0000FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2797122b058aSross     { LIT64( 0x0000FFBFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2798122b058aSross     { LIT64( 0x0000FF7FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2799122b058aSross     { LIT64( 0x0000FEFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2800122b058aSross     { LIT64( 0x0000FDFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2801122b058aSross     { LIT64( 0x0000FBFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2802122b058aSross     { LIT64( 0x0000F7FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2803122b058aSross     { LIT64( 0x0000EFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2804122b058aSross     { LIT64( 0x0000DFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2805122b058aSross     { LIT64( 0x0000BFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2806122b058aSross     { LIT64( 0x00007FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2807122b058aSross     { LIT64( 0x00003FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2808122b058aSross     { LIT64( 0x00001FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2809122b058aSross     { LIT64( 0x00000FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2810122b058aSross     { LIT64( 0x000007FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2811122b058aSross     { LIT64( 0x000003FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2812122b058aSross     { LIT64( 0x000001FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2813122b058aSross     { LIT64( 0x000000FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2814122b058aSross     { LIT64( 0x0000007FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2815122b058aSross     { LIT64( 0x0000003FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2816122b058aSross     { LIT64( 0x0000001FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2817122b058aSross     { LIT64( 0x0000000FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2818122b058aSross     { LIT64( 0x00000007FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2819122b058aSross     { LIT64( 0x00000003FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2820122b058aSross     { LIT64( 0x00000001FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2821122b058aSross     { LIT64( 0x00000000FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2822122b058aSross     { LIT64( 0x000000007FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2823122b058aSross     { LIT64( 0x000000003FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2824122b058aSross     { LIT64( 0x000000001FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2825122b058aSross     { LIT64( 0x000000000FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2826122b058aSross     { LIT64( 0x0000000007FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2827122b058aSross     { LIT64( 0x0000000003FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2828122b058aSross     { LIT64( 0x0000000001FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2829122b058aSross     { LIT64( 0x0000000000FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2830122b058aSross     { LIT64( 0x00000000007FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2831122b058aSross     { LIT64( 0x00000000003FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2832122b058aSross     { LIT64( 0x00000000001FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2833122b058aSross     { LIT64( 0x00000000000FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2834122b058aSross     { LIT64( 0x000000000007FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2835122b058aSross     { LIT64( 0x000000000003FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2836122b058aSross     { LIT64( 0x000000000001FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2837122b058aSross     { LIT64( 0x000000000000FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2838122b058aSross     { LIT64( 0x0000000000007FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2839122b058aSross     { LIT64( 0x0000000000003FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2840122b058aSross     { LIT64( 0x0000000000001FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2841122b058aSross     { LIT64( 0x0000000000000FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2842122b058aSross     { LIT64( 0x00000000000007FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2843122b058aSross     { LIT64( 0x00000000000003FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2844122b058aSross     { LIT64( 0x00000000000001FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2845122b058aSross     { LIT64( 0x00000000000000FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2846122b058aSross     { LIT64( 0x000000000000007F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2847122b058aSross     { LIT64( 0x000000000000003F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2848122b058aSross     { LIT64( 0x000000000000001F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2849122b058aSross     { LIT64( 0x000000000000000F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2850122b058aSross     { LIT64( 0x0000000000000007 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2851122b058aSross     { LIT64( 0x0000000000000003 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2852122b058aSross     { LIT64( 0x0000000000000001 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2853122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2854122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
2855122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x3FFFFFFFFFFFFFFF ) },
2856122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x1FFFFFFFFFFFFFFF ) },
2857122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0FFFFFFFFFFFFFFF ) },
2858122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x07FFFFFFFFFFFFFF ) },
2859122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x03FFFFFFFFFFFFFF ) },
2860122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x01FFFFFFFFFFFFFF ) },
2861122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00FFFFFFFFFFFFFF ) },
2862122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x007FFFFFFFFFFFFF ) },
2863122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x003FFFFFFFFFFFFF ) },
2864122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x001FFFFFFFFFFFFF ) },
2865122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000FFFFFFFFFFFFF ) },
2866122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0007FFFFFFFFFFFF ) },
2867122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0003FFFFFFFFFFFF ) },
2868122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0001FFFFFFFFFFFF ) },
2869122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000FFFFFFFFFFFF ) },
2870122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00007FFFFFFFFFFF ) },
2871122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00003FFFFFFFFFFF ) },
2872122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00001FFFFFFFFFFF ) },
2873122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000FFFFFFFFFFF ) },
2874122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000007FFFFFFFFFF ) },
2875122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000003FFFFFFFFFF ) },
2876122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000001FFFFFFFFFF ) },
2877122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000FFFFFFFFFF ) },
2878122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000007FFFFFFFFF ) },
2879122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000003FFFFFFFFF ) },
2880122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000001FFFFFFFFF ) },
2881122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000FFFFFFFFF ) },
2882122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000007FFFFFFFF ) },
2883122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000003FFFFFFFF ) },
2884122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000001FFFFFFFF ) },
2885122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000FFFFFFFF ) },
2886122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000007FFFFFFF ) },
2887122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000003FFFFFFF ) },
2888122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000001FFFFFFF ) },
2889122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000FFFFFFF ) },
2890122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000007FFFFFF ) },
2891122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000003FFFFFF ) },
2892122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001FFFFFF ) },
2893122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000FFFFFF ) },
2894122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000007FFFFF ) },
2895122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000003FFFFF ) },
2896122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000001FFFFF ) },
2897122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000FFFFF ) },
2898122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000007FFFF ) },
2899122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000003FFFF ) },
2900122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000001FFFF ) },
2901122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000FFFF ) },
2902122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000007FFF ) },
2903122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000003FFF ) },
2904122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001FFF ) },
2905122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000FFF ) },
2906122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000007FF ) },
2907122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000003FF ) },
2908122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000001FF ) },
2909122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000000FF ) },
2910122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000007F ) },
2911122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000003F ) },
2912122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000001F ) },
2913122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000000F ) },
2914122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000007 ) },
2915122b058aSross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000003 ) }
2916122b058aSross };
2917122b058aSross 
2918122b058aSross static const uint32 float128NumQInP1 = float128NumQIn * float128NumP1;
2919122b058aSross static const uint32 float128NumQOutP1 = float128NumQOut * float128NumP1;
2920122b058aSross 
float128NextQInP1(sequenceT * sequencePtr)2921122b058aSross static float128 float128NextQInP1( sequenceT *sequencePtr )
2922122b058aSross {
2923122b058aSross     int16 expNum, sigNum;
2924122b058aSross     float128 z;
2925122b058aSross 
2926122b058aSross     sigNum = sequencePtr->term1Num;
2927122b058aSross     expNum = sequencePtr->expNum;
2928122b058aSross     z.low = float128P1[ sigNum ].low;
2929122b058aSross     z.high = float128QIn[ expNum ] | float128P1[ sigNum ].high;
2930122b058aSross     ++sigNum;
2931122b058aSross     if ( float128NumP1 <= sigNum ) {
2932122b058aSross         sigNum = 0;
2933122b058aSross         ++expNum;
2934122b058aSross         if ( float128NumQIn <= expNum ) {
2935122b058aSross             expNum = 0;
2936122b058aSross             sequencePtr->done = TRUE;
2937122b058aSross         }
2938122b058aSross         sequencePtr->expNum = expNum;
2939122b058aSross     }
2940122b058aSross     sequencePtr->term1Num = sigNum;
2941122b058aSross     return z;
2942122b058aSross 
2943122b058aSross }
2944122b058aSross 
float128NextQOutP1(sequenceT * sequencePtr)2945122b058aSross static float128 float128NextQOutP1( sequenceT *sequencePtr )
2946122b058aSross {
2947122b058aSross     int16 expNum, sigNum;
2948122b058aSross     float128 z;
2949122b058aSross 
2950122b058aSross     sigNum = sequencePtr->term1Num;
2951122b058aSross     expNum = sequencePtr->expNum;
2952122b058aSross     z.low = float128P1[ sigNum ].low;
2953122b058aSross     z.high = float128QOut[ expNum ] | float128P1[ sigNum ].high;
2954122b058aSross     ++sigNum;
2955122b058aSross     if ( float128NumP1 <= sigNum ) {
2956122b058aSross         sigNum = 0;
2957122b058aSross         ++expNum;
2958122b058aSross         if ( float128NumQOut <= expNum ) {
2959122b058aSross             expNum = 0;
2960122b058aSross             sequencePtr->done = TRUE;
2961122b058aSross         }
2962122b058aSross         sequencePtr->expNum = expNum;
2963122b058aSross     }
2964122b058aSross     sequencePtr->term1Num = sigNum;
2965122b058aSross     return z;
2966122b058aSross 
2967122b058aSross }
2968122b058aSross 
2969122b058aSross static const uint32 float128NumQInP2 = float128NumQIn * float128NumP2;
2970122b058aSross static const uint32 float128NumQOutP2 = float128NumQOut * float128NumP2;
2971122b058aSross 
float128NextQInP2(sequenceT * sequencePtr)2972122b058aSross static float128 float128NextQInP2( sequenceT *sequencePtr )
2973122b058aSross {
2974122b058aSross     int16 expNum, sigNum;
2975122b058aSross     float128 z;
2976122b058aSross 
2977122b058aSross     sigNum = sequencePtr->term1Num;
2978122b058aSross     expNum = sequencePtr->expNum;
2979122b058aSross     z.low = float128P2[ sigNum ].low;
2980122b058aSross     z.high = float128QIn[ expNum ] | float128P2[ sigNum ].high;
2981122b058aSross     ++sigNum;
2982122b058aSross     if ( float128NumP2 <= sigNum ) {
2983122b058aSross         sigNum = 0;
2984122b058aSross         ++expNum;
2985122b058aSross         if ( float128NumQIn <= expNum ) {
2986122b058aSross             expNum = 0;
2987122b058aSross             sequencePtr->done = TRUE;
2988122b058aSross         }
2989122b058aSross         sequencePtr->expNum = expNum;
2990122b058aSross     }
2991122b058aSross     sequencePtr->term1Num = sigNum;
2992122b058aSross     return z;
2993122b058aSross 
2994122b058aSross }
2995122b058aSross 
float128NextQOutP2(sequenceT * sequencePtr)2996122b058aSross static float128 float128NextQOutP2( sequenceT *sequencePtr )
2997122b058aSross {
2998122b058aSross     int16 expNum, sigNum;
2999122b058aSross     float128 z;
3000122b058aSross 
3001122b058aSross     sigNum = sequencePtr->term1Num;
3002122b058aSross     expNum = sequencePtr->expNum;
3003122b058aSross     z.low = float128P2[ sigNum ].low;
3004122b058aSross     z.high = float128QOut[ expNum ] | float128P2[ sigNum ].high;
3005122b058aSross     ++sigNum;
3006122b058aSross     if ( float128NumP2 <= sigNum ) {
3007122b058aSross         sigNum = 0;
3008122b058aSross         ++expNum;
3009122b058aSross         if ( float128NumQOut <= expNum ) {
3010122b058aSross             expNum = 0;
3011122b058aSross             sequencePtr->done = TRUE;
3012122b058aSross         }
3013122b058aSross         sequencePtr->expNum = expNum;
3014122b058aSross     }
3015122b058aSross     sequencePtr->term1Num = sigNum;
3016122b058aSross     return z;
3017122b058aSross 
3018122b058aSross }
3019122b058aSross 
float128RandomQOutP3(void)3020122b058aSross static float128 float128RandomQOutP3( void )
3021122b058aSross {
3022122b058aSross     int16 sigNum1, sigNum2;
3023122b058aSross     uint64 sig1Low, sig2Low;
3024122b058aSross     float128 z;
3025122b058aSross 
3026122b058aSross     sigNum1 = randomUint8() % float128NumP2;
3027122b058aSross     sigNum2 = randomUint8() % float128NumP2;
3028122b058aSross     sig1Low = float128P2[ sigNum1 ].low;
3029122b058aSross     sig2Low = float128P2[ sigNum2 ].low;
3030122b058aSross     z.low = sig1Low + sig2Low;
3031122b058aSross     z.high =
3032122b058aSross           float128QOut[ randomUint8() % float128NumQOut ]
3033122b058aSross         | (   (   float128P2[ sigNum1 ].high
3034122b058aSross                 + float128P2[ sigNum2 ].high
3035122b058aSross                 + ( z.low < sig1Low )
3036122b058aSross               )
3037122b058aSross             & LIT64( 0x0000FFFFFFFFFFFF )
3038122b058aSross           );
3039122b058aSross     return z;
3040122b058aSross 
3041122b058aSross }
3042122b058aSross 
float128RandomQOutPInf(void)3043122b058aSross static float128 float128RandomQOutPInf( void )
3044122b058aSross {
3045122b058aSross     float128 z;
3046122b058aSross 
3047122b058aSross     z.low = randomUint64();
3048122b058aSross     z.high =
3049122b058aSross           float128QOut[ randomUint8() % float128NumQOut ]
3050122b058aSross         | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
3051122b058aSross     return z;
3052122b058aSross 
3053122b058aSross }
3054122b058aSross 
3055122b058aSross enum {
3056122b058aSross     float128NumQInfWeightMasks = 14
3057122b058aSross };
3058122b058aSross 
3059122b058aSross static const uint64 float128QInfWeightMasks[ float128NumQInfWeightMasks ] = {
3060122b058aSross     LIT64( 0x7FFF000000000000 ),
3061122b058aSross     LIT64( 0x7FFF000000000000 ),
3062122b058aSross     LIT64( 0x3FFF000000000000 ),
3063122b058aSross     LIT64( 0x1FFF000000000000 ),
3064122b058aSross     LIT64( 0x07FF000000000000 ),
3065122b058aSross     LIT64( 0x07FF000000000000 ),
3066122b058aSross     LIT64( 0x03FF000000000000 ),
3067122b058aSross     LIT64( 0x01FF000000000000 ),
3068122b058aSross     LIT64( 0x00FF000000000000 ),
3069122b058aSross     LIT64( 0x007F000000000000 ),
3070122b058aSross     LIT64( 0x003F000000000000 ),
3071122b058aSross     LIT64( 0x001F000000000000 ),
3072122b058aSross     LIT64( 0x000F000000000000 ),
3073122b058aSross     LIT64( 0x0007000000000000 )
3074122b058aSross };
3075122b058aSross 
3076122b058aSross static const uint64 float128QInfWeightOffsets[ float128NumQInfWeightMasks ] = {
3077122b058aSross     LIT64( 0x0000000000000000 ),
3078122b058aSross     LIT64( 0x0000000000000000 ),
3079122b058aSross     LIT64( 0x2000000000000000 ),
3080122b058aSross     LIT64( 0x3000000000000000 ),
3081122b058aSross     LIT64( 0x3800000000000000 ),
3082122b058aSross     LIT64( 0x3C00000000000000 ),
3083122b058aSross     LIT64( 0x3E00000000000000 ),
3084122b058aSross     LIT64( 0x3F00000000000000 ),
3085122b058aSross     LIT64( 0x3F80000000000000 ),
3086122b058aSross     LIT64( 0x3FC0000000000000 ),
3087122b058aSross     LIT64( 0x3FE0000000000000 ),
3088122b058aSross     LIT64( 0x3FF0000000000000 ),
3089122b058aSross     LIT64( 0x3FF8000000000000 ),
3090122b058aSross     LIT64( 0x3FFC000000000000 )
3091122b058aSross };
3092122b058aSross 
float128RandomQInfP3(void)3093122b058aSross static float128 float128RandomQInfP3( void )
3094122b058aSross {
3095122b058aSross     int16 sigNum1, sigNum2;
3096122b058aSross     uint64 sig1Low, sig2Low;
3097122b058aSross     int8 weightMaskNum;
3098122b058aSross     float128 z;
3099122b058aSross 
3100122b058aSross     sigNum1 = randomUint8() % float128NumP2;
3101122b058aSross     sigNum2 = randomUint8() % float128NumP2;
3102122b058aSross     sig1Low = float128P2[ sigNum1 ].low;
3103122b058aSross     sig2Low = float128P2[ sigNum2 ].low;
3104122b058aSross     z.low = sig1Low + sig2Low;
3105122b058aSross     weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
3106122b058aSross     z.high =
3107122b058aSross           ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
3108122b058aSross         | (   (   ( ( (uint64) randomUint16() )<<48 )
3109122b058aSross                 & float128QInfWeightMasks[ weightMaskNum ] )
3110122b058aSross             + float128QInfWeightOffsets[ weightMaskNum ]
3111122b058aSross           )
3112122b058aSross         | (   (   float128P2[ sigNum1 ].high
3113122b058aSross                 + float128P2[ sigNum2 ].high
3114122b058aSross                 + ( z.low < sig1Low )
3115122b058aSross               )
3116122b058aSross             & LIT64( 0x0000FFFFFFFFFFFF )
3117122b058aSross           );
3118122b058aSross     return z;
3119122b058aSross 
3120122b058aSross }
3121122b058aSross 
float128RandomQInfPInf(void)3122122b058aSross static float128 float128RandomQInfPInf( void )
3123122b058aSross {
3124122b058aSross     int8 weightMaskNum;
3125122b058aSross     float128 z;
3126122b058aSross 
3127122b058aSross     weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
3128122b058aSross     z.low = randomUint64();
3129122b058aSross     z.high =
3130122b058aSross           ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
3131122b058aSross         | (   (   ( ( (uint64) randomUint16() )<<48 )
3132122b058aSross                 & float128QInfWeightMasks[ weightMaskNum ] )
3133122b058aSross             + float128QInfWeightOffsets[ weightMaskNum ]
3134122b058aSross           )
3135122b058aSross         | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
3136122b058aSross     return z;
3137122b058aSross 
3138122b058aSross }
3139122b058aSross 
float128Random(void)3140122b058aSross static float128 float128Random( void )
3141122b058aSross {
3142122b058aSross 
3143122b058aSross     switch ( randomUint8() & 7 ) {
3144122b058aSross      case 0:
3145122b058aSross      case 1:
3146122b058aSross      case 2:
3147122b058aSross         return float128RandomQOutP3();
3148122b058aSross      case 3:
3149122b058aSross         return float128RandomQOutPInf();
3150122b058aSross      case 4:
3151122b058aSross      case 5:
3152122b058aSross      case 6:
3153122b058aSross         return float128RandomQInfP3();
3154122b058aSross      case 7:
3155122b058aSross         return float128RandomQInfPInf();
3156122b058aSross     }
3157122b058aSross 
3158122b058aSross }
3159122b058aSross 
3160122b058aSross #endif
3161122b058aSross 
3162122b058aSross static int8 level = 0;
3163122b058aSross 
testCases_setLevel(int8 levelIn)3164122b058aSross void testCases_setLevel( int8 levelIn )
3165122b058aSross {
3166122b058aSross 
3167122b058aSross     if ( ( levelIn < 1 ) || ( 2 < levelIn ) ) {
3168122b058aSross         fail( "Invalid testing level: %d", levelIn );
3169122b058aSross     }
3170122b058aSross     level = levelIn;
3171122b058aSross 
3172122b058aSross }
3173122b058aSross 
3174122b058aSross static int8 sequenceType;
3175122b058aSross static sequenceT sequenceA, sequenceB;
3176122b058aSross static int8 subcase;
3177122b058aSross 
3178122b058aSross uint32 testCases_total;
3179122b058aSross flag testCases_done;
3180122b058aSross 
3181122b058aSross static float32 current_a_float32;
3182122b058aSross static float32 current_b_float32;
3183122b058aSross static float64 current_a_float64;
3184122b058aSross static float64 current_b_float64;
3185122b058aSross #ifdef FLOATX80
3186122b058aSross static floatx80 current_a_floatx80;
3187122b058aSross static floatx80 current_b_floatx80;
3188122b058aSross #endif
3189122b058aSross #ifdef FLOAT128
3190122b058aSross static float128 current_a_float128;
3191122b058aSross static float128 current_b_float128;
3192122b058aSross #endif
3193122b058aSross 
testCases_initSequence(int8 sequenceTypeIn)3194122b058aSross void testCases_initSequence( int8 sequenceTypeIn )
3195122b058aSross {
3196122b058aSross 
3197122b058aSross     sequenceType = sequenceTypeIn;
3198122b058aSross     sequenceA.term2Num = 0;
3199122b058aSross     sequenceA.term1Num = 0;
3200122b058aSross     sequenceA.expNum = 0;
3201122b058aSross     sequenceA.done = FALSE;
3202122b058aSross     sequenceB.term2Num = 0;
3203122b058aSross     sequenceB.term1Num = 0;
3204122b058aSross     sequenceB.expNum = 0;
3205122b058aSross     sequenceB.done = FALSE;
3206122b058aSross     subcase = 0;
3207122b058aSross     switch ( level ) {
3208122b058aSross      case 1:
3209122b058aSross         switch ( sequenceTypeIn ) {
3210122b058aSross          case testCases_sequence_a_int32:
3211122b058aSross             testCases_total = 3 * int32NumP1;
3212122b058aSross             break;
3213122b058aSross #ifdef BITS64
3214122b058aSross          case testCases_sequence_a_int64:
3215122b058aSross             testCases_total = 3 * int64NumP1;
3216122b058aSross             break;
3217122b058aSross #endif
3218122b058aSross          case testCases_sequence_a_float32:
3219122b058aSross             testCases_total = 3 * float32NumQOutP1;
3220122b058aSross             break;
3221122b058aSross          case testCases_sequence_ab_float32:
3222122b058aSross             testCases_total = 6 * float32NumQInP1 * float32NumQInP1;
3223122b058aSross             current_a_float32 = float32NextQInP1( &sequenceA );
3224122b058aSross             break;
3225122b058aSross          case testCases_sequence_a_float64:
3226122b058aSross             testCases_total = 3 * float64NumQOutP1;
3227122b058aSross             break;
3228122b058aSross          case testCases_sequence_ab_float64:
3229122b058aSross             testCases_total = 6 * float64NumQInP1 * float64NumQInP1;
3230122b058aSross             current_a_float64 = float64NextQInP1( &sequenceA );
3231122b058aSross             break;
3232122b058aSross #ifdef FLOATX80
3233122b058aSross          case testCases_sequence_a_floatx80:
3234122b058aSross             testCases_total = 3 * floatx80NumQOutP1;
3235122b058aSross             break;
3236122b058aSross          case testCases_sequence_ab_floatx80:
3237122b058aSross             testCases_total = 6 * floatx80NumQInP1 * floatx80NumQInP1;
3238122b058aSross             current_a_floatx80 = floatx80NextQInP1( &sequenceA );
3239122b058aSross             break;
3240122b058aSross #endif
3241122b058aSross #ifdef FLOAT128
3242122b058aSross          case testCases_sequence_a_float128:
3243122b058aSross             testCases_total = 3 * float128NumQOutP1;
3244122b058aSross             break;
3245122b058aSross          case testCases_sequence_ab_float128:
3246122b058aSross             testCases_total = 6 * float128NumQInP1 * float128NumQInP1;
3247122b058aSross             current_a_float128 = float128NextQInP1( &sequenceA );
3248122b058aSross             break;
3249122b058aSross #endif
3250122b058aSross         }
3251122b058aSross         break;
3252122b058aSross      case 2:
3253122b058aSross         switch ( sequenceTypeIn ) {
3254122b058aSross          case testCases_sequence_a_int32:
3255122b058aSross             testCases_total = 2 * int32NumP2;
3256122b058aSross             break;
3257122b058aSross #ifdef BITS64
3258122b058aSross          case testCases_sequence_a_int64:
3259122b058aSross             testCases_total = 2 * int64NumP2;
3260122b058aSross             break;
3261122b058aSross #endif
3262122b058aSross          case testCases_sequence_a_float32:
3263122b058aSross             testCases_total = 2 * float32NumQOutP2;
3264122b058aSross             break;
3265122b058aSross          case testCases_sequence_ab_float32:
3266122b058aSross             testCases_total = 2 * float32NumQInP2 * float32NumQInP2;
3267122b058aSross             current_a_float32 = float32NextQInP2( &sequenceA );
3268122b058aSross             break;
3269122b058aSross          case testCases_sequence_a_float64:
3270122b058aSross             testCases_total = 2 * float64NumQOutP2;
3271122b058aSross             break;
3272122b058aSross          case testCases_sequence_ab_float64:
3273122b058aSross             testCases_total = 2 * float64NumQInP2 * float64NumQInP2;
3274122b058aSross             current_a_float64 = float64NextQInP2( &sequenceA );
3275122b058aSross             break;
3276122b058aSross #ifdef FLOATX80
3277122b058aSross          case testCases_sequence_a_floatx80:
3278122b058aSross             testCases_total = 2 * floatx80NumQOutP2;
3279122b058aSross             break;
3280122b058aSross          case testCases_sequence_ab_floatx80:
3281122b058aSross             testCases_total = 2 * floatx80NumQInP2 * floatx80NumQInP2;
3282122b058aSross             current_a_floatx80 = floatx80NextQInP2( &sequenceA );
3283122b058aSross             break;
3284122b058aSross #endif
3285122b058aSross #ifdef FLOAT128
3286122b058aSross          case testCases_sequence_a_float128:
3287122b058aSross             testCases_total = 2 * float128NumQOutP2;
3288122b058aSross             break;
3289122b058aSross          case testCases_sequence_ab_float128:
3290122b058aSross             testCases_total = 2 * float128NumQInP2 * float128NumQInP2;
3291122b058aSross             current_a_float128 = float128NextQInP2( &sequenceA );
3292122b058aSross             break;
3293122b058aSross #endif
3294122b058aSross         }
3295122b058aSross         break;
3296122b058aSross     }
3297122b058aSross     testCases_done = FALSE;
3298122b058aSross 
3299122b058aSross }
3300122b058aSross 
3301122b058aSross int32 testCases_a_int32;
3302122b058aSross #ifdef BITS64
3303122b058aSross int64 testCases_a_int64;
3304122b058aSross #endif
3305122b058aSross float32 testCases_a_float32;
3306122b058aSross float32 testCases_b_float32;
3307122b058aSross float64 testCases_a_float64;
3308122b058aSross float64 testCases_b_float64;
3309122b058aSross #ifdef FLOATX80
3310122b058aSross floatx80 testCases_a_floatx80;
3311122b058aSross floatx80 testCases_b_floatx80;
3312122b058aSross #endif
3313122b058aSross #ifdef FLOAT128
3314122b058aSross float128 testCases_a_float128;
3315122b058aSross float128 testCases_b_float128;
3316122b058aSross #endif
3317122b058aSross 
testCases_next(void)3318122b058aSross void testCases_next( void )
3319122b058aSross {
3320122b058aSross 
3321122b058aSross     switch ( level ) {
3322122b058aSross      case 1:
3323122b058aSross         switch ( sequenceType ) {
3324122b058aSross          case testCases_sequence_a_int32:
3325122b058aSross             switch ( subcase ) {
3326122b058aSross              case 0:
3327122b058aSross                 testCases_a_int32 = int32RandomP3();
3328122b058aSross                 break;
3329122b058aSross              case 1:
3330122b058aSross                 testCases_a_int32 = int32RandomPInf();
3331122b058aSross                 break;
3332122b058aSross              case 2:
3333122b058aSross                 testCases_a_int32 = int32NextP1( &sequenceA );
3334122b058aSross                 testCases_done = sequenceA.done;
3335122b058aSross                 subcase = -1;
3336122b058aSross                 break;
3337122b058aSross             }
3338122b058aSross             ++subcase;
3339122b058aSross             break;
3340122b058aSross #ifdef BITS64
3341122b058aSross          case testCases_sequence_a_int64:
3342122b058aSross             switch ( subcase ) {
3343122b058aSross              case 0:
3344122b058aSross                 testCases_a_int64 = int64RandomP3();
3345122b058aSross                 break;
3346122b058aSross              case 1:
3347122b058aSross                 testCases_a_int64 = int64RandomPInf();
3348122b058aSross                 break;
3349122b058aSross              case 2:
3350122b058aSross                 testCases_a_int64 = int64NextP1( &sequenceA );
3351122b058aSross                 testCases_done = sequenceA.done;
3352122b058aSross                 subcase = -1;
3353122b058aSross                 break;
3354122b058aSross             }
3355122b058aSross             ++subcase;
3356122b058aSross             break;
3357122b058aSross #endif
3358122b058aSross          case testCases_sequence_a_float32:
3359122b058aSross             switch ( subcase ) {
3360122b058aSross              case 0:
3361122b058aSross              case 1:
3362122b058aSross                 testCases_a_float32 = float32Random();
3363122b058aSross                 break;
3364122b058aSross              case 2:
3365122b058aSross                 testCases_a_float32 = float32NextQOutP1( &sequenceA );
3366122b058aSross                 testCases_done = sequenceA.done;
3367122b058aSross                 subcase = -1;
3368122b058aSross                 break;
3369122b058aSross             }
3370122b058aSross             ++subcase;
3371122b058aSross             break;
3372122b058aSross          case testCases_sequence_ab_float32:
3373122b058aSross             switch ( subcase ) {
3374122b058aSross              case 0:
3375122b058aSross                 if ( sequenceB.done ) {
3376122b058aSross                     sequenceB.done = FALSE;
3377122b058aSross                     current_a_float32 = float32NextQInP1( &sequenceA );
3378122b058aSross                 }
3379122b058aSross                 current_b_float32 = float32NextQInP1( &sequenceB );
3380122b058aSross              case 2:
3381122b058aSross              case 4:
3382122b058aSross                 testCases_a_float32 = float32Random();
3383122b058aSross                 testCases_b_float32 = float32Random();
3384122b058aSross                 break;
3385122b058aSross              case 1:
3386122b058aSross                 testCases_a_float32 = current_a_float32;
3387122b058aSross                 testCases_b_float32 = float32Random();
3388122b058aSross                 break;
3389122b058aSross              case 3:
3390122b058aSross                 testCases_a_float32 = float32Random();
3391122b058aSross                 testCases_b_float32 = current_b_float32;
3392122b058aSross                 break;
3393122b058aSross              case 5:
3394122b058aSross                 testCases_a_float32 = current_a_float32;
3395122b058aSross                 testCases_b_float32 = current_b_float32;
3396122b058aSross                 testCases_done = sequenceA.done & sequenceB.done;
3397122b058aSross                 subcase = -1;
3398122b058aSross                 break;
3399122b058aSross             }
3400122b058aSross             ++subcase;
3401122b058aSross             break;
3402122b058aSross          case testCases_sequence_a_float64:
3403122b058aSross             switch ( subcase ) {
3404122b058aSross              case 0:
3405122b058aSross              case 1:
3406122b058aSross                 testCases_a_float64 = float64Random();
3407122b058aSross                 break;
3408122b058aSross              case 2:
3409122b058aSross                 testCases_a_float64 = float64NextQOutP1( &sequenceA );
3410122b058aSross                 testCases_done = sequenceA.done;
3411122b058aSross                 subcase = -1;
3412122b058aSross                 break;
3413122b058aSross             }
3414122b058aSross             ++subcase;
3415122b058aSross             break;
3416122b058aSross          case testCases_sequence_ab_float64:
3417122b058aSross             switch ( subcase ) {
3418122b058aSross              case 0:
3419122b058aSross                 if ( sequenceB.done ) {
3420122b058aSross                     sequenceB.done = FALSE;
3421122b058aSross                     current_a_float64 = float64NextQInP1( &sequenceA );
3422122b058aSross                 }
3423122b058aSross                 current_b_float64 = float64NextQInP1( &sequenceB );
3424122b058aSross              case 2:
3425122b058aSross              case 4:
3426122b058aSross                 testCases_a_float64 = float64Random();
3427122b058aSross                 testCases_b_float64 = float64Random();
3428122b058aSross                 break;
3429122b058aSross              case 1:
3430122b058aSross                 testCases_a_float64 = current_a_float64;
3431122b058aSross                 testCases_b_float64 = float64Random();
3432122b058aSross                 break;
3433122b058aSross              case 3:
3434122b058aSross                 testCases_a_float64 = float64Random();
3435122b058aSross                 testCases_b_float64 = current_b_float64;
3436122b058aSross                 break;
3437122b058aSross              case 5:
3438122b058aSross                 testCases_a_float64 = current_a_float64;
3439122b058aSross                 testCases_b_float64 = current_b_float64;
3440122b058aSross                 testCases_done = sequenceA.done & sequenceB.done;
3441122b058aSross                 subcase = -1;
3442122b058aSross                 break;
3443122b058aSross             }
3444122b058aSross             ++subcase;
3445122b058aSross             break;
3446122b058aSross #ifdef FLOATX80
3447122b058aSross          case testCases_sequence_a_floatx80:
3448122b058aSross             switch ( subcase ) {
3449122b058aSross              case 0:
3450122b058aSross              case 1:
3451122b058aSross                 testCases_a_floatx80 = floatx80Random();
3452122b058aSross                 break;
3453122b058aSross              case 2:
3454122b058aSross                 testCases_a_floatx80 = floatx80NextQOutP1( &sequenceA );
3455122b058aSross                 testCases_done = sequenceA.done;
3456122b058aSross                 subcase = -1;
3457122b058aSross                 break;
3458122b058aSross             }
3459122b058aSross             ++subcase;
3460122b058aSross             break;
3461122b058aSross          case testCases_sequence_ab_floatx80:
3462122b058aSross             switch ( subcase ) {
3463122b058aSross              case 0:
3464122b058aSross                 if ( sequenceB.done ) {
3465122b058aSross                     sequenceB.done = FALSE;
3466122b058aSross                     current_a_floatx80 = floatx80NextQInP1( &sequenceA );
3467122b058aSross                 }
3468122b058aSross                 current_b_floatx80 = floatx80NextQInP1( &sequenceB );
3469122b058aSross              case 2:
3470122b058aSross              case 4:
3471122b058aSross                 testCases_a_floatx80 = floatx80Random();
3472122b058aSross                 testCases_b_floatx80 = floatx80Random();
3473122b058aSross                 break;
3474122b058aSross              case 1:
3475122b058aSross                 testCases_a_floatx80 = current_a_floatx80;
3476122b058aSross                 testCases_b_floatx80 = floatx80Random();
3477122b058aSross                 break;
3478122b058aSross              case 3:
3479122b058aSross                 testCases_a_floatx80 = floatx80Random();
3480122b058aSross                 testCases_b_floatx80 = current_b_floatx80;
3481122b058aSross                 break;
3482122b058aSross              case 5:
3483122b058aSross                 testCases_a_floatx80 = current_a_floatx80;
3484122b058aSross                 testCases_b_floatx80 = current_b_floatx80;
3485122b058aSross                 testCases_done = sequenceA.done & sequenceB.done;
3486122b058aSross                 subcase = -1;
3487122b058aSross                 break;
3488122b058aSross             }
3489122b058aSross             ++subcase;
3490122b058aSross             break;
3491122b058aSross #endif
3492122b058aSross #ifdef FLOAT128
3493122b058aSross          case testCases_sequence_a_float128:
3494122b058aSross             switch ( subcase ) {
3495122b058aSross              case 0:
3496122b058aSross              case 1:
3497122b058aSross                 testCases_a_float128 = float128Random();
3498122b058aSross                 break;
3499122b058aSross              case 2:
3500122b058aSross                 testCases_a_float128 = float128NextQOutP1( &sequenceA );
3501122b058aSross                 testCases_done = sequenceA.done;
3502122b058aSross                 subcase = -1;
3503122b058aSross                 break;
3504122b058aSross             }
3505122b058aSross             ++subcase;
3506122b058aSross             break;
3507122b058aSross          case testCases_sequence_ab_float128:
3508122b058aSross             switch ( subcase ) {
3509122b058aSross              case 0:
3510122b058aSross                 if ( sequenceB.done ) {
3511122b058aSross                     sequenceB.done = FALSE;
3512122b058aSross                     current_a_float128 = float128NextQInP1( &sequenceA );
3513122b058aSross                 }
3514122b058aSross                 current_b_float128 = float128NextQInP1( &sequenceB );
3515122b058aSross              case 2:
3516122b058aSross              case 4:
3517122b058aSross                 testCases_a_float128 = float128Random();
3518122b058aSross                 testCases_b_float128 = float128Random();
3519122b058aSross                 break;
3520122b058aSross              case 1:
3521122b058aSross                 testCases_a_float128 = current_a_float128;
3522122b058aSross                 testCases_b_float128 = float128Random();
3523122b058aSross                 break;
3524122b058aSross              case 3:
3525122b058aSross                 testCases_a_float128 = float128Random();
3526122b058aSross                 testCases_b_float128 = current_b_float128;
3527122b058aSross                 break;
3528122b058aSross              case 5:
3529122b058aSross                 testCases_a_float128 = current_a_float128;
3530122b058aSross                 testCases_b_float128 = current_b_float128;
3531122b058aSross                 testCases_done = sequenceA.done & sequenceB.done;
3532122b058aSross                 subcase = -1;
3533122b058aSross                 break;
3534122b058aSross             }
3535122b058aSross             ++subcase;
3536122b058aSross             break;
3537122b058aSross #endif
3538122b058aSross         }
3539122b058aSross         break;
3540122b058aSross      case 2:
3541122b058aSross         switch ( sequenceType ) {
3542122b058aSross          case testCases_sequence_a_int32:
3543122b058aSross             switch ( subcase ) {
3544122b058aSross              case 0:
3545122b058aSross                 testCases_a_int32 = int32RandomP3();
3546122b058aSross                 break;
3547122b058aSross              case 2:
3548122b058aSross                 testCases_a_int32 = int32RandomPInf();
3549122b058aSross                 break;
3550122b058aSross              case 3:
3551122b058aSross                 subcase = -1;
3552122b058aSross              case 1:
3553122b058aSross                 testCases_a_int32 = int32NextP2( &sequenceA );
3554122b058aSross                 testCases_done = sequenceA.done;
3555122b058aSross                 break;
3556122b058aSross             }
3557122b058aSross             ++subcase;
3558122b058aSross             break;
3559122b058aSross #ifdef BITS64
3560122b058aSross          case testCases_sequence_a_int64:
3561122b058aSross             switch ( subcase ) {
3562122b058aSross              case 0:
3563122b058aSross                 testCases_a_int64 = int64RandomP3();
3564122b058aSross                 break;
3565122b058aSross              case 2:
3566122b058aSross                 testCases_a_int64 = int64RandomPInf();
3567122b058aSross                 break;
3568122b058aSross              case 3:
3569122b058aSross                 subcase = -1;
3570122b058aSross              case 1:
3571122b058aSross                 testCases_a_int64 = int64NextP2( &sequenceA );
3572122b058aSross                 testCases_done = sequenceA.done;
3573122b058aSross                 break;
3574122b058aSross             }
3575122b058aSross             ++subcase;
3576122b058aSross             break;
3577122b058aSross #endif
3578122b058aSross          case testCases_sequence_a_float32:
3579122b058aSross             switch ( subcase ) {
3580122b058aSross              case 0:
3581122b058aSross                 testCases_a_float32 = float32Random();
3582122b058aSross                 break;
3583122b058aSross              case 1:
3584122b058aSross                 testCases_a_float32 = float32NextQOutP2( &sequenceA );
3585122b058aSross                 testCases_done = sequenceA.done;
3586122b058aSross                 subcase = -1;
3587122b058aSross                 break;
3588122b058aSross             }
3589122b058aSross             ++subcase;
3590122b058aSross             break;
3591122b058aSross          case testCases_sequence_ab_float32:
3592122b058aSross             switch ( subcase ) {
3593122b058aSross              case 0:
3594122b058aSross                 testCases_a_float32 = float32Random();
3595122b058aSross                 testCases_b_float32 = float32Random();
3596122b058aSross                 break;
3597122b058aSross              case 1:
3598122b058aSross                 if ( sequenceB.done ) {
3599122b058aSross                     sequenceB.done = FALSE;
3600122b058aSross                     current_a_float32 = float32NextQInP2( &sequenceA );
3601122b058aSross                 }
3602122b058aSross                 testCases_a_float32 = current_a_float32;
3603122b058aSross                 testCases_b_float32 = float32NextQInP2( &sequenceB );
3604122b058aSross                 testCases_done = sequenceA.done & sequenceB.done;
3605122b058aSross                 subcase = -1;
3606122b058aSross                 break;
3607122b058aSross             }
3608122b058aSross             ++subcase;
3609122b058aSross             break;
3610122b058aSross          case testCases_sequence_a_float64:
3611122b058aSross             switch ( subcase ) {
3612122b058aSross              case 0:
3613122b058aSross                 testCases_a_float64 = float64Random();
3614122b058aSross                 break;
3615122b058aSross              case 1:
3616122b058aSross                 testCases_a_float64 = float64NextQOutP2( &sequenceA );
3617122b058aSross                 testCases_done = sequenceA.done;
3618122b058aSross                 subcase = -1;
3619122b058aSross                 break;
3620122b058aSross             }
3621122b058aSross             ++subcase;
3622122b058aSross             break;
3623122b058aSross          case testCases_sequence_ab_float64:
3624122b058aSross             switch ( subcase ) {
3625122b058aSross              case 0:
3626122b058aSross                 testCases_a_float64 = float64Random();
3627122b058aSross                 testCases_b_float64 = float64Random();
3628122b058aSross                 break;
3629122b058aSross              case 1:
3630122b058aSross                 if ( sequenceB.done ) {
3631122b058aSross                     sequenceB.done = FALSE;
3632122b058aSross                     current_a_float64 = float64NextQInP2( &sequenceA );
3633122b058aSross                 }
3634122b058aSross                 testCases_a_float64 = current_a_float64;
3635122b058aSross                 testCases_b_float64 = float64NextQInP2( &sequenceB );
3636122b058aSross                 testCases_done = sequenceA.done & sequenceB.done;
3637122b058aSross                 subcase = -1;
3638122b058aSross                 break;
3639122b058aSross             }
3640122b058aSross             ++subcase;
3641122b058aSross             break;
3642122b058aSross #ifdef FLOATX80
3643122b058aSross          case testCases_sequence_a_floatx80:
3644122b058aSross             switch ( subcase ) {
3645122b058aSross              case 0:
3646122b058aSross                 testCases_a_floatx80 = floatx80Random();
3647122b058aSross                 break;
3648122b058aSross              case 1:
3649122b058aSross                 testCases_a_floatx80 = floatx80NextQOutP2( &sequenceA );
3650122b058aSross                 testCases_done = sequenceA.done;
3651122b058aSross                 subcase = -1;
3652122b058aSross                 break;
3653122b058aSross             }
3654122b058aSross             ++subcase;
3655122b058aSross             break;
3656122b058aSross          case testCases_sequence_ab_floatx80:
3657122b058aSross             switch ( subcase ) {
3658122b058aSross              case 0:
3659122b058aSross                 testCases_a_floatx80 = floatx80Random();
3660122b058aSross                 testCases_b_floatx80 = floatx80Random();
3661122b058aSross                 break;
3662122b058aSross              case 1:
3663122b058aSross                 if ( sequenceB.done ) {
3664122b058aSross                     sequenceB.done = FALSE;
3665122b058aSross                     current_a_floatx80 = floatx80NextQInP2( &sequenceA );
3666122b058aSross                 }
3667122b058aSross                 testCases_a_floatx80 = current_a_floatx80;
3668122b058aSross                 testCases_b_floatx80 = floatx80NextQInP2( &sequenceB );
3669122b058aSross                 testCases_done = sequenceA.done & sequenceB.done;
3670122b058aSross                 subcase = -1;
3671122b058aSross                 break;
3672122b058aSross             }
3673122b058aSross             ++subcase;
3674122b058aSross             break;
3675122b058aSross #endif
3676122b058aSross #ifdef FLOAT128
3677122b058aSross          case testCases_sequence_a_float128:
3678122b058aSross             switch ( subcase ) {
3679122b058aSross              case 0:
3680122b058aSross                 testCases_a_float128 = float128Random();
3681122b058aSross                 break;
3682122b058aSross              case 1:
3683122b058aSross                 testCases_a_float128 = float128NextQOutP2( &sequenceA );
3684122b058aSross                 testCases_done = sequenceA.done;
3685122b058aSross                 subcase = -1;
3686122b058aSross                 break;
3687122b058aSross             }
3688122b058aSross             ++subcase;
3689122b058aSross             break;
3690122b058aSross          case testCases_sequence_ab_float128:
3691122b058aSross             switch ( subcase ) {
3692122b058aSross              case 0:
3693122b058aSross                 testCases_a_float128 = float128Random();
3694122b058aSross                 testCases_b_float128 = float128Random();
3695122b058aSross                 break;
3696122b058aSross              case 1:
3697122b058aSross                 if ( sequenceB.done ) {
3698122b058aSross                     sequenceB.done = FALSE;
3699122b058aSross                     current_a_float128 = float128NextQInP2( &sequenceA );
3700122b058aSross                 }
3701122b058aSross                 testCases_a_float128 = current_a_float128;
3702122b058aSross                 testCases_b_float128 = float128NextQInP2( &sequenceB );
3703122b058aSross                 testCases_done = sequenceA.done & sequenceB.done;
3704122b058aSross                 subcase = -1;
3705122b058aSross                 break;
3706122b058aSross             }
3707122b058aSross             ++subcase;
3708122b058aSross             break;
3709122b058aSross #endif
3710122b058aSross         }
3711122b058aSross         break;
3712122b058aSross     }
3713122b058aSross 
3714122b058aSross }
3715122b058aSross 
3716