aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-08-14 09:01:18 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-08-14 09:01:18 -0400
commit31cc58e92d73996720e10f818522e7ac9dc0ef3d (patch)
tree23a02ecdb728d47535c8f836652bd1b14fc9b3a7 /gcc/config
parent7276e85d35c9cc9add7ca05f00fd3e2be649ce71 (diff)
downloadgcc-31cc58e92d73996720e10f818522e7ac9dc0ef3d.zip
gcc-31cc58e92d73996720e10f818522e7ac9dc0ef3d.tar.gz
gcc-31cc58e92d73996720e10f818522e7ac9dc0ef3d.tar.bz2
(call expanders): Emit a blockage insn after restoring %r19 when
generating PIC. From-SVN: r10236
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/pa/pa.md20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index de8e081..c2c2a26 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -3632,6 +3632,26 @@
emit_move_insn (pic_offset_table_rtx,
gen_rtx (REG, SImode, PIC_OFFSET_TABLE_REGNUM_SAVED));
emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
+
+ /* Gross. We have to keep the scheduler from moving the restore
+ of the PIC register away from the call. SCHED_GROUP_P is
+ supposed to do this, but for some reason the compiler will
+ go into an infinite loop when we use that.
+
+ This method (blockage insn) may make worse code (then again
+ it may not since calls are nearly blockages anyway), but at
+ least it should work. */
+ emit_insn (gen_blockage ());
+
+ /* Gross. We have to keep the scheduler from moving the restore
+ of the PIC register away from the call. SCHED_GROUP_P is
+ supposed to do this, but for some reason the compiler will
+ go into an infinite loop when we use that.
+
+ This method (blockage insn) may make worse code (then again
+ it may not since calls are nearly blockages anyway), but at
+ least it should work. */
+ emit_insn (gen_blockage ());
}
DONE;
}")