72static const int endian_test = 1;
77}
u = { &endian_test };
86static void print (
const char *text,
const void *
data,
unsigned size)
90 const unsigned char *
p = (
const unsigned char*)
data;
92 for (
unsigned i = 0;
i !=
size; ++
i) {
116 static float val = 0.0f;
125#ifdef _RWSTD_NO_DBL_TRAPS
141 val.bits [0] =
'\x7f';
142 val.bits [1] =
'\x80';
149 val.bits [2] =
'\x80';
150 val.bits [3] =
'\x7f';
162#ifdef _RWSTD_NO_DBL_TRAPS
171 val.bits [0] &=
'\x7f';
174 val.bits [
sizeof (
val.val) - 1] &=
'\x7f';
184 val.bits [0] =
'\x7f';
185 val.bits [1] =
'\xc0';
192 val.bits [2] =
'\xc0';
193 val.bits [3] =
'\x7f';
205#ifdef _RWSTD_NO_DBL_TRAPS
207 val = flt_infinity ();
209# if !defined (__hpux)
218 val.bits [
sizeof (
val.val) - 1] |= 1;
227 val.bits [1] =
'\xc0';
231 val.bits [
sizeof val.val - 2] =
'\xc0';
243 val.bits [0] =
'\x7f';
244 val.bits [1] =
'\x80';
246 val.bits [3] =
'\x01';
249 val.bits [0] =
'\x01';
251 val.bits [2] =
'\x80';
252 val.bits [3] =
'\x7f';
264#ifdef _RWSTD_NO_DBL_TRAPS
267 for (
volatile float tmp = 1.0f;
tmp;
tmp /= 2.0f)
281 val.bits [3] =
'\x01';
284 val.bits [0] =
'\x01';
307 static double val = 0.0;
316#ifdef _RWSTD_NO_DBL_TRAPS
332 val.bits [0] =
'\x7f';
333 val.bits [1] =
'\xf0';
348 val.bits [6] =
'\xf0';
349 val.bits [7] =
'\x7f';
361#ifdef _RWSTD_NO_DBL_TRAPS
370 val.bits [0] &=
'\x7f';
373 val.bits [
sizeof (
val.val) - 1] &=
'\x7f';
383 val.bits [0] =
'\x7f';
384 val.bits [1] =
'\xf8';
399 val.bits [6] =
'\xf8';
400 val.bits [7] =
'\x7f';
412#ifdef _RWSTD_NO_DBL_TRAPS
414 val = dbl_infinity ();
416# if !defined (__hpux)
425 val.bits [
sizeof val.val - 1] |= 1;
434 val.bits [1] =
'\xf8';
438 val.bits [
sizeof val.val - 2] =
'\xf8';
450 val.bits [0] =
'\x7f';
451 val.bits [1] =
'\xf0';
457 val.bits [7] =
'\x01';
460 val.bits [0] =
'\x01';
466 val.bits [6] =
'\xf0';
467 val.bits [7] =
'\x7f';
479#ifdef _RWSTD_NO_DBL_TRAPS
482 for (
volatile double tmp = 1.0;
tmp;
tmp /= 2.0)
500 val.bits [7] =
'\x01';
503 val.bits [0] =
'\x01';
520#ifndef _RWSTD_NO_LONG_DOUBLE
524 char bits [
sizeof (
long double)];
532 static long double val = 0.0L;
541#ifdef _RWSTD_NO_DBL_TRAPS
557 val.bits [ 0] =
'\x7f';
558 val.bits [ 1] =
'\xff';
559 val.bits [ 2] =
'\0';
560 val.bits [ 3] =
'\0';
561 val.bits [ 4] =
'\0';
562 val.bits [ 5] =
'\0';
563 val.bits [ 6] =
'\0';
564 val.bits [ 7] =
'\0';
565 val.bits [ 8] =
'\0';
566 val.bits [ 9] =
'\0';
567 val.bits [10] =
'\0';
568 val.bits [11] =
'\0';
569 val.bits [12] =
'\0';
570 val.bits [13] =
'\0';
571 val.bits [14] =
'\0';
572 val.bits [15] =
'\0';
575 val.bits [ 0] =
'\0';
576 val.bits [ 1] =
'\0';
577 val.bits [ 2] =
'\0';
578 val.bits [ 3] =
'\0';
579 val.bits [ 4] =
'\0';
580 val.bits [ 5] =
'\0';
581 val.bits [ 6] =
'\0';
582 val.bits [ 7] =
'\0';
583 val.bits [ 8] =
'\0';
584 val.bits [ 9] =
'\0';
585 val.bits [10] =
'\0';
586 val.bits [11] =
'\0';
587 val.bits [12] =
'\0';
588 val.bits [13] =
'\0';
589 val.bits [14] =
'\xff';
590 val.bits [15] =
'\x7f';
602#ifdef _RWSTD_NO_DBL_TRAPS
611 val.bits [0] &=
'\x7f';
614 unsigned inx =
sizeof (
val.val) - 1;
627 val.bits [ 0] =
'\x7f';
628 val.bits [ 1] =
'\xff';
629 val.bits [ 2] =
'\x80';
630 val.bits [ 3] =
'\0';
631 val.bits [ 4] =
'\0';
632 val.bits [ 5] =
'\0';
633 val.bits [ 6] =
'\0';
634 val.bits [ 7] =
'\0';
635 val.bits [ 8] =
'\0';
636 val.bits [ 9] =
'\0';
637 val.bits [10] =
'\0';
638 val.bits [11] =
'\0';
639 val.bits [12] =
'\0';
640 val.bits [13] =
'\0';
641 val.bits [14] =
'\0';
642 val.bits [15] =
'\0';
645 val.bits [ 0] =
'\0';
646 val.bits [ 1] =
'\0';
647 val.bits [ 2] =
'\0';
648 val.bits [ 3] =
'\0';
649 val.bits [ 4] =
'\0';
650 val.bits [ 5] =
'\0';
651 val.bits [ 6] =
'\0';
652 val.bits [ 7] =
'\0';
653 val.bits [ 8] =
'\0';
654 val.bits [ 9] =
'\0';
655 val.bits [10] =
'\0';
656 val.bits [11] =
'\0';
657 val.bits [12] =
'\0';
658 val.bits [13] =
'\x80';
659 val.bits [14] =
'\xff';
660 val.bits [15] =
'\x7f';
672#ifdef _RWSTD_NO_DBL_TRAPS
674 val = ldbl_infinity ();
676# if !defined (__hpux)
685 val.bits [
sizeof val.val - 1] |= 1;
693 val.bits [2] =
'\x80';
697 val.bits [
sizeof val.val - 3] =
'\x80';
709 val.bits [ 0] =
'\x7f';
710 val.bits [ 1] =
'\xff';
711 val.bits [ 2] =
'\0';
712 val.bits [ 3] =
'\0';
713 val.bits [ 4] =
'\0';
714 val.bits [ 5] =
'\0';
715 val.bits [ 6] =
'\0';
716 val.bits [ 7] =
'\0';
717 val.bits [ 8] =
'\0';
718 val.bits [ 9] =
'\0';
719 val.bits [10] =
'\0';
720 val.bits [11] =
'\0';
721 val.bits [12] =
'\0';
722 val.bits [13] =
'\0';
723 val.bits [14] =
'\0';
724 val.bits [15] =
'\x01';
727 val.bits [ 0] =
'\x01';
728 val.bits [ 1] =
'\0';
729 val.bits [ 2] =
'\0';
730 val.bits [ 3] =
'\0';
731 val.bits [ 4] =
'\0';
732 val.bits [ 5] =
'\0';
733 val.bits [ 6] =
'\0';
734 val.bits [ 7] =
'\0';
735 val.bits [ 8] =
'\0';
736 val.bits [ 9] =
'\0';
737 val.bits [10] =
'\0';
738 val.bits [11] =
'\0';
739 val.bits [12] =
'\0';
740 val.bits [13] =
'\0';
741 val.bits [14] =
'\xff';
742 val.bits [15] =
'\x7f';
754#ifdef _RWSTD_NO_DBL_TRAPS
757 for (
volatile long double tmp = 1.0L;
tmp;
tmp /= 2.0L)
768 val.bits [ 0] =
'\0';
769 val.bits [ 1] =
'\0';
770 val.bits [ 2] =
'\0';
771 val.bits [ 3] =
'\0';
772 val.bits [ 4] =
'\0';
773 val.bits [ 5] =
'\0';
774 val.bits [ 6] =
'\0';
775 val.bits [ 7] =
'\0';
776 val.bits [ 8] =
'\0';
777 val.bits [ 9] =
'\0';
778 val.bits [10] =
'\0';
779 val.bits [11] =
'\0';
780 val.bits [12] =
'\0';
781 val.bits [13] =
'\0';
782 val.bits [14] =
'\0';
783 val.bits [15] =
'\x01';
786 val.bits [ 0] =
'\x01';
787 val.bits [ 1] =
'\0';
788 val.bits [ 2] =
'\0';
789 val.bits [ 3] =
'\0';
790 val.bits [ 4] =
'\0';
791 val.bits [ 5] =
'\0';
792 val.bits [ 6] =
'\0';
793 val.bits [ 7] =
'\0';
794 val.bits [ 8] =
'\0';
795 val.bits [ 9] =
'\0';
796 val.bits [10] =
'\0';
797 val.bits [11] =
'\0';
798 val.bits [12] =
'\0';
799 val.bits [13] =
'\0';
800 val.bits [14] =
'\0';
801 val.bits [15] =
'\0';
815 const flt_bits f_inf = flt_infinity ();
816 const flt_bits f_qnan = flt_qnan ();
817 const flt_bits f_snan = flt_snan ();
818 const flt_bits f_den = flt_denorm_min ();
820 const dbl_bits d_inf = dbl_infinity ();
821 const dbl_bits d_qnan = dbl_qnan ();
822 const dbl_bits d_snan = dbl_snan ();
823 const dbl_bits d_den = dbl_denorm_min ();
825#ifndef _RWSTD_NO_LONG_DOUBLE
827 const ldbl_bits l_inf = ldbl_infinity ();
830 const ldbl_bits l_den = ldbl_denorm_min ();
835#ifdef _RWSTD_NO_DBL_TRAPS
837 printf (
"// computed infinities and NANs for a %s endian architecture\n",
840 const int flt_has_denorm = 0.0f != f_den.
val;
841 const int dbl_has_denorm = 0.0 != d_den.
val;
843# ifndef _RWSTD_NO_LONG_DOUBLE
845 const int ldbl_has_denorm = 0.0L != l_den.
val;
851 printf (
"// IEEE 754 infinities and NANs for a %s endian architecture\n"
852 "// (values not computed due to floating exception trapping)\n",
855 const int flt_has_denorm = 1;
856 const int dbl_has_denorm = 1;
857 const int ldbl_has_denorm = 1;
861 print (
"#define _RWSTD_FLT_INF_BITS ", &f_inf,
sizeof f_inf);
862 print (
"#define _RWSTD_FLT_QNAN_BITS ", &f_qnan,
sizeof f_qnan);
863 print (
"#define _RWSTD_FLT_SNAN_BITS ", &f_snan,
sizeof f_snan);
864 print (
"#define _RWSTD_FLT_DENORM_MIN_BITS ", &f_den,
sizeof f_den);
866 printf (
"#define _RWSTD_FLT_HAS_DENORM %d\n", flt_has_denorm);
868 print (
"#define _RWSTD_DBL_INF_BITS ", &d_inf,
sizeof d_inf);
869 print (
"#define _RWSTD_DBL_QNAN_BITS ", &d_qnan,
sizeof d_qnan);
870 print (
"#define _RWSTD_DBL_SNAN_BITS ", &d_snan,
sizeof d_snan);
871 print (
"#define _RWSTD_DBL_DENORM_MIN_BITS ", &d_den,
sizeof d_den);
873 printf (
"#define _RWSTD_DBL_HAS_DENORM %d\n", dbl_has_denorm);
875#ifndef _RWSTD_NO_LONG_DOUBLE
877 print (
"#define _RWSTD_LDBL_INF_BITS ", &l_inf,
sizeof l_inf);
878 print (
"#define _RWSTD_LDBL_QNAN_BITS ", &l_qnan,
sizeof l_qnan);
879 print (
"#define _RWSTD_LDBL_SNAN_BITS ", &l_snan,
sizeof l_snan);
880 print (
"#define _RWSTD_LDBL_DENORM_MIN_BITS ", &l_den,
sizeof l_den);
882 printf (
"#define _RWSTD_LDBL_HAS_DENORM %d\n", ldbl_has_denorm);
volatile long double ldbl_zero
IMPORT_C SInt32 printf(const Char *,...)
char bits[sizeof(double)]
char bits[sizeof(long double)]