summaryrefslogtreecommitdiff
path: root/gcc/config/pa
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1995-05-02 05:27:01 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1995-05-02 05:27:01 +0000
commit8c824e42d6ed25b20f87d5dbd1e75347b4eb3b2f (patch)
tree84502c63e195294f2ce994c446282ae40f201f05 /gcc/config/pa
parent1ae11ad706b8568e2227481c76c7f7b425abd757 (diff)
downloadgcc-8c824e42d6ed25b20f87d5dbd1e75347b4eb3b2f.tar.gz
Tue May 2 01:25:29 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
* pa.c (hppa_expand_epilogue): Correctly handle restore of %rp for functions with a stack size of exactly 8kbytes and no frame pointer. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@9561 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/pa')
-rw-r--r--gcc/config/pa/pa.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index ab43981c203..f6a6960ca47 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -2439,8 +2439,15 @@ hppa_expand_epilogue ()
set_reg_plus_d (STACK_POINTER_REGNUM,
STACK_POINTER_REGNUM,
- actual_fsize);
- /* Uses value left over in %r1 by set_reg_plus_d. */
- load_reg (2, - (actual_fsize + 20 + ((- actual_fsize) & ~0x7ff)), 1);
+
+ /* This used to try and be clever by not depending on the value in
+ %r30 and instead use the value held in %r1 (so that the 2nd insn
+ which sets %r30 could be put in the delay slot of the return insn).
+
+ That won't work since if the stack is exactly 8k set_reg_plus_d
+ doesn't set %r1, just %r30. */
+ load_reg (2, - (actual_fsize + 20 + ((- actual_fsize) & ~0x7ff)),
+ STACK_POINTER_REGNUM);
}
/* Reset stack pointer (and possibly frame pointer). The stack */