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;

Reply via email to