aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-05-06 07:35:29 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1992-05-06 07:35:29 -0400
commit59257ff7b87ae9f17395c48ad6e4dd9a123b0d9d (patch)
treeb5209b7c5df800016e8e17a01db1d611312f1480 /gcc/calls.c
parenta196f01fdf15b503763b23822770e1c945517cef (diff)
downloadgcc-59257ff7b87ae9f17395c48ad6e4dd9a123b0d9d.zip
gcc-59257ff7b87ae9f17395c48ad6e4dd9a123b0d9d.tar.gz
gcc-59257ff7b87ae9f17395c48ad6e4dd9a123b0d9d.tar.bz2
*** empty log message ***
From-SVN: r915
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 90cdb8a..8541d16 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -800,7 +800,7 @@ expand_call (exp, target, ignore)
if (old_stack_level == 0)
{
- old_stack_level = copy_to_mode_reg (Pmode, stack_pointer_rtx);
+ emit_stack_save (SAVE_BLOCK, &old_stack_level, 0);
old_pending_adj = pending_stack_adjust;
pending_stack_adjust = 0;
}
@@ -1060,7 +1060,7 @@ expand_call (exp, target, ignore)
{
if (old_stack_level == 0)
{
- old_stack_level = copy_to_mode_reg (Pmode, stack_pointer_rtx);
+ emit_stack_save (SAVE_BLOCK, &old_stack_level, 0);
old_pending_adj = pending_stack_adjust;
pending_stack_adjust = 0;
}
@@ -1520,7 +1520,7 @@ expand_call (exp, target, ignore)
if (old_stack_level)
{
- emit_move_insn (stack_pointer_rtx, old_stack_level);
+ emit_stack_restore (SAVE_BLOCK, old_stack_level, 0);
pending_stack_adjust = old_pending_adj;
}
@@ -1570,9 +1570,12 @@ expand_call (exp, target, ignore)
}
#endif
- /* If this was alloca, record the new stack level for nonlocal gotos. */
- if (may_be_alloca && nonlocal_goto_stack_level != 0)
- emit_move_insn (nonlocal_goto_stack_level, stack_pointer_rtx);
+ /* If this was alloca, record the new stack level for nonlocal gotos.
+ Check for the handler slots since we might not have a save area
+ for non-local gotos. */
+
+ if (may_be_alloca && nonlocal_goto_handler_slot != 0)
+ emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, 0);
pop_temp_slots ();