diff options
author | Jeffrey A. Law <law@snake.cs.utah.edu> | 1995-05-01 23:27:01 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1995-05-01 23:27:01 -0600 |
commit | 473fa8ccce8bb50c9ff8c591520cd8aadc7691d1 (patch) | |
tree | 84502c63e195294f2ce994c446282ae40f201f05 | |
parent | 509b12e0c5a11970115b5d61ac4081f1a6f6d90e (diff) | |
download | gcc-473fa8ccce8bb50c9ff8c591520cd8aadc7691d1.zip gcc-473fa8ccce8bb50c9ff8c591520cd8aadc7691d1.tar.gz gcc-473fa8ccce8bb50c9ff8c591520cd8aadc7691d1.tar.bz2 |
pa.c (hppa_expand_epilogue): Correctly handle restore of %rp for functions with a stack size of exactly...
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.
From-SVN: r9561
-rw-r--r-- | gcc/config/pa/pa.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index ab43981..f6a6960 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 */ |