/* 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 }