aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1993-04-27 10:21:12 -0600
committerJeff Law <law@gcc.gnu.org>1993-04-27 10:21:12 -0600
commit3c7243a1cf5fcaa92c80dd5d528fea1190cc62fb (patch)
tree566718067bf37590ee2f102a638d8693839d0ded /gcc
parent3b39b94f8463fabe0ad1c7d1f897fe16f35e4a0a (diff)
downloadgcc-3c7243a1cf5fcaa92c80dd5d528fea1190cc62fb.zip
gcc-3c7243a1cf5fcaa92c80dd5d528fea1190cc62fb.tar.gz
gcc-3c7243a1cf5fcaa92c80dd5d528fea1190cc62fb.tar.bz2
pa.c (hppa_expand_epilogue): Emit a "blockage" insn to keepthe stack and frame pointer adjustments at the...
* pa.c (hppa_expand_epilogue): Emit a "blockage" insn to keepthe stack and frame pointer adjustments at the end of the epilogue. From-SVN: r4248
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/pa/pa.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 1ee230a..7e01981 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -2098,6 +2098,10 @@ hppa_expand_epilogue()
??? What race condition?!? */
else if (frame_pointer_needed)
{
+ /* Emit a blockage insn here to keep these insns from being moved
+ to the beginning of the prologue or into the main instruction
+ stream, doing so avoids some very obscure problems. */
+ emit_insn (gen_blockage ());
set_reg_plus_d (STACK_POINTER_REGNUM, FRAME_POINTER_REGNUM, 64);
emit_insn (gen_pre_ldwm (stack_pointer_rtx, stack_pointer_rtx,
GEN_INT (-64), frame_pointer_rtx));