calls.c (store_one_arg): In the non-BLKmode non-partial case...

* calls.c (store_one_arg): In the non-BLKmode non-partial case,
take padding into account when computing the argument value.

From-SVN: r49675
This commit is contained in:
Alexandre Oliva 2002-02-11 13:33:07 +00:00 committed by Alexandre Oliva
parent 1d1ade42a5
commit 841404cd71
2 changed files with 19 additions and 9 deletions

View File

@ -1,5 +1,8 @@
2002-02-11 Alexandre Oliva <aoliva@redhat.com>
* calls.c (store_one_arg): In the non-BLKmode non-partial case,
take padding into account when computing the argument value.
* config/sh/sh.h (FUNCTION_ARG_REGNO_P): Fix parenthesizing error.
* combine.c (try_combine): Apply substitutions in

View File

@ -4465,6 +4465,11 @@ store_one_arg (arg, argblock, flags, variable_size, reg_parm_stack_space)
partial, reg, used - size, argblock,
ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space,
ARGS_SIZE_RTX (arg->alignment_pad));
/* Unless this is a partially-in-register argument, the argument is now
in the stack. */
if (partial == 0)
arg->value = arg->stack;
}
else
{
@ -4564,17 +4569,19 @@ store_one_arg (arg, argblock, flags, variable_size, reg_parm_stack_space)
argblock, ARGS_SIZE_RTX (arg->offset),
reg_parm_stack_space,
ARGS_SIZE_RTX (arg->alignment_pad));
/* Unless this is a partially-in-register argument, the argument is now
in the stack.
??? Unlike the case above, in which we want the actual
address of the data, so that we can load it directly into a
register, here we want the address of the stack slot, so that
it's properly aligned for word-by-word copying or something
like that. It's not clear that this is always correct. */
if (partial == 0)
arg->value = arg->stack_slot;
}
/* Unless this is a partially-in-register argument, the argument is now
in the stack.
??? Note that this can change arg->value from arg->stack to
arg->stack_slot and it matters when they are not the same.
It isn't totally clear that this is correct in all cases. */
if (partial == 0)
arg->value = arg->stack_slot;
/* Once we have pushed something, pops can't safely
be deferred during the rest of the arguments. */
NO_DEFER_POP;