gcc/ada/
* libgnat/s-fatgen.adb (Scaling): Fix off-by-one bug for underflow.
-- Check for gradual underflow
if T'Denorm
- and then Adjustment >= IEEE_Emin - (Mantissa - 1) - Exp
+ and then Adjustment >= IEEE_Emin - Mantissa - Exp
then
Expf := IEEE_Emin;
Expi := Exp + Adjustment - Expf;
Float_Word (IEEE_Ebias + Expf) * Exp_Factor;
if Expi < 0 then
+ -- Given that Expi >= -Mantissa, only -64 is problematic
+
+ if Expi = -64 then
+ XX := XX / 2.0;
+ Expi := -63;
+ end if;
+
XX := XX / T (UST.Long_Long_Unsigned (2) ** (-Expi));
end if;