3 ===============================================================================
5 This C source file is part of TestFloat, Release 2a, a package of programs
6 for testing the correctness of floating-point arithmetic complying to the
7 IEC/IEEE Standard for Floating-Point.
9 Written by John R. Hauser. More information is available through the Web
10 page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
12 THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
13 has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
14 TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
15 PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
16 AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
18 Derivative works are acceptable, even for commercial purposes, so long as
19 (1) they include prominent notice that the work is derivative, and (2) they
20 include prominent notice akin to these four paragraphs for those parts of
21 this code that are retained.
23 ===============================================================================
26 #include <sys/cdefs.h>
27 __FBSDID("$FreeBSD$");
32 #include "softfloat.h"
33 #include "testCases.h"
36 int16 expNum, term1Num, term2Num;
44 static const uint32 int32P1[ int32NumP1 ] = {
171 static int32 int32NextP1( sequenceT *sequencePtr )
176 termNum = sequencePtr->term1Num;
177 z = int32P1[ termNum ];
179 if ( int32NumP1 <= termNum ) {
181 sequencePtr->done = TRUE;
183 sequencePtr->term1Num = termNum;
188 static const int32 int32NumP2 = ( int32NumP1 * int32NumP1 + int32NumP1 ) / 2;
190 static int32 int32NextP2( sequenceT *sequencePtr )
192 uint8 term1Num, term2Num;
195 term2Num = sequencePtr->term2Num;
196 term1Num = sequencePtr->term1Num;
197 z = int32P1[ term1Num ] + int32P1[ term2Num ];
199 if ( int32NumP1 <= term2Num ) {
201 if ( int32NumP1 <= term1Num ) {
203 sequencePtr->done = TRUE;
206 sequencePtr->term1Num = term1Num;
208 sequencePtr->term2Num = term2Num;
213 static int32 int32RandomP3( void )
218 int32P1[ randomUint8() % int32NumP1 ]
219 + int32P1[ randomUint8() % int32NumP1 ]
220 + int32P1[ randomUint8() % int32NumP1 ]
226 int32NumPInfWeightMasks = 29
229 static const uint32 int32PInfWeightMasks[ int32NumPInfWeightMasks ] = {
261 static const uint32 int32PInfWeightOffsets[ int32NumPInfWeightMasks ] = {
293 static int32 int32RandomPInf( void )
297 weightMaskNum = randomUint8() % int32NumPInfWeightMasks;
300 ( randomUint32() & int32PInfWeightMasks[ weightMaskNum ] )
301 + int32PInfWeightOffsets[ weightMaskNum ]
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 )
567 static int64 int64NextP1( sequenceT *sequencePtr )
572 termNum = sequencePtr->term1Num;
573 z = int64P1[ termNum ];
575 if ( int64NumP1 <= termNum ) {
577 sequencePtr->done = TRUE;
579 sequencePtr->term1Num = termNum;
584 static const int64 int64NumP2 = ( int64NumP1 * int64NumP1 + int64NumP1 ) / 2;
586 static int64 int64NextP2( sequenceT *sequencePtr )
588 uint8 term1Num, term2Num;
591 term2Num = sequencePtr->term2Num;
592 term1Num = sequencePtr->term1Num;
593 z = int64P1[ term1Num ] + int64P1[ term2Num ];
595 if ( int64NumP1 <= term2Num ) {
597 if ( int64NumP1 <= term1Num ) {
599 sequencePtr->done = TRUE;
602 sequencePtr->term1Num = term1Num;
604 sequencePtr->term2Num = term2Num;
609 static int64 int64RandomP3( void )
614 int64P1[ randomUint8() % int64NumP1 ]
615 + int64P1[ randomUint8() % int64NumP1 ]
616 + int64P1[ randomUint8() % int64NumP1 ]
622 int64NumPInfWeightMasks = 61
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 )
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 )
753 static int64 int64RandomPInf( void )
757 weightMaskNum = randomUint8() % int64NumPInfWeightMasks;
760 ( randomUint64() & int64PInfWeightMasks[ weightMaskNum ] )
761 + int64PInfWeightOffsets[ weightMaskNum ]
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 */
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 */
853 static const uint32 float32P1[ float32NumP1 ] = {
860 static const uint32 float32P2[ float32NumP2 ] = {
951 static const uint32 float32NumQInP1 = float32NumQIn * float32NumP1;
952 static const uint32 float32NumQOutP1 = float32NumQOut * float32NumP1;
954 static float32 float32NextQInP1( sequenceT *sequencePtr )
956 uint8 expNum, sigNum;
959 sigNum = sequencePtr->term1Num;
960 expNum = sequencePtr->expNum;
961 z = float32QIn[ expNum ] | float32P1[ sigNum ];
963 if ( float32NumP1 <= sigNum ) {
966 if ( float32NumQIn <= expNum ) {
968 sequencePtr->done = TRUE;
970 sequencePtr->expNum = expNum;
972 sequencePtr->term1Num = sigNum;
977 static float32 float32NextQOutP1( sequenceT *sequencePtr )
979 uint8 expNum, sigNum;
982 sigNum = sequencePtr->term1Num;
983 expNum = sequencePtr->expNum;
984 z = float32QOut[ expNum ] | float32P1[ sigNum ];
986 if ( float32NumP1 <= sigNum ) {
989 if ( float32NumQOut <= expNum ) {
991 sequencePtr->done = TRUE;
993 sequencePtr->expNum = expNum;
995 sequencePtr->term1Num = sigNum;
1000 static const uint32 float32NumQInP2 = float32NumQIn * float32NumP2;
1001 static const uint32 float32NumQOutP2 = float32NumQOut * float32NumP2;
1003 static float32 float32NextQInP2( sequenceT *sequencePtr )
1005 uint8 expNum, sigNum;
1008 sigNum = sequencePtr->term1Num;
1009 expNum = sequencePtr->expNum;
1010 z = float32QIn[ expNum ] | float32P2[ sigNum ];
1012 if ( float32NumP2 <= sigNum ) {
1015 if ( float32NumQIn <= expNum ) {
1017 sequencePtr->done = TRUE;
1019 sequencePtr->expNum = expNum;
1021 sequencePtr->term1Num = sigNum;
1026 static float32 float32NextQOutP2( sequenceT *sequencePtr )
1028 uint8 expNum, sigNum;
1031 sigNum = sequencePtr->term1Num;
1032 expNum = sequencePtr->expNum;
1033 z = float32QOut[ expNum ] | float32P2[ sigNum ];
1035 if ( float32NumP2 <= sigNum ) {
1038 if ( float32NumQOut <= expNum ) {
1040 sequencePtr->done = TRUE;
1042 sequencePtr->expNum = expNum;
1044 sequencePtr->term1Num = sigNum;
1049 static float32 float32RandomQOutP3( void )
1053 float32QOut[ randomUint8() % float32NumQOut ]
1054 | ( ( float32P2[ randomUint8() % float32NumP2 ]
1055 + float32P2[ randomUint8() % float32NumP2 ] )
1060 static float32 float32RandomQOutPInf( void )
1064 float32QOut[ randomUint8() % float32NumQOut ]
1065 | ( randomUint32() & 0x007FFFFF );
1070 float32NumQInfWeightMasks = 7
1073 static const uint32 float32QInfWeightMasks[ float32NumQInfWeightMasks ] = {
1083 static const uint32 float32QInfWeightOffsets[ float32NumQInfWeightMasks ] = {
1093 static float32 float32RandomQInfP3( void )
1097 weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
1099 ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1100 | ( ( ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
1101 & float32QInfWeightMasks[ weightMaskNum ] )
1102 + float32QInfWeightOffsets[ weightMaskNum ]
1104 | ( ( float32P2[ randomUint8() % float32NumP2 ]
1105 + float32P2[ randomUint8() % float32NumP2 ] )
1110 static float32 float32RandomQInfPInf( void )
1114 weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
1116 ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1117 | ( ( ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
1118 & float32QInfWeightMasks[ weightMaskNum ] )
1119 + float32QInfWeightOffsets[ weightMaskNum ]
1121 | ( randomUint32() & 0x007FFFFF );
1125 static float32 float32Random( void )
1128 switch ( randomUint8() & 7 ) {
1132 return float32RandomQOutP3();
1134 return float32RandomQOutPInf();
1138 return float32RandomQInfP3();
1140 return float32RandomQInfPInf();
1146 #define SETFLOAT64( z, zHigh, zLow ) z = ( ( (float64) zHigh )<<32 ) | zLow
1148 #define SETFLOAT64( z, zHigh, zLow ) z.low = zLow; z.high = zHigh
1153 float64NumQOut = 64,
1158 static const uint32 float64QIn[ float64NumQIn ] = {
1159 0x00000000, /* positive, subnormal */
1160 0x00100000, /* positive, -1022 */
1161 0x3CA00000, /* positive, -53 */
1162 0x3FD00000, /* positive, -2 */
1163 0x3FE00000, /* positive, -1 */
1164 0x3FF00000, /* positive, 0 */
1165 0x40000000, /* positive, 1 */
1166 0x40100000, /* positive, 2 */
1167 0x43400000, /* positive, 53 */
1168 0x7FE00000, /* positive, 1023 */
1169 0x7FF00000, /* positive, infinity or NaN */
1170 0x80000000, /* negative, subnormal */
1171 0x80100000, /* negative, -1022 */
1172 0xBCA00000, /* negative, -53 */
1173 0xBFD00000, /* negative, -2 */
1174 0xBFE00000, /* negative, -1 */
1175 0xBFF00000, /* negative, 0 */
1176 0xC0000000, /* negative, 1 */
1177 0xC0100000, /* negative, 2 */
1178 0xC3400000, /* negative, 53 */
1179 0xFFE00000, /* negative, 1023 */
1180 0xFFF00000 /* negative, infinity or NaN */
1183 static const uint32 float64QOut[ float64NumQOut ] = {
1184 0x00000000, /* positive, subnormal */
1185 0x00100000, /* positive, -1022 */
1186 0x00200000, /* positive, -1021 */
1187 0x37E00000, /* positive, -129 */
1188 0x37F00000, /* positive, -128 */
1189 0x38000000, /* positive, -127 */
1190 0x38100000, /* positive, -126 */
1191 0x3CA00000, /* positive, -53 */
1192 0x3FB00000, /* positive, -4 */
1193 0x3FC00000, /* positive, -3 */
1194 0x3FD00000, /* positive, -2 */
1195 0x3FE00000, /* positive, -1 */
1196 0x3FF00000, /* positive, 0 */
1197 0x40000000, /* positive, 1 */
1198 0x40100000, /* positive, 2 */
1199 0x40200000, /* positive, 3 */
1200 0x40300000, /* positive, 4 */
1201 0x41C00000, /* positive, 29 */
1202 0x41D00000, /* positive, 30 */
1203 0x41E00000, /* positive, 31 */
1204 0x41F00000, /* positive, 32 */
1205 0x43400000, /* positive, 53 */
1206 0x43C00000, /* positive, 61 */
1207 0x43D00000, /* positive, 62 */
1208 0x43E00000, /* positive, 63 */
1209 0x43F00000, /* positive, 64 */
1210 0x47E00000, /* positive, 127 */
1211 0x47F00000, /* positive, 128 */
1212 0x48000000, /* positive, 129 */
1213 0x7FD00000, /* positive, 1022 */
1214 0x7FE00000, /* positive, 1023 */
1215 0x7FF00000, /* positive, infinity or NaN */
1216 0x80000000, /* negative, subnormal */
1217 0x80100000, /* negative, -1022 */
1218 0x80200000, /* negative, -1021 */
1219 0xB7E00000, /* negative, -129 */
1220 0xB7F00000, /* negative, -128 */
1221 0xB8000000, /* negative, -127 */
1222 0xB8100000, /* negative, -126 */
1223 0xBCA00000, /* negative, -53 */
1224 0xBFB00000, /* negative, -4 */
1225 0xBFC00000, /* negative, -3 */
1226 0xBFD00000, /* negative, -2 */
1227 0xBFE00000, /* negative, -1 */
1228 0xBFF00000, /* negative, 0 */
1229 0xC0000000, /* negative, 1 */
1230 0xC0100000, /* negative, 2 */
1231 0xC0200000, /* negative, 3 */
1232 0xC0300000, /* negative, 4 */
1233 0xC1C00000, /* negative, 29 */
1234 0xC1D00000, /* negative, 30 */
1235 0xC1E00000, /* negative, 31 */
1236 0xC1F00000, /* negative, 32 */
1237 0xC3400000, /* negative, 53 */
1238 0xC3C00000, /* negative, 61 */
1239 0xC3D00000, /* negative, 62 */
1240 0xC3E00000, /* negative, 63 */
1241 0xC3F00000, /* negative, 64 */
1242 0xC7E00000, /* negative, 127 */
1243 0xC7F00000, /* negative, 128 */
1244 0xC8000000, /* negative, 129 */
1245 0xFFD00000, /* negative, 1022 */
1246 0xFFE00000, /* negative, 1023 */
1247 0xFFF00000 /* negative, infinity or NaN */
1250 static const struct { bits32 high, low; } float64P1[ float64NumP1 ] = {
1251 { 0x00000000, 0x00000000 },
1252 { 0x00000000, 0x00000001 },
1253 { 0x000FFFFF, 0xFFFFFFFF },
1254 { 0x000FFFFF, 0xFFFFFFFE }
1257 static const struct { bits32 high, low; } float64P2[ float64NumP2 ] = {
1258 { 0x00000000, 0x00000000 },
1259 { 0x00000000, 0x00000001 },
1260 { 0x00000000, 0x00000002 },
1261 { 0x00000000, 0x00000004 },
1262 { 0x00000000, 0x00000008 },
1263 { 0x00000000, 0x00000010 },
1264 { 0x00000000, 0x00000020 },
1265 { 0x00000000, 0x00000040 },
1266 { 0x00000000, 0x00000080 },
1267 { 0x00000000, 0x00000100 },
1268 { 0x00000000, 0x00000200 },
1269 { 0x00000000, 0x00000400 },
1270 { 0x00000000, 0x00000800 },
1271 { 0x00000000, 0x00001000 },
1272 { 0x00000000, 0x00002000 },
1273 { 0x00000000, 0x00004000 },
1274 { 0x00000000, 0x00008000 },
1275 { 0x00000000, 0x00010000 },
1276 { 0x00000000, 0x00020000 },
1277 { 0x00000000, 0x00040000 },
1278 { 0x00000000, 0x00080000 },
1279 { 0x00000000, 0x00100000 },
1280 { 0x00000000, 0x00200000 },
1281 { 0x00000000, 0x00400000 },
1282 { 0x00000000, 0x00800000 },
1283 { 0x00000000, 0x01000000 },
1284 { 0x00000000, 0x02000000 },
1285 { 0x00000000, 0x04000000 },
1286 { 0x00000000, 0x08000000 },
1287 { 0x00000000, 0x10000000 },
1288 { 0x00000000, 0x20000000 },
1289 { 0x00000000, 0x40000000 },
1290 { 0x00000000, 0x80000000 },
1291 { 0x00000001, 0x00000000 },
1292 { 0x00000002, 0x00000000 },
1293 { 0x00000004, 0x00000000 },
1294 { 0x00000008, 0x00000000 },
1295 { 0x00000010, 0x00000000 },
1296 { 0x00000020, 0x00000000 },
1297 { 0x00000040, 0x00000000 },
1298 { 0x00000080, 0x00000000 },
1299 { 0x00000100, 0x00000000 },
1300 { 0x00000200, 0x00000000 },
1301 { 0x00000400, 0x00000000 },
1302 { 0x00000800, 0x00000000 },
1303 { 0x00001000, 0x00000000 },
1304 { 0x00002000, 0x00000000 },
1305 { 0x00004000, 0x00000000 },
1306 { 0x00008000, 0x00000000 },
1307 { 0x00010000, 0x00000000 },
1308 { 0x00020000, 0x00000000 },
1309 { 0x00040000, 0x00000000 },
1310 { 0x00080000, 0x00000000 },
1311 { 0x000C0000, 0x00000000 },
1312 { 0x000E0000, 0x00000000 },
1313 { 0x000F0000, 0x00000000 },
1314 { 0x000F8000, 0x00000000 },
1315 { 0x000FC000, 0x00000000 },
1316 { 0x000FE000, 0x00000000 },
1317 { 0x000FF000, 0x00000000 },
1318 { 0x000FF800, 0x00000000 },
1319 { 0x000FFC00, 0x00000000 },
1320 { 0x000FFE00, 0x00000000 },
1321 { 0x000FFF00, 0x00000000 },
1322 { 0x000FFF80, 0x00000000 },
1323 { 0x000FFFC0, 0x00000000 },
1324 { 0x000FFFE0, 0x00000000 },
1325 { 0x000FFFF0, 0x00000000 },
1326 { 0x000FFFF8, 0x00000000 },
1327 { 0x000FFFFC, 0x00000000 },
1328 { 0x000FFFFE, 0x00000000 },
1329 { 0x000FFFFF, 0x00000000 },
1330 { 0x000FFFFF, 0x80000000 },
1331 { 0x000FFFFF, 0xC0000000 },
1332 { 0x000FFFFF, 0xE0000000 },
1333 { 0x000FFFFF, 0xF0000000 },
1334 { 0x000FFFFF, 0xF8000000 },
1335 { 0x000FFFFF, 0xFC000000 },
1336 { 0x000FFFFF, 0xFE000000 },
1337 { 0x000FFFFF, 0xFF000000 },
1338 { 0x000FFFFF, 0xFF800000 },
1339 { 0x000FFFFF, 0xFFC00000 },
1340 { 0x000FFFFF, 0xFFE00000 },
1341 { 0x000FFFFF, 0xFFF00000 },
1342 { 0x000FFFFF, 0xFFF80000 },
1343 { 0x000FFFFF, 0xFFFC0000 },
1344 { 0x000FFFFF, 0xFFFE0000 },
1345 { 0x000FFFFF, 0xFFFF0000 },
1346 { 0x000FFFFF, 0xFFFF8000 },
1347 { 0x000FFFFF, 0xFFFFC000 },
1348 { 0x000FFFFF, 0xFFFFE000 },
1349 { 0x000FFFFF, 0xFFFFF000 },
1350 { 0x000FFFFF, 0xFFFFF800 },
1351 { 0x000FFFFF, 0xFFFFFC00 },
1352 { 0x000FFFFF, 0xFFFFFE00 },
1353 { 0x000FFFFF, 0xFFFFFF00 },
1354 { 0x000FFFFF, 0xFFFFFF80 },
1355 { 0x000FFFFF, 0xFFFFFFC0 },
1356 { 0x000FFFFF, 0xFFFFFFE0 },
1357 { 0x000FFFFF, 0xFFFFFFF0 },
1358 { 0x000FFFFF, 0xFFFFFFF8 },
1359 { 0x000FFFFF, 0xFFFFFFFC },
1360 { 0x000FFFFF, 0xFFFFFFFE },
1361 { 0x000FFFFF, 0xFFFFFFFF },
1362 { 0x000FFFFF, 0xFFFFFFFD },
1363 { 0x000FFFFF, 0xFFFFFFFB },
1364 { 0x000FFFFF, 0xFFFFFFF7 },
1365 { 0x000FFFFF, 0xFFFFFFEF },
1366 { 0x000FFFFF, 0xFFFFFFDF },
1367 { 0x000FFFFF, 0xFFFFFFBF },
1368 { 0x000FFFFF, 0xFFFFFF7F },
1369 { 0x000FFFFF, 0xFFFFFEFF },
1370 { 0x000FFFFF, 0xFFFFFDFF },
1371 { 0x000FFFFF, 0xFFFFFBFF },
1372 { 0x000FFFFF, 0xFFFFF7FF },
1373 { 0x000FFFFF, 0xFFFFEFFF },
1374 { 0x000FFFFF, 0xFFFFDFFF },
1375 { 0x000FFFFF, 0xFFFFBFFF },
1376 { 0x000FFFFF, 0xFFFF7FFF },
1377 { 0x000FFFFF, 0xFFFEFFFF },
1378 { 0x000FFFFF, 0xFFFDFFFF },
1379 { 0x000FFFFF, 0xFFFBFFFF },
1380 { 0x000FFFFF, 0xFFF7FFFF },
1381 { 0x000FFFFF, 0xFFEFFFFF },
1382 { 0x000FFFFF, 0xFFDFFFFF },
1383 { 0x000FFFFF, 0xFFBFFFFF },
1384 { 0x000FFFFF, 0xFF7FFFFF },
1385 { 0x000FFFFF, 0xFEFFFFFF },
1386 { 0x000FFFFF, 0xFDFFFFFF },
1387 { 0x000FFFFF, 0xFBFFFFFF },
1388 { 0x000FFFFF, 0xF7FFFFFF },
1389 { 0x000FFFFF, 0xEFFFFFFF },
1390 { 0x000FFFFF, 0xDFFFFFFF },
1391 { 0x000FFFFF, 0xBFFFFFFF },
1392 { 0x000FFFFF, 0x7FFFFFFF },
1393 { 0x000FFFFE, 0xFFFFFFFF },
1394 { 0x000FFFFD, 0xFFFFFFFF },
1395 { 0x000FFFFB, 0xFFFFFFFF },
1396 { 0x000FFFF7, 0xFFFFFFFF },
1397 { 0x000FFFEF, 0xFFFFFFFF },
1398 { 0x000FFFDF, 0xFFFFFFFF },
1399 { 0x000FFFBF, 0xFFFFFFFF },
1400 { 0x000FFF7F, 0xFFFFFFFF },
1401 { 0x000FFEFF, 0xFFFFFFFF },
1402 { 0x000FFDFF, 0xFFFFFFFF },
1403 { 0x000FFBFF, 0xFFFFFFFF },
1404 { 0x000FF7FF, 0xFFFFFFFF },
1405 { 0x000FEFFF, 0xFFFFFFFF },
1406 { 0x000FDFFF, 0xFFFFFFFF },
1407 { 0x000FBFFF, 0xFFFFFFFF },
1408 { 0x000F7FFF, 0xFFFFFFFF },
1409 { 0x000EFFFF, 0xFFFFFFFF },
1410 { 0x000DFFFF, 0xFFFFFFFF },
1411 { 0x000BFFFF, 0xFFFFFFFF },
1412 { 0x0007FFFF, 0xFFFFFFFF },
1413 { 0x0003FFFF, 0xFFFFFFFF },
1414 { 0x0001FFFF, 0xFFFFFFFF },
1415 { 0x0000FFFF, 0xFFFFFFFF },
1416 { 0x00007FFF, 0xFFFFFFFF },
1417 { 0x00003FFF, 0xFFFFFFFF },
1418 { 0x00001FFF, 0xFFFFFFFF },
1419 { 0x00000FFF, 0xFFFFFFFF },
1420 { 0x000007FF, 0xFFFFFFFF },
1421 { 0x000003FF, 0xFFFFFFFF },
1422 { 0x000001FF, 0xFFFFFFFF },
1423 { 0x000000FF, 0xFFFFFFFF },
1424 { 0x0000007F, 0xFFFFFFFF },
1425 { 0x0000003F, 0xFFFFFFFF },
1426 { 0x0000001F, 0xFFFFFFFF },
1427 { 0x0000000F, 0xFFFFFFFF },
1428 { 0x00000007, 0xFFFFFFFF },
1429 { 0x00000003, 0xFFFFFFFF },
1430 { 0x00000001, 0xFFFFFFFF },
1431 { 0x00000000, 0xFFFFFFFF },
1432 { 0x00000000, 0x7FFFFFFF },
1433 { 0x00000000, 0x3FFFFFFF },
1434 { 0x00000000, 0x1FFFFFFF },
1435 { 0x00000000, 0x0FFFFFFF },
1436 { 0x00000000, 0x07FFFFFF },
1437 { 0x00000000, 0x03FFFFFF },
1438 { 0x00000000, 0x01FFFFFF },
1439 { 0x00000000, 0x00FFFFFF },
1440 { 0x00000000, 0x007FFFFF },
1441 { 0x00000000, 0x003FFFFF },
1442 { 0x00000000, 0x001FFFFF },
1443 { 0x00000000, 0x000FFFFF },
1444 { 0x00000000, 0x0007FFFF },
1445 { 0x00000000, 0x0003FFFF },
1446 { 0x00000000, 0x0001FFFF },
1447 { 0x00000000, 0x0000FFFF },
1448 { 0x00000000, 0x00007FFF },
1449 { 0x00000000, 0x00003FFF },
1450 { 0x00000000, 0x00001FFF },
1451 { 0x00000000, 0x00000FFF },
1452 { 0x00000000, 0x000007FF },
1453 { 0x00000000, 0x000003FF },
1454 { 0x00000000, 0x000001FF },
1455 { 0x00000000, 0x000000FF },
1456 { 0x00000000, 0x0000007F },
1457 { 0x00000000, 0x0000003F },
1458 { 0x00000000, 0x0000001F },
1459 { 0x00000000, 0x0000000F },
1460 { 0x00000000, 0x00000007 },
1461 { 0x00000000, 0x00000003 }
1464 static const uint32 float64NumQInP1 = float64NumQIn * float64NumP1;
1465 static const uint32 float64NumQOutP1 = float64NumQOut * float64NumP1;
1467 static float64 float64NextQInP1( sequenceT *sequencePtr )
1469 uint8 expNum, sigNum;
1472 sigNum = sequencePtr->term1Num;
1473 expNum = sequencePtr->expNum;
1476 float64QIn[ expNum ] | float64P1[ sigNum ].high,
1477 float64P1[ sigNum ].low
1480 if ( float64NumP1 <= sigNum ) {
1483 if ( float64NumQIn <= expNum ) {
1485 sequencePtr->done = TRUE;
1487 sequencePtr->expNum = expNum;
1489 sequencePtr->term1Num = sigNum;
1494 static float64 float64NextQOutP1( sequenceT *sequencePtr )
1496 uint8 expNum, sigNum;
1499 sigNum = sequencePtr->term1Num;
1500 expNum = sequencePtr->expNum;
1503 float64QOut[ expNum ] | float64P1[ sigNum ].high,
1504 float64P1[ sigNum ].low
1507 if ( float64NumP1 <= sigNum ) {
1510 if ( float64NumQOut <= expNum ) {
1512 sequencePtr->done = TRUE;
1514 sequencePtr->expNum = expNum;
1516 sequencePtr->term1Num = sigNum;
1521 static const uint32 float64NumQInP2 = float64NumQIn * float64NumP2;
1522 static const uint32 float64NumQOutP2 = float64NumQOut * float64NumP2;
1524 static float64 float64NextQInP2( sequenceT *sequencePtr )
1526 uint8 expNum, sigNum;
1529 sigNum = sequencePtr->term1Num;
1530 expNum = sequencePtr->expNum;
1533 float64QIn[ expNum ] | float64P2[ sigNum ].high,
1534 float64P2[ sigNum ].low
1537 if ( float64NumP2 <= sigNum ) {
1540 if ( float64NumQIn <= expNum ) {
1542 sequencePtr->done = TRUE;
1544 sequencePtr->expNum = expNum;
1546 sequencePtr->term1Num = sigNum;
1551 static float64 float64NextQOutP2( sequenceT *sequencePtr )
1553 uint8 expNum, sigNum;
1556 sigNum = sequencePtr->term1Num;
1557 expNum = sequencePtr->expNum;
1560 float64QOut[ expNum ] | float64P2[ sigNum ].high,
1561 float64P2[ sigNum ].low
1564 if ( float64NumP2 <= sigNum ) {
1567 if ( float64NumQOut <= expNum ) {
1569 sequencePtr->done = TRUE;
1571 sequencePtr->expNum = expNum;
1573 sequencePtr->term1Num = sigNum;
1578 static float64 float64RandomQOutP3( void )
1580 int8 sigNum1, sigNum2;
1581 uint32 sig1Low, sig2Low, zLow;
1584 sigNum1 = randomUint8() % float64NumP2;
1585 sigNum2 = randomUint8() % float64NumP2;
1586 sig1Low = float64P2[ sigNum1 ].low;
1587 sig2Low = float64P2[ sigNum2 ].low;
1588 zLow = sig1Low + sig2Low;
1591 float64QOut[ randomUint8() % float64NumQOut ]
1592 | ( ( float64P2[ sigNum1 ].high
1593 + float64P2[ sigNum2 ].high
1594 + ( zLow < sig1Low )
1604 static float64 float64RandomQOutPInf( void )
1610 float64QOut[ randomUint8() % float64NumQOut ]
1611 | ( randomUint32() & 0x000FFFFF ),
1619 float64NumQInfWeightMasks = 10
1622 static const uint32 float64QInfWeightMasks[ float64NumQInfWeightMasks ] = {
1635 static const uint32 float64QInfWeightOffsets[ float64NumQInfWeightMasks ] = {
1648 static float64 float64RandomQInfP3( void )
1650 int8 sigNum1, sigNum2;
1651 uint32 sig1Low, sig2Low, zLow;
1655 sigNum1 = randomUint8() % float64NumP2;
1656 sigNum2 = randomUint8() % float64NumP2;
1657 sig1Low = float64P2[ sigNum1 ].low;
1658 sig2Low = float64P2[ sigNum2 ].low;
1659 zLow = sig1Low + sig2Low;
1660 weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
1663 ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1664 | ( ( ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
1665 & float64QInfWeightMasks[ weightMaskNum ] )
1666 + float64QInfWeightOffsets[ weightMaskNum ]
1668 | ( ( float64P2[ sigNum1 ].high
1669 + float64P2[ sigNum2 ].high
1670 + ( zLow < sig1Low )
1680 static float64 float64RandomQInfPInf( void )
1685 weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
1688 ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
1689 | ( ( ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
1690 & float64QInfWeightMasks[ weightMaskNum ] )
1691 + float64QInfWeightOffsets[ weightMaskNum ]
1693 | ( randomUint32() & 0x000FFFFF ),
1700 static float64 float64Random( void )
1703 switch ( randomUint8() & 7 ) {
1707 return float64RandomQOutP3();
1709 return float64RandomQOutPInf();
1713 return float64RandomQInfP3();
1715 return float64RandomQInfPInf();
1723 floatx80NumQIn = 22,
1724 floatx80NumQOut = 76,
1729 static const uint16 floatx80QIn[ floatx80NumQIn ] = {
1730 0x0000, /* positive, subnormal */
1731 0x0001, /* positive, -16382 */
1732 0x3FBF, /* positive, -64 */
1733 0x3FFD, /* positive, -2 */
1734 0x3FFE, /* positive, -1 */
1735 0x3FFF, /* positive, 0 */
1736 0x4000, /* positive, 1 */
1737 0x4001, /* positive, 2 */
1738 0x403F, /* positive, 64 */
1739 0x7FFE, /* positive, 16383 */
1740 0x7FFF, /* positive, infinity or NaN */
1741 0x8000, /* negative, subnormal */
1742 0x8001, /* negative, -16382 */
1743 0xBFBF, /* negative, -64 */
1744 0xBFFD, /* negative, -2 */
1745 0xBFFE, /* negative, -1 */
1746 0xBFFF, /* negative, 0 */
1747 0xC000, /* negative, 1 */
1748 0xC001, /* negative, 2 */
1749 0xC03F, /* negative, 64 */
1750 0xFFFE, /* negative, 16383 */
1751 0xFFFF /* negative, infinity or NaN */
1754 static const uint16 floatx80QOut[ floatx80NumQOut ] = {
1755 0x0000, /* positive, subnormal */
1756 0x0001, /* positive, -16382 */
1757 0x0002, /* positive, -16381 */
1758 0x3BFE, /* positive, -1025 */
1759 0x3BFF, /* positive, -1024 */
1760 0x3C00, /* positive, -1023 */
1761 0x3C01, /* positive, -1022 */
1762 0x3F7E, /* positive, -129 */
1763 0x3F7F, /* positive, -128 */
1764 0x3F80, /* positive, -127 */
1765 0x3F81, /* positive, -126 */
1766 0x3FBF, /* positive, -64 */
1767 0x3FFB, /* positive, -4 */
1768 0x3FFC, /* positive, -3 */
1769 0x3FFD, /* positive, -2 */
1770 0x3FFE, /* positive, -1 */
1771 0x3FFF, /* positive, 0 */
1772 0x4000, /* positive, 1 */
1773 0x4001, /* positive, 2 */
1774 0x4002, /* positive, 3 */
1775 0x4003, /* positive, 4 */
1776 0x401C, /* positive, 29 */
1777 0x401D, /* positive, 30 */
1778 0x401E, /* positive, 31 */
1779 0x401F, /* positive, 32 */
1780 0x403C, /* positive, 61 */
1781 0x403D, /* positive, 62 */
1782 0x403E, /* positive, 63 */
1783 0x403F, /* positive, 64 */
1784 0x407E, /* positive, 127 */
1785 0x407F, /* positive, 128 */
1786 0x4080, /* positive, 129 */
1787 0x43FE, /* positive, 1023 */
1788 0x43FF, /* positive, 1024 */
1789 0x4400, /* positive, 1025 */
1790 0x7FFD, /* positive, 16382 */
1791 0x7FFE, /* positive, 16383 */
1792 0x7FFF, /* positive, infinity or NaN */
1793 0x8000, /* negative, subnormal */
1794 0x8001, /* negative, -16382 */
1795 0x8002, /* negative, -16381 */
1796 0xBBFE, /* negative, -1025 */
1797 0xBBFF, /* negative, -1024 */
1798 0xBC00, /* negative, -1023 */
1799 0xBC01, /* negative, -1022 */
1800 0xBF7E, /* negative, -129 */
1801 0xBF7F, /* negative, -128 */
1802 0xBF80, /* negative, -127 */
1803 0xBF81, /* negative, -126 */
1804 0xBFBF, /* negative, -64 */
1805 0xBFFB, /* negative, -4 */
1806 0xBFFC, /* negative, -3 */
1807 0xBFFD, /* negative, -2 */
1808 0xBFFE, /* negative, -1 */
1809 0xBFFF, /* negative, 0 */
1810 0xC000, /* negative, 1 */
1811 0xC001, /* negative, 2 */
1812 0xC002, /* negative, 3 */
1813 0xC003, /* negative, 4 */
1814 0xC01C, /* negative, 29 */
1815 0xC01D, /* negative, 30 */
1816 0xC01E, /* negative, 31 */
1817 0xC01F, /* negative, 32 */
1818 0xC03C, /* negative, 61 */
1819 0xC03D, /* negative, 62 */
1820 0xC03E, /* negative, 63 */
1821 0xC03F, /* negative, 64 */
1822 0xC07E, /* negative, 127 */
1823 0xC07F, /* negative, 128 */
1824 0xC080, /* negative, 129 */
1825 0xC3FE, /* negative, 1023 */
1826 0xC3FF, /* negative, 1024 */
1827 0xC400, /* negative, 1025 */
1828 0xFFFD, /* negative, 16382 */
1829 0xFFFE, /* negative, 16383 */
1830 0xFFFF /* negative, infinity or NaN */
1833 static const bits64 floatx80P1[ floatx80NumP1 ] = {
1834 LIT64( 0x0000000000000000 ),
1835 LIT64( 0x0000000000000001 ),
1836 LIT64( 0x7FFFFFFFFFFFFFFF ),
1837 LIT64( 0x7FFFFFFFFFFFFFFE )
1840 static const bits64 floatx80P2[ floatx80NumP2 ] = {
1841 LIT64( 0x0000000000000000 ),
1842 LIT64( 0x0000000000000001 ),
1843 LIT64( 0x0000000000000002 ),
1844 LIT64( 0x0000000000000004 ),
1845 LIT64( 0x0000000000000008 ),
1846 LIT64( 0x0000000000000010 ),
1847 LIT64( 0x0000000000000020 ),
1848 LIT64( 0x0000000000000040 ),
1849 LIT64( 0x0000000000000080 ),
1850 LIT64( 0x0000000000000100 ),
1851 LIT64( 0x0000000000000200 ),
1852 LIT64( 0x0000000000000400 ),
1853 LIT64( 0x0000000000000800 ),
1854 LIT64( 0x0000000000001000 ),
1855 LIT64( 0x0000000000002000 ),
1856 LIT64( 0x0000000000004000 ),
1857 LIT64( 0x0000000000008000 ),
1858 LIT64( 0x0000000000010000 ),
1859 LIT64( 0x0000000000020000 ),
1860 LIT64( 0x0000000000040000 ),
1861 LIT64( 0x0000000000080000 ),
1862 LIT64( 0x0000000000100000 ),
1863 LIT64( 0x0000000000200000 ),
1864 LIT64( 0x0000000000400000 ),
1865 LIT64( 0x0000000000800000 ),
1866 LIT64( 0x0000000001000000 ),
1867 LIT64( 0x0000000002000000 ),
1868 LIT64( 0x0000000004000000 ),
1869 LIT64( 0x0000000008000000 ),
1870 LIT64( 0x0000000010000000 ),
1871 LIT64( 0x0000000020000000 ),
1872 LIT64( 0x0000000040000000 ),
1873 LIT64( 0x0000000080000000 ),
1874 LIT64( 0x0000000100000000 ),
1875 LIT64( 0x0000000200000000 ),
1876 LIT64( 0x0000000400000000 ),
1877 LIT64( 0x0000000800000000 ),
1878 LIT64( 0x0000001000000000 ),
1879 LIT64( 0x0000002000000000 ),
1880 LIT64( 0x0000004000000000 ),
1881 LIT64( 0x0000008000000000 ),
1882 LIT64( 0x0000010000000000 ),
1883 LIT64( 0x0000020000000000 ),
1884 LIT64( 0x0000040000000000 ),
1885 LIT64( 0x0000080000000000 ),
1886 LIT64( 0x0000100000000000 ),
1887 LIT64( 0x0000200000000000 ),
1888 LIT64( 0x0000400000000000 ),
1889 LIT64( 0x0000800000000000 ),
1890 LIT64( 0x0001000000000000 ),
1891 LIT64( 0x0002000000000000 ),
1892 LIT64( 0x0004000000000000 ),
1893 LIT64( 0x0008000000000000 ),
1894 LIT64( 0x0010000000000000 ),
1895 LIT64( 0x0020000000000000 ),
1896 LIT64( 0x0040000000000000 ),
1897 LIT64( 0x0080000000000000 ),
1898 LIT64( 0x0100000000000000 ),
1899 LIT64( 0x0200000000000000 ),
1900 LIT64( 0x0400000000000000 ),
1901 LIT64( 0x0800000000000000 ),
1902 LIT64( 0x1000000000000000 ),
1903 LIT64( 0x2000000000000000 ),
1904 LIT64( 0x4000000000000000 ),
1905 LIT64( 0x6000000000000000 ),
1906 LIT64( 0x7000000000000000 ),
1907 LIT64( 0x7800000000000000 ),
1908 LIT64( 0x7C00000000000000 ),
1909 LIT64( 0x7E00000000000000 ),
1910 LIT64( 0x7F00000000000000 ),
1911 LIT64( 0x7F80000000000000 ),
1912 LIT64( 0x7FC0000000000000 ),
1913 LIT64( 0x7FE0000000000000 ),
1914 LIT64( 0x7FF0000000000000 ),
1915 LIT64( 0x7FF8000000000000 ),
1916 LIT64( 0x7FFC000000000000 ),
1917 LIT64( 0x7FFE000000000000 ),
1918 LIT64( 0x7FFF000000000000 ),
1919 LIT64( 0x7FFF800000000000 ),
1920 LIT64( 0x7FFFC00000000000 ),
1921 LIT64( 0x7FFFE00000000000 ),
1922 LIT64( 0x7FFFF00000000000 ),
1923 LIT64( 0x7FFFF80000000000 ),
1924 LIT64( 0x7FFFFC0000000000 ),
1925 LIT64( 0x7FFFFE0000000000 ),
1926 LIT64( 0x7FFFFF0000000000 ),
1927 LIT64( 0x7FFFFF8000000000 ),
1928 LIT64( 0x7FFFFFC000000000 ),
1929 LIT64( 0x7FFFFFE000000000 ),
1930 LIT64( 0x7FFFFFF000000000 ),
1931 LIT64( 0x7FFFFFF800000000 ),
1932 LIT64( 0x7FFFFFFC00000000 ),
1933 LIT64( 0x7FFFFFFE00000000 ),
1934 LIT64( 0x7FFFFFFF00000000 ),
1935 LIT64( 0x7FFFFFFF80000000 ),
1936 LIT64( 0x7FFFFFFFC0000000 ),
1937 LIT64( 0x7FFFFFFFE0000000 ),
1938 LIT64( 0x7FFFFFFFF0000000 ),
1939 LIT64( 0x7FFFFFFFF8000000 ),
1940 LIT64( 0x7FFFFFFFFC000000 ),
1941 LIT64( 0x7FFFFFFFFE000000 ),
1942 LIT64( 0x7FFFFFFFFF000000 ),
1943 LIT64( 0x7FFFFFFFFF800000 ),
1944 LIT64( 0x7FFFFFFFFFC00000 ),
1945 LIT64( 0x7FFFFFFFFFE00000 ),
1946 LIT64( 0x7FFFFFFFFFF00000 ),
1947 LIT64( 0x7FFFFFFFFFF80000 ),
1948 LIT64( 0x7FFFFFFFFFFC0000 ),
1949 LIT64( 0x7FFFFFFFFFFE0000 ),
1950 LIT64( 0x7FFFFFFFFFFF0000 ),
1951 LIT64( 0x7FFFFFFFFFFF8000 ),
1952 LIT64( 0x7FFFFFFFFFFFC000 ),
1953 LIT64( 0x7FFFFFFFFFFFE000 ),
1954 LIT64( 0x7FFFFFFFFFFFF000 ),
1955 LIT64( 0x7FFFFFFFFFFFF800 ),
1956 LIT64( 0x7FFFFFFFFFFFFC00 ),
1957 LIT64( 0x7FFFFFFFFFFFFE00 ),
1958 LIT64( 0x7FFFFFFFFFFFFF00 ),
1959 LIT64( 0x7FFFFFFFFFFFFF80 ),
1960 LIT64( 0x7FFFFFFFFFFFFFC0 ),
1961 LIT64( 0x7FFFFFFFFFFFFFE0 ),
1962 LIT64( 0x7FFFFFFFFFFFFFF0 ),
1963 LIT64( 0x7FFFFFFFFFFFFFF8 ),
1964 LIT64( 0x7FFFFFFFFFFFFFFC ),
1965 LIT64( 0x7FFFFFFFFFFFFFFE ),
1966 LIT64( 0x7FFFFFFFFFFFFFFF ),
1967 LIT64( 0x7FFFFFFFFFFFFFFD ),
1968 LIT64( 0x7FFFFFFFFFFFFFFB ),
1969 LIT64( 0x7FFFFFFFFFFFFFF7 ),
1970 LIT64( 0x7FFFFFFFFFFFFFEF ),
1971 LIT64( 0x7FFFFFFFFFFFFFDF ),
1972 LIT64( 0x7FFFFFFFFFFFFFBF ),
1973 LIT64( 0x7FFFFFFFFFFFFF7F ),
1974 LIT64( 0x7FFFFFFFFFFFFEFF ),
1975 LIT64( 0x7FFFFFFFFFFFFDFF ),
1976 LIT64( 0x7FFFFFFFFFFFFBFF ),
1977 LIT64( 0x7FFFFFFFFFFFF7FF ),
1978 LIT64( 0x7FFFFFFFFFFFEFFF ),
1979 LIT64( 0x7FFFFFFFFFFFDFFF ),
1980 LIT64( 0x7FFFFFFFFFFFBFFF ),
1981 LIT64( 0x7FFFFFFFFFFF7FFF ),
1982 LIT64( 0x7FFFFFFFFFFEFFFF ),
1983 LIT64( 0x7FFFFFFFFFFDFFFF ),
1984 LIT64( 0x7FFFFFFFFFFBFFFF ),
1985 LIT64( 0x7FFFFFFFFFF7FFFF ),
1986 LIT64( 0x7FFFFFFFFFEFFFFF ),
1987 LIT64( 0x7FFFFFFFFFDFFFFF ),
1988 LIT64( 0x7FFFFFFFFFBFFFFF ),
1989 LIT64( 0x7FFFFFFFFF7FFFFF ),
1990 LIT64( 0x7FFFFFFFFEFFFFFF ),
1991 LIT64( 0x7FFFFFFFFDFFFFFF ),
1992 LIT64( 0x7FFFFFFFFBFFFFFF ),
1993 LIT64( 0x7FFFFFFFF7FFFFFF ),
1994 LIT64( 0x7FFFFFFFEFFFFFFF ),
1995 LIT64( 0x7FFFFFFFDFFFFFFF ),
1996 LIT64( 0x7FFFFFFFBFFFFFFF ),
1997 LIT64( 0x7FFFFFFF7FFFFFFF ),
1998 LIT64( 0x7FFFFFFEFFFFFFFF ),
1999 LIT64( 0x7FFFFFFDFFFFFFFF ),
2000 LIT64( 0x7FFFFFFBFFFFFFFF ),
2001 LIT64( 0x7FFFFFF7FFFFFFFF ),
2002 LIT64( 0x7FFFFFEFFFFFFFFF ),
2003 LIT64( 0x7FFFFFDFFFFFFFFF ),
2004 LIT64( 0x7FFFFFBFFFFFFFFF ),
2005 LIT64( 0x7FFFFF7FFFFFFFFF ),
2006 LIT64( 0x7FFFFEFFFFFFFFFF ),
2007 LIT64( 0x7FFFFDFFFFFFFFFF ),
2008 LIT64( 0x7FFFFBFFFFFFFFFF ),
2009 LIT64( 0x7FFFF7FFFFFFFFFF ),
2010 LIT64( 0x7FFFEFFFFFFFFFFF ),
2011 LIT64( 0x7FFFDFFFFFFFFFFF ),
2012 LIT64( 0x7FFFBFFFFFFFFFFF ),
2013 LIT64( 0x7FFF7FFFFFFFFFFF ),
2014 LIT64( 0x7FFEFFFFFFFFFFFF ),
2015 LIT64( 0x7FFDFFFFFFFFFFFF ),
2016 LIT64( 0x7FFBFFFFFFFFFFFF ),
2017 LIT64( 0x7FF7FFFFFFFFFFFF ),
2018 LIT64( 0x7FEFFFFFFFFFFFFF ),
2019 LIT64( 0x7FDFFFFFFFFFFFFF ),
2020 LIT64( 0x7FBFFFFFFFFFFFFF ),
2021 LIT64( 0x7F7FFFFFFFFFFFFF ),
2022 LIT64( 0x7EFFFFFFFFFFFFFF ),
2023 LIT64( 0x7DFFFFFFFFFFFFFF ),
2024 LIT64( 0x7BFFFFFFFFFFFFFF ),
2025 LIT64( 0x77FFFFFFFFFFFFFF ),
2026 LIT64( 0x6FFFFFFFFFFFFFFF ),
2027 LIT64( 0x5FFFFFFFFFFFFFFF ),
2028 LIT64( 0x3FFFFFFFFFFFFFFF ),
2029 LIT64( 0x1FFFFFFFFFFFFFFF ),
2030 LIT64( 0x0FFFFFFFFFFFFFFF ),
2031 LIT64( 0x07FFFFFFFFFFFFFF ),
2032 LIT64( 0x03FFFFFFFFFFFFFF ),
2033 LIT64( 0x01FFFFFFFFFFFFFF ),
2034 LIT64( 0x00FFFFFFFFFFFFFF ),
2035 LIT64( 0x007FFFFFFFFFFFFF ),
2036 LIT64( 0x003FFFFFFFFFFFFF ),
2037 LIT64( 0x001FFFFFFFFFFFFF ),
2038 LIT64( 0x000FFFFFFFFFFFFF ),
2039 LIT64( 0x0007FFFFFFFFFFFF ),
2040 LIT64( 0x0003FFFFFFFFFFFF ),
2041 LIT64( 0x0001FFFFFFFFFFFF ),
2042 LIT64( 0x0000FFFFFFFFFFFF ),
2043 LIT64( 0x00007FFFFFFFFFFF ),
2044 LIT64( 0x00003FFFFFFFFFFF ),
2045 LIT64( 0x00001FFFFFFFFFFF ),
2046 LIT64( 0x00000FFFFFFFFFFF ),
2047 LIT64( 0x000007FFFFFFFFFF ),
2048 LIT64( 0x000003FFFFFFFFFF ),
2049 LIT64( 0x000001FFFFFFFFFF ),
2050 LIT64( 0x000000FFFFFFFFFF ),
2051 LIT64( 0x0000007FFFFFFFFF ),
2052 LIT64( 0x0000003FFFFFFFFF ),
2053 LIT64( 0x0000001FFFFFFFFF ),
2054 LIT64( 0x0000000FFFFFFFFF ),
2055 LIT64( 0x00000007FFFFFFFF ),
2056 LIT64( 0x00000003FFFFFFFF ),
2057 LIT64( 0x00000001FFFFFFFF ),
2058 LIT64( 0x00000000FFFFFFFF ),
2059 LIT64( 0x000000007FFFFFFF ),
2060 LIT64( 0x000000003FFFFFFF ),
2061 LIT64( 0x000000001FFFFFFF ),
2062 LIT64( 0x000000000FFFFFFF ),
2063 LIT64( 0x0000000007FFFFFF ),
2064 LIT64( 0x0000000003FFFFFF ),
2065 LIT64( 0x0000000001FFFFFF ),
2066 LIT64( 0x0000000000FFFFFF ),
2067 LIT64( 0x00000000007FFFFF ),
2068 LIT64( 0x00000000003FFFFF ),
2069 LIT64( 0x00000000001FFFFF ),
2070 LIT64( 0x00000000000FFFFF ),
2071 LIT64( 0x000000000007FFFF ),
2072 LIT64( 0x000000000003FFFF ),
2073 LIT64( 0x000000000001FFFF ),
2074 LIT64( 0x000000000000FFFF ),
2075 LIT64( 0x0000000000007FFF ),
2076 LIT64( 0x0000000000003FFF ),
2077 LIT64( 0x0000000000001FFF ),
2078 LIT64( 0x0000000000000FFF ),
2079 LIT64( 0x00000000000007FF ),
2080 LIT64( 0x00000000000003FF ),
2081 LIT64( 0x00000000000001FF ),
2082 LIT64( 0x00000000000000FF ),
2083 LIT64( 0x000000000000007F ),
2084 LIT64( 0x000000000000003F ),
2085 LIT64( 0x000000000000001F ),
2086 LIT64( 0x000000000000000F ),
2087 LIT64( 0x0000000000000007 ),
2088 LIT64( 0x0000000000000003 )
2091 static const uint32 floatx80NumQInP1 = floatx80NumQIn * floatx80NumP1;
2092 static const uint32 floatx80NumQOutP1 = floatx80NumQOut * floatx80NumP1;
2094 static floatx80 floatx80NextQInP1( sequenceT *sequencePtr )
2096 int16 expNum, sigNum;
2099 sigNum = sequencePtr->term1Num;
2100 expNum = sequencePtr->expNum;
2101 z.low = floatx80P1[ sigNum ];
2102 z.high = floatx80QIn[ expNum ];
2103 if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2105 if ( floatx80NumP1 <= sigNum ) {
2108 if ( floatx80NumQIn <= expNum ) {
2110 sequencePtr->done = TRUE;
2112 sequencePtr->expNum = expNum;
2114 sequencePtr->term1Num = sigNum;
2119 static floatx80 floatx80NextQOutP1( sequenceT *sequencePtr )
2121 int16 expNum, sigNum;
2124 sigNum = sequencePtr->term1Num;
2125 expNum = sequencePtr->expNum;
2126 z.low = floatx80P1[ sigNum ];
2127 z.high = floatx80QOut[ expNum ];
2128 if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2130 if ( floatx80NumP1 <= sigNum ) {
2133 if ( floatx80NumQOut <= expNum ) {
2135 sequencePtr->done = TRUE;
2137 sequencePtr->expNum = expNum;
2139 sequencePtr->term1Num = sigNum;
2144 static const uint32 floatx80NumQInP2 = floatx80NumQIn * floatx80NumP2;
2145 static const uint32 floatx80NumQOutP2 = floatx80NumQOut * floatx80NumP2;
2147 static floatx80 floatx80NextQInP2( sequenceT *sequencePtr )
2149 int16 expNum, sigNum;
2152 sigNum = sequencePtr->term1Num;
2153 expNum = sequencePtr->expNum;
2154 z.low = floatx80P2[ sigNum ];
2155 z.high = floatx80QIn[ expNum ];
2156 if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2158 if ( floatx80NumP2 <= sigNum ) {
2161 if ( floatx80NumQIn <= expNum ) {
2163 sequencePtr->done = TRUE;
2165 sequencePtr->expNum = expNum;
2167 sequencePtr->term1Num = sigNum;
2172 static floatx80 floatx80NextQOutP2( sequenceT *sequencePtr )
2174 int16 expNum, sigNum;
2177 sigNum = sequencePtr->term1Num;
2178 expNum = sequencePtr->expNum;
2179 z.low = floatx80P2[ sigNum ];
2180 z.high = floatx80QOut[ expNum ];
2181 if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2183 if ( floatx80NumP2 <= sigNum ) {
2186 if ( floatx80NumQOut <= expNum ) {
2188 sequencePtr->done = TRUE;
2190 sequencePtr->expNum = expNum;
2192 sequencePtr->term1Num = sigNum;
2197 static floatx80 floatx80RandomQOutP3( void )
2202 ( floatx80P2[ randomUint8() % floatx80NumP2 ]
2203 + floatx80P2[ randomUint8() % floatx80NumP2 ] )
2204 & LIT64( 0x7FFFFFFFFFFFFFFF );
2205 z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
2206 if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2211 static floatx80 floatx80RandomQOutPInf( void )
2215 z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
2216 z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
2217 if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
2223 floatx80NumQInfWeightMasks = 14
2226 static const uint16 floatx80QInfWeightMasks[ floatx80NumQInfWeightMasks ] = {
2243 static const uint16 floatx80QInfWeightOffsets[ floatx80NumQInfWeightMasks ] = {
2260 static floatx80 floatx80RandomQInfP3( void )
2266 ( floatx80P2[ randomUint8() % floatx80NumP2 ]
2267 + floatx80P2[ randomUint8() % floatx80NumP2 ] )
2268 & LIT64( 0x7FFFFFFFFFFFFFFF );
2269 weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
2271 ( randomUint16() & floatx80QInfWeightMasks[ weightMaskNum ] )
2272 + floatx80QInfWeightOffsets[ weightMaskNum ];
2273 if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
2274 z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
2279 static floatx80 floatx80RandomQInfPInf( void )
2284 z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
2285 weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
2287 ( randomUint16() & floatx80QInfWeightMasks[ weightMaskNum ] )
2288 + floatx80QInfWeightOffsets[ weightMaskNum ];
2289 if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
2290 z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
2295 static floatx80 floatx80Random( void )
2298 switch ( randomUint8() & 7 ) {
2302 return floatx80RandomQOutP3();
2304 return floatx80RandomQOutPInf();
2308 return floatx80RandomQInfP3();
2310 return floatx80RandomQInfPInf();
2320 float128NumQIn = 22,
2321 float128NumQOut = 78,
2326 static const uint64 float128QIn[ float128NumQIn ] = {
2327 LIT64( 0x0000000000000000 ), /* positive, subnormal */
2328 LIT64( 0x0001000000000000 ), /* positive, -16382 */
2329 LIT64( 0x3F8E000000000000 ), /* positive, -113 */
2330 LIT64( 0x3FFD000000000000 ), /* positive, -2 */
2331 LIT64( 0x3FFE000000000000 ), /* positive, -1 */
2332 LIT64( 0x3FFF000000000000 ), /* positive, 0 */
2333 LIT64( 0x4000000000000000 ), /* positive, 1 */
2334 LIT64( 0x4001000000000000 ), /* positive, 2 */
2335 LIT64( 0x4070000000000000 ), /* positive, 113 */
2336 LIT64( 0x7FFE000000000000 ), /* positive, 16383 */
2337 LIT64( 0x7FFF000000000000 ), /* positive, infinity or NaN */
2338 LIT64( 0x8000000000000000 ), /* negative, subnormal */
2339 LIT64( 0x8001000000000000 ), /* negative, -16382 */
2340 LIT64( 0xBF8E000000000000 ), /* negative, -113 */
2341 LIT64( 0xBFFD000000000000 ), /* negative, -2 */
2342 LIT64( 0xBFFE000000000000 ), /* negative, -1 */
2343 LIT64( 0xBFFF000000000000 ), /* negative, 0 */
2344 LIT64( 0xC000000000000000 ), /* negative, 1 */
2345 LIT64( 0xC001000000000000 ), /* negative, 2 */
2346 LIT64( 0xC070000000000000 ), /* negative, 113 */
2347 LIT64( 0xFFFE000000000000 ), /* negative, 16383 */
2348 LIT64( 0xFFFF000000000000 ) /* negative, infinity or NaN */
2351 static const uint64 float128QOut[ float128NumQOut ] = {
2352 LIT64( 0x0000000000000000 ), /* positive, subnormal */
2353 LIT64( 0x0001000000000000 ), /* positive, -16382 */
2354 LIT64( 0x0002000000000000 ), /* positive, -16381 */
2355 LIT64( 0x3BFE000000000000 ), /* positive, -1025 */
2356 LIT64( 0x3BFF000000000000 ), /* positive, -1024 */
2357 LIT64( 0x3C00000000000000 ), /* positive, -1023 */
2358 LIT64( 0x3C01000000000000 ), /* positive, -1022 */
2359 LIT64( 0x3F7E000000000000 ), /* positive, -129 */
2360 LIT64( 0x3F7F000000000000 ), /* positive, -128 */
2361 LIT64( 0x3F80000000000000 ), /* positive, -127 */
2362 LIT64( 0x3F81000000000000 ), /* positive, -126 */
2363 LIT64( 0x3F8E000000000000 ), /* positive, -113 */
2364 LIT64( 0x3FFB000000000000 ), /* positive, -4 */
2365 LIT64( 0x3FFC000000000000 ), /* positive, -3 */
2366 LIT64( 0x3FFD000000000000 ), /* positive, -2 */
2367 LIT64( 0x3FFE000000000000 ), /* positive, -1 */
2368 LIT64( 0x3FFF000000000000 ), /* positive, 0 */
2369 LIT64( 0x4000000000000000 ), /* positive, 1 */
2370 LIT64( 0x4001000000000000 ), /* positive, 2 */
2371 LIT64( 0x4002000000000000 ), /* positive, 3 */
2372 LIT64( 0x4003000000000000 ), /* positive, 4 */
2373 LIT64( 0x401C000000000000 ), /* positive, 29 */
2374 LIT64( 0x401D000000000000 ), /* positive, 30 */
2375 LIT64( 0x401E000000000000 ), /* positive, 31 */
2376 LIT64( 0x401F000000000000 ), /* positive, 32 */
2377 LIT64( 0x403C000000000000 ), /* positive, 61 */
2378 LIT64( 0x403D000000000000 ), /* positive, 62 */
2379 LIT64( 0x403E000000000000 ), /* positive, 63 */
2380 LIT64( 0x403F000000000000 ), /* positive, 64 */
2381 LIT64( 0x4070000000000000 ), /* positive, 113 */
2382 LIT64( 0x407E000000000000 ), /* positive, 127 */
2383 LIT64( 0x407F000000000000 ), /* positive, 128 */
2384 LIT64( 0x4080000000000000 ), /* positive, 129 */
2385 LIT64( 0x43FE000000000000 ), /* positive, 1023 */
2386 LIT64( 0x43FF000000000000 ), /* positive, 1024 */
2387 LIT64( 0x4400000000000000 ), /* positive, 1025 */
2388 LIT64( 0x7FFD000000000000 ), /* positive, 16382 */
2389 LIT64( 0x7FFE000000000000 ), /* positive, 16383 */
2390 LIT64( 0x7FFF000000000000 ), /* positive, infinity or NaN */
2391 LIT64( 0x8000000000000000 ), /* negative, subnormal */
2392 LIT64( 0x8001000000000000 ), /* negative, -16382 */
2393 LIT64( 0x8002000000000000 ), /* negative, -16381 */
2394 LIT64( 0xBBFE000000000000 ), /* negative, -1025 */
2395 LIT64( 0xBBFF000000000000 ), /* negative, -1024 */
2396 LIT64( 0xBC00000000000000 ), /* negative, -1023 */
2397 LIT64( 0xBC01000000000000 ), /* negative, -1022 */
2398 LIT64( 0xBF7E000000000000 ), /* negative, -129 */
2399 LIT64( 0xBF7F000000000000 ), /* negative, -128 */
2400 LIT64( 0xBF80000000000000 ), /* negative, -127 */
2401 LIT64( 0xBF81000000000000 ), /* negative, -126 */
2402 LIT64( 0xBF8E000000000000 ), /* negative, -113 */
2403 LIT64( 0xBFFB000000000000 ), /* negative, -4 */
2404 LIT64( 0xBFFC000000000000 ), /* negative, -3 */
2405 LIT64( 0xBFFD000000000000 ), /* negative, -2 */
2406 LIT64( 0xBFFE000000000000 ), /* negative, -1 */
2407 LIT64( 0xBFFF000000000000 ), /* negative, 0 */
2408 LIT64( 0xC000000000000000 ), /* negative, 1 */
2409 LIT64( 0xC001000000000000 ), /* negative, 2 */
2410 LIT64( 0xC002000000000000 ), /* negative, 3 */
2411 LIT64( 0xC003000000000000 ), /* negative, 4 */
2412 LIT64( 0xC01C000000000000 ), /* negative, 29 */
2413 LIT64( 0xC01D000000000000 ), /* negative, 30 */
2414 LIT64( 0xC01E000000000000 ), /* negative, 31 */
2415 LIT64( 0xC01F000000000000 ), /* negative, 32 */
2416 LIT64( 0xC03C000000000000 ), /* negative, 61 */
2417 LIT64( 0xC03D000000000000 ), /* negative, 62 */
2418 LIT64( 0xC03E000000000000 ), /* negative, 63 */
2419 LIT64( 0xC03F000000000000 ), /* negative, 64 */
2420 LIT64( 0xC070000000000000 ), /* negative, 113 */
2421 LIT64( 0xC07E000000000000 ), /* negative, 127 */
2422 LIT64( 0xC07F000000000000 ), /* negative, 128 */
2423 LIT64( 0xC080000000000000 ), /* negative, 129 */
2424 LIT64( 0xC3FE000000000000 ), /* negative, 1023 */
2425 LIT64( 0xC3FF000000000000 ), /* negative, 1024 */
2426 LIT64( 0xC400000000000000 ), /* negative, 1025 */
2427 LIT64( 0xFFFD000000000000 ), /* negative, 16382 */
2428 LIT64( 0xFFFE000000000000 ), /* negative, 16383 */
2429 LIT64( 0xFFFF000000000000 ) /* negative, infinity or NaN */
2432 static const struct { bits64 high, low; } float128P1[ float128NumP1 ] = {
2433 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
2434 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
2435 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2436 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) }
2439 static const struct { bits64 high, low; } float128P2[ float128NumP2 ] = {
2440 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
2441 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
2442 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000002 ) },
2443 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000004 ) },
2444 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000008 ) },
2445 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000010 ) },
2446 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000020 ) },
2447 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000040 ) },
2448 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000080 ) },
2449 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000100 ) },
2450 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000200 ) },
2451 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000400 ) },
2452 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000800 ) },
2453 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001000 ) },
2454 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000002000 ) },
2455 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000004000 ) },
2456 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000008000 ) },
2457 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000010000 ) },
2458 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000020000 ) },
2459 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000040000 ) },
2460 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000080000 ) },
2461 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000100000 ) },
2462 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000200000 ) },
2463 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000400000 ) },
2464 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000800000 ) },
2465 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001000000 ) },
2466 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000002000000 ) },
2467 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000004000000 ) },
2468 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000008000000 ) },
2469 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000010000000 ) },
2470 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000020000000 ) },
2471 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000040000000 ) },
2472 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000080000000 ) },
2473 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000100000000 ) },
2474 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000200000000 ) },
2475 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000400000000 ) },
2476 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000800000000 ) },
2477 { LIT64( 0x0000000000000000 ), LIT64( 0x0000001000000000 ) },
2478 { LIT64( 0x0000000000000000 ), LIT64( 0x0000002000000000 ) },
2479 { LIT64( 0x0000000000000000 ), LIT64( 0x0000004000000000 ) },
2480 { LIT64( 0x0000000000000000 ), LIT64( 0x0000008000000000 ) },
2481 { LIT64( 0x0000000000000000 ), LIT64( 0x0000010000000000 ) },
2482 { LIT64( 0x0000000000000000 ), LIT64( 0x0000020000000000 ) },
2483 { LIT64( 0x0000000000000000 ), LIT64( 0x0000040000000000 ) },
2484 { LIT64( 0x0000000000000000 ), LIT64( 0x0000080000000000 ) },
2485 { LIT64( 0x0000000000000000 ), LIT64( 0x0000100000000000 ) },
2486 { LIT64( 0x0000000000000000 ), LIT64( 0x0000200000000000 ) },
2487 { LIT64( 0x0000000000000000 ), LIT64( 0x0000400000000000 ) },
2488 { LIT64( 0x0000000000000000 ), LIT64( 0x0000800000000000 ) },
2489 { LIT64( 0x0000000000000000 ), LIT64( 0x0001000000000000 ) },
2490 { LIT64( 0x0000000000000000 ), LIT64( 0x0002000000000000 ) },
2491 { LIT64( 0x0000000000000000 ), LIT64( 0x0004000000000000 ) },
2492 { LIT64( 0x0000000000000000 ), LIT64( 0x0008000000000000 ) },
2493 { LIT64( 0x0000000000000000 ), LIT64( 0x0010000000000000 ) },
2494 { LIT64( 0x0000000000000000 ), LIT64( 0x0020000000000000 ) },
2495 { LIT64( 0x0000000000000000 ), LIT64( 0x0040000000000000 ) },
2496 { LIT64( 0x0000000000000000 ), LIT64( 0x0080000000000000 ) },
2497 { LIT64( 0x0000000000000000 ), LIT64( 0x0100000000000000 ) },
2498 { LIT64( 0x0000000000000000 ), LIT64( 0x0200000000000000 ) },
2499 { LIT64( 0x0000000000000000 ), LIT64( 0x0400000000000000 ) },
2500 { LIT64( 0x0000000000000000 ), LIT64( 0x0800000000000000 ) },
2501 { LIT64( 0x0000000000000000 ), LIT64( 0x1000000000000000 ) },
2502 { LIT64( 0x0000000000000000 ), LIT64( 0x2000000000000000 ) },
2503 { LIT64( 0x0000000000000000 ), LIT64( 0x4000000000000000 ) },
2504 { LIT64( 0x0000000000000000 ), LIT64( 0x8000000000000000 ) },
2505 { LIT64( 0x0000000000000001 ), LIT64( 0x0000000000000000 ) },
2506 { LIT64( 0x0000000000000002 ), LIT64( 0x0000000000000000 ) },
2507 { LIT64( 0x0000000000000004 ), LIT64( 0x0000000000000000 ) },
2508 { LIT64( 0x0000000000000008 ), LIT64( 0x0000000000000000 ) },
2509 { LIT64( 0x0000000000000010 ), LIT64( 0x0000000000000000 ) },
2510 { LIT64( 0x0000000000000020 ), LIT64( 0x0000000000000000 ) },
2511 { LIT64( 0x0000000000000040 ), LIT64( 0x0000000000000000 ) },
2512 { LIT64( 0x0000000000000080 ), LIT64( 0x0000000000000000 ) },
2513 { LIT64( 0x0000000000000100 ), LIT64( 0x0000000000000000 ) },
2514 { LIT64( 0x0000000000000200 ), LIT64( 0x0000000000000000 ) },
2515 { LIT64( 0x0000000000000400 ), LIT64( 0x0000000000000000 ) },
2516 { LIT64( 0x0000000000000800 ), LIT64( 0x0000000000000000 ) },
2517 { LIT64( 0x0000000000001000 ), LIT64( 0x0000000000000000 ) },
2518 { LIT64( 0x0000000000002000 ), LIT64( 0x0000000000000000 ) },
2519 { LIT64( 0x0000000000004000 ), LIT64( 0x0000000000000000 ) },
2520 { LIT64( 0x0000000000008000 ), LIT64( 0x0000000000000000 ) },
2521 { LIT64( 0x0000000000010000 ), LIT64( 0x0000000000000000 ) },
2522 { LIT64( 0x0000000000020000 ), LIT64( 0x0000000000000000 ) },
2523 { LIT64( 0x0000000000040000 ), LIT64( 0x0000000000000000 ) },
2524 { LIT64( 0x0000000000080000 ), LIT64( 0x0000000000000000 ) },
2525 { LIT64( 0x0000000000100000 ), LIT64( 0x0000000000000000 ) },
2526 { LIT64( 0x0000000000200000 ), LIT64( 0x0000000000000000 ) },
2527 { LIT64( 0x0000000000400000 ), LIT64( 0x0000000000000000 ) },
2528 { LIT64( 0x0000000000800000 ), LIT64( 0x0000000000000000 ) },
2529 { LIT64( 0x0000000001000000 ), LIT64( 0x0000000000000000 ) },
2530 { LIT64( 0x0000000002000000 ), LIT64( 0x0000000000000000 ) },
2531 { LIT64( 0x0000000004000000 ), LIT64( 0x0000000000000000 ) },
2532 { LIT64( 0x0000000008000000 ), LIT64( 0x0000000000000000 ) },
2533 { LIT64( 0x0000000010000000 ), LIT64( 0x0000000000000000 ) },
2534 { LIT64( 0x0000000020000000 ), LIT64( 0x0000000000000000 ) },
2535 { LIT64( 0x0000000040000000 ), LIT64( 0x0000000000000000 ) },
2536 { LIT64( 0x0000000080000000 ), LIT64( 0x0000000000000000 ) },
2537 { LIT64( 0x0000000100000000 ), LIT64( 0x0000000000000000 ) },
2538 { LIT64( 0x0000000200000000 ), LIT64( 0x0000000000000000 ) },
2539 { LIT64( 0x0000000400000000 ), LIT64( 0x0000000000000000 ) },
2540 { LIT64( 0x0000000800000000 ), LIT64( 0x0000000000000000 ) },
2541 { LIT64( 0x0000001000000000 ), LIT64( 0x0000000000000000 ) },
2542 { LIT64( 0x0000002000000000 ), LIT64( 0x0000000000000000 ) },
2543 { LIT64( 0x0000004000000000 ), LIT64( 0x0000000000000000 ) },
2544 { LIT64( 0x0000008000000000 ), LIT64( 0x0000000000000000 ) },
2545 { LIT64( 0x0000010000000000 ), LIT64( 0x0000000000000000 ) },
2546 { LIT64( 0x0000020000000000 ), LIT64( 0x0000000000000000 ) },
2547 { LIT64( 0x0000040000000000 ), LIT64( 0x0000000000000000 ) },
2548 { LIT64( 0x0000080000000000 ), LIT64( 0x0000000000000000 ) },
2549 { LIT64( 0x0000100000000000 ), LIT64( 0x0000000000000000 ) },
2550 { LIT64( 0x0000200000000000 ), LIT64( 0x0000000000000000 ) },
2551 { LIT64( 0x0000400000000000 ), LIT64( 0x0000000000000000 ) },
2552 { LIT64( 0x0000800000000000 ), LIT64( 0x0000000000000000 ) },
2553 { LIT64( 0x0000C00000000000 ), LIT64( 0x0000000000000000 ) },
2554 { LIT64( 0x0000E00000000000 ), LIT64( 0x0000000000000000 ) },
2555 { LIT64( 0x0000F00000000000 ), LIT64( 0x0000000000000000 ) },
2556 { LIT64( 0x0000F80000000000 ), LIT64( 0x0000000000000000 ) },
2557 { LIT64( 0x0000FC0000000000 ), LIT64( 0x0000000000000000 ) },
2558 { LIT64( 0x0000FE0000000000 ), LIT64( 0x0000000000000000 ) },
2559 { LIT64( 0x0000FF0000000000 ), LIT64( 0x0000000000000000 ) },
2560 { LIT64( 0x0000FF8000000000 ), LIT64( 0x0000000000000000 ) },
2561 { LIT64( 0x0000FFC000000000 ), LIT64( 0x0000000000000000 ) },
2562 { LIT64( 0x0000FFE000000000 ), LIT64( 0x0000000000000000 ) },
2563 { LIT64( 0x0000FFF000000000 ), LIT64( 0x0000000000000000 ) },
2564 { LIT64( 0x0000FFF800000000 ), LIT64( 0x0000000000000000 ) },
2565 { LIT64( 0x0000FFFC00000000 ), LIT64( 0x0000000000000000 ) },
2566 { LIT64( 0x0000FFFE00000000 ), LIT64( 0x0000000000000000 ) },
2567 { LIT64( 0x0000FFFF00000000 ), LIT64( 0x0000000000000000 ) },
2568 { LIT64( 0x0000FFFF80000000 ), LIT64( 0x0000000000000000 ) },
2569 { LIT64( 0x0000FFFFC0000000 ), LIT64( 0x0000000000000000 ) },
2570 { LIT64( 0x0000FFFFE0000000 ), LIT64( 0x0000000000000000 ) },
2571 { LIT64( 0x0000FFFFF0000000 ), LIT64( 0x0000000000000000 ) },
2572 { LIT64( 0x0000FFFFF8000000 ), LIT64( 0x0000000000000000 ) },
2573 { LIT64( 0x0000FFFFFC000000 ), LIT64( 0x0000000000000000 ) },
2574 { LIT64( 0x0000FFFFFE000000 ), LIT64( 0x0000000000000000 ) },
2575 { LIT64( 0x0000FFFFFF000000 ), LIT64( 0x0000000000000000 ) },
2576 { LIT64( 0x0000FFFFFF800000 ), LIT64( 0x0000000000000000 ) },
2577 { LIT64( 0x0000FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },
2578 { LIT64( 0x0000FFFFFFE00000 ), LIT64( 0x0000000000000000 ) },
2579 { LIT64( 0x0000FFFFFFF00000 ), LIT64( 0x0000000000000000 ) },
2580 { LIT64( 0x0000FFFFFFF80000 ), LIT64( 0x0000000000000000 ) },
2581 { LIT64( 0x0000FFFFFFFC0000 ), LIT64( 0x0000000000000000 ) },
2582 { LIT64( 0x0000FFFFFFFE0000 ), LIT64( 0x0000000000000000 ) },
2583 { LIT64( 0x0000FFFFFFFF0000 ), LIT64( 0x0000000000000000 ) },
2584 { LIT64( 0x0000FFFFFFFF8000 ), LIT64( 0x0000000000000000 ) },
2585 { LIT64( 0x0000FFFFFFFFC000 ), LIT64( 0x0000000000000000 ) },
2586 { LIT64( 0x0000FFFFFFFFE000 ), LIT64( 0x0000000000000000 ) },
2587 { LIT64( 0x0000FFFFFFFFF000 ), LIT64( 0x0000000000000000 ) },
2588 { LIT64( 0x0000FFFFFFFFF800 ), LIT64( 0x0000000000000000 ) },
2589 { LIT64( 0x0000FFFFFFFFFC00 ), LIT64( 0x0000000000000000 ) },
2590 { LIT64( 0x0000FFFFFFFFFE00 ), LIT64( 0x0000000000000000 ) },
2591 { LIT64( 0x0000FFFFFFFFFF00 ), LIT64( 0x0000000000000000 ) },
2592 { LIT64( 0x0000FFFFFFFFFF80 ), LIT64( 0x0000000000000000 ) },
2593 { LIT64( 0x0000FFFFFFFFFFC0 ), LIT64( 0x0000000000000000 ) },
2594 { LIT64( 0x0000FFFFFFFFFFE0 ), LIT64( 0x0000000000000000 ) },
2595 { LIT64( 0x0000FFFFFFFFFFF0 ), LIT64( 0x0000000000000000 ) },
2596 { LIT64( 0x0000FFFFFFFFFFF8 ), LIT64( 0x0000000000000000 ) },
2597 { LIT64( 0x0000FFFFFFFFFFFC ), LIT64( 0x0000000000000000 ) },
2598 { LIT64( 0x0000FFFFFFFFFFFE ), LIT64( 0x0000000000000000 ) },
2599 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x0000000000000000 ) },
2600 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x8000000000000000 ) },
2601 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xC000000000000000 ) },
2602 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xE000000000000000 ) },
2603 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF000000000000000 ) },
2604 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF800000000000000 ) },
2605 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFC00000000000000 ) },
2606 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFE00000000000000 ) },
2607 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF00000000000000 ) },
2608 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF80000000000000 ) },
2609 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFC0000000000000 ) },
2610 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFE0000000000000 ) },
2611 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF0000000000000 ) },
2612 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF8000000000000 ) },
2613 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },
2614 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFE000000000000 ) },
2615 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF000000000000 ) },
2616 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF800000000000 ) },
2617 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFC00000000000 ) },
2618 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFE00000000000 ) },
2619 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF00000000000 ) },
2620 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF80000000000 ) },
2621 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFC0000000000 ) },
2622 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFE0000000000 ) },
2623 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF0000000000 ) },
2624 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF8000000000 ) },
2625 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFC000000000 ) },
2626 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFE000000000 ) },
2627 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF000000000 ) },
2628 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF800000000 ) },
2629 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFC00000000 ) },
2630 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFE00000000 ) },
2631 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF00000000 ) },
2632 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF80000000 ) },
2633 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFC0000000 ) },
2634 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFE0000000 ) },
2635 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },
2636 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF8000000 ) },
2637 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFC000000 ) },
2638 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFE000000 ) },
2639 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF000000 ) },
2640 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF800000 ) },
2641 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFC00000 ) },
2642 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFE00000 ) },
2643 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF00000 ) },
2644 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF80000 ) },
2645 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFC0000 ) },
2646 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFE0000 ) },
2647 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF0000 ) },
2648 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF8000 ) },
2649 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFC000 ) },
2650 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFE000 ) },
2651 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF000 ) },
2652 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF800 ) },
2653 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFC00 ) },
2654 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFE00 ) },
2655 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF00 ) },
2656 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF80 ) },
2657 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFC0 ) },
2658 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFE0 ) },
2659 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF0 ) },
2660 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF8 ) },
2661 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFC ) },
2662 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) },
2663 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2664 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFD ) },
2665 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFB ) },
2666 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF7 ) },
2667 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFEF ) },
2668 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFDF ) },
2669 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFBF ) },
2670 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF7F ) },
2671 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFEFF ) },
2672 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFDFF ) },
2673 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFF ) },
2674 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF7FF ) },
2675 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },
2676 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFDFFF ) },
2677 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFBFFF ) },
2678 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF7FFF ) },
2679 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFEFFFF ) },
2680 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFDFFFF ) },
2681 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFBFFFF ) },
2682 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },
2683 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFEFFFFF ) },
2684 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFDFFFFF ) },
2685 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFBFFFFF ) },
2686 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF7FFFFF ) },
2687 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFEFFFFFF ) },
2688 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFDFFFFFF ) },
2689 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFBFFFFFF ) },
2690 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF7FFFFFF ) },
2691 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },
2692 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFDFFFFFFF ) },
2693 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFBFFFFFFF ) },
2694 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF7FFFFFFF ) },
2695 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFFFF ) },
2696 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFDFFFFFFFF ) },
2697 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFBFFFFFFFF ) },
2698 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF7FFFFFFFF ) },
2699 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFEFFFFFFFFF ) },
2700 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFDFFFFFFFFF ) },
2701 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFBFFFFFFFFF ) },
2702 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF7FFFFFFFFF ) },
2703 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFEFFFFFFFFFF ) },
2704 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFDFFFFFFFFFF ) },
2705 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFBFFFFFFFFFF ) },
2706 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF7FFFFFFFFFF ) },
2707 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFEFFFFFFFFFFF ) },
2708 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFDFFFFFFFFFFF ) },
2709 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFBFFFFFFFFFFF ) },
2710 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF7FFFFFFFFFFF ) },
2711 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFEFFFFFFFFFFFF ) },
2712 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFDFFFFFFFFFFFF ) },
2713 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFBFFFFFFFFFFFF ) },
2714 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF7FFFFFFFFFFFF ) },
2715 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFEFFFFFFFFFFFFF ) },
2716 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFDFFFFFFFFFFFFF ) },
2717 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFBFFFFFFFFFFFFF ) },
2718 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF7FFFFFFFFFFFFF ) },
2719 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFEFFFFFFFFFFFFFF ) },
2720 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFDFFFFFFFFFFFFFF ) },
2721 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFBFFFFFFFFFFFFFF ) },
2722 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF7FFFFFFFFFFFFFF ) },
2723 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xEFFFFFFFFFFFFFFF ) },
2724 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xDFFFFFFFFFFFFFFF ) },
2725 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xBFFFFFFFFFFFFFFF ) },
2726 { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
2727 { LIT64( 0x0000FFFFFFFFFFFD ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2728 { LIT64( 0x0000FFFFFFFFFFFB ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2729 { LIT64( 0x0000FFFFFFFFFFF7 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2730 { LIT64( 0x0000FFFFFFFFFFEF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2731 { LIT64( 0x0000FFFFFFFFFFDF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2732 { LIT64( 0x0000FFFFFFFFFFBF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2733 { LIT64( 0x0000FFFFFFFFFF7F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2734 { LIT64( 0x0000FFFFFFFFFEFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2735 { LIT64( 0x0000FFFFFFFFFDFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2736 { LIT64( 0x0000FFFFFFFFFBFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2737 { LIT64( 0x0000FFFFFFFFF7FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2738 { LIT64( 0x0000FFFFFFFFEFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2739 { LIT64( 0x0000FFFFFFFFDFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2740 { LIT64( 0x0000FFFFFFFFBFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2741 { LIT64( 0x0000FFFFFFFF7FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2742 { LIT64( 0x0000FFFFFFFEFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2743 { LIT64( 0x0000FFFFFFFDFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2744 { LIT64( 0x0000FFFFFFFBFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2745 { LIT64( 0x0000FFFFFFF7FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2746 { LIT64( 0x0000FFFFFFEFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2747 { LIT64( 0x0000FFFFFFDFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2748 { LIT64( 0x0000FFFFFFBFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2749 { LIT64( 0x0000FFFFFF7FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2750 { LIT64( 0x0000FFFFFEFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2751 { LIT64( 0x0000FFFFFDFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2752 { LIT64( 0x0000FFFFFBFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2753 { LIT64( 0x0000FFFFF7FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2754 { LIT64( 0x0000FFFFEFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2755 { LIT64( 0x0000FFFFDFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2756 { LIT64( 0x0000FFFFBFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2757 { LIT64( 0x0000FFFF7FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2758 { LIT64( 0x0000FFFEFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2759 { LIT64( 0x0000FFFDFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2760 { LIT64( 0x0000FFFBFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2761 { LIT64( 0x0000FFF7FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2762 { LIT64( 0x0000FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2763 { LIT64( 0x0000FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2764 { LIT64( 0x0000FFBFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2765 { LIT64( 0x0000FF7FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2766 { LIT64( 0x0000FEFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2767 { LIT64( 0x0000FDFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2768 { LIT64( 0x0000FBFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2769 { LIT64( 0x0000F7FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2770 { LIT64( 0x0000EFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2771 { LIT64( 0x0000DFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2772 { LIT64( 0x0000BFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2773 { LIT64( 0x00007FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2774 { LIT64( 0x00003FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2775 { LIT64( 0x00001FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2776 { LIT64( 0x00000FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2777 { LIT64( 0x000007FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2778 { LIT64( 0x000003FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2779 { LIT64( 0x000001FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2780 { LIT64( 0x000000FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2781 { LIT64( 0x0000007FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2782 { LIT64( 0x0000003FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2783 { LIT64( 0x0000001FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2784 { LIT64( 0x0000000FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2785 { LIT64( 0x00000007FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2786 { LIT64( 0x00000003FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2787 { LIT64( 0x00000001FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2788 { LIT64( 0x00000000FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2789 { LIT64( 0x000000007FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2790 { LIT64( 0x000000003FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2791 { LIT64( 0x000000001FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2792 { LIT64( 0x000000000FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2793 { LIT64( 0x0000000007FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2794 { LIT64( 0x0000000003FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2795 { LIT64( 0x0000000001FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2796 { LIT64( 0x0000000000FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2797 { LIT64( 0x00000000007FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2798 { LIT64( 0x00000000003FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2799 { LIT64( 0x00000000001FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2800 { LIT64( 0x00000000000FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2801 { LIT64( 0x000000000007FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2802 { LIT64( 0x000000000003FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2803 { LIT64( 0x000000000001FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2804 { LIT64( 0x000000000000FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2805 { LIT64( 0x0000000000007FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2806 { LIT64( 0x0000000000003FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2807 { LIT64( 0x0000000000001FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2808 { LIT64( 0x0000000000000FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2809 { LIT64( 0x00000000000007FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2810 { LIT64( 0x00000000000003FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2811 { LIT64( 0x00000000000001FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2812 { LIT64( 0x00000000000000FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2813 { LIT64( 0x000000000000007F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2814 { LIT64( 0x000000000000003F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2815 { LIT64( 0x000000000000001F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2816 { LIT64( 0x000000000000000F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2817 { LIT64( 0x0000000000000007 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2818 { LIT64( 0x0000000000000003 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2819 { LIT64( 0x0000000000000001 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2820 { LIT64( 0x0000000000000000 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
2821 { LIT64( 0x0000000000000000 ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
2822 { LIT64( 0x0000000000000000 ), LIT64( 0x3FFFFFFFFFFFFFFF ) },
2823 { LIT64( 0x0000000000000000 ), LIT64( 0x1FFFFFFFFFFFFFFF ) },
2824 { LIT64( 0x0000000000000000 ), LIT64( 0x0FFFFFFFFFFFFFFF ) },
2825 { LIT64( 0x0000000000000000 ), LIT64( 0x07FFFFFFFFFFFFFF ) },
2826 { LIT64( 0x0000000000000000 ), LIT64( 0x03FFFFFFFFFFFFFF ) },
2827 { LIT64( 0x0000000000000000 ), LIT64( 0x01FFFFFFFFFFFFFF ) },
2828 { LIT64( 0x0000000000000000 ), LIT64( 0x00FFFFFFFFFFFFFF ) },
2829 { LIT64( 0x0000000000000000 ), LIT64( 0x007FFFFFFFFFFFFF ) },
2830 { LIT64( 0x0000000000000000 ), LIT64( 0x003FFFFFFFFFFFFF ) },
2831 { LIT64( 0x0000000000000000 ), LIT64( 0x001FFFFFFFFFFFFF ) },
2832 { LIT64( 0x0000000000000000 ), LIT64( 0x000FFFFFFFFFFFFF ) },
2833 { LIT64( 0x0000000000000000 ), LIT64( 0x0007FFFFFFFFFFFF ) },
2834 { LIT64( 0x0000000000000000 ), LIT64( 0x0003FFFFFFFFFFFF ) },
2835 { LIT64( 0x0000000000000000 ), LIT64( 0x0001FFFFFFFFFFFF ) },
2836 { LIT64( 0x0000000000000000 ), LIT64( 0x0000FFFFFFFFFFFF ) },
2837 { LIT64( 0x0000000000000000 ), LIT64( 0x00007FFFFFFFFFFF ) },
2838 { LIT64( 0x0000000000000000 ), LIT64( 0x00003FFFFFFFFFFF ) },
2839 { LIT64( 0x0000000000000000 ), LIT64( 0x00001FFFFFFFFFFF ) },
2840 { LIT64( 0x0000000000000000 ), LIT64( 0x00000FFFFFFFFFFF ) },
2841 { LIT64( 0x0000000000000000 ), LIT64( 0x000007FFFFFFFFFF ) },
2842 { LIT64( 0x0000000000000000 ), LIT64( 0x000003FFFFFFFFFF ) },
2843 { LIT64( 0x0000000000000000 ), LIT64( 0x000001FFFFFFFFFF ) },
2844 { LIT64( 0x0000000000000000 ), LIT64( 0x000000FFFFFFFFFF ) },
2845 { LIT64( 0x0000000000000000 ), LIT64( 0x0000007FFFFFFFFF ) },
2846 { LIT64( 0x0000000000000000 ), LIT64( 0x0000003FFFFFFFFF ) },
2847 { LIT64( 0x0000000000000000 ), LIT64( 0x0000001FFFFFFFFF ) },
2848 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000FFFFFFFFF ) },
2849 { LIT64( 0x0000000000000000 ), LIT64( 0x00000007FFFFFFFF ) },
2850 { LIT64( 0x0000000000000000 ), LIT64( 0x00000003FFFFFFFF ) },
2851 { LIT64( 0x0000000000000000 ), LIT64( 0x00000001FFFFFFFF ) },
2852 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000FFFFFFFF ) },
2853 { LIT64( 0x0000000000000000 ), LIT64( 0x000000007FFFFFFF ) },
2854 { LIT64( 0x0000000000000000 ), LIT64( 0x000000003FFFFFFF ) },
2855 { LIT64( 0x0000000000000000 ), LIT64( 0x000000001FFFFFFF ) },
2856 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000FFFFFFF ) },
2857 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000007FFFFFF ) },
2858 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000003FFFFFF ) },
2859 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001FFFFFF ) },
2860 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000FFFFFF ) },
2861 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000007FFFFF ) },
2862 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000003FFFFF ) },
2863 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000001FFFFF ) },
2864 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000FFFFF ) },
2865 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000007FFFF ) },
2866 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000003FFFF ) },
2867 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000001FFFF ) },
2868 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000FFFF ) },
2869 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000007FFF ) },
2870 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000003FFF ) },
2871 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001FFF ) },
2872 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000FFF ) },
2873 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000007FF ) },
2874 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000003FF ) },
2875 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000001FF ) },
2876 { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000000FF ) },
2877 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000007F ) },
2878 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000003F ) },
2879 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000001F ) },
2880 { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000000F ) },
2881 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000007 ) },
2882 { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000003 ) }
2885 static const uint32 float128NumQInP1 = float128NumQIn * float128NumP1;
2886 static const uint32 float128NumQOutP1 = float128NumQOut * float128NumP1;
2888 static float128 float128NextQInP1( sequenceT *sequencePtr )
2890 int16 expNum, sigNum;
2893 sigNum = sequencePtr->term1Num;
2894 expNum = sequencePtr->expNum;
2895 z.low = float128P1[ sigNum ].low;
2896 z.high = float128QIn[ expNum ] | float128P1[ sigNum ].high;
2898 if ( float128NumP1 <= sigNum ) {
2901 if ( float128NumQIn <= expNum ) {
2903 sequencePtr->done = TRUE;
2905 sequencePtr->expNum = expNum;
2907 sequencePtr->term1Num = sigNum;
2912 static float128 float128NextQOutP1( sequenceT *sequencePtr )
2914 int16 expNum, sigNum;
2917 sigNum = sequencePtr->term1Num;
2918 expNum = sequencePtr->expNum;
2919 z.low = float128P1[ sigNum ].low;
2920 z.high = float128QOut[ expNum ] | float128P1[ sigNum ].high;
2922 if ( float128NumP1 <= sigNum ) {
2925 if ( float128NumQOut <= expNum ) {
2927 sequencePtr->done = TRUE;
2929 sequencePtr->expNum = expNum;
2931 sequencePtr->term1Num = sigNum;
2936 static const uint32 float128NumQInP2 = float128NumQIn * float128NumP2;
2937 static const uint32 float128NumQOutP2 = float128NumQOut * float128NumP2;
2939 static float128 float128NextQInP2( sequenceT *sequencePtr )
2941 int16 expNum, sigNum;
2944 sigNum = sequencePtr->term1Num;
2945 expNum = sequencePtr->expNum;
2946 z.low = float128P2[ sigNum ].low;
2947 z.high = float128QIn[ expNum ] | float128P2[ sigNum ].high;
2949 if ( float128NumP2 <= sigNum ) {
2952 if ( float128NumQIn <= expNum ) {
2954 sequencePtr->done = TRUE;
2956 sequencePtr->expNum = expNum;
2958 sequencePtr->term1Num = sigNum;
2963 static float128 float128NextQOutP2( sequenceT *sequencePtr )
2965 int16 expNum, sigNum;
2968 sigNum = sequencePtr->term1Num;
2969 expNum = sequencePtr->expNum;
2970 z.low = float128P2[ sigNum ].low;
2971 z.high = float128QOut[ expNum ] | float128P2[ sigNum ].high;
2973 if ( float128NumP2 <= sigNum ) {
2976 if ( float128NumQOut <= expNum ) {
2978 sequencePtr->done = TRUE;
2980 sequencePtr->expNum = expNum;
2982 sequencePtr->term1Num = sigNum;
2987 static float128 float128RandomQOutP3( void )
2989 int16 sigNum1, sigNum2;
2990 uint64 sig1Low, sig2Low;
2993 sigNum1 = randomUint8() % float128NumP2;
2994 sigNum2 = randomUint8() % float128NumP2;
2995 sig1Low = float128P2[ sigNum1 ].low;
2996 sig2Low = float128P2[ sigNum2 ].low;
2997 z.low = sig1Low + sig2Low;
2999 float128QOut[ randomUint8() % float128NumQOut ]
3000 | ( ( float128P2[ sigNum1 ].high
3001 + float128P2[ sigNum2 ].high
3002 + ( z.low < sig1Low )
3004 & LIT64( 0x0000FFFFFFFFFFFF )
3010 static float128 float128RandomQOutPInf( void )
3014 z.low = randomUint64();
3016 float128QOut[ randomUint8() % float128NumQOut ]
3017 | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
3023 float128NumQInfWeightMasks = 14
3026 static const uint64 float128QInfWeightMasks[ float128NumQInfWeightMasks ] = {
3027 LIT64( 0x7FFF000000000000 ),
3028 LIT64( 0x7FFF000000000000 ),
3029 LIT64( 0x3FFF000000000000 ),
3030 LIT64( 0x1FFF000000000000 ),
3031 LIT64( 0x07FF000000000000 ),
3032 LIT64( 0x07FF000000000000 ),
3033 LIT64( 0x03FF000000000000 ),
3034 LIT64( 0x01FF000000000000 ),
3035 LIT64( 0x00FF000000000000 ),
3036 LIT64( 0x007F000000000000 ),
3037 LIT64( 0x003F000000000000 ),
3038 LIT64( 0x001F000000000000 ),
3039 LIT64( 0x000F000000000000 ),
3040 LIT64( 0x0007000000000000 )
3043 static const uint64 float128QInfWeightOffsets[ float128NumQInfWeightMasks ] = {
3044 LIT64( 0x0000000000000000 ),
3045 LIT64( 0x0000000000000000 ),
3046 LIT64( 0x2000000000000000 ),
3047 LIT64( 0x3000000000000000 ),
3048 LIT64( 0x3800000000000000 ),
3049 LIT64( 0x3C00000000000000 ),
3050 LIT64( 0x3E00000000000000 ),
3051 LIT64( 0x3F00000000000000 ),
3052 LIT64( 0x3F80000000000000 ),
3053 LIT64( 0x3FC0000000000000 ),
3054 LIT64( 0x3FE0000000000000 ),
3055 LIT64( 0x3FF0000000000000 ),
3056 LIT64( 0x3FF8000000000000 ),
3057 LIT64( 0x3FFC000000000000 )
3060 static float128 float128RandomQInfP3( void )
3062 int16 sigNum1, sigNum2;
3063 uint64 sig1Low, sig2Low;
3067 sigNum1 = randomUint8() % float128NumP2;
3068 sigNum2 = randomUint8() % float128NumP2;
3069 sig1Low = float128P2[ sigNum1 ].low;
3070 sig2Low = float128P2[ sigNum2 ].low;
3071 z.low = sig1Low + sig2Low;
3072 weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
3074 ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
3075 | ( ( ( ( (uint64) randomUint16() )<<48 )
3076 & float128QInfWeightMasks[ weightMaskNum ] )
3077 + float128QInfWeightOffsets[ weightMaskNum ]
3079 | ( ( float128P2[ sigNum1 ].high
3080 + float128P2[ sigNum2 ].high
3081 + ( z.low < sig1Low )
3083 & LIT64( 0x0000FFFFFFFFFFFF )
3089 static float128 float128RandomQInfPInf( void )
3094 weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
3095 z.low = randomUint64();
3097 ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
3098 | ( ( ( ( (uint64) randomUint16() )<<48 )
3099 & float128QInfWeightMasks[ weightMaskNum ] )
3100 + float128QInfWeightOffsets[ weightMaskNum ]
3102 | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
3107 static float128 float128Random( void )
3110 switch ( randomUint8() & 7 ) {
3114 return float128RandomQOutP3();
3116 return float128RandomQOutPInf();
3120 return float128RandomQInfP3();
3122 return float128RandomQInfPInf();
3129 static int8 level = 0;
3131 void testCases_setLevel( int8 levelIn )
3134 if ( ( levelIn < 1 ) || ( 2 < levelIn ) ) {
3135 fail( "Invalid testing level: %d", levelIn );
3141 static int8 sequenceType;
3142 static sequenceT sequenceA, sequenceB;
3143 static int8 subcase;
3145 uint32 testCases_total;
3146 flag testCases_done;
3148 static float32 current_a_float32;
3149 static float32 current_b_float32;
3150 static float64 current_a_float64;
3151 static float64 current_b_float64;
3153 static floatx80 current_a_floatx80;
3154 static floatx80 current_b_floatx80;
3157 static float128 current_a_float128;
3158 static float128 current_b_float128;
3161 void testCases_initSequence( int8 sequenceTypeIn )
3164 sequenceType = sequenceTypeIn;
3165 sequenceA.term2Num = 0;
3166 sequenceA.term1Num = 0;
3167 sequenceA.expNum = 0;
3168 sequenceA.done = FALSE;
3169 sequenceB.term2Num = 0;
3170 sequenceB.term1Num = 0;
3171 sequenceB.expNum = 0;
3172 sequenceB.done = FALSE;
3176 switch ( sequenceTypeIn ) {
3177 case testCases_sequence_a_int32:
3178 testCases_total = 3 * int32NumP1;
3181 case testCases_sequence_a_int64:
3182 testCases_total = 3 * int64NumP1;
3185 case testCases_sequence_a_float32:
3186 testCases_total = 3 * float32NumQOutP1;
3188 case testCases_sequence_ab_float32:
3189 testCases_total = 6 * float32NumQInP1 * float32NumQInP1;
3190 current_a_float32 = float32NextQInP1( &sequenceA );
3192 case testCases_sequence_a_float64:
3193 testCases_total = 3 * float64NumQOutP1;
3195 case testCases_sequence_ab_float64:
3196 testCases_total = 6 * float64NumQInP1 * float64NumQInP1;
3197 current_a_float64 = float64NextQInP1( &sequenceA );
3200 case testCases_sequence_a_floatx80:
3201 testCases_total = 3 * floatx80NumQOutP1;
3203 case testCases_sequence_ab_floatx80:
3204 testCases_total = 6 * floatx80NumQInP1 * floatx80NumQInP1;
3205 current_a_floatx80 = floatx80NextQInP1( &sequenceA );
3209 case testCases_sequence_a_float128:
3210 testCases_total = 3 * float128NumQOutP1;
3212 case testCases_sequence_ab_float128:
3213 testCases_total = 6 * float128NumQInP1 * float128NumQInP1;
3214 current_a_float128 = float128NextQInP1( &sequenceA );
3220 switch ( sequenceTypeIn ) {
3221 case testCases_sequence_a_int32:
3222 testCases_total = 2 * int32NumP2;
3225 case testCases_sequence_a_int64:
3226 testCases_total = 2 * int64NumP2;
3229 case testCases_sequence_a_float32:
3230 testCases_total = 2 * float32NumQOutP2;
3232 case testCases_sequence_ab_float32:
3233 testCases_total = 2 * float32NumQInP2 * float32NumQInP2;
3234 current_a_float32 = float32NextQInP2( &sequenceA );
3236 case testCases_sequence_a_float64:
3237 testCases_total = 2 * float64NumQOutP2;
3239 case testCases_sequence_ab_float64:
3240 testCases_total = 2 * float64NumQInP2 * float64NumQInP2;
3241 current_a_float64 = float64NextQInP2( &sequenceA );
3244 case testCases_sequence_a_floatx80:
3245 testCases_total = 2 * floatx80NumQOutP2;
3247 case testCases_sequence_ab_floatx80:
3248 testCases_total = 2 * floatx80NumQInP2 * floatx80NumQInP2;
3249 current_a_floatx80 = floatx80NextQInP2( &sequenceA );
3253 case testCases_sequence_a_float128:
3254 testCases_total = 2 * float128NumQOutP2;
3256 case testCases_sequence_ab_float128:
3257 testCases_total = 2 * float128NumQInP2 * float128NumQInP2;
3258 current_a_float128 = float128NextQInP2( &sequenceA );
3264 testCases_done = FALSE;
3268 int32 testCases_a_int32;
3270 int64 testCases_a_int64;
3272 float32 testCases_a_float32;
3273 float32 testCases_b_float32;
3274 float64 testCases_a_float64;
3275 float64 testCases_b_float64;
3277 floatx80 testCases_a_floatx80;
3278 floatx80 testCases_b_floatx80;
3281 float128 testCases_a_float128;
3282 float128 testCases_b_float128;
3285 void testCases_next( void )
3290 switch ( sequenceType ) {
3291 case testCases_sequence_a_int32:
3292 switch ( subcase ) {
3294 testCases_a_int32 = int32RandomP3();
3297 testCases_a_int32 = int32RandomPInf();
3300 testCases_a_int32 = int32NextP1( &sequenceA );
3301 testCases_done = sequenceA.done;
3308 case testCases_sequence_a_int64:
3309 switch ( subcase ) {
3311 testCases_a_int64 = int64RandomP3();
3314 testCases_a_int64 = int64RandomPInf();
3317 testCases_a_int64 = int64NextP1( &sequenceA );
3318 testCases_done = sequenceA.done;
3325 case testCases_sequence_a_float32:
3326 switch ( subcase ) {
3329 testCases_a_float32 = float32Random();
3332 testCases_a_float32 = float32NextQOutP1( &sequenceA );
3333 testCases_done = sequenceA.done;
3339 case testCases_sequence_ab_float32:
3340 switch ( subcase ) {
3342 if ( sequenceB.done ) {
3343 sequenceB.done = FALSE;
3344 current_a_float32 = float32NextQInP1( &sequenceA );
3346 current_b_float32 = float32NextQInP1( &sequenceB );
3349 testCases_a_float32 = float32Random();
3350 testCases_b_float32 = float32Random();
3353 testCases_a_float32 = current_a_float32;
3354 testCases_b_float32 = float32Random();
3357 testCases_a_float32 = float32Random();
3358 testCases_b_float32 = current_b_float32;
3361 testCases_a_float32 = current_a_float32;
3362 testCases_b_float32 = current_b_float32;
3363 testCases_done = sequenceA.done & sequenceB.done;
3369 case testCases_sequence_a_float64:
3370 switch ( subcase ) {
3373 testCases_a_float64 = float64Random();
3376 testCases_a_float64 = float64NextQOutP1( &sequenceA );
3377 testCases_done = sequenceA.done;
3383 case testCases_sequence_ab_float64:
3384 switch ( subcase ) {
3386 if ( sequenceB.done ) {
3387 sequenceB.done = FALSE;
3388 current_a_float64 = float64NextQInP1( &sequenceA );
3390 current_b_float64 = float64NextQInP1( &sequenceB );
3393 testCases_a_float64 = float64Random();
3394 testCases_b_float64 = float64Random();
3397 testCases_a_float64 = current_a_float64;
3398 testCases_b_float64 = float64Random();
3401 testCases_a_float64 = float64Random();
3402 testCases_b_float64 = current_b_float64;
3405 testCases_a_float64 = current_a_float64;
3406 testCases_b_float64 = current_b_float64;
3407 testCases_done = sequenceA.done & sequenceB.done;
3414 case testCases_sequence_a_floatx80:
3415 switch ( subcase ) {
3418 testCases_a_floatx80 = floatx80Random();
3421 testCases_a_floatx80 = floatx80NextQOutP1( &sequenceA );
3422 testCases_done = sequenceA.done;
3428 case testCases_sequence_ab_floatx80:
3429 switch ( subcase ) {
3431 if ( sequenceB.done ) {
3432 sequenceB.done = FALSE;
3433 current_a_floatx80 = floatx80NextQInP1( &sequenceA );
3435 current_b_floatx80 = floatx80NextQInP1( &sequenceB );
3438 testCases_a_floatx80 = floatx80Random();
3439 testCases_b_floatx80 = floatx80Random();
3442 testCases_a_floatx80 = current_a_floatx80;
3443 testCases_b_floatx80 = floatx80Random();
3446 testCases_a_floatx80 = floatx80Random();
3447 testCases_b_floatx80 = current_b_floatx80;
3450 testCases_a_floatx80 = current_a_floatx80;
3451 testCases_b_floatx80 = current_b_floatx80;
3452 testCases_done = sequenceA.done & sequenceB.done;
3460 case testCases_sequence_a_float128:
3461 switch ( subcase ) {
3464 testCases_a_float128 = float128Random();
3467 testCases_a_float128 = float128NextQOutP1( &sequenceA );
3468 testCases_done = sequenceA.done;
3474 case testCases_sequence_ab_float128:
3475 switch ( subcase ) {
3477 if ( sequenceB.done ) {
3478 sequenceB.done = FALSE;
3479 current_a_float128 = float128NextQInP1( &sequenceA );
3481 current_b_float128 = float128NextQInP1( &sequenceB );
3484 testCases_a_float128 = float128Random();
3485 testCases_b_float128 = float128Random();
3488 testCases_a_float128 = current_a_float128;
3489 testCases_b_float128 = float128Random();
3492 testCases_a_float128 = float128Random();
3493 testCases_b_float128 = current_b_float128;
3496 testCases_a_float128 = current_a_float128;
3497 testCases_b_float128 = current_b_float128;
3498 testCases_done = sequenceA.done & sequenceB.done;
3508 switch ( sequenceType ) {
3509 case testCases_sequence_a_int32:
3510 switch ( subcase ) {
3512 testCases_a_int32 = int32RandomP3();
3515 testCases_a_int32 = int32RandomPInf();
3520 testCases_a_int32 = int32NextP2( &sequenceA );
3521 testCases_done = sequenceA.done;
3527 case testCases_sequence_a_int64:
3528 switch ( subcase ) {
3530 testCases_a_int64 = int64RandomP3();
3533 testCases_a_int64 = int64RandomPInf();
3538 testCases_a_int64 = int64NextP2( &sequenceA );
3539 testCases_done = sequenceA.done;
3545 case testCases_sequence_a_float32:
3546 switch ( subcase ) {
3548 testCases_a_float32 = float32Random();
3551 testCases_a_float32 = float32NextQOutP2( &sequenceA );
3552 testCases_done = sequenceA.done;
3558 case testCases_sequence_ab_float32:
3559 switch ( subcase ) {
3561 testCases_a_float32 = float32Random();
3562 testCases_b_float32 = float32Random();
3565 if ( sequenceB.done ) {
3566 sequenceB.done = FALSE;
3567 current_a_float32 = float32NextQInP2( &sequenceA );
3569 testCases_a_float32 = current_a_float32;
3570 testCases_b_float32 = float32NextQInP2( &sequenceB );
3571 testCases_done = sequenceA.done & sequenceB.done;
3577 case testCases_sequence_a_float64:
3578 switch ( subcase ) {
3580 testCases_a_float64 = float64Random();
3583 testCases_a_float64 = float64NextQOutP2( &sequenceA );
3584 testCases_done = sequenceA.done;
3590 case testCases_sequence_ab_float64:
3591 switch ( subcase ) {
3593 testCases_a_float64 = float64Random();
3594 testCases_b_float64 = float64Random();
3597 if ( sequenceB.done ) {
3598 sequenceB.done = FALSE;
3599 current_a_float64 = float64NextQInP2( &sequenceA );
3601 testCases_a_float64 = current_a_float64;
3602 testCases_b_float64 = float64NextQInP2( &sequenceB );
3603 testCases_done = sequenceA.done & sequenceB.done;
3610 case testCases_sequence_a_floatx80:
3611 switch ( subcase ) {
3613 testCases_a_floatx80 = floatx80Random();
3616 testCases_a_floatx80 = floatx80NextQOutP2( &sequenceA );
3617 testCases_done = sequenceA.done;
3623 case testCases_sequence_ab_floatx80:
3624 switch ( subcase ) {
3626 testCases_a_floatx80 = floatx80Random();
3627 testCases_b_floatx80 = floatx80Random();
3630 if ( sequenceB.done ) {
3631 sequenceB.done = FALSE;
3632 current_a_floatx80 = floatx80NextQInP2( &sequenceA );
3634 testCases_a_floatx80 = current_a_floatx80;
3635 testCases_b_floatx80 = floatx80NextQInP2( &sequenceB );
3636 testCases_done = sequenceA.done & sequenceB.done;
3644 case testCases_sequence_a_float128:
3645 switch ( subcase ) {
3647 testCases_a_float128 = float128Random();
3650 testCases_a_float128 = float128NextQOutP2( &sequenceA );
3651 testCases_done = sequenceA.done;
3657 case testCases_sequence_ab_float128:
3658 switch ( subcase ) {
3660 testCases_a_float128 = float128Random();
3661 testCases_b_float128 = float128Random();
3664 if ( sequenceB.done ) {
3665 sequenceB.done = FALSE;
3666 current_a_float128 = float128NextQInP2( &sequenceA );
3668 testCases_a_float128 = current_a_float128;
3669 testCases_b_float128 = float128NextQInP2( &sequenceB );
3670 testCases_done = sequenceA.done & sequenceB.done;