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;
}")