emit_insn (GEN_MOV (const_reg, GEN_INT (size)));
insn = emit_fn (GEN_ADD3 (reg, reg, const_reg));
}
- if (! epilogue_p)
- add_reg_note (insn, REG_FRAME_RELATED_EXPR,
- gen_rtx_SET (VOIDmode, reg,
- gen_rtx_PLUS (SImode, reg,
- GEN_INT (size))));
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+ gen_rtx_SET (VOIDmode, reg,
+ gen_rtx_PLUS (SImode, reg,
+ GEN_INT (size))));
}
}
}
static void
pop (int rn)
{
- rtx x;
+ rtx x, sp_reg, reg;
if (rn == FPUL_REG)
x = gen_pop_fpul ();
else if (rn == FPSCR_REG)
x = gen_pop (gen_rtx_REG (SImode, rn));
x = emit_insn (x);
+
+ sp_reg = gen_rtx_REG (SImode, STACK_POINTER_REGNUM);
+ reg = copy_rtx (GET_CODE (PATTERN (x)) == PARALLEL
+ ? SET_DEST (XVECEXP (PATTERN (x), 0, 0))
+ : SET_DEST (PATTERN (x)));
+ add_reg_note (x, REG_CFA_RESTORE, reg);
+ add_reg_note (x, REG_CFA_ADJUST_CFA,
+ gen_rtx_SET (SImode, sp_reg,
+ plus_constant (SImode, sp_reg,
+ GET_MODE_SIZE (GET_MODE (reg)))));
add_reg_note (x, REG_INC, gen_rtx_REG (SImode, STACK_POINTER_REGNUM));
+ RTX_FRAME_RELATED_P (x) = 1;
}
/* Generate code to push the regs specified in the mask. */
See PR/18032 and PR/40313. */
emit_insn (gen_blockage ());
output_stack_adjust (frame_size, hard_frame_pointer_rtx, e,
- &live_regs_mask, false);
+ &live_regs_mask, true);
/* We must avoid moving the stack pointer adjustment past code
which reads from the local frame, else an interrupt could
occur after the SP adjustment and clobber data in the local
frame. */
emit_insn (gen_blockage ());
- emit_insn (GEN_MOV (stack_pointer_rtx, hard_frame_pointer_rtx));
+ frame_insn (GEN_MOV (stack_pointer_rtx, hard_frame_pointer_rtx));
}
else if (frame_size)
{
frame. */
emit_insn (gen_blockage ());
output_stack_adjust (frame_size, stack_pointer_rtx, e,
- &live_regs_mask, false);
+ &live_regs_mask, true);
}
if (SHMEDIA_REGS_STACK_ADJUST ())
output_stack_adjust (crtl->args.pretend_args_size
+ save_size + d_rounding
+ crtl->args.info.stack_regs * 8,
- stack_pointer_rtx, e, NULL, false);
+ stack_pointer_rtx, e, NULL, true);
if (crtl->calls_eh_return)
emit_insn (GEN_ADD3 (stack_pointer_rtx, stack_pointer_rtx,