i386.md (UNSPECV_EH_RETURN): Kill.
authorJan Hubicka <jh@suse.cz>
Wed, 26 May 2004 22:19:40 +0000 (00:19 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 26 May 2004 22:19:40 +0000 (22:19 +0000)
* i386.md (UNSPECV_EH_RETURN): Kill.
(eh_return): Use jump_insn.
(eh_return_si, eh_return_di): Change pattern to jump instruction.

From-SVN: r82295

gcc/ChangeLog
gcc/config/i386/i386.md

index 1bacc993b2461b8eb6c5253738e6cf715a84b24b..1fad8d51b1fb00381963e5a459a5e8131eca3160 100644 (file)
@@ -1,3 +1,9 @@
+2004-05-27  Jan Hubicka  <jh@suse.cz>
+
+       * i386.md (UNSPECV_EH_RETURN): Kill.
+       (eh_return): Use jump_insn.
+       (eh_return_si, eh_return_di): Change pattern to jump instruction.
+
 2004-05-26  Jan Hubicka  <jh@suse.cz>
 
        * cfgcleanup.c (try_forward_edges):  Do not check loop structure when
index 270168ff75b9421df6c714cf0ef0a6bbc05789f6..40f33fba29e79b349c7d5151195ca85130487f73 100644 (file)
 
    ; REP instruction
    (UNSPEC_REP                 75)
+
+   (UNSPEC_EH_RETURN           76)
   ])
 
 (define_constants
   [(UNSPECV_BLOCKAGE           0)
-   (UNSPECV_EH_RETURN          13)
    (UNSPECV_EMMS               31)
    (UNSPECV_LDMXCSR            37)
    (UNSPECV_STMXCSR            40)
   ""
 {
   rtx tmp, sa = EH_RETURN_STACKADJ_RTX, ra = operands[0];
+  rtx jmp;
 
   /* Tricky bit: we write the address of the handler to which we will
      be returning into someone else's stack frame, one word below the
   emit_move_insn (tmp, ra);
 
   if (Pmode == SImode)
-    emit_insn (gen_eh_return_si (sa));
+    jmp = emit_jump_insn (gen_eh_return_si (sa));
   else
-    emit_insn (gen_eh_return_di (sa));
+    jmp = emit_jump_insn (gen_eh_return_di (sa));
+  REG_NOTES (jmp) = alloc_EXPR_LIST (REG_NON_LOCAL_GOTO, const0_rtx,
+                                     REG_NOTES (jmp));
   emit_barrier ();
   DONE;
 })
 
 (define_insn_and_split "eh_return_si"
-  [(unspec_volatile [(match_operand:SI 0 "register_operand" "c")]
-                   UNSPECV_EH_RETURN)]
+  [(set (pc) 
+        (unspec [(match_operand:SI 0 "register_operand" "c")]
+                UNSPEC_EH_RETURN))]
   "!TARGET_64BIT"
   "#"
   "reload_completed"
   "ix86_expand_epilogue (2); DONE;")
 
 (define_insn_and_split "eh_return_di"
-  [(unspec_volatile [(match_operand:DI 0 "register_operand" "c")]
-                   UNSPECV_EH_RETURN)]
+  [(set (pc) 
+        (unspec [(match_operand:DI 0 "register_operand" "c")]
+                UNSPEC_EH_RETURN))]
   "TARGET_64BIT"
   "#"
   "reload_completed"