OSDN Git Service

* arm.md (IOR (COMPARISON) (AND)): New define_splits.
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 6 Dec 2003 14:14:52 +0000 (14:14 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 6 Dec 2003 14:14:52 +0000 (14:14 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74366 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 67e19d8..89d0735 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 17a3770..3c4dffc 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"