diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8ba854ef3bb4ea5990d0bfa24e599181c6517ac2..e4cc38734c0ae809a059d8291d310ac4b33e3922 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2008-06-06  Uros Bizjak  <ubizjak@gmail.com>
+
+	* config/i386/i386.md (*indirect_jump): Macroize using P
+	mode iterator.  Remove !TARGET_64BIT from insn constraints.
+	(*tablejump_1): Ditto.
+	(*indirect_jump_rex64): Remove insn pattern.
+	(*tablejump_1_rex64): Ditto.
+	(eh_return_<mode>): Macroize using P mode iterator from eh_return_di
+	and eh_return_si insn patterns.
+
 2008-06-06  Richard Guenther  <rguenther@suse.de>
 
 	* tree-ssa-structalias.c (merge_smts_into): Remove.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 00a16d988e141b40080f27a73b0770e56a82c73e..6debb18d2a0a9a5bdbd3aae1d4e909cd0c5041cd 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -14363,15 +14363,8 @@
   "")
 
 (define_insn "*indirect_jump"
-  [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm"))]
-  "!TARGET_64BIT"
-  "jmp\t%A0"
-  [(set_attr "type" "ibr")
-   (set_attr "length_immediate" "0")])
-
-(define_insn "*indirect_jump_rtx64"
-  [(set (pc) (match_operand:DI 0 "nonimmediate_operand" "rm"))]
-  "TARGET_64BIT"
+  [(set (pc) (match_operand:P 0 "nonimmediate_operand" "rm"))]
+  ""
   "jmp\t%A0"
   [(set_attr "type" "ibr")
    (set_attr "length_immediate" "0")])
@@ -14415,17 +14408,9 @@
 })
 
 (define_insn "*tablejump_1"
-  [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm"))
-   (use (label_ref (match_operand 1 "" "")))]
-  "!TARGET_64BIT"
-  "jmp\t%A0"
-  [(set_attr "type" "ibr")
-   (set_attr "length_immediate" "0")])
-
-(define_insn "*tablejump_1_rtx64"
-  [(set (pc) (match_operand:DI 0 "nonimmediate_operand" "rm"))
+  [(set (pc) (match_operand:P 0 "nonimmediate_operand" "rm"))
    (use (label_ref (match_operand 1 "" "")))]
-  "TARGET_64BIT"
+  ""
   "jmp\t%A0"
   [(set_attr "type" "ibr")
    (set_attr "length_immediate" "0")])
@@ -14876,21 +14861,11 @@
   DONE;
 })
 
-(define_insn_and_split "eh_return_si"
-  [(set (pc)
-        (unspec [(match_operand:SI 0 "register_operand" "c")]
-	         UNSPEC_EH_RETURN))]
-  "!TARGET_64BIT"
-  "#"
-  "reload_completed"
-  [(const_int 0)]
-  "ix86_expand_epilogue (2); DONE;")
-
-(define_insn_and_split "eh_return_di"
+(define_insn_and_split "eh_return_<mode>"
   [(set (pc)
-        (unspec [(match_operand:DI 0 "register_operand" "c")]
+        (unspec [(match_operand:P 0 "register_operand" "c")]
 	         UNSPEC_EH_RETURN))]
-  "TARGET_64BIT"
+  ""
   "#"
   "reload_completed"
   [(const_int 0)]