]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR target/51244
authorolegendo <olegendo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Jul 2012 15:03:21 +0000 (15:03 +0000)
committerolegendo <olegendo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Jul 2012 15:03:21 +0000 (15:03 +0000)
* config/sh/sh.md (*branch_true_eq, *branch_false_ne, nott): New insns.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189360 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/sh/sh.md

index f0f0bfaa3c2e2dc6994783f30d5bb8c322390754..4e4014795875a07b597d99101b2160148fd7c7ca 100644 (file)
@@ -1,3 +1,8 @@
+2012-07-08  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/51244
+       * config/sh/sh.md (*branch_true_eq, *branch_false_ne, nott): New insns.
+
 2012-07-08  Steven Bosscher  <steven@gcc.gnu.org>
 
        * basic-block.h: Re-group most prototypes per file.
index 980aa6f30b1b47ef85e12ce1dd038400a3a3cdb7..cf37cb9179d8df00744eec7a6bbeb49d4286b506 100644 (file)
@@ -7220,6 +7220,17 @@ label:
 }
   [(set_attr "type" "cbranch")])
 
+(define_insn "*branch_true_eq"
+  [(set (pc) (if_then_else (eq (match_operand 1 "t_reg_operand" "")
+                              (const_int 1))
+                          (label_ref (match_operand 0 "" ""))
+                          (pc)))]
+  "TARGET_SH1"
+{
+  return output_branch (1, insn, operands);
+}
+  [(set_attr "type" "cbranch")])
+
 (define_insn "branch_false"
   [(set (pc) (if_then_else (eq (match_operand 1 "t_reg_operand" "")
                               (const_int 0))
@@ -7231,6 +7242,17 @@ label:
 }
   [(set_attr "type" "cbranch")])
 
+(define_insn "*branch_false_ne"
+  [(set (pc) (if_then_else (ne (match_operand 1 "t_reg_operand" "")
+                              (const_int 1))
+                          (label_ref (match_operand 0 "" ""))
+                          (pc)))]
+  "TARGET_SH1"
+{
+  return output_branch (0, insn, operands);
+}
+  [(set_attr "type" "cbranch")])
+
 ;; Patterns to prevent reorg from re-combining a condbranch with a branch
 ;; which destination is too far away.
 ;; The const_int_operand is distinct for each branch target; it avoids
@@ -9844,6 +9866,20 @@ label:
   ""
   [(const_int 0)])
 
+(define_insn_and_split "nott"
+  [(set (reg:SI T_REG) (xor:SI (reg:SI T_REG) (const_int 1)))]
+  "TARGET_SH1"
+{
+  gcc_assert (TARGET_SH2A);
+  return "nott";
+}
+  "! TARGET_SH2A && can_create_pseudo_p ()"
+  [(set (match_dup 0) (reg:SI T_REG))
+   (set (reg:SI T_REG) (eq:SI (match_dup 0) (const_int 0)))]
+{
+  operands[0] = gen_reg_rtx (SImode);
+})
+
 (define_expand "cstoresf4"
   [(set (match_operand:SI 0 "register_operand" "=r")
        (match_operator:SI 1 "sh_float_comparison_operator"