]>
Commit | Line | Data |
---|---|---|
a2f50aa2 JJ |
1 | /* PR c/102989 */ |
2 | /* { dg-do run { target bitint } } */ | |
54bac0ce | 3 | /* { dg-options "-std=c23 -pedantic-errors" } */ |
a2f50aa2 JJ |
4 | /* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ |
5 | /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ | |
6 | ||
7 | #if __FLT_MANT_DIG__ == 24 | |
8 | #if __BITINT_MAXWIDTH__ >= 135 | |
9 | __attribute__((noipa)) _BitInt(135) | |
10 | testflt_135 (float d) | |
11 | { | |
12 | return d; | |
13 | } | |
14 | ||
15 | __attribute__((noipa)) unsigned _BitInt(135) | |
16 | testfltu_135 (float d) | |
17 | { | |
18 | return d; | |
19 | } | |
20 | #endif | |
21 | ||
22 | #if __BITINT_MAXWIDTH__ >= 192 | |
23 | __attribute__((noipa)) _BitInt(192) | |
24 | testflt_192 (float d) | |
25 | { | |
26 | return d; | |
27 | } | |
28 | ||
29 | __attribute__((noipa)) unsigned _BitInt(192) | |
30 | testfltu_192 (float d) | |
31 | { | |
32 | return d; | |
33 | } | |
34 | #endif | |
35 | ||
36 | #if __BITINT_MAXWIDTH__ >= 575 | |
37 | __attribute__((noipa)) _BitInt(575) | |
38 | testflt_575 (float d) | |
39 | { | |
40 | return d; | |
41 | } | |
42 | ||
43 | __attribute__((noipa)) unsigned _BitInt(575) | |
44 | testfltu_575 (float d) | |
45 | { | |
46 | return d; | |
47 | } | |
48 | #endif | |
49 | #endif | |
50 | ||
51 | #if __DBL_MANT_DIG__ == 53 | |
52 | #if __BITINT_MAXWIDTH__ >= 135 | |
53 | __attribute__((noipa)) _BitInt(135) | |
54 | testdbl_135 (double d) | |
55 | { | |
56 | return d; | |
57 | } | |
58 | ||
59 | __attribute__((noipa)) unsigned _BitInt(135) | |
60 | testdblu_135 (double d) | |
61 | { | |
62 | return d; | |
63 | } | |
64 | #endif | |
65 | ||
66 | #if __BITINT_MAXWIDTH__ >= 192 | |
67 | __attribute__((noipa)) _BitInt(192) | |
68 | testdbl_192 (double d) | |
69 | { | |
70 | return d; | |
71 | } | |
72 | ||
73 | __attribute__((noipa)) unsigned _BitInt(192) | |
74 | testdblu_192 (double d) | |
75 | { | |
76 | return d; | |
77 | } | |
78 | #endif | |
79 | ||
80 | #if __BITINT_MAXWIDTH__ >= 575 | |
81 | __attribute__((noipa)) _BitInt(575) | |
82 | testdbl_575 (double d) | |
83 | { | |
84 | return d; | |
85 | } | |
86 | ||
87 | __attribute__((noipa)) unsigned _BitInt(575) | |
88 | testdblu_575 (double d) | |
89 | { | |
90 | return d; | |
91 | } | |
92 | #endif | |
93 | #endif | |
94 | ||
95 | int | |
96 | main () | |
97 | { | |
98 | #if __FLT_MANT_DIG__ == 24 | |
99 | #if __BITINT_MAXWIDTH__ >= 135 | |
100 | static float flt_135[] = { | |
c62c82dc | 101 | -1.0f, -0.96875f, -0.5f, -0.0f, 0.25f, 0.0f, 1.0f, -42.0f, 16777215.25f, |
a2f50aa2 JJ |
102 | -50855501824.5f, 39580962846540824576.0f, |
103 | -122147759335346835551823516808712814592.0f, | |
104 | -85070591730234615865843651857942052864.0f | |
105 | }; | |
106 | static _BitInt(135) fltr_135[] = { | |
c62c82dc | 107 | -1wb, 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -42wb, 16777215wb, |
a2f50aa2 JJ |
108 | -50855501824wb, 39580962846540824576wb, |
109 | -122147759335346835551823516808712814592wb, | |
110 | -85070591730234615865843651857942052864wb | |
111 | }; | |
c62c82dc | 112 | for (int i = 0; i < 13; ++i) |
a2f50aa2 JJ |
113 | if (testflt_135 (flt_135[i]) != fltr_135[i]) |
114 | __builtin_abort (); | |
115 | static float fltu_135[] = { | |
c62c82dc | 116 | -0.9375f, -0.25f, -0.0f, 0.125f, 0.0f, 1.0f, 42.59375f, 16777215.75f, |
a2f50aa2 JJ |
117 | 397530272.5f, 1557145973265213792232550652968960.0f, |
118 | 69722182498815269047577928656018735104.0f | |
119 | }; | |
120 | static unsigned _BitInt(135) fltur_135[] = { | |
c62c82dc | 121 | 0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 42uwb, 16777216uwb, |
a2f50aa2 JJ |
122 | 397530272uwb, 1557145973265213792232550652968960uwb, |
123 | 69722182498815269047577928656018735104uwb | |
124 | }; | |
c62c82dc | 125 | for (int i = 0; i < 11; ++i) |
a2f50aa2 JJ |
126 | if (testfltu_135 (fltu_135[i]) != fltur_135[i]) |
127 | __builtin_abort (); | |
128 | #endif | |
129 | #if __BITINT_MAXWIDTH__ >= 192 | |
130 | static float flt_192[] = { | |
c62c82dc | 131 | -0.984375f, -0.75f, -0.0f, 0.625f, 0.0f, 1.0f, -42.0f, 16777215.25f, |
a2f50aa2 JJ |
132 | -166724322197504.5f, 7557890186859550768856301568.0f, |
133 | 6614377725485260848635133905887821824.0f, | |
134 | -85070591730234615865843651857942052864.0f | |
135 | }; | |
136 | static _BitInt(192) fltr_192[] = { | |
c62c82dc | 137 | 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -42wb, 16777215wb, |
a2f50aa2 JJ |
138 | -166724322197504wb, 7557890186859550768856301568wb, |
139 | 6614377725485260848635133905887821824wb, | |
140 | -85070591730234615865843651857942052864wb | |
141 | }; | |
c62c82dc | 142 | for (int i = 0; i < 12; ++i) |
a2f50aa2 JJ |
143 | if (testflt_192 (flt_192[i]) != fltr_192[i]) |
144 | __builtin_abort (); | |
145 | static float fltu_192[] = { | |
c62c82dc JJ |
146 | -0.9921875f, -0.125f, -0.0f, __FLT_MIN__, 0.0f, 1.0f, 42.125f, |
147 | 16777216.75f, 2197600337920.75f, 4591683053408742366929307227985543168.0f, | |
a2f50aa2 JJ |
148 | 89668786387864080590151097276117811200.0f |
149 | }; | |
150 | static unsigned _BitInt(192) fltur_192[] = { | |
c62c82dc | 151 | 0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 42uwb, 16777216uwb, |
a2f50aa2 JJ |
152 | 2197600337920uwb, 4591683053408742366929307227985543168uwb, |
153 | 89668786387864080590151097276117811200uwb | |
154 | }; | |
c62c82dc | 155 | for (int i = 0; i < 11; ++i) |
a2f50aa2 JJ |
156 | if (testfltu_192 (fltu_192[i]) != fltur_192[i]) |
157 | __builtin_abort (); | |
158 | #endif | |
159 | #if __BITINT_MAXWIDTH__ >= 575 | |
160 | static float flt_575[] = { | |
c62c82dc | 161 | -0.99609375f, -0.0625f, -0.0f, 0.0001f, 0.0f, 1.0f, -28.0f, 16777214.75f, |
a2f50aa2 JJ |
162 | -1321998852554752.5f, 3447217350995641328695097279119360.0f, |
163 | -153684583933125564944797950598195445760.0f, | |
164 | -6614377725485260848635133905887821824.0f | |
165 | }; | |
166 | static _BitInt(575) fltr_575[] = { | |
c62c82dc | 167 | 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -28wb, 16777215wb, |
a2f50aa2 JJ |
168 | -1321998852554752wb, 3447217350995641328695097279119360wb, |
169 | -153684583933125564944797950598195445760wb, | |
170 | -6614377725485260848635133905887821824wb | |
171 | }; | |
c62c82dc | 172 | for (int i = 0; i < 12; ++i) |
a2f50aa2 JJ |
173 | if (testflt_575 (flt_575[i]) != fltr_575[i]) |
174 | __builtin_abort (); | |
175 | static float fltu_575[] = { | |
c62c82dc JJ |
176 | -0.9921875f, -0.125f, -0.0f, 4.0f * __FLT_MIN__, 0.0f, 1.0f, 38.125f, |
177 | 16777210.75f, 450604433408.75f, 49420393052787309452540595771398946816.0f, | |
a2f50aa2 JJ |
178 | 144076816645080570490809349637635309568.0f |
179 | }; | |
180 | static unsigned _BitInt(575) fltur_575[] = { | |
c62c82dc | 181 | 0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 38uwb, 16777211uwb, |
a2f50aa2 JJ |
182 | 450604433408uwb, 49420393052787309452540595771398946816uwb, |
183 | 144076816645080570490809349637635309568uwb | |
184 | }; | |
c62c82dc | 185 | for (int i = 0; i < 11; ++i) |
a2f50aa2 JJ |
186 | if (testfltu_575 (fltu_575[i]) != fltur_575[i]) |
187 | __builtin_abort (); | |
188 | #endif | |
189 | #endif | |
190 | #if __DBL_MANT_DIG__ == 53 | |
191 | #if __BITINT_MAXWIDTH__ >= 135 | |
192 | static double dbl_135[] = { | |
c62c82dc | 193 | -0.998046875, -0.5, -0.0, 0.25, 0.0, 1.0, -42.0, 4294967295.25, |
a2f50aa2 JJ |
194 | -600381955574889.5, 31830517255028909053694705664.0, |
195 | -18738990071541038357046558935673124945920.0, | |
196 | -21778071482940061661655974875633165533184.0 | |
197 | }; | |
198 | static _BitInt(135) dblr_135[] = { | |
c62c82dc | 199 | 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -42wb, 4294967295wb, |
a2f50aa2 JJ |
200 | -600381955574889wb, 31830517255028909053694705664wb, |
201 | -18738990071541038357046558935673124945920wb, | |
202 | -21778071482940061661655974875633165533183wb - 1wb | |
203 | }; | |
c62c82dc | 204 | for (int i = 0; i < 12; ++i) |
a2f50aa2 JJ |
205 | if (testdbl_135 (dbl_135[i]) != dblr_135[i]) |
206 | __builtin_abort (); | |
207 | static double dblu_135[] = { | |
c62c82dc | 208 | -0.9990234375, -0.25, -0.0, 0.125, 0.0, 1.0, 42.59375, 4294967295.75, |
a2f50aa2 JJ |
209 | 1379919377114330.5, 1887176628826898072984354816.0, |
210 | 28122698032432725461429202074509590396928.0 | |
211 | }; | |
212 | static unsigned _BitInt(135) dblur_135[] = { | |
c62c82dc | 213 | 0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 42uwb, 4294967295uwb, |
a2f50aa2 JJ |
214 | 1379919377114330uwb, 1887176628826898072984354816uwb, |
215 | 28122698032432725461429202074509590396928uwb | |
216 | }; | |
c62c82dc | 217 | for (int i = 0; i < 11; ++i) |
a2f50aa2 JJ |
218 | if (testdblu_135 (dblu_135[i]) != dblur_135[i]) |
219 | __builtin_abort (); | |
220 | #endif | |
221 | #if __BITINT_MAXWIDTH__ >= 192 | |
222 | static double dbl_192[] = { | |
c62c82dc | 223 | -0.99951171875, -0.75, -0.0, 0.625, 0.0, 1.0, -42.0, 4294967295.25, |
a2f50aa2 JJ |
224 | -334692618508390720.5, 7241713824636372052614321786924022698463985664.0, |
225 | 1051470826442514757151114043324296190023320100185399361536.0, | |
226 | -3138550867693340381917894711603833208051177722232017256448.0 | |
227 | }; | |
228 | static _BitInt(192) dblr_192[] = { | |
c62c82dc | 229 | 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -42wb, 4294967295wb, |
a2f50aa2 JJ |
230 | -334692618508390720wb, 7241713824636372052614321786924022698463985664wb, |
231 | 1051470826442514757151114043324296190023320100185399361536wb, | |
232 | -3138550867693340381917894711603833208051177722232017256447wb - 1wb | |
233 | }; | |
c62c82dc | 234 | for (int i = 0; i < 12; ++i) |
a2f50aa2 JJ |
235 | if (testdbl_192 (dbl_192[i]) != dblr_192[i]) |
236 | __builtin_abort (); | |
237 | static double dblu_192[] = { | |
c62c82dc | 238 | -0.999755859375, -0.25, -0.0, __DBL_MIN__, 0.0, 1.0, 42.125, 4294967296.75, |
a2f50aa2 JJ |
239 | 85543274084479312.75, 1452517026416706854711122198528.0, |
240 | 4878159368183578289135952951143197426988727705359645409280.0 | |
241 | }; | |
242 | static unsigned _BitInt(192) dblur_192[] = { | |
c62c82dc | 243 | 0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 42uwb, 4294967296uwb, |
a2f50aa2 JJ |
244 | 85543274084479312uwb, 1452517026416706854711122198528uwb, |
245 | 4878159368183578289135952951143197426988727705359645409280uwb | |
246 | }; | |
c62c82dc | 247 | for (int i = 0; i < 11; ++i) |
a2f50aa2 JJ |
248 | if (testdblu_192 (dblu_192[i]) != dblur_192[i]) |
249 | __builtin_abort (); | |
250 | #endif | |
251 | #if __BITINT_MAXWIDTH__ >= 575 | |
252 | static double dbl_575[] = { | |
c62c82dc | 253 | -1.0, -0.9998779296875, -0.125, -0.0, 0.0001, 0.0, 1.0, -28.0, 4294967294.75, |
a2f50aa2 JJ |
254 | -37518052491018912.5, 103740344328578397848785318842252129922803939603530145015162908477052192630505472.0, |
255 | -60264112735379285992549557294906950572505306720710356591257742566415478531569283626542380634430345616295459560427283714375540825055746407845009719778430303250931745441185792.0, | |
256 | -61832600368276133515125630254911797508782837275302959978515764023224306276632966792579100265310761247399417856504034834837841258576687802491886538775473291979151693037174784.0 | |
257 | }; | |
258 | static _BitInt(575) dblr_575[] = { | |
c62c82dc | 259 | -1wb, 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -28wb, 4294967294wb, |
a2f50aa2 JJ |
260 | -37518052491018912wb, 103740344328578397848785318842252129922803939603530145015162908477052192630505472wb, |
261 | -60264112735379285992549557294906950572505306720710356591257742566415478531569283626542380634430345616295459560427283714375540825055746407845009719778430303250931745441185792wb, | |
262 | -61832600368276133515125630254911797508782837275302959978515764023224306276632966792579100265310761247399417856504034834837841258576687802491886538775473291979151693037174783wb - 1wb | |
263 | }; | |
c62c82dc | 264 | for (int i = 0; i < 13; ++i) |
a2f50aa2 JJ |
265 | if (testdbl_575 (dbl_575[i]) != dblr_575[i]) |
266 | __builtin_abort (); | |
267 | static double dblu_575[] = { | |
c62c82dc | 268 | -0.99993896484375, -0.0625, -0.0, 4.0 * __DBL_MIN__, 0.0, 1.0, 38.125, 4294967297.75, |
a2f50aa2 JJ |
269 | 138240328005104064.75, 1588129215384992270224118343146332410113351482118715170651778867930903010675691494429363974899842924150784.0, |
270 | 106390366882040443685518677989907085524608028099417390750037507495093586319031581000179209552004867195248003952212636389496136628539779816025838629984567658036669448510767104.0 | |
271 | }; | |
272 | static unsigned _BitInt(575) dblur_575[] = { | |
c62c82dc | 273 | 0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 38uwb, 4294967297uwb, |
a2f50aa2 JJ |
274 | 138240328005104064uwb, 1588129215384992270224118343146332410113351482118715170651778867930903010675691494429363974899842924150784uwb, |
275 | 106390366882040443685518677989907085524608028099417390750037507495093586319031581000179209552004867195248003952212636389496136628539779816025838629984567658036669448510767104uwb | |
276 | }; | |
c62c82dc | 277 | for (int i = 0; i < 11; ++i) |
a2f50aa2 JJ |
278 | if (testdblu_575 (dblu_575[i]) != dblur_575[i]) |
279 | __builtin_abort (); | |
280 | #endif | |
281 | #endif | |
282 | } |