diff options
author | Michael Hayes <m.hayes@elec.canterbury.ac.nz> | 2000-01-13 10:43:35 +0000 |
---|---|---|
committer | Michael Hayes <m.hayes@gcc.gnu.org> | 2000-01-13 10:43:35 +0000 |
commit | 7f7680a9a44a63da78f064d41660db2b57460187 (patch) | |
tree | 174b996c97c3d482dba85461cbd36b0c82d92621 /gcc | |
parent | 8f496bc2d55cbb3725c964b79af0f86eb1876a63 (diff) | |
download | gcc-7f7680a9a44a63da78f064d41660db2b57460187.zip gcc-7f7680a9a44a63da78f064d41660db2b57460187.tar.gz gcc-7f7680a9a44a63da78f064d41660db2b57460187.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/c4x/c4x.h | 4 | ||||
-rw-r--r-- | gcc/stor-layout.c | 7 | ||||
-rw-r--r-- | gcc/tm.texi | 9 |
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a6a8a6..cc95cab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2000-01-13 Michael Hayes <m.hayes@elec.canterbury.ac.nz> + + * 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 <hp@axis.com> * config/ns32k/ns32k.md: Revert Jan 9 change. diff --git a/gcc/config/c4x/c4x.h b/gcc/config/c4x/c4x.h index b6b43be..470d657 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 e9c3740..455152f 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 385a0dc..dac44ae 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: |