diff mbox

[i386] Remove MPX jump insn patterns

Message ID CAFULd4a=Xexqfi25Cf2NNUCNSbKv8Fp_hj8kibP+wYkeqnna7A@mail.gmail.com
State New
Headers show

Commit Message

Uros Bizjak June 29, 2015, 5:18 p.m. UTC
Hello!

Attached patch removes special MPX jump insn patterns and extends
generic jump insn patterns to handle bnd prefix using existing MPX
infrastructure.

2015-06-29  Uros Bizjak  <ubizjak@gmail.com>

    * config/i386/i386.md (*jcc_1): Use %! in asm template.
    Set attribute "length_nobnd" instead of "length".
    (*jcc_2): Ditto.
    (jump): Ditto.
    (*jcc_1_bnd, *jcc_2_bnd, jump_bnd): Remove insn patterns.

Patch was tested on x86_64-linux-gnu {,-m32} and committed to mainline SVN.

Uros.
diff mbox

Patch

Index: config/i386/i386.md
===================================================================
--- config/i386/i386.md	(revision 225123)
+++ config/i386/i386.md	(working copy)
@@ -10948,24 +10948,6 @@ 
 ;; Basic conditional jump instructions.
 ;; We ignore the overflow flag for signed branch instructions.
 
-(define_insn "*jcc_1_bnd"
-  [(set (pc)
-	(if_then_else (match_operator 1 "ix86_comparison_operator"
-				      [(reg FLAGS_REG) (const_int 0)])
-		      (label_ref (match_operand 0))
-		      (pc)))]
-  "TARGET_MPX && ix86_bnd_prefixed_insn_p (insn)"
-  "bnd %+j%C1\t%l0"
-  [(set_attr "type" "ibr")
-   (set_attr "modrm" "0")
-   (set (attr "length")
-	   (if_then_else (and (ge (minus (match_dup 0) (pc))
-				  (const_int -126))
-			      (lt (minus (match_dup 0) (pc))
-				  (const_int 128)))
-	     (const_int 3)
-	     (const_int 7)))])
-
 (define_insn "*jcc_1"
   [(set (pc)
 	(if_then_else (match_operator 1 "ix86_comparison_operator"
@@ -10973,35 +10955,18 @@ 
 		      (label_ref (match_operand 0))
 		      (pc)))]
   ""
-  "%+j%C1\t%l0"
+  "%!%+j%C1\t%l0"
   [(set_attr "type" "ibr")
    (set_attr "modrm" "0")
-   (set (attr "length")
-	   (if_then_else (and (ge (minus (match_dup 0) (pc))
-				  (const_int -126))
-			      (lt (minus (match_dup 0) (pc))
-				  (const_int 128)))
-	     (const_int 2)
-	     (const_int 6)))])
+   (set (attr "length_nobnd")
+	(if_then_else
+	  (and (ge (minus (match_dup 0) (pc))
+		   (const_int -126))
+	       (lt (minus (match_dup 0) (pc))
+		   (const_int 128)))
+	  (const_int 2)
+	  (const_int 6)))])
 
-(define_insn "*jcc_2_bnd"
-  [(set (pc)
-	(if_then_else (match_operator 1 "ix86_comparison_operator"
-				      [(reg FLAGS_REG) (const_int 0)])
-		      (pc)
-		      (label_ref (match_operand 0))))]
-  "TARGET_MPX && ix86_bnd_prefixed_insn_p (insn)"
-  "bnd %+j%c1\t%l0"
-  [(set_attr "type" "ibr")
-   (set_attr "modrm" "0")
-   (set (attr "length")
-	   (if_then_else (and (ge (minus (match_dup 0) (pc))
-				  (const_int -126))
-			      (lt (minus (match_dup 0) (pc))
-				  (const_int 128)))
-	     (const_int 3)
-	     (const_int 7)))])
-
 (define_insn "*jcc_2"
   [(set (pc)
 	(if_then_else (match_operator 1 "ix86_comparison_operator"
@@ -11009,16 +10974,17 @@ 
 		      (pc)
 		      (label_ref (match_operand 0))))]
   ""
-  "%+j%c1\t%l0"
+  "%!%+j%c1\t%l0"
   [(set_attr "type" "ibr")
    (set_attr "modrm" "0")
-   (set (attr "length")
-	   (if_then_else (and (ge (minus (match_dup 0) (pc))
-				  (const_int -126))
-			      (lt (minus (match_dup 0) (pc))
-				  (const_int 128)))
-	     (const_int 2)
-	     (const_int 6)))])
+   (set (attr "length_nobnd")
+	(if_then_else
+	  (and (ge (minus (match_dup 0) (pc))
+		   (const_int -126))
+	       (lt (minus (match_dup 0) (pc))
+		   (const_int 128)))
+	  (const_int 2)
+	  (const_int 6)))])
 
 ;; In general it is not safe to assume too much about CCmode registers,
 ;; so simplify-rtx stops when it sees a second one.  Under certain
@@ -11452,35 +11418,21 @@ 
 
 ;; Unconditional and other jump instructions
 
-(define_insn "jump_bnd"
-  [(set (pc)
-	(label_ref (match_operand 0)))]
-  "TARGET_MPX && ix86_bnd_prefixed_insn_p (insn)"
-  "bnd jmp\t%l0"
-  [(set_attr "type" "ibr")
-   (set (attr "length")
-	   (if_then_else (and (ge (minus (match_dup 0) (pc))
-				  (const_int -126))
-			      (lt (minus (match_dup 0) (pc))
-				  (const_int 128)))
-	     (const_int 3)
-	     (const_int 6)))
-   (set_attr "modrm" "0")])
-
 (define_insn "jump"
   [(set (pc)
 	(label_ref (match_operand 0)))]
   ""
-  "jmp\t%l0"
+  "%!jmp\t%l0"
   [(set_attr "type" "ibr")
-   (set (attr "length")
-	   (if_then_else (and (ge (minus (match_dup 0) (pc))
-				  (const_int -126))
-			      (lt (minus (match_dup 0) (pc))
-				  (const_int 128)))
-	     (const_int 2)
-	     (const_int 5)))
-   (set_attr "modrm" "0")])
+   (set_attr "modrm" "0")
+   (set (attr "length_nobnd")
+	(if_then_else
+	  (and (ge (minus (match_dup 0) (pc))
+		   (const_int -126))
+	       (lt (minus (match_dup 0) (pc))
+		   (const_int 128)))
+	  (const_int 2)
+	  (const_int 5)))])
 
 (define_expand "indirect_jump"
   [(set (pc) (match_operand 0 "indirect_branch_operand"))]