1 /* { dg-options "-std=gnu99 -O0" } */
3 /* Decimal float values can have significant trailing zeroes. This is
4 true for zero values as well. Check that various representations of
5 zero are handled correctly when specified as literal constants. */
7 extern void abort (void);
23 unsigned long long i
[2];
28 compare32 (_Decimal32 d
, unsigned int i
)
37 compare64 (_Decimal64 d
, unsigned long long i
)
46 compare128 (_Decimal64 d
, unsigned long long i
, unsigned long long j
)
52 return (u
.i
[0] == i
&& u
.i
[1] == j
);
54 return (u
.i
[1] == i
&& u
.i
[0] == j
);
60 if (! compare32 (0.DF
, 0x22500000U
))
62 if (! compare32 (-0.DF
, 0xa2500000U
))
64 if (! compare32 (0.E
-4DF
, 0x22100000U
))
66 if (! compare32 (0.E
-7DF
, 0x21e00000U
))
68 if (! compare32 (0.E
+3DF
, 0x22800000U
))
71 if (! compare64 (0.DD
, 0x2238000000000000ULL
))
73 if (! compare64 (-0.DD
, 0xa238000000000000ULL
))
75 if (! compare64 (0.E
-6DD
, 0x2220000000000000ULL
))
77 if (! compare64 (0.E
-7DD
, 0x221c000000000000ULL
))
79 if (! compare64 (0.E
+2DD
, 0x2240000000000000ULL
))
82 if (! compare128 (0.DL
, 0x2208000000000000ULL
, 0x0000000000000000ULL
))
84 if (! compare128 (-0.DL
, 0xa208000000000000ULL
, 0x0000000000000000ULL
))
86 if (! compare128 (0.E
-3DL
, 0x2207400000000000ULL
, 0x0000000000000000ULL
))
88 if (! compare128 (0.E
-8DL
, 0x2206000000000000ULL
, 0x0000000000000000ULL
))
90 if (! compare128 (0.E
+2DL
, 0x2208800000000000ULL
, 0x0000000000000000ULL
))
97 if (! compare32 (0.DF
, 0x32800000U
))
99 if (! compare32 (-0.DF
, 0xb2800000U
))
101 if (! compare32 (0.E
-4DF
, 0x30800000U
))
103 if (! compare32 (0.E
-7DF
, 0x2f000000U
))
105 if (! compare32 (0.E
+3DF
, 0x34000000U
))
108 if (! compare64 (0.DD
, 0x31c0000000000000ULL
))
110 if (! compare64 (-0.DD
, 0xb1c0000000000000ULL
))
112 if (! compare64 (0.E
-6DD
, 0x3100000000000000ULL
))
114 if (! compare64 (0.E
-7DD
, 0x30e0000000000000ULL
))
116 if (! compare64 (0.E
+2DD
, 0x3200000000000000ULL
))
119 if (! compare128 (0.DL
, 0x3040000000000000ULL
, 0x0000000000000000ULL
))
121 if (! compare128 (-0.DL
, 0xb040000000000000ULL
, 0x0000000000000000ULL
))
123 if (! compare128 (0.E
-3DL
, 0x303a000000000000ULL
, 0x0000000000000000ULL
))
125 if (! compare128 (0.E
-8DL
, 0x3030000000000000ULL
, 0x0000000000000000ULL
))
127 if (! compare128 (0.E
+2DL
, 0x3044000000000000ULL
, 0x0000000000000000ULL
))
136 /* These sizes are probably always true for targets that support decimal
137 float types, but check anyway. Abort so we can fix the test. */
138 if ((sizeof (_Decimal64
) != sizeof (long long))
139 || (sizeof (_Decimal128
) != 2 * sizeof (long long))
140 || (sizeof (_Decimal32
) != sizeof (_Decimal32
)))
145 if (u32
.i
== 0x22500001)
147 big_endian
= (u32
.b
[0] == 0x22);
150 else if (u32
.i
== 0x32800001)
152 big_endian
= (u32
.b
[0] == 0x32);
156 abort (); /* unknown format; test problem */