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