diff options
author | Richard Henderson <rth@redhat.com> | 2001-01-24 01:00:02 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-01-24 01:00:02 -0800 |
commit | 64b4ab5a189e1fc8fb18b1e9d4efd7e29c682af5 (patch) | |
tree | a5e6645b21825a54649ae3a29212c7bc7dfce5d5 | |
parent | 28d0a4d8f7510ae3f721b6a5c7ea836cf3ce63d0 (diff) | |
download | gcc-64b4ab5a189e1fc8fb18b1e9d4efd7e29c682af5.zip gcc-64b4ab5a189e1fc8fb18b1e9d4efd7e29c682af5.tar.gz gcc-64b4ab5a189e1fc8fb18b1e9d4efd7e29c682af5.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.md | 14 |
2 files changed, 17 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7c1958c..4a2c49a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-01-24 Richard Henderson <rth@redhat.com> + + * config/alpha/alpha.md (builtin_longjmp_internal): New. + (builtin_longjmp): Use it instead of emit_indirect_jump. + 2001-01-23 John David Anglin <dave@hiauly1.hia.nrc.ca> * 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 23d9f5a..9961617 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" |