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:
parent
1d1ade42a5
commit
841404cd71
@ -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
|
||||
|
25
gcc/calls.c
25
gcc/calls.c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user