OSDN Git Service

2006-06-19 Andreas Krebbel <krebbel1@de.ibm.com>
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 Jun 2006 08:01:56 +0000 (08:01 +0000)
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 Jun 2006 08:01:56 +0000 (08:01 +0000)
* config/s390/s390.md ("doloop_si64", "doloop_si31", "doloop_di"):
Add a new alternative to the constraint strings. Add move of
operand 1 to 3 to the splitter definition.
("doloop_si_long"): Second contraint alternative removed.

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

gcc/ChangeLog
gcc/config/s390/s390.md

index 505b26e..2c7c65a 100644 (file)
@@ -1,3 +1,10 @@
+2006-06-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * config/s390/s390.md ("doloop_si64", "doloop_si31", "doloop_di"): 
+       Add a new alternative to the constraint strings. Add move of
+       operand 1 to 3 to the splitter definition.
+       ("doloop_si_long"): Second contraint alternative removed.
+
 2006-06-08  Anatoly Sokolov <aesok@post.ru>
 
        * config/avr/avr.h (avr_have_movw_lpmx_p): Declare.
index 6459c81..d6443e0 100644 (file)
 (define_insn_and_split "doloop_si64"
   [(set (pc)
         (if_then_else
-          (ne (match_operand:SI 1 "register_operand" "d,d")
+          (ne (match_operand:SI 1 "register_operand" "d,d,d")
               (const_int 1))
           (label_ref (match_operand 0 "" ""))
           (pc)))
-   (set (match_operand:SI 2 "nonimmediate_operand" "=1,?*m*d")
+   (set (match_operand:SI 2 "nonimmediate_operand" "=1,?X,?X")
         (plus:SI (match_dup 1) (const_int -1)))
-   (clobber (match_scratch:SI 3 "=X,&1"))
+   (clobber (match_scratch:SI 3 "=X,&1,&?d"))
    (clobber (reg:CC CC_REGNUM))]
   "TARGET_CPU_ZARCH"
 {
   "&& reload_completed
    && (! REG_P (operands[2])
        || ! rtx_equal_p (operands[1], operands[2]))"
-  [(parallel [(set (reg:CCAN CC_REGNUM)
+  [(set (match_dup 3) (match_dup 1))
+   (parallel [(set (reg:CCAN CC_REGNUM)
                    (compare:CCAN (plus:SI (match_dup 3) (const_int -1))
                                  (const_int 0)))
               (set (match_dup 3) (plus:SI (match_dup 3) (const_int -1)))])
 (define_insn_and_split "doloop_si31"
   [(set (pc)
         (if_then_else
-          (ne (match_operand:SI 1 "register_operand" "d,d")
+          (ne (match_operand:SI 1 "register_operand" "d,d,d")
               (const_int 1))
           (label_ref (match_operand 0 "" ""))
           (pc)))
-   (set (match_operand:SI 2 "nonimmediate_operand" "=1,?*m*d")
+   (set (match_operand:SI 2 "nonimmediate_operand" "=1,?X,?X")
         (plus:SI (match_dup 1) (const_int -1)))
-   (clobber (match_scratch:SI 3 "=X,&1"))
+   (clobber (match_scratch:SI 3 "=X,&1,&?d"))
    (clobber (reg:CC CC_REGNUM))]
   "!TARGET_CPU_ZARCH"
 {
   "&& reload_completed
    && (! REG_P (operands[2])
        || ! rtx_equal_p (operands[1], operands[2]))"
-  [(parallel [(set (reg:CCAN CC_REGNUM)
+  [(set (match_dup 3) (match_dup 1))
+   (parallel [(set (reg:CCAN CC_REGNUM)
                    (compare:CCAN (plus:SI (match_dup 3) (const_int -1))
                                  (const_int 0)))
               (set (match_dup 3) (plus:SI (match_dup 3) (const_int -1)))])
 (define_insn "*doloop_si_long"
   [(set (pc)
         (if_then_else
-          (ne (match_operand:SI 1 "register_operand" "d,d")
+          (ne (match_operand:SI 1 "register_operand" "d")
               (const_int 1))
-          (match_operand 0 "address_operand" "U,U")
+          (match_operand 0 "address_operand" "U")
           (pc)))
-   (set (match_operand:SI 2 "register_operand" "=1,?*m*d")
+   (set (match_operand:SI 2 "register_operand" "=1")
         (plus:SI (match_dup 1) (const_int -1)))
-   (clobber (match_scratch:SI 3 "=X,&1"))
+   (clobber (match_scratch:SI 3 "=X"))
    (clobber (reg:CC CC_REGNUM))]
   "!TARGET_CPU_ZARCH"
 {
 (define_insn_and_split "doloop_di"
   [(set (pc)
         (if_then_else
-          (ne (match_operand:DI 1 "register_operand" "d,d")
+          (ne (match_operand:DI 1 "register_operand" "d,d,d")
               (const_int 1))
           (label_ref (match_operand 0 "" ""))
           (pc)))
-   (set (match_operand:DI 2 "nonimmediate_operand" "=1,?*m*d")
+   (set (match_operand:DI 2 "nonimmediate_operand" "=1,?X,?X")
         (plus:DI (match_dup 1) (const_int -1)))
-   (clobber (match_scratch:DI 3 "=X,&1"))
+   (clobber (match_scratch:DI 3 "=X,&1,&?d"))
    (clobber (reg:CC CC_REGNUM))]
   "TARGET_64BIT"
 {
   "&& reload_completed
    && (! REG_P (operands[2])
        || ! rtx_equal_p (operands[1], operands[2]))"
-  [(parallel [(set (reg:CCAN CC_REGNUM)
+  [(set (match_dup 3) (match_dup 1))
+   (parallel [(set (reg:CCAN CC_REGNUM)
                    (compare:CCAN (plus:DI (match_dup 3) (const_int -1))
                                  (const_int 0)))
               (set (match_dup 3) (plus:DI (match_dup 3) (const_int -1)))])