From: Richard Henderson Date: Wed, 24 Jan 2001 09:00:02 +0000 (-0800) Subject: alpha.md (builtin_longjmp_internal): New. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=64b4ab5a189e1fc8fb18b1e9d4efd7e29c682af5;p=gcc.git alpha.md (builtin_longjmp_internal): New. * config/alpha/alpha.md (builtin_longjmp_internal): New. (builtin_longjmp): Use it instead of emit_indirect_jump. From-SVN: r39232 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7c1958cd33d..4a2c49a8354 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-01-24 Richard Henderson + + * config/alpha/alpha.md (builtin_longjmp_internal): New. + (builtin_longjmp): Use it instead of emit_indirect_jump. + 2001-01-23 John David Anglin * bb-reorder.c (make_reorder_chain_1): Handle case where diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index 23d9f5ae6dd..9961617a3dc 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -5913,7 +5913,7 @@ "lda %0,%1(%0)") (define_expand "builtin_longjmp" - [(unspec_volatile [(match_operand:DI 0 "register_operand" "r")] 3)] + [(use (match_operand:DI 0 "register_operand" "r"))] "! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT" " { @@ -5933,10 +5933,20 @@ /* Load the label we are jumping through into $27 so that we know where to look for it when we get back to setjmp's function for restoring the gp. */ - emit_indirect_jump (pv); + emit_jump_insn (gen_builtin_longjmp_internal (pv)); + emit_barrier (); DONE; }") +;; This is effectively a copy of indirect_jump, but constrained such +;; that register renaming cannot foil our cunning plan with $27. +(define_insn "builtin_longjmp_internal" + [(set (pc) + (unspec_volatile [(match_operand:DI 0 "register_operand" "c")] 3))] + "" + "jmp $31,(%0),0" + [(set_attr "type" "ibr")]) + (define_insn "*builtin_setjmp_receiver_sub_label" [(unspec_volatile [(label_ref (match_operand 0 "" ""))] 2)] "! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT && TARGET_AS_CAN_SUBTRACT_LABELS"