blob: dc8833acafcae2a6dac3daccae99b13c800a7588 [file] [log] [blame]
/* PR c/102989 */
/* { dg-do run { target bitint } } */
/* { dg-options "-std=c23" } */
/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */
/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
#if __LDBL_MANT_DIG__ == 64
#if __BITINT_MAXWIDTH__ >= 135
__attribute__((noipa)) _BitInt(135)
testldbl_135 (long double d)
{
return d;
}
__attribute__((noipa)) unsigned _BitInt(135)
testldblu_135 (long double d)
{
return d;
}
#endif
#if __BITINT_MAXWIDTH__ >= 192
__attribute__((noipa)) _BitInt(192)
testldbl_192 (long double d)
{
return d;
}
__attribute__((noipa)) unsigned _BitInt(192)
testldblu_192 (long double d)
{
return d;
}
#endif
#if __BITINT_MAXWIDTH__ >= 575
__attribute__((noipa)) _BitInt(575)
testldbl_575 (long double d)
{
return d;
}
__attribute__((noipa)) unsigned _BitInt(575)
testldblu_575 (long double d)
{
return d;
}
#endif
#endif
#if __FLT128_MANT_DIG__ == 113
#if __BITINT_MAXWIDTH__ >= 135
__attribute__((noipa)) _BitInt(135)
testflt128_135 (_Float128 d)
{
return d;
}
__attribute__((noipa)) unsigned _BitInt(135)
testflt128u_135 (_Float128 d)
{
return d;
}
#endif
#if __BITINT_MAXWIDTH__ >= 192
__attribute__((noipa)) _BitInt(192)
testflt128_192 (_Float128 d)
{
return d;
}
__attribute__((noipa)) unsigned _BitInt(192)
testflt128u_192 (_Float128 d)
{
return d;
}
#endif
#if __BITINT_MAXWIDTH__ >= 575
__attribute__((noipa)) _BitInt(575)
testflt128_575 (_Float128 d)
{
return d;
}
__attribute__((noipa)) unsigned _BitInt(575)
testflt128u_575 (_Float128 d)
{
return d;
}
#endif
#endif
int
main ()
{
#if __LDBL_MANT_DIG__ == 64
#if __BITINT_MAXWIDTH__ >= 135
static long double ldbl_135[] = {
-0.96875L, -0.25L, -0.0L, 0.25L, 0.0L, 1.0L, -42.0L, 4294967295.25L,
-8790480341948727187.25L, 27274375615880435204096.0L,
-14925443517338257613013233930892304449536.0L,
-21778071482940061661655974875633165533184.0L
};
static _BitInt(135) ldblr_135[] = {
0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -42wb, 4294967295wb,
-8790480341948727187wb, 27274375615880435204096wb,
-14925443517338257613013233930892304449536wb,
-21778071482940061661655974875633165533183wb - 1wb
};
for (int i = 0; i < 12; ++i)
if (testldbl_135 (ldbl_135[i]) != ldblr_135[i])
__builtin_abort ();
static long double ldblu_135[] = {
-0.9921875L, -0.75L, -0.0L, 0.125L, 0.0L, 1.0L, 42.59375L, 4294967295.75L,
176563931524327024.5L, 33864941055480177570480471932928.0L,
25454535165593017203571842988709209178112.0L
};
static unsigned _BitInt(135) ldblur_135[] = {
0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 42uwb, 4294967295uwb,
176563931524327024uwb, 33864941055480177570480471932928uwb,
25454535165593017203571842988709209178112uwb
};
for (int i = 0; i < 11; ++i)
if (testldblu_135 (ldblu_135[i]) != ldblur_135[i])
__builtin_abort ();
#endif
#if __BITINT_MAXWIDTH__ >= 192
static long double ldbl_192[] = {
-1.0L, -0.998046875L, -0.5L, -0.0L, 0.625L, 0.0L, 1.0L, -42.0L, 4294967295.25L,
-5824742198306330891.5L, 440458331210868742661519441920.0L,
1835666805014205039814897225189119947560942436848001613824.0L,
-3138550867693340381917894711603833208051177722232017256448.0L
};
static _BitInt(192) ldblr_192[] = {
-1wb, 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -42wb, 4294967295wb,
-5824742198306330891wb, 440458331210868742661519441920wb,
1835666805014205039814897225189119947560942436848001613824wb,
-3138550867693340381917894711603833208051177722232017256447wb - 1wb
};
for (int i = 0; i < 13; ++i)
if (testldbl_192 (ldbl_192[i]) != ldblr_192[i])
__builtin_abort ();
static long double ldblu_192[] = {
-0.99951171875L, -0.125L, -0.0L, __LDBL_MIN__, 0.0L, 1.0L, 42.125L, 4294967296.75L,
2076918887405157419.75L, 20675944534182826922963677915852149395069559898112.0L,
5501434424609388038261967254007295028886638351806353113088.0L
};
static unsigned _BitInt(192) ldblur_192[] = {
0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 42uwb, 4294967296uwb,
2076918887405157419uwb, 20675944534182826922963677915852149395069559898112uwb,
5501434424609388038261967254007295028886638351806353113088uwb
};
for (int i = 0; i < 11; ++i)
if (testldblu_192 (ldblu_192[i]) != ldblur_192[i])
__builtin_abort ();
#endif
#if __BITINT_MAXWIDTH__ >= 575
static long double ldbl_575[] = {
-1.00048828125L, -0.999755859375L, -0.0625L, -0.0L, 0.0001L, 0.0L, 1.0L, -28.0L, 4294967294.75L,
-3665832965020207456.5L, 163698889538251840454153874702336.0L,
32915174451748642699300864037265677114762093753017270154115822402734463611341115095984060833654391570465670441530007982951775959694729040694137686724336684263404019031998464.0L,
-61832600368276133515125630254911797508782837275302959978515764023224306276632966792579100265310761247399417856504034834837841258576687802491886538775473291979151693037174784.0L
};
static _BitInt(575) ldblr_575[] = {
-1wb, 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -28wb, 4294967294wb,
-3665832965020207456wb, 163698889538251840454153874702336wb,
32915174451748642699300864037265677114762093753017270154115822402734463611341115095984060833654391570465670441530007982951775959694729040694137686724336684263404019031998464wb,
-61832600368276133515125630254911797508782837275302959978515764023224306276632966792579100265310761247399417856504034834837841258576687802491886538775473291979151693037174783wb - 1wb
};
for (int i = 0; i < 13; ++i)
if (testldbl_575 (ldbl_575[i]) != ldblr_575[i])
__builtin_abort ();
static long double ldblu_575[] = {
-0.9998779296875L, -0.5L, -0.0L, 4.0L * __LDBL_MIN__, 0.0L, 1.0L, 38.125L, 4294967297.75L,
1378703406647015633.75L, 611519358004879551476944320883148018860550235384446976.0L,
115943866857281393364910134541262519802574312323472821552898049002204954780753923929784955305825114286696121504922573067409422635510048274769753298552619702526028834918105088.0L
};
static unsigned _BitInt(575) ldblur_575[] = {
0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 38uwb, 4294967297uwb,
1378703406647015633uwb, 611519358004879551476944320883148018860550235384446976uwb,
115943866857281393364910134541262519802574312323472821552898049002204954780753923929784955305825114286696121504922573067409422635510048274769753298552619702526028834918105088uwb
};
for (int i = 0; i < 11; ++i)
if (testldblu_575 (ldblu_575[i]) != ldblur_575[i])
__builtin_abort ();
#endif
#endif
#if __FLT128_MANT_DIG__ == 113
#if __BITINT_MAXWIDTH__ >= 135
static _Float128 flt128_135[] = {
-1.0F128, -0.999969482421875F128, -0.5F128, -0.0F128, 0.25F128, 0.0F128,
1.0F128, -42.0F128, 4294967295.25F128,
-622114258022893415468272077014949.5F128, 6846686534183872435237780851340978176.0F128,
-18109992041001989671440396535501724581888.0F128,
-21778071482940061661655974875633165533184.0F128
};
static _BitInt(135) flt128r_135[] = {
-1wb, 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -42wb, 4294967295wb,
-622114258022893415468272077014949wb, 6846686534183872435237780851340978176wb,
-18109992041001989671440396535501724581888wb,
-21778071482940061661655974875633165533183wb - 1wb
};
for (int i = 0; i < 13; ++i)
if (testflt128_135 (flt128_135[i]) != flt128r_135[i])
__builtin_abort ();
static _Float128 flt128u_135[] = {
-0.9999847412109375F128, -0.25F128, -0.0F128, 0.125F128, 0.0F128, 1.0F128,
42.59375F128, 4294967295.75F128,
3866883549893778868343627501393297.5F128, 1884508847679496004639718578196282112.0F128,
40418154190724512480670668005754087145472.0F128
};
static unsigned _BitInt(135) flt128ur_135[] = {
0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 42uwb, 4294967295uwb,
3866883549893778868343627501393297uwb, 1884508847679496004639718578196282112uwb,
40418154190724512480670668005754087145472uwb
};
for (int i = 0; i < 11; ++i)
if (testflt128u_135 (flt128u_135[i]) != flt128ur_135[i])
__builtin_abort ();
#endif
#if __BITINT_MAXWIDTH__ >= 192
static _Float128 flt128_192[] = {
-0.99999237060546875F128, -0.75F128, -0.0F128, 0.625F128, 0.0F128, 1.0F128, -42.0F128, 4294967295.25F128,
-2985198467222342042164811285508981.5F128, 431282768955649236431442335280406747022360576.0F128,
1589969577168452878096502186670522088231011726426596442112.0F128,
-3138550867693340381917894711603833208051177722232017256448.0F128
};
static _BitInt(192) flt128r_192[] = {
0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -42wb, 4294967295wb,
-2985198467222342042164811285508981wb, 431282768955649236431442335280406747022360576wb,
1589969577168452878096502186670522088231011726426596442112wb,
-3138550867693340381917894711603833208051177722232017256447wb - 1wb
};
for (int i = 0; i < 12; ++i)
if (testflt128_192 (flt128_192[i]) != flt128r_192[i])
__builtin_abort ();
static _Float128 flt128u_192[] = {
-0.999996185302734375F128, -0.0625F128, -0.0F128, __FLT128_MIN__, 0.0F128, 1.0F128, 42.125F128, 4294967296.75F128,
1198221816583045676753413578483973.75F128, 321058543109670204450967161534914741927936.0F128,
4124250833671183507048495617931376186682553019928355536896.0F128
};
static unsigned _BitInt(192) flt128ur_192[] = {
0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 42uwb, 4294967296uwb,
1198221816583045676753413578483973uwb, 321058543109670204450967161534914741927936uwb,
4124250833671183507048495617931376186682553019928355536896uwb
};
for (int i = 0; i < 11; ++i)
if (testflt128u_192 (flt128u_192[i]) != flt128ur_192[i])
__builtin_abort ();
#endif
#if __BITINT_MAXWIDTH__ >= 575
static _Float128 flt128_575[] = {
-1.0000019073486328125F128, -0.9999980926513671875F128, -0.125F128, -0.0F128, 0.0001F128, 0.0F128, 1.0F128, -28.0F128, 4294967294.75F128,
-4434536963340205213805292449887836.5F128, 7798956314177801818163892326325236647148010864640.0F128,
-48379475169482975928082617475070980956970510451882414558095669485086407691242420689411465910847147042640064381848760072045866350077715681395831023828798188292450661613699072.0F128,
-61832600368276133515125630254911797508782837275302959978515764023224306276632966792579100265310761247399417856504034834837841258576687802491886538775473291979151693037174784.0F128
};
static _BitInt(575) flt128r_575[] = {
-1wb, 0wb, 0wb, 0wb, 0wb, 0wb, 1wb, -28wb, 4294967294wb,
-4434536963340205213805292449887836wb, 7798956314177801818163892326325236647148010864640wb,
-48379475169482975928082617475070980956970510451882414558095669485086407691242420689411465910847147042640064381848760072045866350077715681395831023828798188292450661613699072wb,
-61832600368276133515125630254911797508782837275302959978515764023224306276632966792579100265310761247399417856504034834837841258576687802491886538775473291979151693037174783wb - 1wb
};
for (int i = 0; i < 13; ++i)
if (testflt128_575 (flt128_575[i]) != flt128r_575[i])
__builtin_abort ();
static _Float128 flt128u_575[] = {
-0.99999904632568359375F128, -0.75F128, -0.0F128, 4.0F128 * __FLT128_MIN__, 0.0F128, 1.0F128, 38.125F128, 4294967297.75F128,
1286565442597535616086070715374552.75F128, 2888274376848382435313359223769917404575136171432777745913780227423600640.0F128,
101012352069182509789055890148950528106809264092697629422634347377509770791198015780931797016594366657511165718215124632216959526129296364564413818230848005073384975475146752.0F128
};
static unsigned _BitInt(575) flt128ur_575[] = {
0uwb, 0uwb, 0uwb, 0uwb, 0uwb, 1uwb, 38uwb, 4294967297uwb,
1286565442597535616086070715374552uwb, 2888274376848382435313359223769917404575136171432777745913780227423600640uwb,
101012352069182509789055890148950528106809264092697629422634347377509770791198015780931797016594366657511165718215124632216959526129296364564413818230848005073384975475146752uwb
};
for (int i = 0; i < 11; ++i)
if (testflt128u_575 (flt128u_575[i]) != flt128ur_575[i])
__builtin_abort ();
#endif
#endif
}