* tm.texi (FORCE_STRUCT_BLK): Document.
* config/c4x/c4x.h (FORCE_STRUCT_BLK): New macro.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31385
138bc75d-0d04-0410-961f-
82ee72b054a4
+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.
#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
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)
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: