https://gcc.gnu.org/g:547219f41f049083cda55929ae1c900195993504
commit r15-4047-g547219f41f049083cda55929ae1c900195993504 Author: Eric Botcazou <ebotca...@adacore.com> Date: Thu Oct 3 19:46:59 2024 +0200 Aarch64: Define WIDEST_HARDWARE_FP_SIZE The macro is documented like this in the internal manual: -- Macro: WIDEST_HARDWARE_FP_SIZE A C expression for the size in bits of the widest floating-point format supported by the hardware. If you define this macro, you must specify a value less than or equal to mode precision of the mode used for C type 'long double' (from hook 'targetm.c.mode_for_floating_type' with argument 'TI_LONG_DOUBLE_TYPE'). If you do not define this macro, mode precision of the mode used for C type 'long double' is the default. AArch64 uses 128-bit TFmode for long double but, as far as I know, no FPU implemented in hardware supports it. gcc/ * config/aarch64/aarch64.h (WIDEST_HARDWARE_FP_SIZE): Define to 64. gcc/testsuite/ * gnat.dg/specs/size_clause6.ads: New test. Diff: --- gcc/config/aarch64/aarch64.h | 2 ++ gcc/testsuite/gnat.dg/specs/size_clause6.ads | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index ec8fde783b35..030cffb17606 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -96,6 +96,8 @@ #define LONG_LONG_TYPE_SIZE 64 +#define WIDEST_HARDWARE_FP_SIZE 64 + /* This value is the amount of bytes a caller is allowed to drop the stack before probing has to be done for stack clash protection. */ #define STACK_CLASH_CALLER_GUARD 1024 diff --git a/gcc/testsuite/gnat.dg/specs/size_clause6.ads b/gcc/testsuite/gnat.dg/specs/size_clause6.ads new file mode 100644 index 000000000000..6015bcd76f6a --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/size_clause6.ads @@ -0,0 +1,12 @@ +-- { dg-do compile } + +with Interfaces; + +package Size_Clause6 is + + type Long_Double is new Interfaces.IEEE_Extended_Float; + for Long_Double'Size use 128; -- { dg-warning "unused" "" { target { ! { { i?86-*-* x86_64-*-* } && lp64 } } } } + + function Int (X : in Long_Double) return Integer is (0); + +end Size_Clause6;