aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@cygnus.com>2000-05-01 17:09:05 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2000-05-01 17:09:05 +0000
commited6089d61b5e8146c5eb84c57141748fb0396e15 (patch)
tree3e7e4d11f906f775d3e6455ab7a78b01d0d07eb3
parent7c714ee1c36c093f15b2e2dbd5bbdd74f87e7d3e (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/mn10300/mn10300.c31
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. */