| /* PR c/102989 */ |
| /* { dg-do run { target bitint } } */ |
| /* { dg-options "-std=c23 -pedantic-errors" } */ |
| /* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ |
| /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ |
| |
| #if __BITINT_MAXWIDTH__ >= 128 |
| __attribute__((noipa)) void |
| foo (unsigned _BitInt(125) a, unsigned _BitInt(127) b, unsigned _BitInt(125) *p, unsigned _BitInt(127) *q, float c) |
| { |
| p[0] = b; |
| q[0] = a; |
| q[1] = (signed _BitInt(125)) a; |
| q[2] = (_BitInt(73)) a; |
| q[3] = c; |
| q[4] += a; |
| q[5] = a + b; |
| q[6] = a - b; |
| q[7] = a * b; |
| q[8] = a / b; |
| q[9] = a % b; |
| q[10] = b << (26105549790521884176764218952781428833uwb - a); |
| q[11] = (a * 131uwb) >> (26105549790521884176764218952781428833uwb - a); |
| q[12]++; |
| ++q[13]; |
| q[14]--; |
| --q[15]; |
| q[16] = a == b; |
| q[17] = a != b; |
| q[18] = a > b; |
| q[19] = a < b; |
| q[20] = a >= b; |
| q[21] = a <= b; |
| q[22] = a && b; |
| q[23] = a || b; |
| q[24] = !a; |
| q[25] = a & b; |
| q[26] = a | b; |
| q[27] = a ^ b; |
| q[28] = ~a; |
| q[29] -= a; |
| q[30] *= b; |
| q[31] /= b; |
| q[32] %= a; |
| q[33] <<= (12589712345465422uwb - b); |
| q[34] >>= (12589712345465417uwb - b); |
| q[35] &= a; |
| q[36] |= b; |
| q[37] ^= a; |
| q[38] = sizeof (a); |
| q[39] = q[39] ? a : b; |
| q[40] = 26105549790654675897348954738956342847uwb; |
| switch (a) |
| { |
| case 26105549790521884176764218952781428772uwb: |
| if (b != 1244154958745894754wb) |
| __builtin_abort (); |
| break; |
| case 11821400154985748973289734545487uwb: |
| if (b != 133445145984759847584574uwb) |
| __builtin_abort (); |
| break; |
| case 12145uwb: |
| if (b != 12121243985745894732uwb) |
| __builtin_abort (); |
| break; |
| case 26105549790521884176764218952781428771uwb: |
| if (b != 12589712345465342uwb) |
| __builtin_abort (); |
| break; |
| case 71284121548547895457123873874452345uwb: |
| if (b != 150123439857459847uwb) |
| __builtin_abort (); |
| break; |
| default: |
| __builtin_abort (); |
| } |
| } |
| |
| int |
| main () |
| { |
| unsigned _BitInt(125) p; |
| unsigned _BitInt(127) q[41]; |
| static unsigned _BitInt(127) qe[41] = { |
| 26105549790521884176764218952781428771uwb, 153711437385873807975529696739694508067uwb, |
| 2816339038065666848803uwb, 97uwb, |
| 26105549790521884178598517527767103757uwb, 26105549790521884176776808665126894113uwb, |
| 26105549790521884176751629240435963429uwb, 49552990805035300718174502183957321146uwb, |
| 2073562054015060870989uwb, 8076837748665533uwb, |
| 58059800399605194176279512422023168uwb, 3687014528101034113uwb, |
| 7439587439856743895438uwb, 95435435436uwb, |
| 112349587439856746858975446545uwb, 13145398574895748967847348972322uwb, |
| 0, 1, 1, 0, 1, 0, 1, 1, 0, |
| 3439290896351266uwb, 26105549790521884176773369374230542847uwb, |
| 26105549790521884176769930083334191581uwb, 16429746074595423756157606976189597660uwb, |
| 144035633670022787123399980532060335632uwb, 63332113050644322882197117954233460326uwb, |
| 27442uwb, 3245984754897548957498574895745uwb, |
| 14236875428959659760604435112230125568uwb, 326775104184uwb, |
| 1170981383577634uwb, 2843243404090270511102uwb, |
| 26313477358277918295486482038303331024uwb, 1, 26105549790521884176764218952781428771uwb, |
| 26105549790654675897348954738956342847uwb |
| }; |
| q[4] = 1834298574985674986uwb; |
| q[12] = 7439587439856743895437uwb; |
| q[13] = 95435435435uwb; |
| q[14] = 112349587439856746858975446546uwb; |
| q[15] = 13145398574895748967847348972323uwb; |
| q[29] = 75439568476895768957658675uwb; |
| q[30] = 455984375894754983574895745485uwb; |
| q[31] = 345495847589475847548uwb; |
| q[32] = 3245984754897548957498574895745uwb; |
| q[33] = 32594875648957489754854664897464uwb; |
| q[34] = 12345214395483754897548574857485748uwb; |
| q[35] = 1523143544545454uwb; |
| q[36] = 2843243245456456576876uwb; |
| q[37] = 542359486759867589675986576895765235uwb; |
| q[39] = 5498657685976587653uwb; |
| foo (26105549790521884176764218952781428771UWB, 12589712345465342uwb, &p, q, 97.0f); |
| if (p != 12589712345465342uwb) |
| __builtin_abort (); |
| q[38] -= sizeof (p) - 1; |
| for (int i = 0; i < 41; ++i) |
| if (q[i] != qe[i]) |
| __builtin_abort (); |
| return 0; |
| } |
| #else |
| int |
| main () |
| { |
| return 0; |
| } |
| #endif |