diff options
author | janis <janis@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-11 23:04:36 +0000 |
---|---|---|
committer | janis <janis@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-11 23:04:36 +0000 |
commit | 23551094631c8b413f1b8d81e05d854b96753f87 (patch) | |
tree | 204c988a001cb54478276500f93ea95df61d9865 /gcc/calls.c | |
parent | 8e868a1f77efc24cc9056ed034c1baa343bd88f8 (diff) | |
download | gcc-23551094631c8b413f1b8d81e05d854b96753f87.tar.gz |
2001-12-11 Steve Ellcey <sje@cup.hp.com>
* doc/tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): New.
* defaults.h (FUNCTION_ARG_REG_LITTLE_ENDIAN): New.
* calls.c (store_unaligned_arguments_into_pseudos): Check
FUNCTION_ARG_REG_LITTLE_ENDIAN to see how structures
are passed/returned.
* expr.c (move_block_from_reg): Ditto.
(move_block_from_reg): Ditto.
(copy_blkmode_from_reg): Ditto.
* stmt.c (expand_return): Ditto.
* stor-layout.c (compute_record_mode): If
FUNCTION_ARG_REG_LITTLE_ENDIAN is set then check
MEMBER_TYPE_FORCES_BLK even if mode == VOIDmode.
* config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Set to true
so that Structures of one field are still treated as structures.
(FUNCTION_ARG_REG_LITTLE_ENDIAN): New, set it to true.
(FUNCTION_ARG_PADDING): Set to ia64_hpux_function_arg_padding().
(PAD_VARARGS_DOWN): Modify from default to not pad structures down.
* config/ia64/ia64-protos.h (ia64_hpux_function_arg_padding): New.
* config/ia64/ia64.c (ia64_hpux_function_arg_padding): New function
to special case handling of structure padding.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47904 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index 2ab670bb32b..c7f5d994cab 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1029,7 +1029,9 @@ store_unaligned_arguments_into_pseudos (args, num_actuals) significant byte (to the right). On a BYTES_BIG_ENDIAN machine, this means we must skip the empty high order bytes when calculating the bit offset. */ - if (BYTES_BIG_ENDIAN && bytes < UNITS_PER_WORD) + if (BYTES_BIG_ENDIAN + && !FUNCTION_ARG_REG_LITTLE_ENDIAN + && bytes < UNITS_PER_WORD) big_endian_correction = (BITS_PER_WORD - (bytes * BITS_PER_UNIT)); for (j = 0; j < args[i].n_aligned_regs; j++) |