Commit 0d40cc60 by Anatoly Sokolov Committed by Anatoly Sokolov

avr.c (expand_prologue, [...]): Don't save/restore frame pointer register and…

avr.c (expand_prologue, [...]): Don't save/restore frame pointer register and don't use 'call-prologues' ...

	* config/avr/avr.c (expand_prologue, expand_epilogue): Don't 
	save/restore frame pointer register and don't use 'call-prologues' 
	optimization in function with "OS_task" attribute.

From-SVN: r131474
parent fd6590f8
2008-01-11 Anatoly Sokolov <aesok@post.ru>
* config/avr/avr.c (expand_prologue, expand_epilogue): Don't
save/restore frame pointer register and don't use 'call-prologues'
optimization in function with "OS_task" attribute.
2008-01-11 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/31309
......@@ -607,7 +607,9 @@ expand_prologue (void)
live_seq = sequent_regs_live ();
minimize = (TARGET_CALL_PROLOGUES
&& !(cfun->machine->is_interrupt || cfun->machine->is_signal)
&& !cfun->machine->is_interrupt
&& !cfun->machine->is_signal
&& !cfun->machine->is_OS_task
&& live_seq);
if (cfun->machine->is_interrupt || cfun->machine->is_signal)
......@@ -668,9 +670,13 @@ expand_prologue (void)
}
if (frame_pointer_needed)
{
/* Push frame pointer. */
insn = emit_move_insn (pushword, frame_pointer_rtx);
RTX_FRAME_RELATED_P (insn) = 1;
if(!cfun->machine->is_OS_task)
{
/* Push frame pointer. */
insn = emit_move_insn (pushword, frame_pointer_rtx);
RTX_FRAME_RELATED_P (insn) = 1;
}
if (!size)
{
insn = emit_move_insn (frame_pointer_rtx, stack_pointer_rtx);
......@@ -813,7 +819,9 @@ expand_epilogue (void)
live_seq = sequent_regs_live ();
minimize = (TARGET_CALL_PROLOGUES
&& !(cfun->machine->is_interrupt || cfun->machine->is_signal)
&& !cfun->machine->is_interrupt
&& !cfun->machine->is_signal
&& !cfun->machine->is_OS_task
&& live_seq);
if (minimize && (frame_pointer_needed || live_seq > 4))
......@@ -876,9 +884,11 @@ expand_epilogue (void)
emit_move_insn (stack_pointer_rtx, frame_pointer_rtx);
}
}
/* Restore previous frame_pointer. */
emit_insn (gen_pophi (frame_pointer_rtx));
if(!cfun->machine->is_OS_task)
{
/* Restore previous frame_pointer. */
emit_insn (gen_pophi (frame_pointer_rtx));
}
}
/* Restore used registers. */
HARD_REG_SET set;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment