* arm.md (IOR (COMPARISON) (AND)): New define_splits.
authorRichard Earnshaw <rearnsha@arm.com>
Sat, 6 Dec 2003 14:14:52 +0000 (14:14 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Sat, 6 Dec 2003 14:14:52 +0000 (14:14 +0000)
From-SVN: r74366

gcc/ChangeLog
gcc/config/arm/arm.md

index 67e19d898ed3fffc1448b912b86000bef3a4c753..89d0735e233cf3dfa5dfbba5c4c3e130bcc64bbe 100644 (file)
@@ -1,3 +1,7 @@
+2003-12-06  Richard Earnshaw  <reanrsha@arm.com>
+
+       * arm.md (IOR (COMPARISON) (AND)): New define_splits.
+
 2003-12-06  Kelley Cook  <kcook@gcc.gnu.org>
 
        * Makefile.in (program_transform_cross_name): Delete.
index 17a37704e3d9d3d959005b69e964a4c2d339cbcc..3c4dffc9185aadd23277fcc2bdb8bd1883b36cc1 100644 (file)
   [(set_attr "conds" "clob")
    (set_attr "length" "20")])
 
+(define_split
+  [(set (reg:CC_NOOV CC_REGNUM)
+       (compare:CC_NOOV (ior:SI
+                         (and:SI (match_operand:SI 0 "s_register_operand" "")
+                                 (const_int 1))
+                         (match_operator:SI 1 "comparison_operator"
+                          [(match_operand:SI 2 "s_register_operand" "")
+                           (match_operand:SI 3 "arm_add_operand" "")]))
+                        (const_int 0)))
+   (clobber (match_operand:SI 4 "s_register_operand" ""))]
+  "TARGET_ARM"
+  [(set (match_dup 4)
+       (ior:SI (match_op_dup 1 [(match_dup 2) (match_dup 3)])
+               (match_dup 0)))
+   (set (reg:CC_NOOV CC_REGNUM)
+       (compare:CC_NOOV (and:SI (match_dup 4) (const_int 1))
+                        (const_int 0)))]
+  "")
+
+(define_split
+  [(set (reg:CC_NOOV CC_REGNUM)
+       (compare:CC_NOOV (ior:SI
+                         (match_operator:SI 1 "comparison_operator"
+                          [(match_operand:SI 2 "s_register_operand" "")
+                           (match_operand:SI 3 "arm_add_operand" "")])
+                         (and:SI (match_operand:SI 0 "s_register_operand" "")
+                                 (const_int 1)))
+                        (const_int 0)))
+   (clobber (match_operand:SI 4 "s_register_operand" ""))]
+  "TARGET_ARM"
+  [(set (match_dup 4)
+       (ior:SI (match_op_dup 1 [(match_dup 2) (match_dup 3)])
+               (match_dup 0)))
+   (set (reg:CC_NOOV CC_REGNUM)
+       (compare:CC_NOOV (and:SI (match_dup 4) (const_int 1))
+                        (const_int 0)))]
+  "")
+
 (define_insn "*negscc"
   [(set (match_operand:SI 0 "s_register_operand" "=r")
        (neg:SI (match_operator 3 "arm_comparison_operator"