c4x.md (binary patterns): Reorder alternatives so that two operand instructions are...
authorMichael Hayes <m.hayes@elec.canterbury.ac.nz>
Tue, 20 Apr 1999 23:12:27 +0000 (23:12 +0000)
committerMichael Hayes <m.hayes@gcc.gnu.org>
Tue, 20 Apr 1999 23:12:27 +0000 (23:12 +0000)
* config/c4x/c4x.md (binary patterns): Reorder alternatives
so that two operand instructions are chosen before three operand
instructions.

From-SVN: r26570

gcc/ChangeLog
gcc/config/c4x/c4x.md

index f56a4d4..353beff 100644 (file)
@@ -1,4 +1,8 @@
-Tue Apr 20 23:38:58 1999  Nathan Sidwell  <nathan@acm.org>
+Wed Apr 21 17:41:29 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+
+       * config/c4x/c4x.md (binary patterns): Reorder alternatives
+       so that two operand instructions are chosen before three operand
+       instructions.Tue Apr 20 23:38:58 1999  Nathan Sidwell  <nathan@acm.org>
 
        * objc/Make-lang.in (objc-parse.c): Put BISON parameters in correct
        order.
index e7e1324..fc567f2 100644 (file)
@@ -1,4 +1,4 @@
-];; Machine description for the TMS320C[34]x for GNU C compiler
+;; Machine description for the TMS320C[34]x for GNU C compiler
 ;; Copyright (C) 1994-98, 1999 Free Software Foundation, Inc.
 
 ;; Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
    }")
 
 (define_insn "*addqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,rR,rS<>,0")
-                 (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,JR,rS<>,rIm")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (plus:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>,0,rR,rS<>")
+                 (match_operand:QI 2 "src_operand" "rIm,JR,rS<>,rIm,JR,rS<>")))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (PLUS, operands, QImode)"
   "@
+   addi\\t%2,%0
    addi3\\t%2,%1,%0
    addi3\\t%2,%1,%0
    addi\\t%2,%0
    addi3\\t%2,%1,%0
-   addi3\\t%2,%1,%0
-   addi\\t%2,%0"
+   addi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")])
 ; Default to int16 data attr.
 
 (define_insn "*addqi3_test"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                                  (match_operand:QI 2 "src_operand" "JR,rS<>,rIm"))
+        (compare:CC_NOOV (plus:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                                  (match_operand:QI 2 "src_operand" "rIm,JR,rS<>"))
                          (const_int 0)))
-   (clobber (match_scratch:QI 0 "=d,?d,d"))]
+   (clobber (match_scratch:QI 0 "=d,d,d"))]
   "valid_operands (PLUS, operands, QImode)"
   "@
+   addi\\t%2,%0
    addi3\\t%2,%1,%0
-   addi3\\t%2,%1,%0
-   addi\\t%2,%0"
+   addi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 ; Default to int16 data attr.
 
 ; gcc does this in combine.c we just reverse it here
 (define_insn "*cmp_neg"
   [(set (reg:CC_NOOV 21)
-       (compare:CC_NOOV (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                        (neg: QI (match_operand:QI 2 "src_operand" "JR,rS<>,g"))))
-   (clobber (match_scratch:QI 0 "=d,?d,d"))]
+       (compare:CC_NOOV (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                        (neg: QI (match_operand:QI 2 "src_operand" "g,JR,rS<>"))))
+   (clobber (match_scratch:QI 0 "=d,d,d"))]
   "valid_operands (PLUS, operands, QImode)"
   "@
+   addi\\t%2,%0
    addi3\\t%2,%1,%0
-   addi3\\t%2,%1,%0
-   addi\\t%2,%0"
+   addi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
   
 (define_peephole
-  [(parallel [(set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d")
-                   (plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                            (match_operand:QI 2 "src_operand" "JR,rS<>,g")))
+  [(parallel [(set (match_operand:QI 0 "ext_reg_operand" "=d,d,d")
+                   (plus:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                            (match_operand:QI 2 "src_operand" "g,JR,rS<>")))
               (clobber (reg:CC_NOOV 21))])
    (set (reg:CC_NOOV 21)
         (compare:CC_NOOV (match_dup 0) (const_int 0)))]
   "valid_operands (PLUS, operands, QImode)"
   "@
+   addi\\t%2,%0
    addi3\\t%2,%1,%0
-   addi3\\t%2,%1,%0
-   addi\\t%2,%0"
+   addi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 
 (define_insn "*addqi3_set"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                                  (match_operand:QI 2 "src_operand" "JR,rS<>,rIm"))
+        (compare:CC_NOOV (plus:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                                  (match_operand:QI 2 "src_operand" "rIm,JR,rS<>"))
                          (const_int 0)))
-   (set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d")
+   (set (match_operand:QI 0 "ext_reg_operand" "=d,d,d")
         (plus:QI (match_dup 1) (match_dup 2)))]
   "valid_operands (PLUS, operands, QImode)"
   "@
+   addi\\t%2,%0
    addi3\\t%2,%1,%0
-   addi3\\t%2,%1,%0
-   addi\\t%2,%0"
+   addi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 ; Default to int16 data attr.
 
 ; where GCC doesn't expect CC to be clobbered or for calculating
 ; addresses during reload.
 (define_insn "addqi3_noclobber"
-  [(set (match_operand:QI 0 "std_reg_operand" "=c,?c,c")
-        (plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                 (match_operand:QI 2 "src_operand" "JR,rS<>,rIm")))]
+  [(set (match_operand:QI 0 "std_reg_operand" "=c,c,c")
+        (plus:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                 (match_operand:QI 2 "src_operand" "rIm,JR,rS<>")))]
   "valid_operands (PLUS, operands, QImode)"
   "@
+   addi\\t%2,%0
    addi3\\t%2,%1,%0
-   addi3\\t%2,%1,%0
-   addi\\t%2,%0"
+   addi3\\t%2,%1,%0"
   [(set_attr "type" "binary,binary,binary")])
 ; Default to int16 data attr.
 
 ; may be allocated to reload the PLUS and thus gen_reload will
 ; emit an add insn that may clobber CC.
 (define_insn "*addqi3_noclobber_reload"
-  [(set (match_operand:QI 0 "general_operand" "=c,?c,c")
-        (plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                 (match_operand:QI 2 "src_operand" "JR,rS<>,rIm")))]
+  [(set (match_operand:QI 0 "general_operand" "=c,c,c")
+        (plus:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                 (match_operand:QI 2 "src_operand" "rIm,JR,rS<>")))]
   "reload_in_progress"
   "@
+   addi\\t%2,%0
    addi3\\t%2,%1,%0
-   addi3\\t%2,%1,%0
-   addi\\t%2,%0"
+   addi3\\t%2,%1,%0"
   [(set_attr "type" "binary,binary,binary")])
 ; Default to int16 data attr.
 
 
 (define_insn "*addqi3_carry_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (plus:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,rR,rS<>,0")
-                 (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,JR,rS<>,rIm")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (plus:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>,0,rR,rS<>")
+                 (match_operand:QI 2 "src_operand" "rIm,JR,rS<>,rIm,JR,rS<>")))
    (use (reg:CC_NOOV 21))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (PLUS, operands, QImode)"
   "@
+   addc\\t%2,%0
    addc3\\t%2,%1,%0
    addc3\\t%2,%1,%0
    addc\\t%2,%0
    addc3\\t%2,%1,%0
-   addc3\\t%2,%1,%0
-   addc\\t%2,%0"
+   addc3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")])
 ; Default to int16 data attr.
 
   "legitimize_operands (MINUS, operands, QImode);")
 
 (define_insn "*subqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,d,c,?c,c,c")
-        (minus:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rIm,rR,rS<>,0,rIm")
-                  (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,0,JR,rS<>,rIm,0")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,d,?d,c,c,c,?c")
+        (minus:QI (match_operand:QI 1 "src_operand" "0,rIm,rR,rS<>,0,rIm,rR,rS<>")
+                  (match_operand:QI 2 "src_operand" "rIm,0,JR,rS<>,rIm,0,JR,rS<>")))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (MINUS, operands, QImode)"
   "@
-   subi3\\t%2,%1,%0
-   subi3\\t%2,%1,%0
    subi\\t%2,%0
    subri\\t%1,%0
    subi3\\t%2,%1,%0
    subi3\\t%2,%1,%0
    subi\\t%2,%0
-   subri\\t%1,%0"
+   subri\\t%1,%0
+   subi3\\t%2,%1,%0
+   subi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc,binary,binary,binary,binary")])
 ; Default to int16 data attr.
 
 (define_insn "*subqi3_test"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (minus:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rIm")
-                                   (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,0"))
+        (compare:CC_NOOV (minus:QI (match_operand:QI 1 "src_operand" "0,rIm,rR,rS<>")
+                                   (match_operand:QI 2 "src_operand" "rIm,0,JR,rS<>"))
                          (const_int 0)))
-   (clobber (match_scratch:QI 0 "=d,?d,d,d"))]
+   (clobber (match_scratch:QI 0 "=d,d,d,?d"))]
   "valid_operands (MINUS, operands, QImode)"
   "@
-   subi3\\t%2,%1,%0
-   subi3\\t%2,%1,%0
    subi\\t%2,%0
-   subri\\t%1,%0"
+   subri\\t%1,%0
+   subi3\\t%2,%1,%0
+   subi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")])
 ; Default to int16 data attr.
 
 (define_peephole
-  [(parallel [(set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d,d")
-                   (minus:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rIm")
-                             (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,0")))
+  [(parallel [(set (match_operand:QI 0 "ext_reg_operand" "=d,d,d,?d")
+                   (minus:QI (match_operand:QI 1 "src_operand" "0,rIm,rR,rS<>")
+                             (match_operand:QI 2 "src_operand" "rIm,0,JR,rS<>")))
               (clobber (reg:CC_NOOV 21))])
    (set (reg:CC_NOOV 21)
         (compare:CC_NOOV (match_dup 0) (const_int 0)))]
   "valid_operands (MINUS, operands, QImode)"
   "@
-   subi3\\t%2,%1,%0
-   subi3\\t%2,%1,%0
    subi\\t%2,%0
-   subri\\t%1,%0"
+   subri\\t%1,%0
+   subi3\\t%2,%1,%0
+   subi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")])
   
 (define_insn "*subqi3_set"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (minus:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rIm")
-                                   (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,0"))
+        (compare:CC_NOOV (minus:QI (match_operand:QI 1 "src_operand" "0,rIm,rR,rS<>")
+                                   (match_operand:QI 2 "src_operand" "rIm,0,JR,rS<>"))
                          (const_int 0)))
-   (set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d,d")
+   (set (match_operand:QI 0 "ext_reg_operand" "=d,d,d,?d")
         (minus:QI (match_dup 1)
                   (match_dup 2)))]
   "valid_operands (MINUS, operands, QImode)"
   "@
-   subi3\\t%2,%1,%0
-   subi3\\t%2,%1,%0
    subi\\t%2,%0
-   subri\\t%1,%0"
+   subri\\t%1,%0
+   subi3\\t%2,%1,%0
+   subi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")])
 ; Default to int16 data attr.
 
 (define_insn "*subqi3_carry_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,d,c,?c,c,c")
-        (minus:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rIm,rR,rS<>,0,rIm")
-                  (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,0,JR,rS<>,rIm,0")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,d,?d,c,c,c,?c")
+        (minus:QI (match_operand:QI 1 "src_operand" "0,rIm,rR,rS<>,0,rIm,rR,rS<>")
+                  (match_operand:QI 2 "src_operand" "rIm,0,JR,rS<>,rIm,0,JR,rS<>")))
    (use (reg:CC_NOOV 21))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (MINUS, operands, QImode)"
   "@
-   subb3\\t%2,%1,%0
-   subb3\\t%2,%1,%0
    subb\\t%2,%0
    subrb\\t%1,%0
    subb3\\t%2,%1,%0
    subb3\\t%2,%1,%0
    subb\\t%2,%0
-   subrb\\t%1,%0"
+   subrb\\t%1,%0
+   subb3\\t%2,%1,%0
+   subb3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc,binary,binary,binary,binary")])
 ; Default to int16 data attr.
 
 (define_insn "*subqi3_carry_set"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (minus:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rIm")
-                                   (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,0"))
+        (compare:CC_NOOV (minus:QI (match_operand:QI 1 "src_operand" "0,rIm,rR,rS<>")
+                                   (match_operand:QI 2 "src_operand" "rIm,0,JR,rS<>"))
                          (const_int 0)))
-   (set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d,d")
+   (set (match_operand:QI 0 "ext_reg_operand" "=d,d,d,?d")
         (minus:QI (match_dup 1)
                   (match_dup 2)))
    (use (reg:CC_NOOV 21))]
   "valid_operands (MINUS, operands, QImode)"
   "@
-   subb3\\t%2,%1,%0
-   subb3\\t%2,%1,%0
    subb\\t%2,%0
-   subrb\\t%1,%0"
+   subrb\\t%1,%0
+   subb3\\t%2,%1,%0
+   subb3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")])
 ; Default to int16 data attr.
 
   ")
 
 (define_insn "*mulqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (mult:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,rR,rS<>,0")
-                 (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,JR,rS<>,rIm")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (mult:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>,0,rR,rS<>")
+                 (match_operand:QI 2 "src_operand" "rIm,JR,rS<>,rIm,JR,rS<>")))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (MULT, operands, QImode)"
   "*
-  if (which_alternative == 2 || which_alternative == 5)
+  if (which_alternative == 0 || which_alternative == 3)
     {
       if (TARGET_C3X
           && GET_CODE (operands[2]) == CONST_INT
 
 (define_insn "*mulqi3_test"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (mult:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                                  (match_operand:QI 2 "src_operand" "JR,rS<>,rIm"))
+        (compare:CC_NOOV (mult:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                                  (match_operand:QI 2 "src_operand" "rIm,JR,rS<>"))
                          (const_int 0)))
-   (clobber (match_scratch:QI 0 "=d,?d,d"))]
+   (clobber (match_scratch:QI 0 "=d,d,d"))]
   "valid_operands (MULT, operands, QImode)"
   "*
-  if (which_alternative == 2)
+  if (which_alternative == 0)
     {
       if (TARGET_C3X 
           && GET_CODE (operands[2]) == CONST_INT
 
 (define_insn "*mulqi3_set"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (mult:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                                  (match_operand:QI 2 "src_operand" "JR,rS<>,rIm"))
+        (compare:CC_NOOV (mult:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                                  (match_operand:QI 2 "src_operand" "rIm,JR,rS<>"))
                          (const_int 0)))
-   (set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d")
+   (set (match_operand:QI 0 "ext_reg_operand" "=d,d,d")
         (mult:QI (match_dup 1)
                  (match_dup 2)))]
   "valid_operands (MULT, operands, QImode)"
   "*
-  if (which_alternative == 2)
+  if (which_alternative == 0)
     {
       if (TARGET_C3X 
           && GET_CODE (operands[2]) == CONST_INT
 ; The C3x multiply instruction assumes 24-bit signed integer operands
 ; and the 48-bit result is truncated to 32-bits.
 (define_insn "*mulqi3_24_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
         (mult:QI
          (sign_extend:QI
-          (and:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,rR,rS<>,0")
+          (and:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>,0,rR,rS<>")
                   (const_int 16777215)))
          (sign_extend:QI
-          (and:QI (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,JR,rS<>,rIm")
+          (and:QI (match_operand:QI 2 "src_operand" "rIm,JR,rS<>,rIm,JR,rS<>")
                   (const_int 16777215)))))
    (clobber (reg:CC_NOOV 21))]
   "TARGET_C3X && valid_operands (MULT, operands, QImode)"
   "@
+   mpyi\\t%2,%0
    mpyi3\\t%2,%1,%0
    mpyi3\\t%2,%1,%0
    mpyi\\t%2,%0
    mpyi3\\t%2,%1,%0
-   mpyi3\\t%2,%1,%0
-   mpyi\\t%2,%0"
+   mpyi3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")])
 ; Default to int16 data attr.
 
  ")
 
 (define_insn "*smulqi3_highpart_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
         (truncate:QI 
          (lshiftrt:HI
           (mult:HI
-           (sign_extend:HI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,rR,rS<>,0"))
-           (sign_extend:HI (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,JR,rS<>,rIm")))
+           (sign_extend:HI (match_operand:QI 1 "src_operand" "%0,rR,rS<>,0,rR,rS<>"))
+           (sign_extend:HI (match_operand:QI 2 "src_operand" "rIm,JR,rS<>,rIm,JR,rS<>")))
       (const_int 32))))
    (clobber (reg:CC_NOOV 21))]
   "! TARGET_C3X && valid_operands (MULT, operands, QImode)"
  ")
 
 (define_insn "*umulqi3_highpart_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
         (truncate:QI
          (lshiftrt:HI
           (mult:HI 
-           (zero_extend:HI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,rR,rS<>,0"))
+           (zero_extend:HI (match_operand:QI 1 "src_operand" "%0,rR,rS<>,0,rR,rS<>"))
            (zero_extend:HI (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm,JR,rS<>,rLm")))
           (const_int 32))))
    (clobber (reg:CC_NOOV 21))]
 
 
 (define_insn "*andqi3_255_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?c")
+  [(set (match_operand:QI 0 "reg_operand" "=d,c")
         (and:QI (match_operand:QI 1 "src_operand" "mr,mr")
                 (const_int 255)))
    (clobber (reg:CC 21))]
 
 
 (define_insn "*andqi3_65535_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?c")
+  [(set (match_operand:QI 0 "reg_operand" "=d,c")
         (and:QI (match_operand:QI 1 "src_operand" "mr,mr")
                 (const_int 65535)))
    (clobber (reg:CC 21))]
 
 
 (define_insn "*andqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,d,c,?c,c,c")
-        (and:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,0,rR,rS<>,0,0")
-                (match_operand:QI 2 "tsrc_operand" "JR,rS<>,N,rLm,JR,rS<>,N,rLm")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,d,?d,c,c,c,?c")
+        (and:QI (match_operand:QI 1 "src_operand" "%0,0,rR,rS<>,0,0,rR,rS<>")
+                (match_operand:QI 2 "tsrc_operand" "N,rLm,JR,rS<>,N,rLm,JR,rS<>")))
    (clobber (reg:CC 21))]
   "valid_operands (AND, operands, QImode)"
   "@
-   and3\\t%2,%1,%0
-   and3\\t%2,%1,%0
    andn\\t%N2,%0
    and\\t%2,%0
    and3\\t%2,%1,%0
    and3\\t%2,%1,%0
    andn\\t%N2,%0
-   and\\t%2,%0"
+   and\\t%2,%0
+   and3\\t%2,%1,%0
+   and3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc,binary,binary,binary,binary")
-   (set_attr "data" "int16,uint16,not_uint16,uint16,int16,uint16,not_uint16,uint16")])
+   (set_attr "data" "not_uint16,uint16,int16,uint16,not_uint16,uint16,int16,uint16")])
 
 (define_insn "*andqi3_test"
   [(set (reg:CC 21)
-        (compare:CC (and:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,r")
-                            (match_operand:QI 2 "tsrc_operand" "JR,rS<>,N,rLm"))
+        (compare:CC (and:QI (match_operand:QI 1 "src_operand" "%0,r,rR,rS<>")
+                            (match_operand:QI 2 "tsrc_operand" "N,rLm,JR,rS<>"))
                     (const_int 0)))
-   (clobber (match_scratch:QI 0 "=X,X,d,X"))]
+   (clobber (match_scratch:QI 0 "=d,X,X,?X"))]
   "valid_operands (AND, operands, QImode)"
   "@
-   tstb3\\t%2,%1
-   tstb3\\t%2,%1
    andn\\t%N2,%0
-   tstb\\t%2,%1"
+   tstb\\t%2,%1
+   tstb3\\t%2,%1
+   tstb3\\t%2,%1"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,not_uint16,uint16")])
+   (set_attr "data" "not_uint16,uint16,int16,uint16")])
 
 (define_peephole
-  [(parallel [(set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d,d")
-                   (and:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,0")
-                           (match_operand:QI 2 "tsrc_operand" "JR,rS<>,N,rLm")))
+  [(parallel [(set (match_operand:QI 0 "ext_reg_operand" "=d,d,d,?d")
+                   (and:QI (match_operand:QI 1 "src_operand" "%0,0,rR,rS<>")
+                           (match_operand:QI 2 "tsrc_operand" "N,rLm,JR,rS<>")))
               (clobber (reg:CC 21))])
    (set (reg:CC 21)
         (compare:CC (match_dup 0) (const_int 0)))]
   "valid_operands (AND, operands, QImode)"
   "@
-   and3\\t%2,%1,%0
-   and3\\t%2,%1,%0
    andn\\t%N2,%0
-   and\\t%2,%0"
+   and\\t%2,%0
+   and3\\t%2,%1,%0
+   and3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,not_uint16,uint16")])
+   (set_attr "data" "not_uint16,uint16,int16,uint16")])
   
 (define_insn "*andqi3_set"
   [(set (reg:CC 21)
-        (compare:CC (and:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,0")
-                            (match_operand:QI 2 "tsrc_operand" "JR,rS<>,N,rLm"))
+        (compare:CC (and:QI (match_operand:QI 1 "src_operand" "%0,0,rR,rS<>")
+                            (match_operand:QI 2 "tsrc_operand" "N,rLm,JR,rS<>"))
                     (const_int 0)))
-   (set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d,d")
+   (set (match_operand:QI 0 "ext_reg_operand" "=d,d,d,?d")
         (and:QI (match_dup 1)
                 (match_dup 2)))]
   "valid_operands (AND, operands, QImode)"
   "@
-   and3\\t%2,%1,%0
-   and3\\t%2,%1,%0
    andn\\t%N2,%0
-   and\\t%2,%0"
+   and\\t%2,%0
+   and3\\t%2,%1,%0
+   and3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,not_uint16,uint16")])
+   (set_attr "data" "not_uint16,uint16,int16,uint16")])
 
 ;
 ; ANDN
 ; assumes that the code AND does.  We might have to kludge this if
 ; we make valid_operands stricter.
 (define_insn "*andnqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (and:QI (not:QI (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm,JR,rS<>,rLm"))
-                (match_operand:QI 1 "src_operand" "rR,rS<>,0,rR,rS<>,0")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (and:QI (not:QI (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>,rLm,JR,rS<>"))
+                (match_operand:QI 1 "src_operand" "0,rR,rS<>,0,rR,rS<>")))
    (clobber (reg:CC 21))]
   "valid_operands (AND, operands, QImode)"
   "@
+   andn\\t%2,%0
    andn3\\t%2,%1,%0
    andn3\\t%2,%1,%0
    andn\\t%2,%0
    andn3\\t%2,%1,%0
-   andn3\\t%2,%1,%0
-   andn\\t%2,%0"
+   andn3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")
-   (set_attr "data" "int16,uint16,uint16,int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16,uint16,int16,uint16")])
 
 (define_insn "*andnqi3_test"
   [(set (reg:CC 21)
-        (compare:CC (and:QI (not:QI (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm"))
-                            (match_operand:QI 1 "src_operand" "rR,rS<>,0"))
+        (compare:CC (and:QI (not:QI (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>"))
+                            (match_operand:QI 1 "src_operand" "0,rR,rS<>"))
                     (const_int 0)))
-   (clobber (match_scratch:QI 0 "=d,?d,d"))]
+   (clobber (match_scratch:QI 0 "=d,d,d"))]
   "valid_operands (AND, operands, QImode)"
   "@
+   andn\\t%2,%0
    andn3\\t%2,%1,%0
-   andn3\\t%2,%1,%0
-   andn\\t%2,%0"
+   andn3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16")])
 
 (define_insn "*andnqi3_set"
   [(set (reg:CC 21)
-        (compare:CC (and:QI (not:QI (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm"))
-                            (match_operand:QI 1 "src_operand" "rR,rS<>,0"))
+        (compare:CC (and:QI (not:QI (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>"))
+                            (match_operand:QI 1 "src_operand" "0,rR,rS<>"))
                     (const_int 0)))
-   (set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d")
+   (set (match_operand:QI 0 "ext_reg_operand" "=d,d,d")
         (and:QI (not:QI (match_dup 2))
                 (match_dup 1)))]
   "valid_operands (AND, operands, QImode)"
   "@
+   andn\\t%2,%0
    andn3\\t%2,%1,%0
-   andn3\\t%2,%1,%0
-   andn\\t%2,%0"
+   andn3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16")])
 
 ;
 ; OR
  "legitimize_operands (IOR, operands, QImode);")
 
 (define_insn "*iorqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (ior:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,rR,rS<>,0")
-                (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm,JR,rS<>,rLm")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (ior:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>,0,rR,rS<>")
+                (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>,rLm,JR,rS<>")))
    (clobber (reg:CC 21))]
   "valid_operands (IOR, operands, QImode)"
   "@
+   or\\t%2,%0
    or3\\t%2,%1,%0
    or3\\t%2,%1,%0
    or\\t%2,%0
    or3\\t%2,%1,%0
-   or3\\t%2,%1,%0
-   or\\t%2,%0"
+   or3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")
-   (set_attr "data" "int16,uint16,uint16,int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16,uint16,int16,uint16")])
 
 (define_insn "*iorqi3_test"
   [(set (reg:CC 21)
-        (compare:CC (ior:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                            (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm"))
+        (compare:CC (ior:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                            (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>"))
                     (const_int 0)))
-   (clobber (match_scratch:QI 0 "=d,?d,d"))]
+   (clobber (match_scratch:QI 0 "=d,d,d"))]
   "valid_operands (IOR, operands, QImode)"
   "@
+   or\\t%2,%0
    or3\\t%2,%1,%0
-   or3\\t%2,%1,%0
-   or\\t%2,%0"
+   or3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16")])
 
 (define_peephole
-  [(parallel [(set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d")
-                   (ior:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                           (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm")))
+  [(parallel [(set (match_operand:QI 0 "ext_reg_operand" "=d,d,d")
+                   (ior:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                           (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>")))
               (clobber (reg:CC 21))])
    (set (reg:CC 21)
         (compare:CC (match_dup 0) (const_int 0)))]
   "valid_operands (IOR, operands, QImode)"
   "@
+   or\\t%2,%0
    or3\\t%2,%1,%0
-   or3\\t%2,%1,%0
-   or\\t%2,%0"
+   or3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16")])
   
 (define_insn "*iorqi3_set"
   [(set (reg:CC 21)
-        (compare:CC (ior:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                            (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm"))
+        (compare:CC (ior:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                            (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>"))
                     (const_int 0)))
-   (set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d")
+   (set (match_operand:QI 0 "ext_reg_operand" "=d,d,d")
         (ior:QI (match_dup 1)
                 (match_dup 2)))]
   "valid_operands (IOR, operands, QImode)"
   "@
+   or\\t%2,%0
    or3\\t%2,%1,%0
-   or3\\t%2,%1,%0
-   or\\t%2,%0"
+   or3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16")])
 
 ; This pattern is used for loading symbol references in several parts. 
 (define_insn "iorqi3_noclobber"
-  [(set (match_operand:QI 0 "std_reg_operand" "=c,?c,c")
-        (ior:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm")))]
+  [(set (match_operand:QI 0 "std_reg_operand" "=c,c,c")
+        (ior:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>")))]
   "valid_operands (IOR, operands, QImode)"
   "@
+   or\\t%2,%0
    or3\\t%2,%1,%0
-   or3\\t%2,%1,%0
-   or\\t%2,%0"
+   or3\\t%2,%1,%0"
   [(set_attr "type" "binary,binary,binary")
-   (set_attr "data" "int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16")])
 
 ;
 ; XOR
  "legitimize_operands (XOR, operands, QImode);")
 
 (define_insn "*xorqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (xor:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0,rR,rS<>,0")
-                (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm,JR,rS<>,rLm")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (xor:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>,0,rR,rS<>")
+                (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>,rLm,JR,rS<>")))
    (clobber (reg:CC 21))]
   "valid_operands (XOR, operands, QImode)"
   "@
+   xor\\t%2,%0
    xor3\\t%2,%1,%0
    xor3\\t%2,%1,%0
    xor\\t%2,%0
    xor3\\t%2,%1,%0
-   xor3\\t%2,%1,%0
-   xor\\t%2,%0"
+   xor3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")
-   (set_attr "data" "int16,uint16,uint16,int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16,uint16,int16,uint16")])
 
 (define_insn "*xorqi3_test"
   [(set (reg:CC 21)
-        (compare:CC (xor:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                            (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm"))
+        (compare:CC (xor:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                            (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>"))
                     (const_int 0)))
-   (clobber (match_scratch:QI 0 "=d,?d,d"))]
+   (clobber (match_scratch:QI 0 "=d,d,d"))]
   "valid_operands (XOR, operands, QImode)"
   "@
+   xor\\t%2,%0
    xor3\\t%2,%1,%0
-   xor3\\t%2,%1,%0
-   xor\\t%2,%0"
+   xor3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16")])
 
 (define_insn "*xorqi3_set"
   [(set (reg:CC 21)
-        (compare:CC (xor:QI (match_operand:QI 1 "src_operand" "%rR,rS<>,0")
-                            (match_operand:QI 2 "lsrc_operand" "JR,rS<>,rLm"))
+        (compare:CC (xor:QI (match_operand:QI 1 "src_operand" "%0,rR,rS<>")
+                            (match_operand:QI 2 "lsrc_operand" "rLm,JR,rS<>"))
                     (const_int 0)))
-   (set (match_operand:QI 0 "ext_reg_operand" "=d,?d,d")
+   (set (match_operand:QI 0 "ext_reg_operand" "=d,d,d")
         (xor:QI (match_dup 1)
                 (match_dup 2)))]
   "valid_operands (XOR, operands, QImode)"
   "@
+   xor\\t%2,%0
    xor3\\t%2,%1,%0
-   xor3\\t%2,%1,%0
-   xor\\t%2,%0"
+   xor3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")
-   (set_attr "data" "int16,uint16,uint16")])
+   (set_attr "data" "uint16,int16,uint16")])
 
 ;
 ; LSH/ASH (left)
  "legitimize_operands (ASHIFT, operands, QImode);")
 
 (define_insn "*ashlqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (ashift:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rR,rS<>,0")
-                   (match_operand:QI 2 "src_operand" "JR,rS<>,rIm,JR,rS<>,rIm")))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (ashift:QI (match_operand:QI 1 "src_operand" "0,rR,rS<>,0,rR,rS<>")
+                   (match_operand:QI 2 "src_operand" "rIm,JR,rS<>,rIm,JR,rS<>")))
    (clobber (reg:CC 21))]
   "valid_operands (ASHIFT, operands, QImode)"
   "@
+   ash\\t%2,%0
    ash3\\t%2,%1,%0
    ash3\\t%2,%1,%0
    ash\\t%2,%0
    ash3\\t%2,%1,%0
-   ash3\\t%2,%1,%0
-   ash\\t%2,%0"
+   ash3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")])
 ; Default to int16 data attr.
 
 (define_insn "*ashlqi3_set"
   [(set (reg:CC 21)
         (compare:CC
-          (ashift:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0")
-                     (match_operand:QI 2 "src_operand" "JR,rS<>,rIm"))
+          (ashift:QI (match_operand:QI 1 "src_operand" "0,rR,rS<>")
+                     (match_operand:QI 2 "src_operand" "rIm,JR,rS<>"))
           (const_int 0)))
-   (set (match_operand:QI 0 "reg_operand" "=d,?d,d")
+   (set (match_operand:QI 0 "reg_operand" "=d,d,d")
         (ashift:QI (match_dup 1)
                    (match_dup 2)))]
   "valid_operands (ASHIFT, operands, QImode)"
   "@
+   ash\\t%2,%0
    ash3\\t%2,%1,%0
-   ash3\\t%2,%1,%0
-   ash\\t%2,%0"
+   ash3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 ; Default to int16 data attr.
 
 ; This is only used by lshrhi3_reg where we need a LSH insn that will
 ; shift both ways.
 (define_insn "*lshlqi3_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (ashift:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rR,rS<>,0")
-                   (unspec [(match_operand:QI 2 "src_operand" "JR,rS<>,rIm,JR,rS<>,rIm")] 3)))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (ashift:QI (match_operand:QI 1 "src_operand" "0,rR,rS<>,0,rR,rS<>")
+                   (unspec [(match_operand:QI 2 "src_operand" "rIm,JR,rS<>,rIm,JR,rS<>")] 3)))
    (clobber (reg:CC 21))]
   "valid_operands (ASHIFT, operands, QImode)"
   "@
+   lsh\\t%2,%0
    lsh3\\t%2,%1,%0
    lsh3\\t%2,%1,%0
    lsh\\t%2,%0
    lsh3\\t%2,%1,%0
-   lsh3\\t%2,%1,%0
-   lsh\\t%2,%0"
+   lsh3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")])
 ; Default to int16 data attr.
 
   [(set_attr "type" "binarycc,binarycc")])
 
 (define_insn "*lshrqi3_nonconst_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (lshiftrt:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rR,rS<>,0")
-                     (neg:QI (match_operand:QI 2 "src_operand" "R,rS<>,rm,R,rS<>,rm"))))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (lshiftrt:QI (match_operand:QI 1 "src_operand" "0,rR,rS<>,0,rR,rS<>")
+                     (neg:QI (match_operand:QI 2 "src_operand" "rm,R,rS<>,rm,R,rS<>"))))
    (clobber (reg:CC 21))]
   "valid_operands (LSHIFTRT, operands, QImode)"
   "@
+   lsh\\t%2,%0
    lsh3\\t%2,%1,%0
    lsh3\\t%2,%1,%0
    lsh\\t%2,%0
    lsh3\\t%2,%1,%0
-   lsh3\\t%2,%1,%0
-   lsh\\t%2,%0"
+   lsh3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")])
 ; Default to int16 data attr.
 
   [(set_attr "type" "binarycc,binarycc")])
 
 (define_insn "*ashrqi3_nonconst_clobber"
-  [(set (match_operand:QI 0 "reg_operand" "=d,?d,d,c,?c,c")
-        (ashiftrt:QI (match_operand:QI 1 "src_operand" "rR,rS<>,0,rR,rS<>,0")
-                     (neg:QI (match_operand:QI 2 "src_operand" "R,rS<>,rm,R,rS<>,rm"))))
+  [(set (match_operand:QI 0 "reg_operand" "=d,d,?d,c,c,?c")
+        (ashiftrt:QI (match_operand:QI 1 "src_operand" "0,rR,rS<>,0,rR,rS<>")
+                     (neg:QI (match_operand:QI 2 "src_operand" "rm,R,rS<>,rm,R,rS<>"))))
    (clobber (reg:CC 21))]
   "valid_operands (ASHIFTRT, operands, QImode)"
   "@
+   ash\\t%2,%0
    ash3\\t%2,%1,%0
    ash3\\t%2,%1,%0
    ash\\t%2,%0
    ash3\\t%2,%1,%0
-   ash3\\t%2,%1,%0
-   ash\\t%2,%0"
+   ash3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binary,binary,binary")])
 ; Default to int16 data attr.
 
   "legitimize_operands (PLUS, operands, QFmode);")
 
 (define_insn "*addqf3_clobber"
-  [(set (match_operand:QF 0 "reg_operand" "=f,?f,f")
-        (plus:QF (match_operand:QF 1 "src_operand" "%fR,fS<>,0")
-                 (match_operand:QF 2 "src_operand" "R,fS<>,fHm")))
+  [(set (match_operand:QF 0 "reg_operand" "=f,f,?f")
+        (plus:QF (match_operand:QF 1 "src_operand" "%0,fR,fS<>")
+                 (match_operand:QF 2 "src_operand" "fHm,R,fS<>")))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (PLUS, operands, QFmode)"
   "@
+   addf\\t%2,%0
    addf3\\t%2,%1,%0
-   addf3\\t%2,%1,%0
-   addf\\t%2,%0"
+   addf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 
 (define_insn "*addqf3_test"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (plus:QF (match_operand:QF 1 "src_operand" "%fR,fS<>,0")
-                                  (match_operand:QF 2 "src_operand" "R,fS<>,fHm"))
+        (compare:CC_NOOV (plus:QF (match_operand:QF 1 "src_operand" "%0,fR,fS<>")
+                                  (match_operand:QF 2 "src_operand" "fHm,R,fS<>"))
                          (match_operand:QF 3 "fp_zero_operand" "G,G,G")))
-   (clobber (match_scratch:QF 0 "=f,?f,f"))]
+   (clobber (match_scratch:QF 0 "=f,f,?f"))]
   "valid_operands (PLUS, operands, QFmode)"
   "@
+   addf\\t%2,%0
    addf3\\t%2,%1,%0
-   addf3\\t%2,%1,%0
-   addf\\t%2,%0"
+   addf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 
 (define_insn "*addqf3_set"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (plus:QF (match_operand:QF 1 "src_operand" "%fR,fS<>,0")
-                                  (match_operand:QF 2 "src_operand" "R,fS<>,fHm"))
+        (compare:CC_NOOV (plus:QF (match_operand:QF 1 "src_operand" "%0,fR,fS<>")
+                                  (match_operand:QF 2 "src_operand" "fHm,R,fS<>"))
                          (match_operand:QF 3 "fp_zero_operand" "G,G,G")))
-   (set (match_operand:QF 0 "reg_operand" "=f,?f,f")
+   (set (match_operand:QF 0 "reg_operand" "=f,f,?f")
         (plus:QF (match_dup 1)
                  (match_dup 2)))]
   "valid_operands (PLUS, operands, QFmode)"
   "@
+   addf\\t%2,%0
    addf3\\t%2,%1,%0
-   addf3\\t%2,%1,%0
-   addf\\t%2,%0"
+   addf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 
 ;
   "legitimize_operands (MINUS, operands, QFmode);")
 
 (define_insn "*subqf3_clobber"
-   [(set (match_operand:QF 0 "reg_operand" "=f,?f,f,f")
-         (minus:QF (match_operand:QF 1 "src_operand" "fR,fS<>,0,fHm")
-                   (match_operand:QF 2 "src_operand" "R,fS<>,fHm,0")))
+   [(set (match_operand:QF 0 "reg_operand" "=f,f,f,?f")
+         (minus:QF (match_operand:QF 1 "src_operand" "0,fHm,fR,fS<>")
+                   (match_operand:QF 2 "src_operand" "fHm,0,R,fS<>")))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (MINUS, operands, QFmode)"
   "@
-   subf3\\t%2,%1,%0
-   subf3\\t%2,%1,%0
    subf\\t%2,%0
-   subrf\\t%1,%0"
+   subrf\\t%1,%0
+   subf3\\t%2,%1,%0
+   subf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")])
 
 (define_insn "*subqf3_test"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (minus:QF (match_operand:QF 1 "src_operand" "fR,fS<>,0,fHm")
-                                   (match_operand:QF 2 "src_operand" "R,fS<>,fHm,0"))
+        (compare:CC_NOOV (minus:QF (match_operand:QF 1 "src_operand" "0,fHm,fR,fS<>")
+                                   (match_operand:QF 2 "src_operand" "fHm,0,R,fS<>"))
                          (match_operand:QF 3 "fp_zero_operand" "G,G,G,G")))
-   (clobber (match_scratch:QF 0 "=f,?f,f,f"))]
+   (clobber (match_scratch:QF 0 "=f,f,f,?f"))]
   "valid_operands (MINUS, operands, QFmode)"
   "@
-   subf3\\t%2,%1,%0
-   subf3\\t%2,%1,%0
    subf\\t%2,%0
-   subrf\\t%1,%0"
+   subrf\\t%1,%0
+   subf3\\t%2,%1,%0
+   subf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")])
 
 (define_insn "*subqf3_set"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (minus:QF (match_operand:QF 1 "src_operand" "fR,fS<>,0,fHm")
-                                   (match_operand:QF 2 "src_operand" "R,fS<>,fHm,0"))
+        (compare:CC_NOOV (minus:QF (match_operand:QF 1 "src_operand" "0,fHm,fR,fS<>")
+                                   (match_operand:QF 2 "src_operand" "0,fHm,R,fS<>"))
                          (match_operand:QF 3 "fp_zero_operand" "G,G,G,G")))
-   (set (match_operand:QF 0 "reg_operand" "=f,?f,f,f")
+   (set (match_operand:QF 0 "reg_operand" "=f,f,f,?f")
         (minus:QF (match_dup 1)
                  (match_dup 2)))]
   "valid_operands (MINUS, operands, QFmode)"
   "@
-   subf3\\t%2,%1,%0
-   subf3\\t%2,%1,%0
    subf\\t%2,%0
-   subrf\\t%1,%0"
+   subrf\\t%1,%0
+   subf3\\t%2,%1,%0
+   subf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc,binarycc")])
 
 ;
   "legitimize_operands (MULT, operands, QFmode);")
 
 (define_insn "*mulqf3_clobber"
-  [(set (match_operand:QF 0 "reg_operand" "=f,?f,f")
-        (mult:QF (match_operand:QF 1 "src_operand" "%fR,fS<>,0")
-                 (match_operand:QF 2 "src_operand" "R,fS<>,fHm")))
+  [(set (match_operand:QF 0 "reg_operand" "=f,f,?f")
+        (mult:QF (match_operand:QF 1 "src_operand" "%0,fR,fS<>")
+                 (match_operand:QF 2 "src_operand" "fHm,R,fS<>")))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (MULT, operands, QFmode)"
   "@
+   mpyf\\t%2,%0
    mpyf3\\t%2,%1,%0
-   mpyf3\\t%2,%1,%0
-   mpyf\\t%2,%0"
+   mpyf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 
 (define_insn "*mulqf3_test"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (mult:QF (match_operand:QF 1 "src_operand" "%fR,fS<>,0")
-                                  (match_operand:QF 2 "src_operand" "R,fS<>,fHm"))
+        (compare:CC_NOOV (mult:QF (match_operand:QF 1 "src_operand" "%0,fR,fS<>")
+                                  (match_operand:QF 2 "src_operand" "fHm,R,fS<>"))
                          (match_operand:QF 3 "fp_zero_operand" "G,G,G")))
-   (clobber (match_scratch:QF 0 "=f,?f,f"))]
+   (clobber (match_scratch:QF 0 "=f,f,?f"))]
   "valid_operands (MULT, operands, QFmode)"
   "@
+   mpyf\\t%2,%0
    mpyf3\\t%2,%1,%0
-   mpyf3\\t%2,%1,%0
-   mpyf\\t%2,%0"
+   mpyf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 
 (define_insn "*mulqf3_set"
   [(set (reg:CC_NOOV 21)
-        (compare:CC_NOOV (mult:QF (match_operand:QF 1 "src_operand" "%fR,fS<>,0")
-                                  (match_operand:QF 2 "src_operand" "R,fS<>,fHm"))
+        (compare:CC_NOOV (mult:QF (match_operand:QF 1 "src_operand" "%0,fR,fS<>")
+                                  (match_operand:QF 2 "src_operand" "fHm,R,fS<>"))
                          (match_operand:QF 3 "fp_zero_operand" "G,G,G")))
-   (set (match_operand:QF 0 "reg_operand" "=f,?f,f")
+   (set (match_operand:QF 0 "reg_operand" "=f,f,?f")
         (mult:QF (match_dup 1)
                  (match_dup 2)))]
   "valid_operands (MULT, operands, QFmode)"
   "@
+   mpyf\\t%2,%0
    mpyf3\\t%2,%1,%0
-   mpyf3\\t%2,%1,%0
-   mpyf\\t%2,%0"
+   mpyf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 
 ;
 (define_insn "*cmpqf"
   [(set (reg:CC 21)
         (compare:CC (match_operand:QF 0 "src_operand" "fR,?fS<>,f")
-                    (match_operand:QF 1 "src_operand" "R,fS<>,fHm")))]
+                    (match_operand:QF 1 "src_operand" "fHm,R,fS<>")))]
   "valid_operands (COMPARE, operands, QFmode)"
   "@
+   cmpf\\t%1,%0
    cmpf3\\t%1,%0
-   cmpf3\\t%1,%0
-   cmpf\\t%1,%0"
+   cmpf3\\t%1,%0"
   [(set_attr "type" "compare,compare,compare")])
 
 (define_insn "*cmpqf_noov"
   [(set (reg:CC_NOOV 21)
         (compare:CC_NOOV (match_operand:QF 0 "src_operand" "fR,?fS<>,f")
-                         (match_operand:QF 1 "src_operand" "R,fS<>,fHm")))]
+                         (match_operand:QF 1 "src_operand" "fHm,R,fS<>")))]
   "valid_operands (COMPARE, operands, QFmode)"
   "@
+   cmpf\\t%1,%0
    cmpf3\\t%1,%0
-   cmpf3\\t%1,%0
-   cmpf\\t%1,%0"
+   cmpf3\\t%1,%0"
   [(set_attr "type" "compare,compare,compare")])
 
 ; Inlined float divide for C4x
 ; ADDF
 ;
 (define_insn "addhf3"
-  [(set (match_operand:HF 0 "reg_operand" "=?h,h")
-        (plus:HF (match_operand:HF 1 "reg_operand" "%h,0")
-                 (match_operand:HF 2 "reg_or_const_operand" "h,H")))
+  [(set (match_operand:HF 0 "reg_operand" "=h,?h")
+        (plus:HF (match_operand:HF 1 "reg_operand" "%0,h")
+                 (match_operand:HF 2 "reg_or_const_operand" "H,h")))
    (clobber (reg:CC_NOOV 21))]
   ""
   "@
-   addf3\\t%2,%1,%0
-   addf\\t%2,%0"
+   addf\\t%2,%0
+   addf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc")])
 
 ;
 ; SUBF
 ;
 (define_insn "subhf3"
-  [(set (match_operand:HF 0 "reg_operand" "=?h,h,h")
-        (minus:HF (match_operand:HF 1 "reg_or_const_operand" "h,0,H")
-                  (match_operand:HF 2 "reg_or_const_operand" "h,H,0")))
+  [(set (match_operand:HF 0 "reg_operand" "=h,h,?h")
+        (minus:HF (match_operand:HF 1 "reg_or_const_operand" "0,H,h")
+                  (match_operand:HF 2 "reg_or_const_operand" "H,0,h")))
    (clobber (reg:CC_NOOV 21))]
   ""
   "@
-   subf3\\t%2,%1,%0
    subf\\t%2,%0
-   subrf\\t%1,%0"
+   subrf\\t%1,%0
+   subf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc,binarycc")])
 
 ;
   ")
 
 (define_insn "*mulhf3_c40"
-  [(set (match_operand:HF 0 "reg_operand" "=?h,h")
-        (mult:HF (match_operand:HF 1 "reg_operand" "%h,0")
-                 (match_operand:HF 2 "reg_or_const_operand" "h,hH")))
+  [(set (match_operand:HF 0 "reg_operand" "=h,?h")
+        (mult:HF (match_operand:HF 1 "reg_operand" "%0,h")
+                 (match_operand:HF 2 "reg_or_const_operand" "hH,h")))
    (clobber (reg:CC_NOOV 21))]
   ""
   "@
-   mpyf3\\t%2,%1,%0
-   mpyf\\t%2,%0"
+   mpyf\\t%2,%0
+   mpyf3\\t%2,%1,%0"
   [(set_attr "type" "binarycc,binarycc")])
 
 ;
   "legitimize_operands (PLUS, operands, HImode);")
 
 (define_insn "*addhi3_clobber"
-  [(set (match_operand:HI 0 "ext_reg_operand" "=d,?d,d")
-        (plus:HI (match_operand:HI 1 "src_operand" "%rR,rS<>,0")
-                 (match_operand:HI 2 "src_operand" "R,rS<>,rm")))
+  [(set (match_operand:HI 0 "ext_reg_operand" "=d,d,?d")
+        (plus:HI (match_operand:HI 1 "src_operand" "%0,rR,rS<>")
+                 (match_operand:HI 2 "src_operand" "rm,R,rS<>")))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (PLUS, operands, HImode)"
   "#"
 
 
 (define_insn "*subhi3_clobber"
-  [(set (match_operand:HI 0 "ext_reg_operand" "=d,?d,d")
-        (minus:HI (match_operand:HI 1 "src_operand" "rR,rS<>,0")
-                  (match_operand:HI 2 "src_operand" "R,rS<>,rm")))
+  [(set (match_operand:HI 0 "ext_reg_operand" "=d,d,?d")
+        (minus:HI (match_operand:HI 1 "src_operand" "0,rR,rS<>")
+                  (match_operand:HI 2 "src_operand" "rm,R,rS<>")))
    (clobber (reg:CC_NOOV 21))]
   "valid_operands (MINUS, operands, HImode)"
   "#"
   "legitimize_operands (IOR, operands, HImode);")
 
 (define_insn "*iorhi3_clobber"
-  [(set (match_operand:HI 0 "reg_operand" "=d,?d,d")
-        (ior:HI (match_operand:HI 1 "src_operand" "%rR,rS<>,0")
-                (match_operand:HI 2 "src_operand" "R,rS<>,rm")))
+  [(set (match_operand:HI 0 "reg_operand" "=d,d,?d")
+        (ior:HI (match_operand:HI 1 "src_operand" "%0,rR,rS<>")
+                (match_operand:HI 2 "src_operand" "rm,R,rS<>")))
    (clobber (reg:CC 21))]
   "valid_operands (IOR, operands, HImode)"
   "#"
   "legitimize_operands (AND, operands, HImode);")
 
 (define_insn "*andhi3_clobber"
-  [(set (match_operand:HI 0 "reg_operand" "=d,?d,d")
-        (and:HI (match_operand:HI 1 "src_operand" "%rR,rS<>,0")
-                (match_operand:HI 2 "src_operand" "R,rS<>,rm")))
+  [(set (match_operand:HI 0 "reg_operand" "=d,d,?d")
+        (and:HI (match_operand:HI 1 "src_operand" "%0,rR,rS<>")
+                (match_operand:HI 2 "src_operand" "rm,R,rS<>")))
    (clobber (reg:CC 21))]
   "valid_operands (AND, operands, HImode)"
   "#"
 
 
 (define_insn "*xorhi3_clobber"
-  [(set (match_operand:HI 0 "reg_operand" "=d,?d,d")
-        (xor:HI (match_operand:HI 1 "src_operand" "%rR,rS<>,0")
-                (match_operand:HI 2 "src_operand" "R,rS<>,rm")))
+  [(set (match_operand:HI 0 "reg_operand" "=d,d,?d")
+        (xor:HI (match_operand:HI 1 "src_operand" "%0,rR,rS<>")
+                (match_operand:HI 2 "src_operand" "rm,R,rS<>")))
    (clobber (reg:CC 21))]
   "valid_operands (XOR, operands, HImode)"
   "#"