From: Eric Botcazou Date: Fri, 15 Jan 2021 18:01:59 +0000 (+0100) Subject: [Ada] Make new implementation of System.Fat_Gen.Valid more robust X-Git-Tag: basepoints/gcc-13~7777 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=799dfd944ab88e1a32e537fcef7307634c376907;p=thirdparty%2Fgcc.git [Ada] Make new implementation of System.Fat_Gen.Valid more robust gcc/ada/ * libgnat/s-fatgen.adb (Valid): Do a bit comparison with 0.0 when denormalized numbers are not supported. --- diff --git a/gcc/ada/libgnat/s-fatgen.adb b/gcc/ada/libgnat/s-fatgen.adb index 6e9ef988248e..95c0549e53c6 100644 --- a/gcc/ada/libgnat/s-fatgen.adb +++ b/gcc/ada/libgnat/s-fatgen.adb @@ -959,7 +959,19 @@ package body System.Fat_Gen is else pragma Assert (Exp = IEEE_Emin - 1); -- This is a denormalized number, valid if T'Denorm is True or 0.0 - return T'Denorm or else X.all = 0.0; + if T'Denorm then + return True; + + -- Note that we cannot do a direct comparison with 0.0 because the + -- hardware may evaluate it to True for all denormalized numbers. + + else + -- First clear the sign bit (the exponent is already zero) + + Rep (MSW) := Rep (MSW) and not Sign_Mask; + + return (for all J in 0 .. Rep_Last => Rep (J) = 0); + end if; end if; end Valid;