OSDN Git Service

* config/m68k/m68k.md: Replace all general_operand with
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Jul 2001 03:45:08 +0000 (03:45 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Jul 2001 03:45:08 +0000 (03:45 +0000)
        nonimmediate_operand for all destinations.
        * config/m68k/m68k.c (not_sp_operand): Likewise.

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

gcc/ChangeLog
gcc/config/m68k/m68k.c
gcc/config/m68k/m68k.md

index be0e64a..7995bfb 100644 (file)
@@ -1,3 +1,9 @@
+2001-07-30  Roman Zippel  <zippel@linux-m68k.org>
+
+       * config/m68k/m68k.md: Replace all general_operand with
+       nonimmediate_operand for all destinations.
+       * config/m68k/m68k.c (not_sp_operand): Likewise.
+
 Mon Jul 30 23:20:34 EDT 2001  John Wehle  (john@feith.com)
 
         * flow.c (merge_blocks): Return 1 if an extra jump is inserted.
index 493e770..46aeea0 100644 (file)
@@ -1494,7 +1494,7 @@ not_sp_operand (op, mode)
      register rtx op;
      enum machine_mode mode;
 {
-  return op != stack_pointer_rtx && general_operand (op, mode);
+  return op != stack_pointer_rtx && nonimmediate_operand (op, mode);
 }
 
 /* Return TRUE if X is a valid comparison operator for the dbcc 
index f56e354..799284b 100644 (file)
 
 ;This is never used.
 ;(define_insn "swapsi"
-;  [(set (match_operand:SI 0 "general_operand" "+r")
+;  [(set (match_operand:SI 0 "nonimmediate_operand" "+r")
 ;      (match_operand:SI 1 "general_operand" "+r"))
 ;   (set (match_dup 1) (match_dup 0))]
 ;  ""
 ;; into a data reg with moveq in order to store it elsewhere.
 
 (define_insn "movsi_const0"
-  [(set (match_operand:SI 0 "general_operand" "=g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
        (const_int 0))]
   ;; clr insns on 68000 read before writing.
   ;; This isn't so on the 68010, but we have no TARGET_68010.
 ;; In both the PIC and non-PIC cases the patterns generated will
 ;; matched by the next define_insn.
 (define_expand "movsi"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (match_operand:SI 1 "general_operand" ""))]
   ""
   "
   ;; Notes: make sure no alternative allows g vs g.
   ;; We don't allow f-regs since fixed point cannot go in them.
   ;; We do allow y and x regs since fixed point is allowed in them.
-  [(set (match_operand:SI 0 "general_operand" "=g,d,a<,y,!*x*r*m")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=g,d,a<,y,!*x*r*m")
         (match_operand:SI 1 "general_src_operand" "daymSKT,n,i,g,*x*r*m"))]
 
   "!TARGET_5200"
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=r<Q>,g")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<Q>,g")
        (match_operand:SI 1 "general_operand" "g,r<Q>"))]
   "TARGET_5200"
   "* return output_move_simode (operands);")
 ;; Special case of fullword move, where we need to get a non-GOT PIC
 ;; reference into an address register.
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=a<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=a<")
         (match_operand:SI 1 "pcrel_address" ""))]
   "TARGET_PCREL"
   "*
 }")
 
 (define_expand "movhi"
-  [(set (match_operand:HI 0 "general_operand" "")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "")
        (match_operand:HI 1 "general_operand" ""))]
   ""
   "")
 
 (define_insn ""
-  [(set (match_operand:HI 0 "general_operand" "=g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
         (match_operand:HI 1 "general_src_operand" "gS"))]
   "!TARGET_5200"
   "* return output_move_himode (operands);")
 
  (define_insn ""
-  [(set (match_operand:HI 0 "general_operand" "=r<Q>,g")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r<Q>,g")
        (match_operand:HI 1 "general_operand" "g,r<Q>"))]
   "TARGET_5200"
   "* return output_move_himode (operands);")
 
 (define_expand "movstricthi"
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" ""))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" ""))
         (match_operand:HI 1 "general_src_operand" ""))]
   ""
   "")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm"))
        (match_operand:HI 1 "general_src_operand" "rmSn"))]
   "!TARGET_5200"
   "* return output_move_stricthi (operands);")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+d,m"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+d,m"))
        (match_operand:HI 1 "general_src_operand" "rmn,r"))]
   "TARGET_5200"
   "* return output_move_stricthi (operands);")
 
 (define_expand "movqi"
-  [(set (match_operand:QI 0 "general_operand" "")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "")
         (match_operand:QI 1 "general_src_operand" ""))]
   ""
   "")
 
 (define_insn ""
-  [(set (match_operand:QI 0 "general_operand" "=d,*a,m")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=d,*a,m")
        (match_operand:QI 1 "general_src_operand" "dmSi*a,di*a,dmSi"))]
   "!TARGET_5200"
   "* return output_move_qimode (operands);")
 
 (define_insn ""
-  [(set (match_operand:QI 0 "general_operand" "=d<Q>,dm,d*a")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=d<Q>,dm,d*a")
        (match_operand:QI 1 "general_src_operand" "dmi,d<Q>,di*a"))]
   "TARGET_5200"
   "* return output_move_qimode (operands);")
 
 (define_expand "movstrictqi"
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" ""))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" ""))
         (match_operand:QI 1 "general_src_operand" ""))]
   ""
   "")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm"))
        (match_operand:QI 1 "general_src_operand" "dmSn"))]
   "!TARGET_5200"
   "* return output_move_strictqi (operands);")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+d,m"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+d,m"))
        (match_operand:QI 1 "general_src_operand" "dmn,d"))]
   "TARGET_5200"
   "* return output_move_strictqi (operands);")
 
 (define_expand "movsf"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (match_operand:SF 1 "general_operand" ""))]
   ""
   "")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=rmf,x,y,rm,!x,!rm")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=rmf,x,y,rm,!x,!rm")
        (match_operand:SF 1 "general_operand" "rmfF,xH,rmF,y,rm,x"))]
-;  [(set (match_operand:SF 0 "general_operand" "=rmf")
+;  [(set (match_operand:SF 0 "nonimmediate_operand" "=rmf")
 ;      (match_operand:SF 1 "general_operand" "rmfF"))]
   "!TARGET_5200"
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=r,g")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=r,g")
        (match_operand:SF 1 "general_operand" "g,r"))]
   "TARGET_5200"
   "* return \"move%.l %1,%0\";")
 
 (define_expand "movdf"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (match_operand:DF 1 "general_operand" ""))]
   ""
   "")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand"
+  [(set (match_operand:DF 0 "nonimmediate_operand"
                                "=*rm,*rf,*rf,&*rof<>,y,*rm,x,!x,!*rm")
        (match_operand:DF 1 "general_operand"
                                "*rf,m,0,*rofE<>,*rmE,y,xH,*rm,x"))]
-;  [(set (match_operand:DF 0 "general_operand" "=rm,&rf,&rof<>")
+;  [(set (match_operand:DF 0 "nonimmediate_operand" "=rm,&rf,&rof<>")
 ;      (match_operand:DF 1 "general_operand" "rf,m,rofF<>"))]
   "!TARGET_5200"
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=r,g")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=r,g")
        (match_operand:DF 1 "general_operand" "g,r"))]
   "TARGET_5200"
   "* return output_move_double (operands);")
 
 (define_expand "movdi"
   ;; Let's see if it really still needs to handle fp regs, and, if so, why.
-  [(set (match_operand:DI 0 "general_operand" "")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
        (match_operand:DI 1 "general_operand" ""))]
   ""
   "")
 ;; movdi can apply to fp regs in some cases
 (define_insn ""
   ;; Let's see if it really still needs to handle fp regs, and, if so, why.
-  [(set (match_operand:DI 0 "general_operand" "=rm,r,&ro<>,y,rm,!*x,!rm")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r,&ro<>,y,rm,!*x,!rm")
        (match_operand:DI 1 "general_operand" "rF,m,roi<>F,rmiF,y,rmF,*x"))]
-;  [(set (match_operand:DI 0 "general_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm")
+;  [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm")
 ;      (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfmF,rmi,y,rm,x"))]
-;  [(set (match_operand:DI 0 "general_operand" "=rm,&rf,&ro<>,!&rm,!&f")
+;  [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,&rf,&ro<>,!&rm,!&f")
 ;      (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfF"))]
   "!TARGET_5200"
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:DI 0 "general_operand" "=r,g")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,g")
        (match_operand:DI 1 "general_operand" "g,r"))]
   "TARGET_5200"
   "* return output_move_double (operands);")
 \f
 ;; truncation instructions
 (define_insn "truncsiqi2"
-  [(set (match_operand:QI 0 "general_operand" "=dm,d")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm,d")
        (truncate:QI
         (match_operand:SI 1 "general_src_operand" "doJS,i")))]
   ""
 }")
 
 (define_insn "trunchiqi2"
-  [(set (match_operand:QI 0 "general_operand" "=dm,d")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm,d")
        (truncate:QI
         (match_operand:HI 1 "general_src_operand" "doJS,i")))]
   ""
 }")
 
 (define_insn "truncsihi2"
-  [(set (match_operand:HI 0 "general_operand" "=dm,d")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=dm,d")
        (truncate:HI
         (match_operand:SI 1 "general_src_operand" "roJS,i")))]
   ""
 ;; zero extension instructions
 
 (define_insn "zero_extendqidi2"
-  [(set (match_operand:DI 0 "general_operand" "=&d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=&d")
        (zero_extend:DI (match_operand:QI 1 "general_operand" "dm")))]
   ""
   "*
 }")
 
 (define_insn "zero_extendhidi2"
-  [(set (match_operand:DI 0 "general_operand" "=&d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=&d")
        (zero_extend:DI (match_operand:HI 1 "general_operand" "rm")))]
   ""
   "*
 
 ;; this is the canonical form for (lshiftrt:DI x 32)
 (define_insn "zero_extendsidi2"
-  [(set (match_operand:DI 0 "general_operand" "=rm")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
     (zero_extend:DI (match_operand:SI 1 "general_operand" "rm")))]
   ""
   "*
 ;; of this case will result in worse code than the uncombined patterns.
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=do<>,d<")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=do<>,d<")
        (zero_extend:SI (match_operand:HI 1 "nonimmediate_src_operand" "r,mS")))]
   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:HI 0 "general_operand" "=do<>,d")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=do<>,d")
        (zero_extend:HI (match_operand:QI 1 "nonimmediate_src_operand" "d,mS")))]
   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
   "*
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=do<>,d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=do<>,d")
        (zero_extend:SI (match_operand:QI 1 "nonimmediate_src_operand" "d,mS")))]
   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
   "*
 ;; sign extension instructions
 
 (define_insn "extendqidi2"
-  [(set (match_operand:DI 0 "general_operand" "=d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
         (sign_extend:DI (match_operand:QI 1 "general_src_operand" "rmS")))]
   ""
   "*
 }")
 
 (define_insn "extendhidi2"
-  [(set (match_operand:DI 0 "general_operand" "=d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
        (sign_extend:DI
         (match_operand:HI 1 "general_src_operand" "rmS")))]
   ""
 }")
 
 (define_insn "extendsidi2"
-  [(set (match_operand:DI 0 "general_operand" "=d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
        (sign_extend:DI
         (match_operand:SI 1 "general_operand" "rm")))]
   ""
 }")
 
 (define_insn "extendhisi2"
-  [(set (match_operand:SI 0 "general_operand" "=*d,a")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=*d,a")
        (sign_extend:SI
         (match_operand:HI 1 "nonimmediate_src_operand" "0,rmS")))]
   ""
 }")
 
 (define_insn "extendqihi2"
-  [(set (match_operand:HI 0 "general_operand" "=d")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=d")
        (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "0")))]
   ""
   "ext%.w %0")
 
 (define_insn "extendqisi2"
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "0")))]
   "TARGET_68020 || TARGET_5200"
   "extb%.l %0")
 ;; Conversions between float and double.
 
 (define_expand "extendsfdf2"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (float_extend:DF
         (match_operand:SF 1 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=x,y")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y")
        (float_extend:DF
         (match_operand:SF 1 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
   "fpstod %w1,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=*fdm,f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=*fdm,f")
        (float_extend:DF
          (match_operand:SF 1 "general_operand" "f,dmF")))]
   "TARGET_68881"
 ;; sure of truncating in that case.
 ;; But on the Sun FPA, we can be sure.
 (define_expand "truncdfsf2"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (float_truncate:SF
          (match_operand:DF 1 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=x,y")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y")
        (float_truncate:SF
          (match_operand:DF 1 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
 
 ;; On the '040 we can truncate in a register accurately and easily.
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (float_truncate:SF
          (match_operand:DF 1 "general_operand" "fmG")))]
   "TARGET_68040_ONLY"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=dm")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=dm")
        (float_truncate:SF
          (match_operand:DF 1 "general_operand" "f")))]
   "TARGET_68881"
 ;; rather than as QImode or HImode.
 
 (define_expand "floatsisf2"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (float:SF (match_operand:SI 1 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=y,x")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=y,x")
        (float:SF (match_operand:SI 1 "general_operand" "rmi,x")))]
   "TARGET_FPA"
   "fpltos %1,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (float:SF (match_operand:SI 1 "general_operand" "dmi")))]
   "TARGET_68881"
   "f%$move%.l %1,%0")
 
 (define_expand "floatsidf2"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (float:DF (match_operand:SI 1 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=y,x")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=y,x")
        (float:DF (match_operand:SI 1 "general_operand" "rmi,x")))]
   "TARGET_FPA"
   "fpltod %1,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (float:DF (match_operand:SI 1 "general_operand" "dmi")))]
   "TARGET_68881"
   "f%&move%.l %1,%0")
 
 (define_insn "floathisf2"
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (float:SF (match_operand:HI 1 "general_operand" "dmn")))]
   "TARGET_68881"
   "f%$move%.w %1,%0")
 
 (define_insn "floathidf2"
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (float:DF (match_operand:HI 1 "general_operand" "dmn")))]
   "TARGET_68881"
   "fmove%.w %1,%0")
 
 (define_insn "floatqisf2"
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (float:SF (match_operand:QI 1 "general_operand" "dmn")))]
   "TARGET_68881"
   "fmove%.b %1,%0")
 
 (define_insn "floatqidf2"
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (float:DF (match_operand:QI 1 "general_operand" "dmn")))]
   "TARGET_68881"
   "f%&move%.b %1,%0")
 ;; than calling the subroutines fixsfsi or fixdfsi.
 
 (define_insn "fix_truncdfsi2"
-  [(set (match_operand:SI 0 "general_operand" "=dm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=dm")
        (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
    (clobber (match_scratch:SI 2 "=d"))
    (clobber (match_scratch:SI 3 "=d"))]
 }")
 
 (define_insn "fix_truncdfhi2"
-  [(set (match_operand:HI 0 "general_operand" "=dm")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=dm")
        (fix:HI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
    (clobber (match_scratch:SI 2 "=d"))
    (clobber (match_scratch:SI 3 "=d"))]
 }")
 
 (define_insn "fix_truncdfqi2"
-  [(set (match_operand:QI 0 "general_operand" "=dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm")
        (fix:QI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
    (clobber (match_scratch:SI 2 "=d"))
    (clobber (match_scratch:SI 3 "=d"))]
 ;; This is the first stage of converting it to an integer type.
 
 (define_insn "ftruncdf2"
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (fix:DF (match_operand:DF 1 "general_operand" "fFm")))]
   "TARGET_68881 && !TARGET_68040"
   "*
 }")
 
 (define_insn "ftruncsf2"
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (fix:SF (match_operand:SF 1 "general_operand" "dfFm")))]
   "TARGET_68881 && !TARGET_68040"
   "*
 ;; Convert a float whose value is an integer
 ;; to an actual integer.  Second stage of converting float to integer type.
 (define_insn "fixsfqi2"
-  [(set (match_operand:QI 0 "general_operand" "=dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm")
        (fix:QI (match_operand:SF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.b %1,%0")
 
 (define_insn "fixsfhi2"
-  [(set (match_operand:HI 0 "general_operand" "=dm")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=dm")
        (fix:HI (match_operand:SF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.w %1,%0")
 
 (define_insn "fixsfsi2"
-  [(set (match_operand:SI 0 "general_operand" "=dm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=dm")
        (fix:SI (match_operand:SF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.l %1,%0")
 
 (define_insn "fixdfqi2"
-  [(set (match_operand:QI 0 "general_operand" "=dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm")
        (fix:QI (match_operand:DF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.b %1,%0")
 
 (define_insn "fixdfhi2"
-  [(set (match_operand:HI 0 "general_operand" "=dm")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=dm")
        (fix:HI (match_operand:DF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.w %1,%0")
 
 (define_insn "fixdfsi2"
-  [(set (match_operand:SI 0 "general_operand" "=dm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=dm")
        (fix:SI (match_operand:DF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.l %1,%0")
 ;; On the Sun FPA, this is done in one step.
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=x,y")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=x,y")
        (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "xH,rmF"))))]
   "TARGET_FPA"
   "fpstol %w1,%0")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=x,y")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=x,y")
        (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "xH,rmF"))))]
   "TARGET_FPA"
   "fpdtol %y1,%0")
 ;; add instructions
 
 (define_insn "adddi_lshrdi_63"
-  [(set (match_operand:DI 0 "general_operand" "=d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
     (plus:DI (lshiftrt:DI (match_operand:DI 1 "general_operand" "rm")
             (const_int 63))
         (match_dup 1)))
 }")
 
 (define_insn "adddi_sexthishl32"
-  [(set (match_operand:DI 0 "general_operand" "=o,a,*d,*d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=o,a,*d,*d")
     (plus:DI (ashift:DI (sign_extend:DI
           (match_operand:HI 1 "general_operand" "rm,rm,rm,rm"))
             (const_int 32))
 } ")
 
 (define_insn "adddi_dilshr32"
-  [(set (match_operand:DI 0 "general_operand" "=d,o")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d,o")
 ;;    (plus:DI (match_operand:DI 2 "general_operand" "%0")
 ;;     (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro")
 ;;            (const_int 32))))]
 } ")
 
 (define_insn "adddi_dishl32"
-  [(set (match_operand:DI 0 "general_operand" "=r,o")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o")
 ;;    (plus:DI (match_operand:DI 2 "general_operand" "%0")
 ;;     (ashift:DI (match_operand:DI 1 "general_operand" "ro")
 ;;            (const_int 32))))]
 } ")
 
 (define_insn "adddi3"
-  [(set (match_operand:DI 0 "general_operand" "=<,o<>,d,d,d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=<,o<>,d,d,d")
        (plus:DI (match_operand:DI 1 "general_operand" "%0,0,0,0,0")
                 (match_operand:DI 2 "general_operand" "<,d,no>,d,a")))
    (clobber (match_scratch:SI 3 "=X,&d,&d,X,&d"))]
 } ")
 
 (define_insn "addsi_lshrsi_31"
-  [(set (match_operand:SI 0 "general_operand" "=dm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=dm")
     (plus:SI (lshiftrt:SI (match_operand:SI 1 "general_operand" "rm")
             (const_int 31))
         (match_dup 1)))]
 }")
 
 (define_expand "addsi3"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (plus:SI (match_operand:SI 1 "general_operand" "")
                 (match_operand:SI 2 "general_src_operand" "")))]
   ""
 ;; This is needed since they are not themselves reloaded,
 ;; so commutativity won't apply to them.
 (define_insn "*addsi3_internal"
-  [(set (match_operand:SI 0 "general_operand" "=m,?a,?a,d,a")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=m,?a,?a,d,a")
         (plus:SI (match_operand:SI 1 "general_operand" "%0,a,rJK,0,0")
                  (match_operand:SI 2 "general_src_operand" "dIKLT,rJK,a,mSrIKLT,mSrIKLs")))]
 
   "* return output_addsi3 (operands);")
 
 (define_insn "*addsi3_5200"
-  [(set (match_operand:SI 0 "general_operand" "=m,?a,?a,r")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=m,?a,?a,r")
        (plus:SI (match_operand:SI 1 "general_operand" "%0,a,rJK,0")
                 (match_operand:SI 2 "general_src_operand" "d,rJK,a,mrIKLs")))]
   "TARGET_5200"
   "* return output_addsi3 (operands);")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=a")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=a")
        (plus:SI (match_operand:SI 1 "general_operand" "0")
                 (sign_extend:SI
                  (match_operand:HI 2 "nonimmediate_src_operand" "rmS"))))]
   "add%.w %2,%0")
 
 (define_insn "addhi3"
-  [(set (match_operand:HI 0 "general_operand" "=m,r")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=m,r")
        (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
                 (match_operand:HI 2 "general_src_operand" "dn,rmSn")))]
   "!TARGET_5200"
 ;; operand in both positions.
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d"))
        (plus:HI (match_dup 0)
                 (match_operand:HI 1 "general_src_operand" "dn,rmSn")))]
   "!TARGET_5200"
 }")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d"))
        (plus:HI (match_operand:HI 1 "general_src_operand" "dn,rmSn")
                 (match_dup 0)))]
   "!TARGET_5200"
 }")
 
 (define_insn "addqi3"
-  [(set (match_operand:QI 0 "general_operand" "=m,d")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=m,d")
        (plus:QI (match_operand:QI 1 "general_operand" "%0,0")
                 (match_operand:QI 2 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
 }")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d"))
        (plus:QI (match_dup 0)
                 (match_operand:QI 1 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
 }")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d"))
        (plus:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn")
                 (match_dup 0)))]
   "!TARGET_5200"
 }")
 
 (define_expand "adddf3"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (plus:DF (match_operand:DF 1 "general_operand" "")
                 (match_operand:DF 2 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=x,y")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y")
        (plus:DF (match_operand:DF 1 "general_operand" "%xH,y")
                 (match_operand:DF 2 "general_operand" "xH,dmF")))]
   "TARGET_FPA"
 }")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (plus:DF (float:DF (match_operand:SI 2 "general_operand" "dmi"))
                 (match_operand:DF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%&add%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (plus:DF (float:DF (match_operand:HI 2 "general_operand" "dmn"))
                 (match_operand:DF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%&add%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (plus:DF (float:DF (match_operand:QI 2 "general_operand" "dmn"))
                 (match_operand:DF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%&add%.b %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (plus:DF (match_operand:DF 1 "general_operand" "%0")
                 (match_operand:DF 2 "general_operand" "fmG")))]
   "TARGET_68881"
 }")
 
 (define_expand "addsf3"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (plus:SF (match_operand:SF 1 "general_operand" "")
                 (match_operand:SF 2 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=x,y")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y")
        (plus:SF (match_operand:SF 1 "general_operand" "%xH,y")
                 (match_operand:SF 2 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (plus:SF (float:SF (match_operand:SI 2 "general_operand" "dmi"))
                 (match_operand:SF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%$add%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (plus:SF (float:SF (match_operand:HI 2 "general_operand" "dmn"))
                 (match_operand:SF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%$add%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (plus:SF (float:SF (match_operand:QI 2 "general_operand" "dmn"))
                 (match_operand:SF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%$add%.b %2,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (plus:SF (match_operand:SF 1 "general_operand" "%0")
                 (match_operand:SF 2 "general_operand" "fdmF")))]
   "TARGET_68881"
 ;; subtract instructions
 
 (define_insn "subdi_sexthishl32"
-  [(set (match_operand:DI 0 "general_operand" "=o,a,*d,*d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=o,a,*d,*d")
     (minus:DI (match_operand:DI 1 "general_operand" "0,0,0,0")
         (ashift:DI (sign_extend:DI (match_operand:HI 2 "general_operand" "rm,rm,rm,rm"))
             (const_int 32))))
 } ")
 
 (define_insn "subdi_dishl32"
-  [(set (match_operand:DI 0 "general_operand" "+ro")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "+ro")
     (minus:DI (match_dup 0)
         (ashift:DI (match_operand:DI 1 "general_operand" "ro")
             (const_int 32))))]
 } ")
 
 (define_insn "subdi3"
-  [(set (match_operand:DI 0 "general_operand" "=<,o<>,d,d,d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=<,o<>,d,d,d")
        (minus:DI (match_operand:DI 1 "general_operand" "0,0,0,0,0")
                 (match_operand:DI 2 "general_operand" "<,d,no>,d,a")))
    (clobber (match_scratch:SI 3 "=X,&d,&d,X,&d"))]
 } ")
 
 (define_insn "subsi3"
-  [(set (match_operand:SI 0 "general_operand" "=m,d,a")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=m,d,a")
        (minus:SI (match_operand:SI 1 "general_operand" "0,0,0")
                  (match_operand:SI 2 "general_src_operand" "dT,mSrT,mSrs")))]
   ""
   "sub%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=a")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=a")
        (minus:SI (match_operand:SI 1 "general_operand" "0")
                  (sign_extend:SI
                   (match_operand:HI 2 "nonimmediate_src_operand" "rmS"))))]
   "sub%.w %2,%0")
 
 (define_insn "subhi3"
-  [(set (match_operand:HI 0 "general_operand" "=m,r")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=m,r")
        (minus:HI (match_operand:HI 1 "general_operand" "0,0")
                  (match_operand:HI 2 "general_src_operand" "dn,rmSn")))]
   "!TARGET_5200"
   "sub%.w %2,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d"))
        (minus:HI (match_dup 0)
                  (match_operand:HI 1 "general_src_operand" "dn,rmSn")))]
   "!TARGET_5200"
   "sub%.w %1,%0")
 
 (define_insn "subqi3"
-  [(set (match_operand:QI 0 "general_operand" "=m,d")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=m,d")
        (minus:QI (match_operand:QI 1 "general_operand" "0,0")
                  (match_operand:QI 2 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "sub%.b %2,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d"))
        (minus:QI (match_dup 0)
                  (match_operand:QI 1 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "sub%.b %1,%0")
 
 (define_expand "subdf3"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (minus:DF (match_operand:DF 1 "general_operand" "")
                  (match_operand:DF 2 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=x,y,y")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y,y")
        (minus:DF (match_operand:DF 1 "general_operand" "xH,y,dmF")
                  (match_operand:DF 2 "general_operand" "xH,dmF,0")))]
   "TARGET_FPA"
 }")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (minus:DF (match_operand:DF 1 "general_operand" "0")
                  (float:DF (match_operand:SI 2 "general_operand" "dmi"))))]
   "TARGET_68881"
   "f%&sub%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (minus:DF (match_operand:DF 1 "general_operand" "0")
                  (float:DF (match_operand:HI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "f%&sub%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (minus:DF (match_operand:DF 1 "general_operand" "0")
                  (float:DF (match_operand:QI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "f%&sub%.b %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (minus:DF (match_operand:DF 1 "general_operand" "0")
                  (match_operand:DF 2 "general_operand" "fmG")))]
   "TARGET_68881"
 }")
 
 (define_expand "subsf3"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (minus:SF (match_operand:SF 1 "general_operand" "")
                  (match_operand:SF 2 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=x,y,y")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y,y")
        (minus:SF (match_operand:SF 1 "general_operand" "xH,y,rmF")
                  (match_operand:SF 2 "general_operand" "xH,rmF,0")))]
   "TARGET_FPA"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (minus:SF (match_operand:SF 1 "general_operand" "0")
                  (float:SF (match_operand:SI 2 "general_operand" "dmi"))))]
   "TARGET_68881"
   "f%$sub%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (minus:SF (match_operand:SF 1 "general_operand" "0")
                  (float:SF (match_operand:HI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "f%$sub%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (minus:SF (match_operand:SF 1 "general_operand" "0")
                  (float:SF (match_operand:QI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "f%$sub%.b %2,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (minus:SF (match_operand:SF 1 "general_operand" "0")
                  (match_operand:SF 2 "general_operand" "fdmF")))]
   "TARGET_68881"
 ;; multiply instructions
 
 (define_insn "mulhi3"
-  [(set (match_operand:HI 0 "general_operand" "=d")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=d")
        (mult:HI (match_operand:HI 1 "general_operand" "%0")
                 (match_operand:HI 2 "general_src_operand" "dmSn")))]
   ""
 }")
 
 (define_insn "mulhisi3"
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (mult:SI (sign_extend:SI
                  (match_operand:HI 1 "nonimmediate_operand" "%0"))
                 (sign_extend:SI
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (mult:SI (sign_extend:SI
                  (match_operand:HI 1 "nonimmediate_operand" "%0"))
                 (match_operand:SI 2 "const_int_operand" "n")))]
 }")
 
 (define_expand "mulsi3"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (mult:SI (match_operand:SI 1 "general_operand" "")
                 (match_operand:SI 2 "general_operand" "")))]
   "TARGET_68020 || TARGET_5200"
   "")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (mult:SI (match_operand:SI 1 "general_operand" "%0")
                  (match_operand:SI 2 "general_src_operand" "dmSTK")))]
 
   "muls%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (mult:SI (match_operand:SI 1 "general_operand" "%0")
                 (match_operand:SI 2 "general_operand" "d<Q>")))]
   "TARGET_5200"
   "muls%.l %2,%0")
 
 (define_insn "umulhisi3"
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (mult:SI (zero_extend:SI
                  (match_operand:HI 1 "nonimmediate_operand" "%0"))
                 (zero_extend:SI
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (mult:SI (zero_extend:SI
                  (match_operand:HI 1 "nonimmediate_operand" "%0"))
                 (match_operand:SI 2 "const_int_operand" "n")))]
   "muls%.l %3,%0:%1")
 
 (define_expand "muldf3"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (mult:DF (match_operand:DF 1 "general_operand" "")
                 (match_operand:DF 2 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=x,y")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y")
        (mult:DF (match_operand:DF 1 "general_operand" "%xH,y")
                 (match_operand:DF 2 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
 }")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (mult:DF (float:DF (match_operand:SI 2 "general_operand" "dmi"))
                 (match_operand:DF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%&mul%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (mult:DF (float:DF (match_operand:HI 2 "general_operand" "dmn"))
                 (match_operand:DF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%&mul%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (mult:DF (float:DF (match_operand:QI 2 "general_operand" "dmn"))
                 (match_operand:DF 1 "general_operand" "0")))]
   "TARGET_68881"
   "f%&mul%.b %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (mult:DF (match_operand:DF 1 "general_operand" "%0")
                 (match_operand:DF 2 "general_operand" "fmG")))]
   "TARGET_68881"
 }")
 
 (define_expand "mulsf3"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (mult:SF (match_operand:SF 1 "general_operand" "")
                 (match_operand:SF 2 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=x,y")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y")
        (mult:SF (match_operand:SF 1 "general_operand" "%xH,y")
                 (match_operand:SF 2 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (mult:SF (float:SF (match_operand:SI 2 "general_operand" "dmi"))
                 (match_operand:SF 1 "general_operand" "0")))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (mult:SF (float:SF (match_operand:HI 2 "general_operand" "dmn"))
                 (match_operand:SF 1 "general_operand" "0")))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (mult:SF (float:SF (match_operand:QI 2 "general_operand" "dmn"))
                 (match_operand:SF 1 "general_operand" "0")))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (mult:SF (match_operand:SF 1 "general_operand" "%0")
                 (match_operand:SF 2 "general_operand" "fdmF")))]
   "TARGET_68881"
 ;; divide instructions
 
 (define_expand "divdf3"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (div:DF (match_operand:DF 1 "general_operand" "")
                (match_operand:DF 2 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=x,y,y")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y,y")
        (div:DF (match_operand:DF 1 "general_operand" "xH,y,rmF")
                (match_operand:DF 2 "general_operand" "xH,rmF,0")))]
   "TARGET_FPA"
 }")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (div:DF (match_operand:DF 1 "general_operand" "0")
                (float:DF (match_operand:SI 2 "general_operand" "dmi"))))]
   "TARGET_68881"
   "f%&div%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (div:DF (match_operand:DF 1 "general_operand" "0")
                (float:DF (match_operand:HI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "f%&div%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (div:DF (match_operand:DF 1 "general_operand" "0")
                (float:DF (match_operand:QI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "f%&div%.b %2,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (div:DF (match_operand:DF 1 "general_operand" "0")
                (match_operand:DF 2 "general_operand" "fmG")))]
   "TARGET_68881"
 }")
 
 (define_expand "divsf3"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (div:SF (match_operand:SF 1 "general_operand" "")
                (match_operand:SF 2 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=x,y,y")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y,y")
        (div:SF (match_operand:SF 1 "general_operand" "xH,y,rmF")
                (match_operand:SF 2 "general_operand" "xH,rmF,0")))]
   "TARGET_FPA"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (div:SF (match_operand:SF 1 "general_operand" "0")
                (float:SF (match_operand:SI 2 "general_operand" "dmi"))))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (div:SF (match_operand:SF 1 "general_operand" "0")
                (float:SF (match_operand:HI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (div:SF (match_operand:SF 1 "general_operand" "0")
                (float:SF (match_operand:QI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (div:SF (match_operand:SF 1 "general_operand" "0")
                (match_operand:SF 2 "general_operand" "fdmF")))]
   "TARGET_68881"
 ;; Remainder instructions.
 
 (define_insn "divmodsi4"
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (div:SI (match_operand:SI 1 "general_operand" "0")
                (match_operand:SI 2 "general_src_operand" "dmSTK")))
-   (set (match_operand:SI 3 "general_operand" "=d")
+   (set (match_operand:SI 3 "nonimmediate_operand" "=d")
        (mod:SI (match_dup 1) (match_dup 2)))]
   "TARGET_68020 && !TARGET_5200"
   "*
 }")
 
 (define_insn "udivmodsi4"
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (udiv:SI (match_operand:SI 1 "general_operand" "0")
                 (match_operand:SI 2 "general_src_operand" "dmSTK")))
-   (set (match_operand:SI 3 "general_operand" "=d")
+   (set (match_operand:SI 3 "nonimmediate_operand" "=d")
        (umod:SI (match_dup 1) (match_dup 2)))]
   "TARGET_68020 && !TARGET_5200"
   "*
 }")
 
 (define_insn "divmodhi4"
-  [(set (match_operand:HI 0 "general_operand" "=d")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=d")
        (div:HI (match_operand:HI 1 "general_operand" "0")
                (match_operand:HI 2 "general_src_operand" "dmSKT")))
-   (set (match_operand:HI 3 "general_operand" "=d")
+   (set (match_operand:HI 3 "nonimmediate_operand" "=d")
        (mod:HI (match_dup 1) (match_dup 2)))]
   "!TARGET_5200"
   "*
 }")
 
 (define_insn "udivmodhi4"
-  [(set (match_operand:HI 0 "general_operand" "=d")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=d")
        (udiv:HI (match_operand:HI 1 "general_operand" "0")
                 (match_operand:HI 2 "general_src_operand" "dmSKT")))
-   (set (match_operand:HI 3 "general_operand" "=d")
+   (set (match_operand:HI 3 "nonimmediate_operand" "=d")
        (umod:HI (match_dup 1) (match_dup 2)))]
   "!TARGET_5200"
   "*
 
 ;; "anddi3" is mainly here to help combine().
 (define_insn "anddi3"
-  [(set (match_operand:DI 0 "general_operand" "=o,d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=o,d")
        (and:DI (match_operand:DI 1 "general_operand" "%0,0")
                (match_operand:DI 2 "general_operand" "dn,don")))]
   "!TARGET_5200"
   "and%.l %2,%0")
 
 (define_insn "andhi3"
-  [(set (match_operand:HI 0 "general_operand" "=m,d")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=m,d")
        (and:HI (match_operand:HI 1 "general_operand" "%0,0")
                (match_operand:HI 2 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "and%.w %2,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d"))
        (and:HI (match_dup 0)
                (match_operand:HI 1 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "and%.w %1,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d"))
        (and:HI (match_operand:HI 1 "general_src_operand" "dn,dmSn")
                (match_dup 0)))]
   "!TARGET_5200"
   "and%.w %1,%0")
 
 (define_insn "andqi3"
-  [(set (match_operand:QI 0 "general_operand" "=m,d")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=m,d")
        (and:QI (match_operand:QI 1 "general_operand" "%0,0")
                (match_operand:QI 2 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "and%.b %2,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d"))
        (and:QI (match_dup 0)
                (match_operand:QI 1 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "and%.b %1,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d"))
        (and:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn")
                (match_dup 0)))]
   "!TARGET_5200"
 ;; inclusive-or instructions
 
 (define_insn "iordi_zext"
-  [(set (match_operand:DI 0 "general_operand" "=o,d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=o,d")
     (ior:DI (zero_extend:DI (match_operand 1 "general_operand" "dn,dmn"))
         (match_operand:DI 2 "general_operand" "0,0")))]
   "!TARGET_5200"
 
 ;; "iordi3" is mainly here to help combine().
 (define_insn "iordi3"
-  [(set (match_operand:DI 0 "general_operand" "=o,d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=o,d")
        (ior:DI (match_operand:DI 1 "general_operand" "%0,0")
                (match_operand:DI 2 "general_operand" "dn,don")))]
   "!TARGET_5200"
 }")
 
 (define_expand "iorsi3"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (ior:SI (match_operand:SI 1 "general_operand" "")
                (match_operand:SI 2 "general_src_operand" "")))]
   ""
   "")
 
 (define_insn "iorsi3_internal"
-  [(set (match_operand:SI 0 "general_operand" "=m,d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=m,d")
        (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
                 (match_operand:SI 2 "general_src_operand" "dKT,dmSMT")))]
   "! TARGET_5200"
 }")
 
 (define_insn "iorsi3_5200"
-  [(set (match_operand:SI 0 "general_operand" "=m,d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=m,d")
        (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
                (match_operand:SI 2 "general_src_operand" "d,dmsK")))]
   "TARGET_5200"
   "or%.l %2,%0")
 
 (define_insn "iorhi3"
-  [(set (match_operand:HI 0 "general_operand" "=m,d")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=m,d")
        (ior:HI (match_operand:HI 1 "general_operand" "%0,0")
                (match_operand:HI 2 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "or%.w %2,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d"))
        (ior:HI (match_dup 0)
                (match_operand:HI 1 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "or%.w %1,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d"))
        (ior:HI (match_operand:HI 1 "general_src_operand" "dn,dmSn")
                (match_dup 0)))]
   "!TARGET_5200"
   "or%.w %1,%0")
 
 (define_insn "iorqi3"
-  [(set (match_operand:QI 0 "general_operand" "=m,d")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=m,d")
        (ior:QI (match_operand:QI 1 "general_operand" "%0,0")
                 (match_operand:QI 2 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "or%.b %2,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d"))
        (ior:QI (match_dup 0)
                 (match_operand:QI 1 "general_src_operand" "dn,dmSn")))]
   "!TARGET_5200"
   "or%.b %1,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d"))
         (ior:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn")
                (match_dup 0)))]
   "!TARGET_5200"
 ;; See also ashlsi_16, ashrsi_16 and lshrsi_16.
 
 (define_insn "iorsi_zexthi_ashl16"
-  [(set (match_operand:SI 0 "general_operand" "=&d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=&d")
     (ior:SI (zero_extend:SI (match_operand:HI 1 "general_operand" "rmn"))
         (ashift:SI (match_operand:SI 2 "general_operand" "or")
             (const_int 16))))]
 }")
 
 (define_insn "iorsi_zext"
-  [(set (match_operand:SI 0 "general_operand" "=o,d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=o,d")
     (ior:SI (zero_extend:SI (match_operand 1 "general_operand" "dn,dmn"))
         (match_operand:SI 2 "general_operand" "0,0")))]
   "!TARGET_5200"
 
 ;; "xordi3" is mainly here to help combine().
 (define_insn "xordi3"
-  [(set (match_operand:DI 0 "general_operand" "=od")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=od")
        (xor:DI (match_operand:DI 1 "general_operand" "%0")
                (match_operand:DI 2 "general_operand" "dn")))]
   "!TARGET_5200"
 }")
 
 (define_expand "xorsi3"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (xor:SI (match_operand:SI 1 "general_operand" "")
                (match_operand:SI 2 "general_operand" "")))]
   ""
   "")
 
 (define_insn "xorsi3_internal"
-  [(set (match_operand:SI 0 "general_operand" "=do,m")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=do,m")
        (xor:SI (match_operand:SI 1 "general_operand" "%0,0")
                 (match_operand:SI 2 "general_operand" "di,dKT")))]
 
 }")
 
 (define_insn "xorsi3_5200"
-  [(set (match_operand:SI 0 "general_operand" "=dm,d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=dm,d")
        (xor:SI (match_operand:SI 1 "general_operand" "%0,0")
                (match_operand:SI 2 "general_operand" "d,Ks")))]
   "TARGET_5200"
   "eor%.l %2,%0")
 
 (define_insn "xorhi3"
-  [(set (match_operand:HI 0 "general_operand" "=dm")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=dm")
        (xor:HI (match_operand:HI 1 "general_operand" "%0")
                (match_operand:HI 2 "general_operand" "dn")))]
   "!TARGET_5200"
   "eor%.w %2,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm"))
        (xor:HI (match_dup 0)
                (match_operand:HI 1 "general_operand" "dn")))]
   "!TARGET_5200"
   "eor%.w %1,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm"))
        (xor:HI (match_operand:HI 1 "general_operand" "dn")
                (match_dup 0)))]
   "!TARGET_5200"
   "eor%.w %1,%0")
 
 (define_insn "xorqi3"
-  [(set (match_operand:QI 0 "general_operand" "=dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm")
        (xor:QI (match_operand:QI 1 "general_operand" "%0")
                (match_operand:QI 2 "general_operand" "dn")))]
   "!TARGET_5200"
   "eor%.b %2,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm"))
        (xor:QI (match_dup 0)
                (match_operand:QI 1 "general_operand" "dn")))]
   "!TARGET_5200"
   "eor%.b %1,%0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm"))
        (xor:QI (match_operand:QI 1 "general_operand" "dn")
                (match_dup 0)))]
   "!TARGET_5200"
 ;; negation instructions
 
 (define_expand "negdi2"
-  [(set (match_operand:DI 0 "general_operand" "")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
        (neg:DI (match_operand:DI 1 "general_operand" "")))]
   ""
   "
 }")
 
 (define_insn "negdi2_internal"
-  [(set (match_operand:DI 0 "general_operand" "=<,do,!*a")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=<,do,!*a")
        (neg:DI (match_operand:DI 1 "general_operand" "0,0,0")))]
   "!TARGET_5200"
   "*
 } ")
 
 (define_insn "negdi2_5200"
-  [(set (match_operand:DI 0 "general_operand" "=d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
        (neg:DI (match_operand:DI 1 "general_operand" "0")))]
   "TARGET_5200"
   "*
 } ")
 
 (define_expand "negsi2"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (neg:SI (match_operand:SI 1 "general_operand" "")))]
   ""
   "
 }")
 
 (define_insn "negsi2_internal"
-  [(set (match_operand:SI 0 "general_operand" "=dm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=dm")
        (neg:SI (match_operand:SI 1 "general_operand" "0")))]
   "!TARGET_5200"
   "neg%.l %0")
 
 (define_insn "negsi2_5200"
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (neg:SI (match_operand:SI 1 "general_operand" "0")))]
   "TARGET_5200"
   "neg%.l %0")
 
 (define_insn "neghi2"
-  [(set (match_operand:HI 0 "general_operand" "=dm")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=dm")
        (neg:HI (match_operand:HI 1 "general_operand" "0")))]
   "!TARGET_5200"
   "neg%.w %0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm"))
        (neg:HI (match_dup 0)))]
   "!TARGET_5200"
   "neg%.w %0")
 
 (define_insn "negqi2"
-  [(set (match_operand:QI 0 "general_operand" "=dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm")
        (neg:QI (match_operand:QI 1 "general_operand" "0")))]
   "!TARGET_5200"
   "neg%.b %0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm"))
        (neg:QI (match_dup 0)))]
   "!TARGET_5200"
   "neg%.b %0")
 ;; If using software floating point, just flip the sign bit.
 
 (define_expand "negsf2"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (neg:SF (match_operand:SF 1 "general_operand" "")))]
   ""
   "
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=x,y")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y")
        (neg:SF (match_operand:SF 1 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
   "fpneg%.s %w1,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f,d")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f,d")
        (neg:SF (match_operand:SF 1 "general_operand" "fdmF,0")))]
   "TARGET_68881"
   "*
 }")
 
 (define_expand "negdf2"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (neg:DF (match_operand:DF 1 "general_operand" "")))]
   ""
   "
 }")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=x,y")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y")
        (neg:DF (match_operand:DF 1 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
   "fpneg%.d %y1, %0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f,d")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f,d")
        (neg:DF (match_operand:DF 1 "general_operand" "fmF,0")))]
   "TARGET_68881"
   "*
 ;; Sqrt instruction for the 68881
 
 (define_insn "sqrtsf2"
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (sqrt:SF (match_operand:SF 1 "general_operand" "fm")))]
   "TARGET_68881"
   "*
 }")
 
 (define_insn "sqrtdf2"
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (sqrt:DF (match_operand:DF 1 "general_operand" "fm")))]
   "TARGET_68881"
   "*
 ;; If using software floating point, just zero the sign bit.
 
 (define_expand "abssf2"
-  [(set (match_operand:SF 0 "general_operand" "")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
        (abs:SF (match_operand:SF 1 "general_operand" "")))]
   ""
   "
 }")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=x,y")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y")
        (abs:SF (match_operand:SF 1 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
   "fpabs%.s %y1,%0")
 
 (define_insn ""
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (abs:SF (match_operand:SF 1 "general_operand" "fdmF")))]
   "TARGET_68881"
   "*
 }")
 
 (define_expand "absdf2"
-  [(set (match_operand:DF 0 "general_operand" "")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
        (abs:DF (match_operand:DF 1 "general_operand" "")))]
   ""
   "
 }")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=x,y")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y")
        (abs:DF (match_operand:DF 1 "general_operand" "xH,rmF")))]
   "TARGET_FPA"
   "fpabs%.d %y1,%0")
 
 (define_insn ""
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (abs:DF (match_operand:DF 1 "general_operand" "fmF")))]
   "TARGET_68881"
   "*
 
 ;; "one_cmpldi2" is mainly here to help combine().
 (define_insn "one_cmpldi2"
-  [(set (match_operand:DI 0 "general_operand" "=dm")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=dm")
        (not:DI (match_operand:DI 1 "general_operand" "0")))]
   "!TARGET_5200"
   "*
 }")
 
 (define_expand "one_cmplsi2"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (not:SI (match_operand:SI 1 "general_operand" "")))]
   ""
   "
 }")
 
 (define_insn "one_cmplsi2_internal"
-  [(set (match_operand:SI 0 "general_operand" "=dm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=dm")
        (not:SI (match_operand:SI 1 "general_operand" "0")))]
   "!TARGET_5200"
   "not%.l %0")
 
 (define_insn "one_cmplsi2_5200"
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (not:SI (match_operand:SI 1 "general_operand" "0")))]
   "TARGET_5200"
   "not%.l %0")
 
 (define_insn "one_cmplhi2"
-  [(set (match_operand:HI 0 "general_operand" "=dm")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=dm")
        (not:HI (match_operand:HI 1 "general_operand" "0")))]
   "!TARGET_5200"
   "not%.w %0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm"))
        (not:HI (match_dup 0)))]
   "!TARGET_5200"
   "not%.w %0")
 
 (define_insn "one_cmplqi2"
-  [(set (match_operand:QI 0 "general_operand" "=dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm")
        (not:QI (match_operand:QI 1 "general_operand" "0")))]
   "!TARGET_5200"
   "not%.b %0")
 
 (define_insn ""
-  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
+  [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm"))
        (not:QI (match_dup 0)))]
   "!TARGET_5200"
   "not%.b %0")
 ;; We don't need the shift memory by 1 bit instruction
 
 (define_insn "ashldi_extsi"
-  [(set (match_operand:DI 0 "general_operand" "=ro")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=ro")
     (ashift:DI
       (match_operator:DI 2 "extend_operator"
         [(match_operand:SI 1 "general_operand" "rm")])
 } ")
 
 (define_insn "ashldi_sexthi"
-  [(set (match_operand:DI 0 "general_operand" "=m,a*d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=m,a*d")
     (ashift:DI (sign_extend:DI (match_operand:HI 1 "general_operand" "rm,rm"))
         (const_int 32)))
     (clobber (match_scratch:SI 2 "=a,X"))]
 } ")
 
 (define_insn "ashldi_const32"
-  [(set (match_operand:DI 0 "general_operand" "=rm")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
        (ashift:DI (match_operand:DI 1 "general_operand" "ro")
                     (const_int 32)))]
   ""
 
 ;; The predicate below must be general_operand, because ashldi3 allows that
 (define_insn "ashldi_const"
-  [(set (match_operand:DI 0 "general_operand" "=d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
        (ashift:DI (match_operand:DI 1 "general_operand" "0")
                     (match_operand 2 "const_int_operand" "n")))]
   "(!TARGET_5200
 } ")
 
 (define_expand "ashldi3"
-  [(set (match_operand:DI 0 "general_operand" "")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
        (ashift:DI (match_operand:DI 1 "general_operand" "")
                     (match_operand 2 "const_int_operand" "")))]
   "!TARGET_5200"
 }")
 
 (define_insn "subreghi1ashrdi_const32"
-  [(set (match_operand:HI 0 "general_operand" "=rm")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
     (subreg:HI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro")
             (const_int 32)) 4))]
   ""
 } ")
 
 (define_insn "subregsi1ashrdi_const32"
-  [(set (match_operand:SI 0 "general_operand" "=rm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
     (subreg:SI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro")
             (const_int 32)) 4))]
   ""
 } ")
 
 (define_insn "ashrdi_const32_mem"
-  [(set (match_operand:DI 0 "general_operand" "=o,<")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=o,<")
        (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro,ro")
                     (const_int 32)))
    (clobber (match_scratch:SI 2 "=d,d"))]
 
 ;; The predicate below must be general_operand, because ashrdi3 allows that
 (define_insn "ashrdi_const"
-  [(set (match_operand:DI 0 "general_operand" "=d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
        (ashiftrt:DI (match_operand:DI 1 "general_operand" "0")
                     (match_operand 2 "const_int_operand" "n")))]
   "(!TARGET_5200 
 } ")
 
 (define_expand "ashrdi3"
-  [(set (match_operand:DI 0 "general_operand" "")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
        (ashiftrt:DI (match_operand:DI 1 "general_operand" "")
                     (match_operand 2 "const_int_operand" "")))]
   "!TARGET_5200"
 ;;        [(set (cc0)
 ;;            (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro")
 ;;                    (const_int 32)) 4))
-;;        (set (match_operand:SI 1 "general_operand" "=dm")
+;;        (set (match_operand:SI 1 "nonimmediate_operand" "=dm")
 ;;            (subreg:SI (lshiftrt:DI (match_dup 0)
 ;;                    (const_int 32)) 4))]
 ;;  ""
 ;;        [(set (cc0)
 ;;            (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro")
 ;;                    (const_int 32)) 0))
-;;        (set (match_operand:DI 1 "general_operand" "=do")
+;;        (set (match_operand:DI 1 "nonimmediate_operand" "=do")
 ;;            (lshiftrt:DI (match_dup 0)
 ;;                (const_int 32)))]
 ;;  ""
 ;;} ")
 
 (define_insn "subreg1lshrdi_const32"
-  [(set (match_operand:SI 0 "general_operand" "=rm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
     (subreg:SI (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro")
             (const_int 32)) 4))]
   ""
 } ")
 
 (define_insn "lshrdi_const32"
-  [(set (match_operand:DI 0 "general_operand" "=ro,<,>")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=ro,<,>")
        (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro,ro,ro")
                     (const_int 32)))]
   ""
 
 ;; The predicate below must be general_operand, because lshrdi3 allows that
 (define_insn "lshrdi_const"
-  [(set (match_operand:DI 0 "general_operand" "=d")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=d")
        (lshiftrt:DI (match_operand:DI 1 "general_operand" "0")
                     (match_operand 2 "const_int_operand" "n")))]
   "(!TARGET_5200
 } ")
 
 (define_expand "lshrdi3"
-  [(set (match_operand:DI 0 "general_operand" "")
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
        (lshiftrt:DI (match_operand:DI 1 "general_operand" "")
                     (match_operand 2 "const_int_operand" "")))]
   "!TARGET_5200"
 ; than an odd byte aligned bit field instruction.
 ;
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=rm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (zero_extract:SI (match_operand:QI 1 "memory_src_operand" "oS")
                         (const_int 32)
                         (match_operand:SI 2 "const_int_operand" "n")))]
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=&d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=&d")
        (zero_extract:SI (match_operand:SI 1 "register_operand" "do")
                         (match_operand:SI 2 "const_int_operand" "n")
                         (match_operand:SI 3 "const_int_operand" "n")))]
 ; than an odd byte aligned bit field instruction.
 ;
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=rm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
        (sign_extract:SI (match_operand:QI 1 "memory_src_operand" "oS")
                         (const_int 32)
                         (match_operand:SI 2 "const_int_operand" "n")))]
 }")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (sign_extract:SI (match_operand:SI 1 "register_operand" "do")
                         (match_operand:SI 2 "const_int_operand" "n")
                         (match_operand:SI 3 "const_int_operand" "n")))]
 ;; so that its address is reloaded.
 
 (define_expand "extv"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (sign_extract:SI (match_operand:SI 1 "general_operand" "")
                         (match_operand:SI 2 "general_operand" "")
                         (match_operand:SI 3 "general_operand" "")))]
   "")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (sign_extract:SI (match_operand:QI 1 "memory_operand" "o")
                         (match_operand:SI 2 "general_operand" "di")
                         (match_operand:SI 3 "general_operand" "di")))]
   "bfexts %1{%b3:%b2},%0")
 
 (define_expand "extzv"
-  [(set (match_operand:SI 0 "general_operand" "")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
        (zero_extract:SI (match_operand:SI 1 "general_operand" "")
                         (match_operand:SI 2 "general_operand" "")
                         (match_operand:SI 3 "general_operand" "")))]
   "")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d,d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d")
        (zero_extract:SI (match_operand:QI 1 "memory_operand" "o,d")
                         (match_operand:SI 2 "general_operand" "di,di")
                         (match_operand:SI 3 "general_operand" "di,di")))]
 }")
 
 (define_expand "insv"
-  [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "")
+  [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "")
                         (match_operand:SI 1 "general_operand" "")
                         (match_operand:SI 2 "general_operand" ""))
        (match_operand:SI 3 "register_operand" ""))]
 ;; (or at least were intended to do so).
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (sign_extract:SI (match_operand:SI 1 "register_operand" "d")
                         (match_operand:SI 2 "general_operand" "di")
                         (match_operand:SI 3 "general_operand" "di")))]
   "bfexts %1{%b3:%b2},%0")
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=d")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=d")
        (zero_extract:SI (match_operand:SI 1 "register_operand" "d")
                         (match_operand:SI 2 "general_operand" "di")
                         (match_operand:SI 3 "general_operand" "di")))]
 }")
 \f
 (define_insn "scc0_di"
-  [(set (match_operand:QI 0 "general_operand" "=dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm")
     (match_operator 1 "valid_dbcc_comparison_p"
       [(match_operand:DI 2 "general_operand" "ro") (const_int 0)]))]
   "! TARGET_5200"
 } ")
 
 (define_insn "scc0_di_5200"
-  [(set (match_operand:QI 0 "general_operand" "=d")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=d")
     (match_operator 1 "valid_dbcc_comparison_p"
       [(match_operand:DI 2 "general_operand" "ro") (const_int 0)]))]
   "TARGET_5200"
 } ")
 
 (define_insn "scc_di"
-  [(set (match_operand:QI 0 "general_operand" "=dm,dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm,dm")
     (match_operator 1 "valid_dbcc_comparison_p"
       [(match_operand:DI 2 "general_operand" "ro,r")
        (match_operand:DI 3 "general_operand" "r,ro")]))]
 } ")
 
 (define_insn "scc_di_5200"
-  [(set (match_operand:QI 0 "general_operand" "=d,d")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d")
     (match_operator 1 "valid_dbcc_comparison_p"
       [(match_operand:DI 2 "general_operand" "ro,r")
        (match_operand:DI 3 "general_operand" "r,ro")]))]
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (ne (match_operand:HI 0 "general_operand" "+d*g")
+        (ne (match_operand:HI 0 "nonimmediate_operand" "+d*g")
             (const_int 0))
         (label_ref (match_operand 1 "" ""))
         (pc)))
 (define_insn ""
   [(set (pc)
        (if_then_else
-        (ne (match_operand:SI 0 "general_operand" "+d*g")
+        (ne (match_operand:SI 0 "nonimmediate_operand" "+d*g")
             (const_int 0))
         (label_ref (match_operand 1 "" ""))
         (pc)))
 (define_insn ""
   [(set (pc)
        (if_then_else
-         (ge (plus:HI (match_operand:HI 0 "general_operand" "+d*am")
+         (ge (plus:HI (match_operand:HI 0 "nonimmediate_operand" "+d*am")
                       (const_int -1))
              (const_int 0))
          (label_ref (match_operand 1 "" ""))
 (define_expand "decrement_and_branch_until_zero"
   [(parallel [(set (pc)
                   (if_then_else
-                   (ge (plus:SI (match_operand:SI 0 "general_operand" "")
+                   (ge (plus:SI (match_operand:SI 0 "nonimmediate_operand" "")
                                 (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" "+d*am")
+         (ge (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+d*am")
                       (const_int -1))
              (const_int 0))
          (label_ref (match_operand 1 "" ""))
 ;; This should not be used unless the add/sub insns can't be.
 
 (define_insn ""
-  [(set (match_operand:SI 0 "general_operand" "=a")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=a")
        (match_operand:QI 1 "address_operand" "p"))]
   ""
   "*
 }")
 
 (define_insn "extendsfxf2"
-  [(set (match_operand:XF 0 "general_operand" "=fm,f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=fm,f")
        (float_extend:XF (match_operand:SF 1 "general_operand" "f,rmF")))]
   "TARGET_68881"
   "*
 
 
 (define_insn "extenddfxf2"
-  [(set (match_operand:XF 0 "general_operand" "=fm,f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=fm,f")
        (float_extend:XF
           (match_operand:DF 1 "general_operand" "f,rmE")))]
   "TARGET_68881"
 }")
 
 (define_insn "truncxfdf2"
-  [(set (match_operand:DF 0 "general_operand" "=m,!r")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=m,!r")
        (float_truncate:DF
           (match_operand:XF 1 "general_operand" "f,f")))]
   "TARGET_68881"
 }")
 
 (define_insn "truncxfsf2"
-  [(set (match_operand:SF 0 "general_operand" "=dm")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=dm")
        (float_truncate:SF
          (match_operand:XF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.s %f1,%0")
 
 (define_insn "floatsixf2"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (float:XF (match_operand:SI 1 "general_operand" "dmi")))]
   "TARGET_68881"
   "fmove%.l %1,%0")
 
 (define_insn "floathixf2"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (float:XF (match_operand:HI 1 "general_operand" "dmn")))]
   "TARGET_68881"
   "fmove%.w %1,%0")
 
 (define_insn "floatqixf2"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (float:XF (match_operand:QI 1 "general_operand" "dmn")))]
   "TARGET_68881"
   "fmove%.b %1,%0")
 
 (define_insn "ftruncxf2"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (fix:XF (match_operand:XF 1 "general_operand" "fFm")))]
   "TARGET_68881"
   "*
 }")
 
 (define_insn "fixxfqi2"
-  [(set (match_operand:QI 0 "general_operand" "=dm")
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=dm")
        (fix:QI (match_operand:XF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.b %1,%0")
 
 (define_insn "fixxfhi2"
-  [(set (match_operand:HI 0 "general_operand" "=dm")
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=dm")
        (fix:HI (match_operand:XF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.w %1,%0")
 
 (define_insn "fixxfsi2"
-  [(set (match_operand:SI 0 "general_operand" "=dm")
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=dm")
        (fix:SI (match_operand:XF 1 "general_operand" "f")))]
   "TARGET_68881"
   "fmove%.l %1,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (plus:XF (float:XF (match_operand:SI 2 "general_operand" "dmi"))
                 (match_operand:XF 1 "nonimmediate_operand" "0")))]
   "TARGET_68881"
   "fadd%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (plus:XF (float:XF (match_operand:HI 2 "general_operand" "dmn"))
                 (match_operand:XF 1 "nonimmediate_operand" "0")))]
   "TARGET_68881"
   "fadd%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (plus:XF (float:XF (match_operand:QI 2 "general_operand" "dmn"))
                 (match_operand:XF 1 "general_operand" "0")))]
   "TARGET_68881"
   "fadd%.b %2,%0")
 
 (define_insn "addxf3"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (plus:XF (match_operand:XF 1 "nonimmediate_operand" "%0")
                 (match_operand:XF 2 "nonimmediate_operand" "fm")))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0")
                  (float:XF (match_operand:SI 2 "general_operand" "dmi"))))]
   "TARGET_68881"
   "fsub%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0")
                  (float:XF (match_operand:HI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "fsub%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0")
                  (float:XF (match_operand:QI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "fsub%.b %2,%0")
 
 (define_insn "subxf3"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0")
                  (match_operand:XF 2 "nonimmediate_operand" "fm")))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (mult:XF (float:XF (match_operand:SI 2 "general_operand" "dmi"))
                 (match_operand:XF 1 "nonimmediate_operand" "0")))]
   "TARGET_68881"
   "fmul%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (mult:XF (float:XF (match_operand:HI 2 "general_operand" "dmn"))
                 (match_operand:XF 1 "nonimmediate_operand" "0")))]
   "TARGET_68881"
   "fmul%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (mult:XF (float:XF (match_operand:QI 2 "general_operand" "dmn"))
                 (match_operand:XF 1 "nonimmediate_operand" "0")))]
   "TARGET_68881"
   "fmul%.b %2,%0")
 
 (define_insn "mulxf3"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (mult:XF (match_operand:XF 1 "nonimmediate_operand" "%0")
                 (match_operand:XF 2 "nonimmediate_operand" "fm")))]
   "TARGET_68881"
 }")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (div:XF (match_operand:XF 1 "nonimmediate_operand" "0")
                (float:XF (match_operand:SI 2 "general_operand" "dmi"))))]
   "TARGET_68881"
   "fdiv%.l %2,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (div:XF (match_operand:XF 1 "nonimmediate_operand" "0")
                (float:XF (match_operand:HI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "fdiv%.w %2,%0")
 
 (define_insn ""
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (div:XF (match_operand:XF 1 "nonimmediate_operand" "0")
                (float:XF (match_operand:QI 2 "general_operand" "dmn"))))]
   "TARGET_68881"
   "fdiv%.b %2,%0")
 
 (define_insn "divxf3"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (div:XF (match_operand:XF 1 "nonimmediate_operand" "0")
                (match_operand:XF 2 "nonimmediate_operand" "fm")))]
   "TARGET_68881"
 }")
 
 (define_expand "negxf2"
-  [(set (match_operand:XF 0 "general_operand" "")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "")
        (neg:XF (match_operand:XF 1 "nonimmediate_operand" "")))]
   ""
   "
 }")
 
 (define_insn "negxf2_68881"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (neg:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))]
   "TARGET_68881"
   "*
 }")
 
 (define_expand "absxf2"
-  [(set (match_operand:XF 0 "general_operand" "")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "")
        (abs:XF (match_operand:XF 1 "nonimmediate_operand" "")))]
   ""
   "
 }")
 
 (define_insn "absxf2_68881"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (abs:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))]
   "TARGET_68881"
   "*
 }")
 
 (define_insn "sqrtxf2"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (sqrt:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))]
   "TARGET_68881"
   "fsqrt%.x %1,%0")
 
 (define_insn "sinsf2"
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 1))]
   "TARGET_68881 && flag_unsafe_math_optimizations"
   "*
 }")
 
 (define_insn "sindf2"
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 1))]
   "TARGET_68881 && flag_unsafe_math_optimizations"
   "*
 }")
 
 (define_insn "sinxf2"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 1))]
   "TARGET_68881 && flag_unsafe_math_optimizations"
   "fsin%.x %1,%0")
 
 (define_insn "cossf2"
-  [(set (match_operand:SF 0 "general_operand" "=f")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=f")
        (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 2))]
   "TARGET_68881 && flag_unsafe_math_optimizations"
   "*
 }")
 
 (define_insn "cosdf2"
-  [(set (match_operand:DF 0 "general_operand" "=f")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=f")
        (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 2))]
   "TARGET_68881 && flag_unsafe_math_optimizations"
   "*
 }")
 
 (define_insn "cosxf2"
-  [(set (match_operand:XF 0 "general_operand" "=f")
+  [(set (match_operand:XF 0 "nonimmediate_operand" "=f")
        (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 2))]
   "TARGET_68881 && flag_unsafe_math_optimizations"
   "fcos%.x %1,%0")