summaryrefslogtreecommitdiff
path: root/gcc/expr.h
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1993-04-17 21:40:16 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1993-04-17 21:40:16 +0000
commitd761200268cbbc44995afd1ffc391ce7bdbcbb6e (patch)
treef0ddaf3a4e49a250f91de52b712fe0ebcd50360b /gcc/expr.h
parent8d7ceea4c7986a8cb9bf41b0861aa6941d0e4f97 (diff)
downloadgcc-d761200268cbbc44995afd1ffc391ce7bdbcbb6e.tar.gz
(FUNCTION_ARG_PADDING): Add parens to make clearer.
(MUST_PASS_IN_STACK): Don't allow machine to override (none currently do). Don't force in stack if wrong padding when padding isn't needed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@4172 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.h')
-rw-r--r--gcc/expr.h11
1 files changed, 4 insertions, 7 deletions
diff --git a/gcc/expr.h b/gcc/expr.h
index f47580b9595..d4fc662b8c7 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -179,7 +179,7 @@ enum direction {none, upward, downward}; /* Value has this type. */
#define FUNCTION_ARG_PADDING(MODE, TYPE) \
(((MODE) == BLKmode \
? ((TYPE) && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
- && int_size_in_bytes (TYPE) < PARM_BOUNDARY / BITS_PER_UNIT) \
+ && int_size_in_bytes (TYPE) < (PARM_BOUNDARY / BITS_PER_UNIT)) \
: GET_MODE_BITSIZE (MODE) < PARM_BOUNDARY) \
? downward : upward)
#else
@@ -211,11 +211,6 @@ enum direction {none, upward, downward}; /* Value has this type. */
So a value padded in memory at the upper end can't go in a register.
For a little-endian machine, the reverse is true. */
-/* ??? Perhaps later rename this to FUNCTION_ARG_MUST_PASS_IN_STACK?
- (although it is a little long). */
-
-#ifndef MUST_PASS_IN_STACK
-
#if BYTES_BIG_ENDIAN
#define MUST_PASS_IN_STACK_BAD_PADDING upward
#else
@@ -227,9 +222,11 @@ enum direction {none, upward, downward}; /* Value has this type. */
&& (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \
|| TREE_ADDRESSABLE (TYPE) \
|| ((MODE) == BLKmode \
+ && ! ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
+ && 0 == (int_size_in_bytes (TYPE) \
+ % (PARM_BOUNDARY / BITS_PER_UNIT))) \
&& (FUNCTION_ARG_PADDING (MODE, TYPE) \
== MUST_PASS_IN_STACK_BAD_PADDING))))
-#endif
/* Nonzero if type TYPE should be returned in memory.
Most machines can use the following default definition. */