[Ada] Do not use exponentiation for common bases in floating-point Value
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 1 Dec 2020 06:53:50 +0000 (07:53 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 17 Dec 2020 10:49:22 +0000 (05:49 -0500)
commit97919732a8ebeb343705966b2ca649d35d3197e9
tree4fca667935c37e1a03a75228d45b48d3ef924a83
parent5957283fa4958afc18ca718405417d742332d66c
[Ada] Do not use exponentiation for common bases in floating-point Value

gcc/ada/

* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Likewise.
* exp_imgv.adb (Expand_Value_Attribute): Use RE_Value_Long_Float in
lieu of RE_Value_Long_Long_Float as fallback for fixed-point types.
Also use it for Long_Long_Float if it has same size as Long_Float.
* libgnat/s-imgrea.adb: Replace Powten_Table with Powen_LLF.
* libgnat/s-powflt.ads: New file.
* libgnat/s-powlfl.ads: Likewise.
* libgnat/s-powtab.ads: Rename to...
* libgnat/s-powllf.ads: ...this.
* libgnat/s-valflt.ads: Add with clause for System.Powten_Flt and
pass its table as actual parameter to System.Val_Real.
* libgnat/s-vallfl.ads: Likewise for System.Powten_LFlt.
* libgnat/s-valllf.ads: Likewise for System.Powten_LLF.
* libgnat/s-valrea.ads: Add Maxpow and Powten_Address parameters.
* libgnat/s-valrea.adb: Add pragma Warnings (Off).
(Need_Extra): New boolean constant.
(Precision_Limit): Set it according to Need_Extra.
(Impl): Adjust actual parameter.
(Integer_to_Rea): Add assertion on the machine radix. Take into
account the extra digit only if Need_Extra is true.  Reimplement
the computation of the final value for bases 2, 4, 8, 10 and 16.
* libgnat/s-valued.adb (Impl): Adjust actual parameter.
(Scan_Decimal): Add pragma Unreferenced.
(Value_Decimal): Likewise.
* libgnat/s-valuef.adb (Impl): Adjust actual parameter.
* libgnat/s-valuer.ads (Floating): Remove.
(Round): New formal parameter.
* libgnat/s-valuer.adb (Round_Extra): New procedure.
(Scan_Decimal_Digits): Use it to round the extra digit if Round
is set to True in the instantiation.
(Scan_Integral_Digits): Likewise.
16 files changed:
gcc/ada/Makefile.rtl
gcc/ada/exp_imgv.adb
gcc/ada/libgnat/s-imgrea.adb
gcc/ada/libgnat/s-powflt.ads [new file with mode: 0644]
gcc/ada/libgnat/s-powlfl.ads [new file with mode: 0644]
gcc/ada/libgnat/s-powllf.ads [new file with mode: 0644]
gcc/ada/libgnat/s-powtab.ads [deleted file]
gcc/ada/libgnat/s-valflt.ads
gcc/ada/libgnat/s-vallfl.ads
gcc/ada/libgnat/s-valllf.ads
gcc/ada/libgnat/s-valrea.adb
gcc/ada/libgnat/s-valrea.ads
gcc/ada/libgnat/s-valued.adb
gcc/ada/libgnat/s-valuef.adb
gcc/ada/libgnat/s-valuer.adb
gcc/ada/libgnat/s-valuer.ads