[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.
This commit is contained in:
Eric Botcazou 2021-01-15 19:01:59 +01:00 committed by Pierre-Marie de Rodat
parent af9833a10a
commit 799dfd944a

View File

@ -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;