Commit ed6089d6 by Alexandre Oliva Committed by Alexandre Oliva

mn10300.c (expand_epilogue): If SP is to be adjusted by less than 256 bytes...

* config/mn10300/mn10300.c (expand_epilogue): If SP is to be
adjusted by less than 256 bytes, use ret regardless of having any
callee-saved register to restore.

From-SVN: r33573
parent 7c714ee1
2000-05-01 Alexandre Oliva <aoliva@cygnus.com>
* config/mn10300/mn10300.c (expand_epilogue): If SP is to be
adjusted by less than 256 bytes, use ret regardless of having any
callee-saved register to restore.
2000-05-01 Laurynas Biveinis <lauras@softhome.net> 2000-05-01 Laurynas Biveinis <lauras@softhome.net>
* tm.texi (TARGET_HAS_F_SETFLKW): Fix typo. * tm.texi (TARGET_HAS_F_SETFLKW): Fix typo.
......
...@@ -452,11 +452,7 @@ expand_epilogue () ...@@ -452,11 +452,7 @@ expand_epilogue ()
emit_move_insn (stack_pointer_rtx, frame_pointer_rtx); emit_move_insn (stack_pointer_rtx, frame_pointer_rtx);
size = 0; size = 0;
} }
else if ((regs_ever_live[2] || regs_ever_live[3] else if (size + REG_SAVE_BYTES > 255)
|| regs_ever_live[14] || regs_ever_live[15]
|| regs_ever_live[16] || regs_ever_live[17]
|| regs_ever_live[6] || regs_ever_live[7])
&& size + REG_SAVE_BYTES > 255)
{ {
emit_insn (gen_addsi3 (stack_pointer_rtx, emit_insn (gen_addsi3 (stack_pointer_rtx,
stack_pointer_rtx, stack_pointer_rtx,
...@@ -464,31 +460,16 @@ expand_epilogue () ...@@ -464,31 +460,16 @@ expand_epilogue ()
size = 0; size = 0;
} }
/* For simplicity, we just movm all the callee saved registers to /* Adjust the stack and restore callee-saved registers, if any. */
the stack with one instruction. if (size || regs_ever_live[2] || regs_ever_live[3]
?!? Only save registers which are actually used. Reduces
stack requirements and is faster. */
if (regs_ever_live[2] || regs_ever_live[3]
|| regs_ever_live[6] || regs_ever_live[7] || regs_ever_live[6] || regs_ever_live[7]
|| regs_ever_live[14] || regs_ever_live[15] || regs_ever_live[14] || regs_ever_live[15]
|| regs_ever_live[16] || regs_ever_live[17] || regs_ever_live[16] || regs_ever_live[17]
|| frame_pointer_needed) || frame_pointer_needed)
emit_jump_insn (gen_return_internal_regs (GEN_INT (size + REG_SAVE_BYTES))); emit_jump_insn (gen_return_internal_regs
(GEN_INT (size + REG_SAVE_BYTES)));
else else
{ emit_jump_insn (gen_return_internal ());
if (size)
{
emit_insn (gen_addsi3 (stack_pointer_rtx,
stack_pointer_rtx,
GEN_INT (size)));
emit_jump_insn (gen_return_internal ());
}
else
{
emit_jump_insn (gen_return ());
}
}
} }
/* Update the condition code from the insn. */ /* Update the condition code from the insn. */
......
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