[PATCH] Predefine __SIZEOF_{FPREG,FLOAT{80,128}}__ on ia64 (PR target/56540)
Jakub Jelinek
jakub@redhat.com
Fri Mar 2 15:49:00 GMT 2018
Hi!
GCC predefines __SIZEOF_*__ macros for the types it provides, so that
1) one can easily test if those types are available
2) can use it even in places where sizeof is not usable, like preprocessor
conditionals
Unfortunately, this isn't done for target types that the middle-end doesn't
know about. On x86 __SIZEOF_FLOAT128__=16 and __SIZEOF_FLOAT80__={16,12}
are already predefined. For consistency and above reasons it would be nice
to do the same on ia64, hppa and powerpc* too.
Tested with a cross to ia64 on the testcase, ok for trunk?
2018-03-02 Jakub Jelinek <jakub@redhat.com>
PR target/56540
* config/ia64/ia64.h (TARGET_CPU_CPP_BUILTINS): Predefine
__SIZEOF_{FPREG,FLOAT{80,128}}__ macros.
* gcc.target/ia64/pr56540.c: New test.
--- gcc/config/ia64/ia64.h.jj 2018-01-03 10:20:09.144536194 +0100
+++ gcc/config/ia64/ia64.h 2018-03-02 15:12:44.006654878 +0100
@@ -38,6 +38,9 @@ do { \
builtin_define("__itanium__"); \
if (TARGET_BIG_ENDIAN) \
builtin_define("__BIG_ENDIAN__"); \
+ builtin_define("__SIZEOF_FPREG__=16"); \
+ builtin_define("__SIZEOF_FLOAT80__=16");\
+ builtin_define("__SIZEOF_FLOAT128__=16");\
} while (0)
#ifndef SUBTARGET_EXTRA_SPECS
--- gcc/testsuite/gcc.target/ia64/pr56540.c.jj 2018-03-02 15:28:20.464781858 +0100
+++ gcc/testsuite/gcc.target/ia64/pr56540.c 2018-03-02 15:30:12.728813200 +0100
@@ -0,0 +1,6 @@
+/* PR target/56540 */
+/* { dg-do compile } */
+
+extern int a[__SIZEOF_FPREG__ != sizeof (__fpreg) ? -1 : 1];
+extern int b[__SIZEOF_FLOAT80__ != sizeof (__float80) ? -1 : 1];
+extern int c[__SIZEOF_FLOAT128__ != sizeof (__float128) ? -1 : 1];
Jakub
More information about the Gcc-patches
mailing list