From d5d1738a3a56748bc7c8c9f591d18d6bae469b6c Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Fri, 5 Sep 1997 02:36:53 +0000 Subject: Fix mips-sgi-irix5.2 eh25 g++ testsuite failure. * mips.md (nonlocal_goto_receiver): Define. From-SVN: r15091 --- gcc/ChangeLog | 2 ++ gcc/config/mips/mips.md | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 039e408..9bea4de 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,7 @@ Thu Sep 4 15:02:27 1997 Jim Wilson + * mips.md (nonlocal_goto_receiver): Define. + * profile.c (output_arc_profiler): Check next_insert_after for non NULL before deferencing it. diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 770a91c..8bc70b7 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -6392,6 +6392,24 @@ move\\t%0,%z4\\n\\ (set_attr "mode" "none") (set_attr "length" "6")]) +;; ??? This is a hack to work around a problem with expand_builtin_setjmp. +;; It restores the frame pointer, and then does a call to restore the global +;; pointer (gp) register. The call insn implicitly (via the assembler) reloads +;; gp from the stack. However, call insns do not depend on $fp, so it is +;; possible for the instruction scheduler to move the fp restore after the +;; call, which then causes gp to be corrupted. We fix this by emitting a +;; scheduler barrier. A better fix is to put code here that restores the +;; $gp, and then the call is unnecessary. This is only a problem when PIC +;; (TARGET_ABICALLS), and only when the gp register is caller-saved +;; (irix5/o32, but not irix6/n32/n64). + +(define_expand "nonlocal_goto_receiver" + [(const_int 0)] + "" + " +{ + emit_insn (gen_blockage ()); +}") ;; ;; .................... -- cgit v1.1