From: Michael Hayes Date: Thu, 13 Jan 2000 10:43:35 +0000 (+0000) Subject: stor-layout.c (layout_type): Use FORCE_STRUCT_BLK. X-Git-Tag: prereleases/libstdc++-2.92~8751 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7f7680a9a44a63da78f064d41660db2b57460187;p=thirdparty%2Fgcc.git stor-layout.c (layout_type): Use FORCE_STRUCT_BLK. * stor-layout.c (layout_type): Use FORCE_STRUCT_BLK. * tm.texi (FORCE_STRUCT_BLK): Document. * config/c4x/c4x.h (FORCE_STRUCT_BLK): New macro. From-SVN: r31385 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a6a8a610ae4..cc95cab01bc7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2000-01-13 Michael Hayes + + * stor-layout.c (layout_type): Use FORCE_STRUCT_BLK. + * tm.texi (FORCE_STRUCT_BLK): Document. + * config/c4x/c4x.h (FORCE_STRUCT_BLK): New macro. + Wed Jan 12 23:12:47 2000 Hans-Peter Nilsson * config/ns32k/ns32k.md: Revert Jan 9 change. diff --git a/gcc/config/c4x/c4x.h b/gcc/config/c4x/c4x.h index b6b43bebe32a..470d65780104 100644 --- a/gcc/config/c4x/c4x.h +++ b/gcc/config/c4x/c4x.h @@ -352,6 +352,10 @@ extern const char *c4x_rpts_cycles_string, *c4x_cpu_version_string; #define TARGET_FLOAT_FORMAT C4X_FLOAT_FORMAT #define MAX_FIXED_MODE_SIZE 64 /* HImode. */ +/* If a structure has a floating point field then force structure + to have BLKMODE. */ +#define STRUCT_FORCE_BLK(FIELD) (TREE_CODE (TREE_TYPE (FIELD)) == REAL_TYPE) + /* Number of bits in the high and low parts of a two stage load of an immediate constant. */ #define BITS_PER_HIGH 16 diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index e9c3740c26f0..455152f88a30 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1057,6 +1057,13 @@ layout_type (type) register instead of forcing it to live in the stack. */ if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field))) mode = DECL_MODE (field); + +#ifdef STRUCT_FORCE_BLK + /* With some targets, eg. c4x, it is sub-optimal + to access an aligned BLKmode structure as a scalar. */ + if (mode == VOIDmode && STRUCT_FORCE_BLK (field)) + goto record_lose; +#endif /* STRUCT_FORCE_BLK */ } if (mode != VOIDmode) diff --git a/gcc/tm.texi b/gcc/tm.texi index 385a0dcb940e..dac44ae8ff86 100644 --- a/gcc/tm.texi +++ b/gcc/tm.texi @@ -413,6 +413,15 @@ if any, in all upper-case letters. For example, it might be @samp{GCC} or @samp{BINUTILS}. If the package is part of the a vendor-supplied operating system, code the component name as @samp{0}. +@findex STRUCT_FORCE_BLK +@item STRUCT_FORCE_BLK (@var{field}) +Return 1 if a structure containing @var{field} should be accessed using +@code{BLKMODE}. + +Normally, this is not needed. See the file @file{c4x.h} for an example +of how to use this macro to prevent a structure having a floating point +field from being accessed in an integer mode. + For example, here is the definition used for VAX/VMS: