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,16 +4569,18 @@ 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.
??? 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. */
??? 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;
}
/* Once we have pushed something, pops can't safely
be deferred during the rest of the arguments. */