aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1994-09-29 16:52:57 -0700
committerJim Wilson <wilson@gcc.gnu.org>1994-09-29 16:52:57 -0700
commitefbde2a29f3f9398192ad6a3a9978b4497259296 (patch)
tree79d5bb7cea54d0e7b256f001588f83ded339304b
parent7a9a00be049860530e590125f1a8b0f999a40fa4 (diff)
downloadgcc-efbde2a29f3f9398192ad6a3a9978b4497259296.zip
gcc-efbde2a29f3f9398192ad6a3a9978b4497259296.tar.gz
gcc-efbde2a29f3f9398192ad6a3a9978b4497259296.tar.bz2
(i960_setup_incoming_varargs): Store parameter registers
at proper offset in argument block. From-SVN: r8168
-rw-r--r--gcc/config/i960/i960.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/config/i960/i960.c b/gcc/config/i960/i960.c
index f5ccc55..fb24855 100644
--- a/gcc/config/i960/i960.c
+++ b/gcc/config/i960/i960.c
@@ -2190,6 +2190,8 @@ i960_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
if (! (no_rtl) && first_reg_offset != NPARM_REGS)
{
rtx label = gen_label_rtx ();
+ rtx regblock;
+
emit_insn (gen_cmpsi (arg_pointer_rtx, const0_rtx));
emit_jump_insn (gen_bne (label));
emit_insn (gen_rtx (SET, VOIDmode, arg_pointer_rtx,
@@ -2199,11 +2201,14 @@ i960_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
plus_constant (stack_pointer_rtx,
48))));
emit_label (label);
- move_block_from_reg
- (first_reg_offset,
- gen_rtx (MEM, BLKmode, virtual_incoming_args_rtx),
- NPARM_REGS - first_reg_offset,
- (NPARM_REGS - first_reg_offset) * UNITS_PER_WORD);
+
+ regblock = gen_rtx (MEM, BLKmode,
+ plus_constant (arg_pointer_rtx,
+ first_reg_offset * 4));
+ move_block_from_reg (first_reg_offset, regblock,
+ NPARM_REGS - first_reg_offset,
+ ((NPARM_REGS - first_reg_offset)
+ * UNITS_PER_WORD));
}
*pretend_size = (NPARM_REGS - first_reg_offset) * UNITS_PER_WORD;
}