From 799dfd944ab88e1a32e537fcef7307634c376907 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 15 Jan 2021 19:01:59 +0100 Subject: [PATCH] [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. --- gcc/ada/libgnat/s-fatgen.adb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ada/libgnat/s-fatgen.adb b/gcc/ada/libgnat/s-fatgen.adb index 6e9ef98..95c0549 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; -- 2.7.4