libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / bitint-12.c
blob66daecef800ba3a466a7eb819c34d899b4fa3d36
1 /* PR c/102989 */
2 /* { dg-do run { target { bitint && int32plus } } } */
3 /* { dg-options "-std=gnu23" } */
4 /* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */
5 /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
7 #ifdef __SIZEOF_INT128__
8 #define int128_val(x, y) x
9 #define int128 __int128
10 #else
11 #define int128_val(x, y) y
12 #define int128 int
13 #endif
15 #if __BITINT_MAXWIDTH__ >= 575
16 __attribute__((noipa)) void
17 test575 (_BitInt(575) *a, int b, int128 c, unsigned int d, unsigned int128 e,
18 int f, int g, int128 h, unsigned int i, unsigned int128 j,
19 _BitInt(575) *p, int *r)
21 r[0] = *a > b;
22 r[1] = *a >= c;
23 r[2] = *a < d;
24 r[3] = *a <= e;
25 p[0] = ((_BitInt(575)) g) << f;
26 p[1] = ((_BitInt(575)) h) << f;
27 p[2] = ((_BitInt(575)) i) << f;
28 p[3] = ((_BitInt(575)) j) << f;
29 p[4] = ((unsigned _BitInt(575)) g) >> f;
30 p[5] = ((unsigned _BitInt(575)) h) >> f;
31 p[6] = ((unsigned _BitInt(575)) i) >> f;
32 p[7] = ((unsigned _BitInt(575)) j) >> f;
35 _BitInt(575) a575 = -37335077053906536248085160049937130279057714970866686325204063930452920311842187828021093674979068589644104434897698233644810906211958229904753029173357201859433853689386323wb;
36 #endif
38 int
39 main ()
41 #if __BITINT_MAXWIDTH__ >= 575
42 int r[12];
43 _BitInt(575) b575[24];
44 int er[12] = {
45 #ifdef __SIZEOF_INT128__
46 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1
47 #else
48 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1
49 #endif
51 static _BitInt(575) eb575[24] = {
52 #ifdef __SIZEOF_INT128__
53 20329374714419634196895318109902140892207297977139593216wb,
54 -1712803473999893185713719997722323414959591613021414111612885795955340439235139207168wb,
55 24459948786509903061037979887398299261116601758241521664wb,
56 266261172647138617905132542512773540174694514212873439044818615992883558384930914304wb,
57 0wb,
58 10830740992659433045228180406808920716548582325686783496759685861775864483615725089999900023844295226942934417817982702456930303wb,
59 0wb,
60 0wb,
61 7830590302633896968192wb,
62 -659747899885375730707839505890120862245951494946816wb,
63 9421629561223530938368wb,
64 102560073085756776493593811652595116491535756034048wb,
65 0wb,
66 28118211215894977392565865673037386617935606989386978956879722328823984879196799189494004288149317857187005691459505594520051662846839338948136222520490158359458wb,
67 0wb,
68 5302231504909973601023497wb,
69 1780470098wb,
70 -150009304862891379049833518795394607479wb,
71 2142230542wb,
72 23319460771235020841594135084186545212wb,
73 1780470098wb,
74 -150009304862891379049833518795394607479wb,
75 2142230542wb,
76 23319460771235020841594135084186545212wb
77 #else
78 20329374714419634196895318109902140892207297977139593216wb,
79 479555224749202520035584085735030365824602865664wb,
80 24459948786509903061037979887398299261116601758241521664wb,
81 171269723124715185726994316333939416365929594880wb,
82 0wb,
83 0wb,
84 0wb,
85 0wb,
86 7830590302633896968192wb,
87 184717953466368wb,
88 9421629561223530938368wb,
89 65970697666560wb,
90 0wb,
91 0wb,
92 0wb,
93 0wb,
94 1780470098wb,
95 42wb,
96 2142230542wb,
97 15wb,
98 1780470098wb,
99 42wb,
100 2142230542wb,
101 15wb
102 #endif
104 test575 (&a575, 1780470098, int128_val (-150009304862891379049833518795394607479wb, 42),
105 2142230542U, int128_val (23319460771235020841594135084186545212uwb, 15),
106 153, 1780470098, int128_val (-150009304862891379049833518795394607479wb, 42),
107 2142230542U, int128_val (23319460771235020841594135084186545212uwb, 15),
108 &b575[0], &r[0]);
109 a575 = 1780470099wb;
110 test575 (&a575, 1780470098, int128_val (-150009304862891379049833518795394607479wb, 42),
111 2142230542U, int128_val (23319460771235020841594135084186545212uwb, 15),
112 42, 1780470098, int128_val (-150009304862891379049833518795394607479wb, 42),
113 2142230542U, int128_val (23319460771235020841594135084186545212uwb, 15),
114 &b575[8], &r[4]);
115 a575 = -150009304862891379049833518795394607478wb;
116 test575 (&a575, 1780470098, int128_val (-150009304862891379049833518795394607479wb, 42),
117 2142230542U, int128_val (23319460771235020841594135084186545212uwb, 15),
118 0, 1780470098, int128_val (-150009304862891379049833518795394607479wb, 42),
119 2142230542U, int128_val (23319460771235020841594135084186545212uwb, 15),
120 &b575[16], &r[8]);
121 for (int i = 0; i < 12; ++i)
122 if (r[i] != er[i])
123 __builtin_abort ();
124 for (int i = 0; i < 24; ++i)
125 if (b575[i] != eb575[i])
126 __builtin_abort ();
127 #endif