OSDN Git Service

* config/vax/vax.md: Use nonimmediate_operand instead of
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 14 Jan 2001 08:59:18 +0000 (08:59 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 14 Jan 2001 08:59:18 +0000 (08:59 +0000)
        general_operand in destinations.

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

gcc/ChangeLog
gcc/config/vax/vax.md

index 8ec52e1..5c957f9 100644 (file)
@@ -1,3 +1,8 @@
+2001-01-14  Richard Henderson  <rth@redhat.com>
+
+       * config/vax/vax.md: Use nonimmediate_operand instead of
+       general_operand in destinations.
+
 2001-01-14  Andreas Jaeger  <aj@suse.de>
 
        * config/i386/i386.c (ix86_split_fp_branch): Remove unused
index 02ce48e..aca7688 100644 (file)
 
 \f
 (define_insn "movdf"
-  [(set (match_operand:DF 0 "general_operand" "=g,g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g")
        (match_operand:DF 1 "general_operand" "G,gF"))]
   ""
   "@
    mov%# %1,%0")
 
 (define_insn "movsf"
-  [(set (match_operand:SF 0 "general_operand" "=g,g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g")
        (match_operand:SF 1 "general_operand" "G,gF"))]
   ""
   "@
 ;;  "movh %1,%0")
 
 (define_insn "movdi"
-  [(set (match_operand:DI 0 "general_operand" "=g,g")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=g,g")
        (match_operand:DI 1 "general_operand" "I,g"))]
   ""
   "@
 ;; "addl3 $63,#,dst" but this is slower than movzbl and takes as much space.
 
 (define_insn "movsi"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (match_operand:SI 1 "general_operand" "g"))]
   ""
   "*
 }")
 
 (define_insn "movhi"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (match_operand:HI 1 "general_operand" "g"))]
   ""
   "*
 }")
 
 (define_insn "movqi"
-  [(set (match_operand:QI 0 "general_operand" "=g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
        (match_operand:QI 1 "general_operand" "g"))]
   ""
   "*
 ;; that anything generated as this insn will be recognized as one
 ;; and that it won't successfully combine with anything.
 (define_insn "movstrhi1"
-  [(set (match_operand:BLK 0 "general_operand" "=g")
-       (match_operand:BLK 1 "general_operand" "g"))
+  [(set (match_operand:BLK 0 "memory_operand" "=m")
+       (match_operand:BLK 1 "memory_operand" "m"))
    (use (match_operand:HI 2 "general_operand" "g"))
    (clobber (reg:SI 0))
    (clobber (reg:SI 1))
 ;; Extension and truncation insns.
 
 (define_insn "truncsiqi2"
-  [(set (match_operand:QI 0 "general_operand" "=g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
        (truncate:QI (match_operand:SI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtlb %1,%0")
 
 (define_insn "truncsihi2"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (truncate:HI (match_operand:SI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtlw %1,%0")
 
 (define_insn "trunchiqi2"
-  [(set (match_operand:QI 0 "general_operand" "=g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
        (truncate:QI (match_operand:HI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtwb %1,%0")
 
 (define_insn "extendhisi2"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtwl %1,%0")
 
 (define_insn "extendqihi2"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtbw %1,%0")
 
 (define_insn "extendqisi2"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtbl %1,%0")
 
 (define_insn "extendsfdf2"
-  [(set (match_operand:DF 0 "general_operand" "=g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
        (float_extend:DF (match_operand:SF 1 "general_operand" "gF")))]
   ""
   "cvtf%# %1,%0")
 
 (define_insn "truncdfsf2"
-  [(set (match_operand:SF 0 "general_operand" "=g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
        (float_truncate:SF (match_operand:DF 1 "general_operand" "gF")))]
   ""
   "cvt%#f %1,%0")
 
 (define_insn "zero_extendhisi2"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))]
   ""
   "movzwl %1,%0")
 
 (define_insn "zero_extendqihi2"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))]
   ""
   "movzbw %1,%0")
 
 (define_insn "zero_extendqisi2"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))]
   ""
   "movzbl %1,%0")
 ;; Fix-to-float conversion insns.
 
 (define_insn "floatsisf2"
-  [(set (match_operand:SF 0 "general_operand" "=g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
        (float:SF (match_operand:SI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtlf %1,%0")
 
 (define_insn "floatsidf2"
-  [(set (match_operand:DF 0 "general_operand" "=g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
        (float:DF (match_operand:SI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtl%# %1,%0")
 
 (define_insn "floathisf2"
-  [(set (match_operand:SF 0 "general_operand" "=g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
        (float:SF (match_operand:HI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtwf %1,%0")
 
 (define_insn "floathidf2"
-  [(set (match_operand:DF 0 "general_operand" "=g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
        (float:DF (match_operand:HI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtw%# %1,%0")
 
 (define_insn "floatqisf2"
-  [(set (match_operand:SF 0 "general_operand" "=g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
        (float:SF (match_operand:QI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtbf %1,%0")
 
 (define_insn "floatqidf2"
-  [(set (match_operand:DF 0 "general_operand" "=g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
        (float:DF (match_operand:QI 1 "nonimmediate_operand" "g")))]
   ""
   "cvtb%# %1,%0")
 ;; Float-to-fix conversion insns.
 
 (define_insn "fix_truncsfqi2"
-  [(set (match_operand:QI 0 "general_operand" "=g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
        (fix:QI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
   ""
   "cvtfb %1,%0")
 
 (define_insn "fix_truncsfhi2"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (fix:HI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
   ""
   "cvtfw %1,%0")
 
 (define_insn "fix_truncsfsi2"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
   ""
   "cvtfl %1,%0")
 
 (define_insn "fix_truncdfqi2"
-  [(set (match_operand:QI 0 "general_operand" "=g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
        (fix:QI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
   ""
   "cvt%#b %1,%0")
 
 (define_insn "fix_truncdfhi2"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (fix:HI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
   ""
   "cvt%#w %1,%0")
 
 (define_insn "fix_truncdfsi2"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
   ""
   "cvt%#l %1,%0")
 ;;- All kinds of add instructions.
 
 (define_insn "adddf3"
-  [(set (match_operand:DF 0 "general_operand" "=g,g,g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g,g")
        (plus:DF (match_operand:DF 1 "general_operand" "0,gF,gF")
                 (match_operand:DF 2 "general_operand" "gF,0,gF")))]
   ""
    add%#3 %1,%2,%0")
 
 (define_insn "addsf3"
-  [(set (match_operand:SF 0 "general_operand" "=g,g,g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g,g")
        (plus:SF (match_operand:SF 1 "general_operand" "0,gF,gF")
                 (match_operand:SF 2 "general_operand" "gF,0,gF")))]
   ""
 
 
 (define_insn "addsi3"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (plus:SI (match_operand:SI 1 "general_operand" "g")
                 (match_operand:SI 2 "general_operand" "g")))]
   ""
 }")
 
 (define_insn "addhi3"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (plus:HI (match_operand:HI 1 "general_operand" "g")
                 (match_operand:HI 2 "general_operand" "g")))]
   ""
 }")
 
 (define_insn "addqi3"
-  [(set (match_operand:QI 0 "general_operand" "=g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
        (plus:QI (match_operand:QI 1 "general_operand" "g")
                 (match_operand:QI 2 "general_operand" "g")))]
   ""
 
 ;; The add-with-carry (adwc) instruction only accepts two operands.
 (define_insn "adddi3"
-  [(set (match_operand:DI 0 "general_operand" "=ro>,ro>")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=ro>,ro>")
        (plus:DI (match_operand:DI 1 "general_operand" "%0,ro>")
                 (match_operand:DI 2 "general_operand" "Fro,F")))]
   ""
 ;;- All kinds of subtract instructions.
 
 (define_insn "subdf3"
-  [(set (match_operand:DF 0 "general_operand" "=g,g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g")
        (minus:DF (match_operand:DF 1 "general_operand" "0,gF")
                  (match_operand:DF 2 "general_operand" "gF,gF")))]
   ""
    sub%#3 %2,%1,%0")
 
 (define_insn "subsf3"
-  [(set (match_operand:SF 0 "general_operand" "=g,g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g")
        (minus:SF (match_operand:SF 1 "general_operand" "0,gF")
                  (match_operand:SF 2 "general_operand" "gF,gF")))]
   ""
    subf3 %2,%1,%0")
 
 (define_insn "subsi3"
-  [(set (match_operand:SI 0 "general_operand" "=g,g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g")
        (minus:SI (match_operand:SI 1 "general_operand" "0,g")
                  (match_operand:SI 2 "general_operand" "g,g")))]
   ""
    subl3 %2,%1,%0")
 
 (define_insn "subhi3"
-  [(set (match_operand:HI 0 "general_operand" "=g,g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g")
        (minus:HI (match_operand:HI 1 "general_operand" "0,g")
                  (match_operand:HI 2 "general_operand" "g,g")))]
   ""
    subw3 %2,%1,%0")
 
 (define_insn "subqi3"
-  [(set (match_operand:QI 0 "general_operand" "=g,g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g")
        (minus:QI (match_operand:QI 1 "general_operand" "0,g")
                  (match_operand:QI 2 "general_operand" "g,g")))]
   ""
 
 ;; The subtract-with-carry (sbwc) instruction only takes two operands.
 (define_insn "subdi3"
-  [(set (match_operand:DI 0 "general_operand" "=or>,or>")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=or>,or>")
        (minus:DI (match_operand:DI 1 "general_operand" "0,or>")
                  (match_operand:DI 2 "general_operand" "For,F")))]
   ""
 ;;- Multiply instructions.
 
 (define_insn "muldf3"
-  [(set (match_operand:DF 0 "general_operand" "=g,g,g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g,g")
        (mult:DF (match_operand:DF 1 "general_operand" "0,gF,gF")
                 (match_operand:DF 2 "general_operand" "gF,0,gF")))]
   ""
    mul%#3 %1,%2,%0")
 
 (define_insn "mulsf3"
-  [(set (match_operand:SF 0 "general_operand" "=g,g,g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g,g")
        (mult:SF (match_operand:SF 1 "general_operand" "0,gF,gF")
                 (match_operand:SF 2 "general_operand" "gF,0,gF")))]
   ""
    mulf3 %1,%2,%0")
 
 (define_insn "mulsi3"
-  [(set (match_operand:SI 0 "general_operand" "=g,g,g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g")
        (mult:SI (match_operand:SI 1 "general_operand" "0,g,g")
                 (match_operand:SI 2 "general_operand" "g,0,g")))]
   ""
    mull3 %1,%2,%0")
 
 (define_insn "mulhi3"
-  [(set (match_operand:HI 0 "general_operand" "=g,g,")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,")
        (mult:HI (match_operand:HI 1 "general_operand" "0,g,g")
                 (match_operand:HI 2 "general_operand" "g,0,g")))]
   ""
    mulw3 %1,%2,%0")
 
 (define_insn "mulqi3"
-  [(set (match_operand:QI 0 "general_operand" "=g,g,g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g")
        (mult:QI (match_operand:QI 1 "general_operand" "0,g,g")
                 (match_operand:QI 2 "general_operand" "g,0,g")))]
   ""
    mulb3 %1,%2,%0")
 
 (define_insn "mulsidi3"
-  [(set (match_operand:DI 0 "general_operand" "=g")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
        (mult:DI (sign_extend:DI
                  (match_operand:SI 1 "nonimmediate_operand" "g"))
                 (sign_extend:DI
   "emul %1,%2,$0,%0")
 
 (define_insn ""
-  [(set (match_operand:DI 0 "general_operand" "=g")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
        (plus:DI
         (mult:DI (sign_extend:DI
                   (match_operand:SI 1 "nonimmediate_operand" "g"))
 
 ;; 'F' constraint means type CONST_DOUBLE
 (define_insn ""
-  [(set (match_operand:DI 0 "general_operand" "=g")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
        (plus:DI
         (mult:DI (sign_extend:DI
                   (match_operand:SI 1 "nonimmediate_operand" "g"))
 ;;- Divide instructions.
 
 (define_insn "divdf3"
-  [(set (match_operand:DF 0 "general_operand" "=g,g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g")
        (div:DF (match_operand:DF 1 "general_operand" "0,gF")
                (match_operand:DF 2 "general_operand" "gF,gF")))]
   ""
    div%#3 %2,%1,%0")
 
 (define_insn "divsf3"
-  [(set (match_operand:SF 0 "general_operand" "=g,g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g")
        (div:SF (match_operand:SF 1 "general_operand" "0,gF")
                (match_operand:SF 2 "general_operand" "gF,gF")))]
   ""
    divf3 %2,%1,%0")
 
 (define_insn "divsi3"
-  [(set (match_operand:SI 0 "general_operand" "=g,g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g")
        (div:SI (match_operand:SI 1 "general_operand" "0,g")
                (match_operand:SI 2 "general_operand" "g,g")))]
   ""
    divl3 %2,%1,%0")
 
 (define_insn "divhi3"
-  [(set (match_operand:HI 0 "general_operand" "=g,g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g")
        (div:HI (match_operand:HI 1 "general_operand" "0,g")
                (match_operand:HI 2 "general_operand" "g,g")))]
   ""
    divw3 %2,%1,%0")
 
 (define_insn "divqi3"
-  [(set (match_operand:QI 0 "general_operand" "=g,g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g")
        (div:QI (match_operand:QI 1 "general_operand" "0,g")
                (match_operand:QI 2 "general_operand" "g,g")))]
   ""
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g,g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g")
        (and:SI (not:SI (match_operand:SI 1 "general_operand" "g,g"))
                (match_operand:SI 2 "general_operand" "0,g")))]
   ""
    bicl3 %1,%2,%0")
 
 (define_insn ""
-  [(set (match_operand:HI 0 "general_operand" "=g,g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g")
        (and:HI (not:HI (match_operand:HI 1 "general_operand" "g,g"))
                (match_operand:HI 2 "general_operand" "0,g")))]
   ""
    bicw3 %1,%2,%0")
 
 (define_insn ""
-  [(set (match_operand:QI 0 "general_operand" "=g,g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g")
        (and:QI (not:QI (match_operand:QI 1 "general_operand" "g,g"))
                (match_operand:QI 2 "general_operand" "0,g")))]
   ""
 ;; opportunities in combine.c.
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g,g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g")
        (and:SI (match_operand:SI 1 "general_operand" "0,g")
                (match_operand:SI 2 "const_int_operand" "n,n")))]
   ""
    bicl3 %N2,%1,%0")
 
 (define_insn ""
-  [(set (match_operand:HI 0 "general_operand" "=g,g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g")
        (and:HI (match_operand:HI 1 "general_operand" "0,g")
                (match_operand:HI 2 "const_int_operand" "n,n")))]
   ""
    bicw3 %H2,%1,%0")
 
 (define_insn ""
-  [(set (match_operand:QI 0 "general_operand" "=g,g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g")
        (and:QI (match_operand:QI 1 "general_operand" "0,g")
                (match_operand:QI 2 "const_int_operand" "n,n")))]
   ""
 ;;- Bit set instructions.
 
 (define_insn "iorsi3"
-  [(set (match_operand:SI 0 "general_operand" "=g,g,g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g")
        (ior:SI (match_operand:SI 1 "general_operand" "0,g,g")
                (match_operand:SI 2 "general_operand" "g,0,g")))]
   ""
    bisl3 %2,%1,%0")
 
 (define_insn "iorhi3"
-  [(set (match_operand:HI 0 "general_operand" "=g,g,g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,g")
        (ior:HI (match_operand:HI 1 "general_operand" "0,g,g")
                (match_operand:HI 2 "general_operand" "g,0,g")))]
   ""
    bisw3 %2,%1,%0")
 
 (define_insn "iorqi3"
-  [(set (match_operand:QI 0 "general_operand" "=g,g,g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g")
        (ior:QI (match_operand:QI 1 "general_operand" "0,g,g")
                (match_operand:QI 2 "general_operand" "g,0,g")))]
   ""
 ;;- xor instructions.
 
 (define_insn "xorsi3"
-  [(set (match_operand:SI 0 "general_operand" "=g,g,g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g")
        (xor:SI (match_operand:SI 1 "general_operand" "0,g,g")
                (match_operand:SI 2 "general_operand" "g,0,g")))]
   ""
    xorl3 %2,%1,%0")
 
 (define_insn "xorhi3"
-  [(set (match_operand:HI 0 "general_operand" "=g,g,g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,g")
        (xor:HI (match_operand:HI 1 "general_operand" "0,g,g")
                (match_operand:HI 2 "general_operand" "g,0,g")))]
   ""
    xorw3 %2,%1,%0")
 
 (define_insn "xorqi3"
-  [(set (match_operand:QI 0 "general_operand" "=g,g,g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g")
        (xor:QI (match_operand:QI 1 "general_operand" "0,g,g")
                (match_operand:QI 2 "general_operand" "g,0,g")))]
   ""
    xorb3 %2,%1,%0")
 \f
 (define_insn "negdf2"
-  [(set (match_operand:DF 0 "general_operand" "=g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
        (neg:DF (match_operand:DF 1 "general_operand" "gF")))]
   ""
   "mneg%# %1,%0")
 
 (define_insn "negsf2"
-  [(set (match_operand:SF 0 "general_operand" "=g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
        (neg:SF (match_operand:SF 1 "general_operand" "gF")))]
   ""
   "mnegf %1,%0")
 
 (define_insn "negsi2"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (neg:SI (match_operand:SI 1 "general_operand" "g")))]
   ""
   "mnegl %1,%0")
 
 (define_insn "neghi2"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (neg:HI (match_operand:HI 1 "general_operand" "g")))]
   ""
   "mnegw %1,%0")
 
 (define_insn "negqi2"
-  [(set (match_operand:QI 0 "general_operand" "=g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
        (neg:QI (match_operand:QI 1 "general_operand" "g")))]
   ""
   "mnegb %1,%0")
 \f
 (define_insn "one_cmplsi2"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (not:SI (match_operand:SI 1 "general_operand" "g")))]
   ""
   "mcoml %1,%0")
 
 (define_insn "one_cmplhi2"
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
        (not:HI (match_operand:HI 1 "general_operand" "g")))]
   ""
   "mcomw %1,%0")
 
 (define_insn "one_cmplqi2"
-  [(set (match_operand:QI 0 "general_operand" "=g")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
        (not:QI (match_operand:QI 1 "general_operand" "g")))]
   ""
   "mcomb %1,%0")
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
                     (match_operand:QI 2 "const_int_operand" "n")))]
   ""
   "ashl $%n2,%1,%0")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
                     (neg:QI (match_operand:QI 2 "general_operand" "g"))))]
   ""
   "ashl %2,%1,%0")
 
 (define_insn "ashlsi3"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (ashift:SI (match_operand:SI 1 "general_operand" "g")
                   (match_operand:QI 2 "general_operand" "g")))]
   ""
 }")
 
 (define_insn "ashldi3"
-  [(set (match_operand:DI 0 "general_operand" "=g")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
        (ashift:DI (match_operand:DI 1 "general_operand" "g")
                   (match_operand:QI 2 "general_operand" "g")))]
   ""
   "ashq %2,%1,%0")
 
 (define_insn ""
-  [(set (match_operand:DI 0 "general_operand" "=g")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
        (ashiftrt:DI (match_operand:DI 1 "general_operand" "g")
                     (neg:QI (match_operand:QI 2 "general_operand" "g"))))]
   ""
 }")
 
 (define_insn "rotlsi3"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (rotate:SI (match_operand:SI 1 "general_operand" "g")
                   (match_operand:QI 2 "general_operand" "g")))]
   ""
   "rotl %2,%1,%0")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (rotatert:SI (match_operand:SI 1 "general_operand" "g")
                     (match_operand:QI 2 "const_int_operand" "n")))]
   ""
   "rotl %R2,%1,%0")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (rotatert:SI (match_operand:SI 1 "general_operand" "g")
                     (neg:QI (match_operand:QI 2 "general_operand" "g"))))]
   ""
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=&g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=&g")
        (zero_extract:SI (match_operand:SI 1 "register_operand" "ro")
                         (match_operand:QI 2 "const_int_operand" "n")
                         (match_operand:SI 3 "const_int_operand" "n")))]
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (sign_extract:SI (match_operand:SI 1 "register_operand" "ro")
                         (match_operand:QI 2 "const_int_operand" "n")
                         (match_operand:SI 3 "const_int_operand" "n")))]
 ;; anyway, we can't allow immediate values for the primary source operand.
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (sign_extract:SI (match_operand:SI 1 "register_operand" "ro")
                         (match_operand:QI 2 "general_operand" "g")
                         (match_operand:SI 3 "general_operand" "g")))]
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (zero_extract:SI (match_operand:SI 1 "register_operand" "ro")
                         (match_operand:QI 2 "general_operand" "g")
                         (match_operand:SI 3 "general_operand" "g")))]
   "cmpzv %2,%1,%0,%3")
 
 (define_insn "extv"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (sign_extract:SI (match_operand:QI 1 "memory_operand" "m")
                         (match_operand:QI 2 "general_operand" "g")
                         (match_operand:SI 3 "general_operand" "g")))]
   "")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (zero_extract:SI (match_operand:QI 1 "memory_operand" "m")
                         (match_operand:QI 2 "general_operand" "g")
                         (match_operand:SI 3 "general_operand" "g")))]
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (gt (plus:SI (match_operand:SI 0 "general_operand" "+g")
+        (gt (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+g")
                      (const_int -1))
             (const_int 0))
         (label_ref (match_operand 1 "" ""))
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (ge (plus:SI (match_operand:SI 0 "general_operand" "+g")
+        (ge (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+g")
                      (const_int -1))
             (const_int 0))
         (label_ref (match_operand 1 "" ""))
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (lt (plus:SI (match_operand:SI 0 "general_operand" "+g")
+        (lt (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+g")
                      (const_int 1))
             (match_operand:SI 1 "general_operand" "g"))
         (label_ref (match_operand 2 "" ""))
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (lt (match_operand:SI 0 "general_operand" "+g")
+        (lt (match_operand:SI 0 "nonimmediate_operand" "+g")
             (match_operand:SI 1 "general_operand" "g"))
         (label_ref (match_operand 2 "" ""))
         (pc)))
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (le (plus:SI (match_operand:SI 0 "general_operand" "+g")
+        (le (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+g")
                      (const_int 1))
             (match_operand:SI 1 "general_operand" "g"))
         (label_ref (match_operand 2 "" ""))
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (le (match_operand:SI 0 "general_operand" "+g")
+        (le (match_operand:SI 0 "nonimmediate_operand" "+g")
             (match_operand:SI 1 "general_operand" "g"))
         (label_ref (match_operand 2 "" ""))
         (pc)))
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (ne (match_operand:SI 0 "general_operand" "+g")
+        (ne (match_operand:SI 0 "nonimmediate_operand" "+g")
             (const_int 0))
         (label_ref (match_operand 1 "" ""))
         (pc)))
                                          (mult:SI (minus:SI (match_dup 0)
                                                             (const_int 0))
                                                   (const_int 2)))))
-                              (label_ref:SI (match_operand 3 "" "")))
+                              (label_ref:SI (match_operand 2 "" "")))
                      (pc)))]
   ""
   "casel %0,$0,%1")
 ;; because < matches any autodecrement, not just a push.
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (match_operand:QI 1 "address_operand" "p"))]
   ""
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (match_operand:HI 1 "address_operand" "p"))]
   ""
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (match_operand:SI 1 "address_operand" "p"))]
   ""
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (match_operand:DI 1 "address_operand" "p"))]
   ""
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (match_operand:SF 1 "address_operand" "p"))]
   ""
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (match_operand:DF 1 "address_operand" "p"))]
   ""
   "*
 ;; above sequences to before attempting to recognize the new insn.
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=ro")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
        (and:SI (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
                             (match_operand:QI 2 "const_int_operand" "n"))
                (match_operand:SI 3 "const_int_operand" "n")))]
 ;; optimized away.
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=ro")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
        (and:SI (ashift:SI (match_operand:SI 1 "general_operand" "g")
                           (match_operand:QI 2 "const_int_operand" "n"))
                (match_operand:SI 3 "const_int_operand" "n")))]