Commit 7f7680a9 by Michael Hayes Committed by Michael Hayes

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
parent 8f496bc2
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> Wed Jan 12 23:12:47 2000 Hans-Peter Nilsson <hp@axis.com>
* config/ns32k/ns32k.md: Revert Jan 9 change. * config/ns32k/ns32k.md: Revert Jan 9 change.
......
...@@ -352,6 +352,10 @@ extern const char *c4x_rpts_cycles_string, *c4x_cpu_version_string; ...@@ -352,6 +352,10 @@ extern const char *c4x_rpts_cycles_string, *c4x_cpu_version_string;
#define TARGET_FLOAT_FORMAT C4X_FLOAT_FORMAT #define TARGET_FLOAT_FORMAT C4X_FLOAT_FORMAT
#define MAX_FIXED_MODE_SIZE 64 /* HImode. */ #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 /* Number of bits in the high and low parts of a two stage
load of an immediate constant. */ load of an immediate constant. */
#define BITS_PER_HIGH 16 #define BITS_PER_HIGH 16
......
...@@ -1057,6 +1057,13 @@ layout_type (type) ...@@ -1057,6 +1057,13 @@ layout_type (type)
register instead of forcing it to live in the stack. */ register instead of forcing it to live in the stack. */
if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field))) if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
mode = DECL_MODE (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) if (mode != VOIDmode)
......
...@@ -413,6 +413,15 @@ if any, in all upper-case letters. For example, it might be @samp{GCC} ...@@ -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 or @samp{BINUTILS}. If the package is part of the a vendor-supplied
operating system, code the component name as @samp{0}. 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: For example, here is the definition used for VAX/VMS:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment