blob: c123a8c066a36cbc141a838f03717418a6fc3fa3 [file] [log] [blame]
/* PR c/102989 */
/* { dg-do run { target { bitint && int32plus } } } */
/* { dg-options "-std=c23 -pedantic-errors" } */
/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */
/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
#if __BITINT_MAXWIDTH__ >= 135
__attribute__((noipa)) void
test_135 (unsigned _BitInt(135) *p, unsigned _BitInt(39) *q, int i)
{
p[3] = p[0] / p[1];
p[4] = p[2] / *q;
p[5] = p[i] % p[1 + i];
p[6] = p[2 + i] % q[i];
}
#endif
#if __BITINT_MAXWIDTH__ >= 192
__attribute__((noipa)) void
test_192 (unsigned _BitInt(192) *p, unsigned _BitInt(62) *q, int i)
{
p[3] = p[0] / p[1];
p[4] = p[2] / *q;
p[5] = p[i] % p[1 + i];
p[6] = p[2 + i] % q[i];
}
#endif
#if __BITINT_MAXWIDTH__ >= 575
__attribute__((noipa)) void
test_575 (unsigned _BitInt(575) *p, unsigned _BitInt(125) *q, int i)
{
p[3] = p[0] / p[1];
p[4] = p[2] / *q;
p[5] = p[i] % p[1 + i];
p[6] = p[2 + i] % q[i];
}
#endif
int
main ()
{
#if __BITINT_MAXWIDTH__ >= 135
static unsigned _BitInt(135) s135[] = {
39967592296255191197035336461290090324829uwb,
312558523056789678960549094065358uwb,
32832062726968675550596542626872563693099uwb,
0, 0, 0, 0,
39684305085076546670125468925068uwb,
6804617795530664696186192571276807994017uwb,
908900452537968951389639987294090uwb,
0, 0, 0, 0,
20395215776806618633686937572550377003558uwb,
1uwb,
2017874535031304931048003948865783841241uwb,
0, 0, 0, 0,
16804502949303659647220377886348649uwb,
15969624846496231063802991739581uwb,
12583271616670577644431817717623569600333uwb,
0, 0, 0, 0,
127872348uwb,
89851078235647451008683745245uwb,
65571357606183724433879897404245uwb,
87071527329uwb,
0uwb,
2093478262068616207802533uwb,
39684305085076546670125468925068uwb,
228138242uwb,
20395215776806618633686937572550377003558uwb,
12999486295301452164134194354389uwb,
0uwb,
65232213uwb,
1052uwb,
299601705158823277248376612324370704769uwb,
4457610789624568099630576309437uwb,
35uwb
};
static unsigned _BitInt(39) s39[] = {
365405328146uwb,
434158056uwb,
155227252uwb,
42uwb
};
for (int i = 0; i < 4; ++i)
{
test_135 (s135 + 7 * i, s39 + i, 0);
for (int j = 0; j < 4; ++j)
if (s135[7 * i + 3 + j] != s135[7 * 4 + 4 * i + j])
__builtin_abort ();
}
#endif
#if __BITINT_MAXWIDTH__ >= 192
static unsigned _BitInt(192) s192[] = {
1124505164324393257294640774883626666393496137407657383285uwb,
267770052679215918410877624132556357420375522461819642uwb,
4639722531344459905931256257525470190970246632351027146771uwb,
0, 0, 0, 0,
37076404019741709360338653279977uwb,
4017103983634913740425503780735862298200532685100197316953uwb,
3278541912894246916134094695331450716143029898422059693966uwb,
0, 0, 0, 0,
181260360652955273548771772757571198044332327135683350561uwb,
3uwb,
278424729322219534657080470631020618602047522343uwb,
0, 0, 0, 0,
1546922522984382736106987324181069322701408057466881095437uwb,
2859498891267655913293729558067200232488079281528uwb,
3754903553201168811081807274774774084224112858563658575772uwb,
0, 0, 0, 0,
4199uwb,
1361868478710180046608174894774272890845uwb,
138713124365615887365631151022521585339318590476706527uwb,
704022636372799201uwb,
0uwb,
1800071738275562493471915107371110587374384505uwb,
37076404019741709360338653279977uwb,
989224815596uwb,
60420120217651757849590590919190399348110775711894450187uwb,
35811149155369659378220712438655uwb,
0uwb,
971271817233568uwb,
540976787uwb,
268207396657226343648700519626769577444579489897404183983uwb,
356343883111794920610945410844353911944595204901uwb,
10uwb
};
static unsigned _BitInt(62) s62[] = {
3406880035683564506uwb,
1821339585074uwb,
7774805776666105uwb,
14uwb
};
for (int i = 0; i < 4; ++i)
{
test_192 (s192 + 7 * i, s62 + i, 0);
for (int j = 0; j < 4; ++j)
if (s192[7 * i + 3 + j] != s192[7 * 4 + 4 * i + j])
__builtin_abort ();
}
#endif
#if __BITINT_MAXWIDTH__ >= 575
static unsigned _BitInt(575) s575[] = {
68262105478469356136430990337792292171975154797241096882998520215082649730969604949380226799284423285674920339289406073226899446201591827481846481242318203838114185414101609uwb,
522191246473430521641066810210970739255168853016819760532584735359478867620239849176927824047731938802486584777452655079470889576128018146184619338332252916338uwb,
3435470059299599312416077239534464560179043115309368866437635382063534713476732558299272800804091725646363342046360614869573337710790812486381755554721429381220646362uwb,
0, 0, 0, 0,
1395593888697848626057320338038084790564831152710988743807319327067660279846004696629681887779842129545558985841571482256386uwb,
21441995702257150447349407715894435455050772126685461031315827571889336447926694701361700730379084806621691641000793333457504299685338550064151630805530260276144722300318378uwb,
1810496946211232933828329287232831944898449501818263455079805575961543103376888822223202088001971904867510317357383306521333499198279246848350610021364570531uwb,
0, 0, 0, 0,
49645180073615279861687094823459626955281549193691328477580826482861925123118554141451230055925103484376691314925103229496483975307219087542024089047037648064847114147876643uwb,
5uwb,
107934287940096962208124285810972463665238866518161589834947495273979231095066254158254278656128778606292981405785821524489035396101282777095285918056890626313652996363360635uwb,
0, 0, 0, 0,
23608107814490548232484082204335368855445148092939475311496653239338164906367806895605948777993633707136572413097677855946274968766053297446456942019070196462866449343995194uwb,
2583203116898176965174690967993977971553570592649244007260134674599130988578292547989776393639164uwb,
275574884364090029934989506452294812428150053792728044335881034126425125444715551780251783116966457185581504439797097624639857491748084495990405201247685674533629814uwb,
0, 0, 0, 0,
130722423900191uwb,
98209305532955450849963417931387543706587302562952677389372338515039360888927455577958981902466648551427758908831114835123178381uwb,
452871192905895539483003814306315901853065835276102489810630370966701886335873219401733574293829636677996055324174200714778800368052970790656772945453428881051uwb,
22873946842052620485494389199978222125uwb,
0uwb,
47552124733256427939572722329767524480111793387357122806941820665877774450470824535764237662603507442099431904312121406656289uwb,
1395593888697848626057320338038084790564831152710988743807319327067660279846004696629681887779842129545558985841571482256386uwb,
12402931424678892069400953011343uwb,
9929036014723055972337418964691925391056309838738265695516165296572385024623710828290246011185020696875338262985020645899296795061443817508404817809407529612969422829575328uwb,
765676291859168654790768770138076157159515580930329832291016877204190990758886004368955392441159337179098419446671535422387547862111454482076132380462913464uwb,
3uwb,
139483670059084867uwb,
9139083047731208433628027573752517850138452745189939065766817977544782897707uwb,
582502183871265798930967135317783829723227597448966288820692884195884049998974821351103238544771373433464199926206342695349404216240804690670860uwb,
331751853749540937734694164624358910388009028150635800666238028944699092436048473910402462998246uwb,
30656037717616877434uwb
};
static unsigned _BitInt(125) s125[] = {
34981105310298535974120492274604066977uwb,
38073944253116192522082228985492uwb,
140965952697865937uwb,
473088156567311094933uwb
};
for (int i = 0; i < 4; ++i)
{
test_575 (s575 + 7 * i, s125 + i, 0);
for (int j = 0; j < 4; ++j)
if (s575[7 * i + 3 + j] != s575[7 * 4 + 4 * i + j])
__builtin_abort ();
}
#endif
}