diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1993-04-17 21:40:16 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1993-04-17 21:40:16 +0000 |
commit | d761200268cbbc44995afd1ffc391ce7bdbcbb6e (patch) | |
tree | f0ddaf3a4e49a250f91de52b712fe0ebcd50360b /gcc/expr.h | |
parent | 8d7ceea4c7986a8cb9bf41b0861aa6941d0e4f97 (diff) | |
download | gcc-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.h | 11 |
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. */ |