Thu Jul 3 13:48:11 1997 Michael Snyder (msnyder@cleaver.cygnus.com)

* mips-tdep.c (mips_push_arguments): don't left-adjust 32-bit
        integers in 64-bit register parameters before function calls.
This commit is contained in:
Michael Snyder 1997-07-03 20:50:11 +00:00
parent 0f552ea045
commit c430260cae
2 changed files with 13 additions and 8 deletions

View file

@ -1,3 +1,8 @@
Thu Jul 3 13:48:11 1997 Michael Snyder (msnyder@cleaver.cygnus.com)
* mips-tdep.c (mips_push_arguments): don't left-adjust 32-bit
integers in 64-bit register parameters before function calls.
Mon Jun 30 17:54:51 1997 Michael Snyder (msnyder@cleaver.cygnus.com)
* mips-tdep.c (mips_push_arguments): special-case handling for

View file

@ -1375,19 +1375,19 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr)
{
CORE_ADDR regval = extract_address (val, partial_len);
/* A simple argument being passed in a general register.
If the length is smaller than the register size, we
have to adjust the alignment on big endian targets.
/* A non-floating-point argument being passed in a
general register. If a struct or union, and if
small enough for a single register, we have to
adjust the alignment.
For structs, it appears that we have to
do the same even in little endian mode.
It does not seem to be necessary to do the
same for integral types.
But don't do this adjustment on EABI targets. */
Also don't do this adjustment on EABI targets. */
if (!MIPS_EABI &&
TYPE_LENGTH (arg_type) < MIPS_REGSIZE &&
(TARGET_BYTE_ORDER == BIG_ENDIAN ||
typecode == TYPE_CODE_STRUCT ||
(typecode == TYPE_CODE_STRUCT ||
typecode == TYPE_CODE_UNION))
regval <<= ((MIPS_REGSIZE - partial_len) *
TARGET_CHAR_BIT);