/* 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 (_BitInt(135) *p, _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 (_BitInt(192) *p, _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 (_BitInt(575) *p, _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 _BitInt(135) s135[] = { 11379259456099690377988816293288418659013wb, -18507519859761926375595173102925837392wb, -3487341362606172228883239379216537732914wb, 0, 0, 0, 0, -18302253895694594136150902133229wb, 2910721282054679865681699220999829323779wb, -17020765241462394475777917185801328548533wb, 0, 0, 0, 0, 18652952612120070842749648336935165019219wb, -1wb, -2328827552140837061029007041281845428062wb, 0, 0, 0, 0, 4586448317141516754412034429451793085778wb, 302326133131500453732826275685wb, -13254392454085872482685218784341305341217wb, 0, 0, 0, 0, -614wb, 16712959282178433685159137405wb, 15642262205867583373380008091954500325wb, -27731730774wb, 0wb, -75263829692564968827327018348wb, -18302253895694594136150902133229wb, -35227765213wb, -18652952612120070842749648336935165019219wb, 112934753510539598517482519823570410wb, 0wb, -3452wb, 15170532132wb, -315580772716330297206790923436697746219wb, 126779339685614070998610275358wb, -19wb }; static _BitInt(39) s39[] = { -208660914188wb, 226148009090wb, -20621wb, 42wb }; 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 _BitInt(192) s192[] = { -2179289138164349400542345646041597314396798352437085702063wb, -79910962432789464031897580939163427724139130993wb, -3036473005246707700116012885952806814462013063553154406939wb, 0, 0, 0, 0, 641265343041674918120574087098wb, -72968858271155659573911879940731439944647195520825153965wb, 2701717062040203003887103138051480805185032453926240220524wb, 0, 0, 0, 0, -841691204113630961349106466971783187865820857103239354134wb, 3wb, -87971197399776002207343095550078219wb, 0, 0, 0, 0, 1975530920339244356926809414608241391203379490466789216052wb, -1491609620853264847219953011450130087411551266523269wb, -1446625088493520499379069533952596205wb, 0, 0, 0, 0, 27271466539wb, 1706692225050149442221770028739016905019wb, -79245495764706738784157700565393118980948358836wb, -1501915295097973757wb, 0wb, 4771029735868622050569106388224414265428wb, 641265343041674918120574087098wb, 333711124246457812wb, -280563734704543653783035488990594395955273619034413118044wb, -11314906111712376578wb, -2wb, -2479408421589529wb, -1324428wb, -11301758503855628901398980734004657wb, 1373411796501852981487559368499793073469647909100920wb, -109wb }; static _BitInt(62) s62[] = { -1779156757544544378wb, 566275460772898254wb, 7774805776666105wb, 128wb }; 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 _BitInt(575) s575[] = { -46295454425650349106237210715560972814514774894381316941718135777652722445546437187679065682949497046056192846156902024414635126978980056110286059194406244047429103543013567wb, 8168911130831183937943637579544406842555974190640492967747336926965525847745100099776294868623258477082653103560744709659980631459947315392636659059426713543595666476280533wb, -35562636740560878776057515364478086997557966107967281638887951768166903062463010597490396666936792092197907362468852658846219038084825902297279012227062238709275022706654710wb, 0, 0, 0, 0, 8943720225181967953483417970wb, -5686323784402794959708902425053022672027524027657863695096812917030055678499948429234881641591266594283291408732579354863768974925810198523510127753699305465302067821wb, 45545655058039702583745674825335158540648677810736798412180196426599514263661272184545433928331514411963531127261916383264154901783937763805071704477825859668914160192614845wb, 0, 0, 0, 0, 50424935157410302671220896696045811569932594372403814676921199727418115659236492512040645301161966980307514350263276765199536014825688175664310129375564263158984wb, -7wb, -1570414268527860342275074326241251266943768106178059338676497087694509262100926288185672140837995480549018141550944901112529623354869552332831768648238175848946606383367442wb, 0, 0, 0, 0, 33743599683183012321962199340752013311691198627837686174760810997243129260923502613536719907475631360213576483574943246620765095970215288302282988013296681749186377007244629wb, -241344364975185779312145695113143874342953936016290256207617251781961618409457239212648767218870128884542434148wb, 264442076257762743508952577439304094891926651736030778233607159152726518015778933421402285405943871924053070093963838538880775338376789919798084050039162wb, 0, 0, 0, 0, -5wb, 5102554304763340573123278154007968305825944534675387388100485979831828339912883404866537264221784637582259122678928387415569088293221166wb, -5450898771494429416519022817838938601734903941178852102981451142825093206820936688797591339833204660642927328353178476114731969679243479147102763897272676329450771161610902wb, -27841416716804082903535753217607970wb, 0wb, 2845786405948228702992300882035725001599103765023382470517698884483710061812613500615722877137078798659301720051530203483092161498954792wb, 8943720225181967953483417970wb, 14857023063025350938701283170104334549wb, -7203562165344328953031556670863687367133227767486259239560171389631159379890927501720092185880280997186787764323325252171362287832241167952044304196509180451283wb, 193782868826267453015550702420724985315443493285153355021508389301944425453072371810496604181725982879795555170278476391923261741289049794434571591514767wb, 3wb, -5203319495353646668wb, -139815154526820696318711149230487844769233301636772309388492158wb, -323204355193745164479045143032958628560847774063940216640778815817376770038460708119250193248428869489076997487384931038wb, 180305213672139436589458419226578301650781616412684462286468318018185661952458180767935939240752755560277833245wb, 316649622804067950787613592683370wb }; static _BitInt(125) s125[] = { -6969575357064287919545125499931812390wb, 16004593655673074838414651760840291513wb, -8103989160857077722wb, -818188468095495446473587377169784wb }; 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 }