From bf1b20dab8c1b971e2330918fe4b3707b7f876db Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Tue, 12 Mar 1996 13:54:00 -0500 Subject: [PATCH] (nonlocal_goto): Emit barrier after jump. (setjmp{,_64,_32}): New patterns. From-SVN: r11520 --- gcc/config/sparc/sparc.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index bfe83bc76a5..817e5e02460 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -5429,6 +5429,7 @@ emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx)); /* Return, restoring reg window and jumping to goto handler. */ emit_insn (gen_goto_handler_and_restore ()); + emit_barrier (); DONE; }") @@ -5448,6 +5449,36 @@ [(set_attr "type" "misc") (set_attr "length" "2")]) +;; Pattern for use after a setjmp to store FP and the return register +;; into the stack area. + +(define_expand "setjmp" + [(const_int 0)] + "" + " +{ + if (TARGET_ARCH64) + emit_insn (gen_setjmp_64 ()); + else + emit_insn (gen_setjmp_32 ()); + + DONE; +}") + +(define_expand "setjmp_32" + [(set (mem:SI (plus:SI (reg:SI 14) (const_int 56))) (match_dup 0)) + (set (mem:SI (plus:SI (reg:SI 14) (const_int 60))) (reg:SI 31))] + "" + " +{ operands[0] = frame_pointer_rtx; }") + +(define_expand "setjmp_64" + [(set (mem:DI (plus:DI (reg:DI 14) (const_int 112))) (match_dup 0)) + (set (mem:DI (plus:DI (reg:DI 14) (const_int 120))) (reg:DI 31))] + "" + " +{ operands[0] = frame_pointer_rtx; }") + ;; Special pattern for the FLUSH instruction. (define_insn "flush" -- 2.30.2