diff options
author | Alexandre Oliva <aoliva@cygnus.com> | 2000-05-01 17:09:05 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2000-05-01 17:09:05 +0000 |
commit | ed6089d61b5e8146c5eb84c57141748fb0396e15 (patch) | |
tree | 3e7e4d11f906f775d3e6455ab7a78b01d0d07eb3 | |
parent | 7c714ee1c36c093f15b2e2dbd5bbdd74f87e7d3e (diff) | |
download | gcc-ed6089d61b5e8146c5eb84c57141748fb0396e15.zip gcc-ed6089d61b5e8146c5eb84c57141748fb0396e15.tar.gz gcc-ed6089d61b5e8146c5eb84c57141748fb0396e15.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.c | 31 |
2 files changed, 12 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bee0427..77fdec3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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> * tm.texi (TARGET_HAS_F_SETFLKW): Fix typo. diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index 70577ff..e643505 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -452,11 +452,7 @@ expand_epilogue () emit_move_insn (stack_pointer_rtx, frame_pointer_rtx); size = 0; } - else if ((regs_ever_live[2] || regs_ever_live[3] - || 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) + else if (size + REG_SAVE_BYTES > 255) { emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, @@ -464,31 +460,16 @@ expand_epilogue () size = 0; } - /* For simplicity, we just movm all the callee saved registers to - the stack with one instruction. - - ?!? Only save registers which are actually used. Reduces - stack requirements and is faster. */ - if (regs_ever_live[2] || regs_ever_live[3] + /* Adjust the stack and restore callee-saved registers, if any. */ + if (size || regs_ever_live[2] || regs_ever_live[3] || regs_ever_live[6] || regs_ever_live[7] || regs_ever_live[14] || regs_ever_live[15] || regs_ever_live[16] || regs_ever_live[17] || 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 - { - 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 ()); - } - } + emit_jump_insn (gen_return_internal ()); } /* Update the condition code from the insn. */ |