libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / dfp / int128-3.c
blobc1b10c9dfe212b4a91928f53b39508424caa0e17
1 /* PR libgcc/65833 */
2 /* Test non-canonical BID significands. */
3 /* { dg-do run { target { int128 && bitint } } } */
4 /* { dg-options "-O2 -std=gnu2x" } */
5 /* { dg-require-effective-target dfp_bid } */
7 union U32
9 _Decimal32 d;
10 unsigned int u;
13 union U64
15 _Decimal64 d;
16 unsigned long long int u;
19 union U128
21 _Decimal128 d;
22 unsigned long long int u[2];
25 int
26 main ()
28 volatile union U32 u32;
29 u32.d = 0.9999999e+27DF;
30 u32.u++;
31 volatile union U64 u64;
32 u64.d = 0.9999999999999999e+90DD;
33 u64.u++;
34 volatile union U128 u128;
35 u128.d = 0.9999999999999999999999999999999999e+39DL;
36 if (u128.u[0] == 0x378d8e63ffffffffULL)
37 u128.u[0]++;
38 else if (u128.u[1] == 0x378d8e63ffffffffULL)
39 u128.u[1]++;
40 else
41 u128.d = 0.DL;
42 if ((__int128) u32.d != 0
43 || (unsigned __int128) u32.d != 0U
44 || (__int128) u64.d != 0
45 || (unsigned __int128) u64.d != 0U
46 || (__int128) u128.d != 0
47 || (unsigned __int128) u128.d != 0U)
48 __builtin_abort ();
49 u32.u = 0xe59fffffU;
50 u64.u = 0xe3ffffffffffffffULL;
51 if (u128.u[0] == 0x378d8e6400000000ULL)
53 u128.u[0] = -1ULL;
54 u128.u[1] = 0xe1be7fffffffffffULL;
56 else if (u128.u[1] == 0x378d8e6400000000ULL)
58 u128.u[1] = -1ULL;
59 u128.u[0] = 0xe1be7fffffffffffULL;
61 if ((__int128) u32.d != 0
62 || (unsigned __int128) u32.d != 0U
63 || (__int128) u64.d != 0
64 || (unsigned __int128) u64.d != 0U
65 || (__int128) u128.d != 0
66 || (unsigned __int128) u128.d != 0U)
67 __builtin_abort ();
68 if (u128.u[0] == -1ULL)
70 u128.u[0] = 0;
71 u128.u[1] = 0xe629800000000000ULL;
73 else if (u128.u[1] == -1ULL)
75 u128.u[1] = 0;
76 u128.u[0] = 0xe629800000000000ULL;
78 if ((__int128) u128.d != 0
79 || (unsigned __int128) u128.d != 0U)
80 __builtin_abort ();