This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Patch: fix m68k.md/m68k.c warnings


Hi,

The patch fixes lots of warnings 'warning: destination operand 0 allows
non-lvalue' by genrecog and several warnings for undefined functions in
m68k.c.
I've bootstrapped and tested this on linux-m68k with the trunk and with
the branch (+ the needed patches to get that far).

bye, Roman

2001-07-29  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

Only for the branch (exists already in the trunk):

	* config/m68k/m68k.c: Include expr.h and reload.h.

Here is the patch for the branch:

Index: gcc/config/m68k/m68k.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/m68k/m68k.md,v
retrieving revision 1.43
diff -u -r1.43 m68k.md
--- m68k.md	2001/07/23 04:46:53	1.43
+++ m68k.md	2001/07/29 16:37:27
@@ -885,7 +885,7 @@

 ;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))]
 ;  ""
@@ -896,7 +896,7 @@
 ;; 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.
@@ -943,7 +943,7 @@
 ;; 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" ""))]
   ""
   "
@@ -977,7 +977,7 @@
   ;; 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"
@@ -991,7 +991,7 @@
 }")

 (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);")
@@ -999,7 +999,7 @@
 ;; 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"
   "*
@@ -1010,87 +1010,87 @@
 }")

 (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"
   "*
@@ -1170,23 +1170,23 @@
 }")

 (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"
   "*
@@ -1239,7 +1239,7 @@
 }")

 (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);")
@@ -1358,7 +1358,7 @@

 (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" ""))]
   ""
   "")
@@ -1366,11 +1366,11 @@
 ;; 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"
   "*
@@ -1410,7 +1410,7 @@
 }")

 (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);")
@@ -1428,7 +1428,7 @@

 ;; 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")))]
   ""
@@ -1447,7 +1447,7 @@
 }")

 (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")))]
   ""
@@ -1475,7 +1475,7 @@
 }")

 (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")))]
   ""
@@ -1496,7 +1496,7 @@
 ;; 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")))]
   ""
   "*
@@ -1507,7 +1507,7 @@
 }")

 (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")))]
   ""
   "*
@@ -1519,7 +1519,7 @@

 ;; 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")))]
   ""
   "*
@@ -1584,7 +1584,7 @@
 ;; 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"
   "*
@@ -1613,7 +1613,7 @@
 }")

 (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"
   "*
@@ -1654,7 +1654,7 @@
 }")

 (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"
   "*
@@ -1707,7 +1707,7 @@
 ;; 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")))]
   ""
   "*
@@ -1721,7 +1721,7 @@
 }")

 (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")))]
   ""
@@ -1736,7 +1736,7 @@
 }")

 (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")))]
   ""
@@ -1783,7 +1783,7 @@
 }")

 (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")))]
   ""
@@ -1795,13 +1795,13 @@
 }")

 (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")
@@ -1809,21 +1809,21 @@
 ;; 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"
@@ -1856,14 +1856,14 @@
 ;; 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"
@@ -1871,7 +1871,7 @@

 ;; 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"
@@ -1883,7 +1883,7 @@
 }")

 (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"
@@ -1898,61 +1898,61 @@
 ;; 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")
@@ -1963,7 +1963,7 @@
 ;; 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"))]
@@ -1975,7 +1975,7 @@
 }")

 (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"))]
@@ -1987,7 +1987,7 @@
 }")

 (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"))]
@@ -2002,7 +2002,7 @@
 ;; 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"
   "*
@@ -2013,7 +2013,7 @@
 }")

 (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"
   "*
@@ -2026,37 +2026,37 @@
 ;; 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")
@@ -2065,13 +2065,13 @@
 ;; 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")
@@ -2079,7 +2079,7 @@
 ;; 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)))
@@ -2113,7 +2113,7 @@
 }")

 (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))
@@ -2132,7 +2132,7 @@
 } ")

 (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))))]
@@ -2151,7 +2151,7 @@
 } ")

 (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))))]
@@ -2170,7 +2170,7 @@
 } ")

 (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"))]
@@ -2262,7 +2262,7 @@
 } ")

 (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)))]
@@ -2295,7 +2295,7 @@
 }")

 (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" "")))]
   ""
@@ -2306,7 +2306,7 @@
 ;; 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")))]

@@ -2315,14 +2315,14 @@
   "* 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"))))]
@@ -2330,7 +2330,7 @@
   "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"
@@ -2392,7 +2392,7 @@
 ;; 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"
@@ -2448,7 +2448,7 @@
 }")

 (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"
@@ -2504,7 +2504,7 @@
 }")

 (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"
@@ -2530,7 +2530,7 @@
 }")

 (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"
@@ -2556,7 +2556,7 @@
 }")

 (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"
@@ -2582,14 +2582,14 @@
 }")

 (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"
@@ -2605,28 +2605,28 @@
 }")

 (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"
@@ -2638,14 +2638,14 @@
 }")

 (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"
@@ -2661,28 +2661,28 @@
 }")

 (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"
@@ -2696,7 +2696,7 @@
 ;; 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))))
@@ -2714,7 +2714,7 @@
 } ")

 (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))))]
@@ -2730,7 +2730,7 @@
 } ")

 (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"))]
@@ -2824,14 +2824,14 @@
 } ")

 (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"))))]
@@ -2839,42 +2839,42 @@
   "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"
@@ -2890,28 +2890,28 @@
 }")

 (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"
@@ -2923,14 +2923,14 @@
 }")

 (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"
@@ -2946,28 +2946,28 @@
 }")

 (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"
@@ -2981,7 +2981,7 @@
 ;; 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")))]
   ""
@@ -2995,7 +2995,7 @@
 }")

 (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
@@ -3011,7 +3011,7 @@
 }")

 (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")))]
@@ -3026,14 +3026,14 @@
 }")

 (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")))]

@@ -3041,14 +3041,14 @@
   "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
@@ -3064,7 +3064,7 @@
 }")

 (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")))]
@@ -3247,14 +3247,14 @@
   "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"
@@ -3272,28 +3272,28 @@
 }")

 (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"
@@ -3312,14 +3312,14 @@
 }")

 (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"
@@ -3337,7 +3337,7 @@
 }")

 (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"
@@ -3349,7 +3349,7 @@
 }")

 (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"
@@ -3361,7 +3361,7 @@
 }")

 (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"
@@ -3373,7 +3373,7 @@
 }")

 (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"
@@ -3398,14 +3398,14 @@
 ;; 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"
@@ -3421,28 +3421,28 @@
 }")

 (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"
@@ -3454,14 +3454,14 @@
 }")

 (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"
@@ -3477,7 +3477,7 @@
 }")

 (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"
@@ -3489,7 +3489,7 @@
 }")

 (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"
@@ -3501,7 +3501,7 @@
 }")

 (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"
@@ -3513,7 +3513,7 @@
 }")

 (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"
@@ -3538,10 +3538,10 @@
 ;; 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"
   "*
@@ -3553,10 +3553,10 @@
 }")

 (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"
   "*
@@ -3568,10 +3568,10 @@
 }")

 (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"
   "*
@@ -3591,10 +3591,10 @@
 }")

 (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"
   "*
@@ -3617,7 +3617,7 @@

 ;; "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"
@@ -3711,42 +3711,42 @@
   "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"
@@ -3755,7 +3755,7 @@
 ;; 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"
@@ -3782,7 +3782,7 @@

 ;; "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"
@@ -3852,14 +3852,14 @@
 }")

 (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"
@@ -3869,49 +3869,49 @@
 }")

 (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"
@@ -3921,7 +3921,7 @@
 ;; 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))))]
@@ -3938,7 +3938,7 @@
 }")

 (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"
@@ -3961,7 +3961,7 @@

 ;; "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"
@@ -4034,14 +4034,14 @@
 }")

 (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")))]

@@ -4052,49 +4052,49 @@
 }")

 (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"
@@ -4103,7 +4103,7 @@
 ;; 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" "")))]
   ""
   "
@@ -4116,7 +4116,7 @@
 }")

 (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"
   "*
@@ -4134,7 +4134,7 @@
 } ")

 (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"
   "*
@@ -4144,7 +4144,7 @@
 } ")

 (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" "")))]
   ""
   "
@@ -4157,37 +4157,37 @@
 }")

 (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")
@@ -4195,7 +4195,7 @@
 ;; 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" "")))]
   ""
   "
@@ -4222,13 +4222,13 @@
 }")

 (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"
   "*
@@ -4244,7 +4244,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -4278,13 +4278,13 @@
 }")

 (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"
   "*
@@ -4302,7 +4302,7 @@
 ;; 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"
   "*
@@ -4314,7 +4314,7 @@
 }")

 (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"
   "*
@@ -4329,7 +4329,7 @@
 ;; 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" "")))]
   ""
   "
@@ -4356,13 +4356,13 @@
 }")

 (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"
   "*
@@ -4373,7 +4373,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -4407,13 +4407,13 @@
 }")

 (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"
   "*
@@ -4427,7 +4427,7 @@

 ;; "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"
   "*
@@ -4444,7 +4444,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -4457,37 +4457,37 @@
 }")

 (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")
@@ -4496,7 +4496,7 @@
 ;; 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")])
@@ -4516,7 +4516,7 @@
 } ")

 (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"))]
@@ -4543,7 +4543,7 @@
 } ")

 (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)))]
   ""
@@ -4570,7 +4570,7 @@

 ;; 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
@@ -4602,7 +4602,7 @@
 } ")

 (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"
@@ -4716,7 +4716,7 @@
 }")

 (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))]
   ""
@@ -4728,7 +4728,7 @@
 } ")

 (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))]
   ""
@@ -4753,7 +4753,7 @@
 } ")

 (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"))]
@@ -4773,7 +4773,7 @@

 ;; 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
@@ -4813,7 +4813,7 @@
 } ")

 (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"
@@ -4882,7 +4882,7 @@
 ;;        [(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))]
 ;;  ""
@@ -4895,7 +4895,7 @@
 ;;        [(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)))]
 ;;  ""
@@ -4909,7 +4909,7 @@
 ;;} ")

 (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))]
   ""
@@ -4919,7 +4919,7 @@
 } ")

 (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)))]
   ""
@@ -4946,7 +4946,7 @@

 ;; 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
@@ -4981,7 +4981,7 @@
 } ")

 (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"
@@ -5318,7 +5318,7 @@
 ; 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")))]
@@ -5334,7 +5334,7 @@
 }")

 (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")))]
@@ -5374,7 +5374,7 @@
 ; 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")))]
@@ -5390,7 +5390,7 @@
 }")

 (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")))]
@@ -5422,7 +5422,7 @@
 ;; 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" "")))]
@@ -5430,7 +5430,7 @@
   "")

 (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")))]
@@ -5438,7 +5438,7 @@
   "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" "")))]
@@ -5446,7 +5446,7 @@
   "")

 (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")))]
@@ -5506,7 +5506,7 @@
 }")

 (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" ""))]
@@ -5525,7 +5525,7 @@
 ;; (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")))]
@@ -5533,7 +5533,7 @@
   "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")))]
@@ -5648,7 +5648,7 @@
 }")

 (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"
@@ -5658,7 +5658,7 @@
 } ")

 (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"
@@ -5668,7 +5668,7 @@
 } ")

 (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")]))]
@@ -5679,7 +5679,7 @@
 } ")

 (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")]))]
@@ -6554,7 +6554,7 @@
 (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)))
@@ -6597,7 +6597,7 @@
 (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)))
@@ -6643,7 +6643,7 @@
 (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 "" ""))
@@ -6688,7 +6688,7 @@
 (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 "" ""))
@@ -6702,7 +6702,7 @@
 (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 "" ""))
@@ -6991,7 +6991,7 @@
 ;; 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"))]
   ""
   "*
@@ -7458,7 +7458,7 @@
 }")

 (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"
   "*
@@ -7490,7 +7490,7 @@


 (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"
@@ -7526,7 +7526,7 @@
 }")

 (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"
@@ -7542,32 +7542,32 @@
 }")

 (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"
   "*
@@ -7578,46 +7578,46 @@
 }")

 (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"
@@ -7629,28 +7629,28 @@
 }")

 (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"
@@ -7662,28 +7662,28 @@
 }")

 (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"
@@ -7695,28 +7695,28 @@
 }")

 (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"
@@ -7728,7 +7728,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -7766,7 +7766,7 @@
 }")

 (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"
   "*
@@ -7777,7 +7777,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -7815,7 +7815,7 @@
 }")

 (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"
   "*
@@ -7826,13 +7826,13 @@
 }")

 (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"
   "*
@@ -7844,7 +7844,7 @@
 }")

 (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"
   "*
@@ -7856,13 +7856,13 @@
 }")

 (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"
   "*
@@ -7874,7 +7874,7 @@
 }")

 (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"
   "*
@@ -7886,7 +7886,7 @@
 }")

 (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")
Index: gcc/config/m68k/m68k.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/m68k/m68k.c,v
retrieving revision 1.49
diff -u -r1.49 m68k.c
--- m68k.c	2001/07/23 04:46:53	1.49
+++ m68k.c	2001/07/29 16:37:31
@@ -1494,7 +1494,7 @@
      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


Here is the patch for the trunk:

Index: gcc/config/m68k/m68k.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/m68k/m68k.md,v
retrieving revision 1.36.4.1
diff -u -r1.36.4.1 m68k.md
--- m68k.md	2001/06/09 19:09:57	1.36.4.1
+++ m68k.md	2001/07/29 16:38:37
@@ -885,7 +885,7 @@

 ;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))]
 ;  ""
@@ -896,7 +896,7 @@
 ;; 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.
@@ -943,7 +943,7 @@
 ;; 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" ""))]
   ""
   "
@@ -977,7 +977,7 @@
   ;; 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"
@@ -991,7 +991,7 @@
 }")

 (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);")
@@ -999,7 +999,7 @@
 ;; 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"
   "*
@@ -1010,87 +1010,87 @@
 }")

 (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"
   "*
@@ -1170,23 +1170,23 @@
 }")

 (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"
   "*
@@ -1239,7 +1239,7 @@
 }")

 (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);")
@@ -1359,7 +1359,7 @@

 (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" ""))]
   ""
   "")
@@ -1367,11 +1367,11 @@
 ;; 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"
   "*
@@ -1411,7 +1411,7 @@
 }")

 (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);")
@@ -1429,7 +1429,7 @@

 ;; 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")))]
   ""
@@ -1448,7 +1448,7 @@
 }")

 (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")))]
   ""
@@ -1476,7 +1476,7 @@
 }")

 (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")))]
   ""
@@ -1497,7 +1497,7 @@
 ;; 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")))]
   ""
   "*
@@ -1508,7 +1508,7 @@
 }")

 (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")))]
   ""
   "*
@@ -1520,7 +1520,7 @@

 ;; 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")))]
   ""
   "*
@@ -1597,7 +1597,7 @@
 ;; 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"
   "*
@@ -1626,7 +1626,7 @@
 }")

 (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"
   "*
@@ -1667,7 +1667,7 @@
 }")

 (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"
   "*
@@ -1720,7 +1720,7 @@
 ;; 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")))]
   ""
   "*
@@ -1734,7 +1734,7 @@
 }")

 (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")))]
   ""
@@ -1749,7 +1749,7 @@
 }")

 (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")))]
   ""
@@ -1796,7 +1796,7 @@
 }")

 (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")))]
   ""
@@ -1808,13 +1808,13 @@
 }")

 (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")
@@ -1822,21 +1822,21 @@
 ;; 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"
@@ -1869,14 +1869,14 @@
 ;; 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"
@@ -1884,7 +1884,7 @@

 ;; 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"
@@ -1896,7 +1896,7 @@
 }")

 (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"
@@ -1911,61 +1911,61 @@
 ;; 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")
@@ -1976,7 +1976,7 @@
 ;; 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"))]
@@ -1988,7 +1988,7 @@
 }")

 (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"))]
@@ -2000,7 +2000,7 @@
 }")

 (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"))]
@@ -2015,7 +2015,7 @@
 ;; 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"
   "*
@@ -2026,7 +2026,7 @@
 }")

 (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"
   "*
@@ -2039,37 +2039,37 @@
 ;; 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")
@@ -2078,13 +2078,13 @@
 ;; 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")
@@ -2092,7 +2092,7 @@
 ;; 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)))
@@ -2126,7 +2126,7 @@
 }")

 (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))
@@ -2145,7 +2145,7 @@
 } ")

 (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))))]
@@ -2164,7 +2164,7 @@
 } ")

 (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))))]
@@ -2183,7 +2183,7 @@
 } ")

 (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"))]
@@ -2275,7 +2275,7 @@
 } ")

 (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)))]
@@ -2308,7 +2308,7 @@
 }")

 (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" "")))]
   ""
@@ -2319,7 +2319,7 @@
 ;; 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")))]

@@ -2328,14 +2328,14 @@
   "* 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"))))]
@@ -2343,7 +2343,7 @@
   "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"
@@ -2405,7 +2405,7 @@
 ;; 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"
@@ -2461,7 +2461,7 @@
 }")

 (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"
@@ -2517,7 +2517,7 @@
 }")

 (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"
@@ -2543,7 +2543,7 @@
 }")

 (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"
@@ -2569,7 +2569,7 @@
 }")

 (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"
@@ -2595,14 +2595,14 @@
 }")

 (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"
@@ -2618,28 +2618,28 @@
 }")

 (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"
@@ -2651,14 +2651,14 @@
 }")

 (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"
@@ -2674,28 +2674,28 @@
 }")

 (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"
@@ -2709,7 +2709,7 @@
 ;; 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))))
@@ -2727,7 +2727,7 @@
 } ")

 (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))))]
@@ -2743,7 +2743,7 @@
 } ")

 (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"))]
@@ -2837,14 +2837,14 @@
 } ")

 (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"))))]
@@ -2852,42 +2852,42 @@
   "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"
@@ -2903,28 +2903,28 @@
 }")

 (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"
@@ -2936,14 +2936,14 @@
 }")

 (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"
@@ -2959,28 +2959,28 @@
 }")

 (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"
@@ -2994,7 +2994,7 @@
 ;; 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")))]
   ""
@@ -3008,7 +3008,7 @@
 }")

 (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
@@ -3024,7 +3024,7 @@
 }")

 (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")))]
@@ -3039,14 +3039,14 @@
 }")

 (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")))]

@@ -3054,14 +3054,14 @@
   "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
@@ -3077,7 +3077,7 @@
 }")

 (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")))]
@@ -3262,14 +3262,14 @@
   "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"
@@ -3287,28 +3287,28 @@
 }")

 (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"
@@ -3327,14 +3327,14 @@
 }")

 (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"
@@ -3352,7 +3352,7 @@
 }")

 (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"
@@ -3364,7 +3364,7 @@
 }")

 (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"
@@ -3376,7 +3376,7 @@
 }")

 (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"
@@ -3388,7 +3388,7 @@
 }")

 (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"
@@ -3413,14 +3413,14 @@
 ;; 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"
@@ -3436,28 +3436,28 @@
 }")

 (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"
@@ -3469,14 +3469,14 @@
 }")

 (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"
@@ -3492,7 +3492,7 @@
 }")

 (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"
@@ -3504,7 +3504,7 @@
 }")

 (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"
@@ -3516,7 +3516,7 @@
 }")

 (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"
@@ -3528,7 +3528,7 @@
 }")

 (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"
@@ -3553,10 +3553,10 @@
 ;; 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"
   "*
@@ -3568,10 +3568,10 @@
 }")

 (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"
   "*
@@ -3583,10 +3583,10 @@
 }")

 (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"
   "*
@@ -3606,10 +3606,10 @@
 }")

 (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"
   "*
@@ -3632,7 +3632,7 @@

 ;; "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"
@@ -3726,42 +3726,42 @@
   "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"
@@ -3770,7 +3770,7 @@
 ;; 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"
@@ -3796,7 +3796,7 @@

 ;; "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"
@@ -3866,14 +3866,14 @@
 }")

 (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"
@@ -3883,49 +3883,49 @@
 }")

 (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"
@@ -3935,7 +3935,7 @@
 ;; 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))))]
@@ -3952,7 +3952,7 @@
 }")

 (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"
@@ -3974,7 +3974,7 @@

 ;; "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"
@@ -4047,14 +4047,14 @@
 }")

 (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")))]

@@ -4065,49 +4065,49 @@
 }")

 (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"
@@ -4116,7 +4116,7 @@
 ;; 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" "")))]
   ""
   "
@@ -4129,7 +4129,7 @@
 }")

 (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"
   "*
@@ -4147,7 +4147,7 @@
 } ")

 (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"
   "*
@@ -4157,7 +4157,7 @@
 } ")

 (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" "")))]
   ""
   "
@@ -4170,37 +4170,37 @@
 }")

 (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")
@@ -4208,7 +4208,7 @@
 ;; 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" "")))]
   ""
   "
@@ -4235,13 +4235,13 @@
 }")

 (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"
   "*
@@ -4257,7 +4257,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -4291,13 +4291,13 @@
 }")

 (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"
   "*
@@ -4315,7 +4315,7 @@
 ;; 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"
   "*
@@ -4327,7 +4327,7 @@
 }")

 (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"
   "*
@@ -4342,7 +4342,7 @@
 ;; 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" "")))]
   ""
   "
@@ -4369,13 +4369,13 @@
 }")

 (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"
   "*
@@ -4386,7 +4386,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -4420,13 +4420,13 @@
 }")

 (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"
   "*
@@ -4440,7 +4440,7 @@

 ;; "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"
   "*
@@ -4457,7 +4457,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -4470,37 +4470,37 @@
 }")

 (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")
@@ -4509,7 +4509,7 @@
 ;; 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")])
@@ -4529,7 +4529,7 @@
 } ")

 (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"))]
@@ -4556,7 +4556,7 @@
 } ")

 (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)))]
   ""
@@ -4583,7 +4583,7 @@

 ;; 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
@@ -4615,7 +4615,7 @@
 } ")

 (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"
@@ -4729,7 +4729,7 @@
 }")

 (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)) 1))]
   ""
@@ -4741,7 +4741,7 @@
 } ")

 (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)) 1))]
   ""
@@ -4766,7 +4766,7 @@
 } ")

 (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"))]
@@ -4786,7 +4786,7 @@

 ;; 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
@@ -4826,7 +4826,7 @@
 } ")

 (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"
@@ -4895,7 +4895,7 @@
 ;;        [(set (cc0)
 ;;            (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro")
 ;;                    (const_int 32)) 1))
-;;        (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)) 1))]
 ;;  ""
@@ -4908,7 +4908,7 @@
 ;;        [(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)))]
 ;;  ""
@@ -4922,7 +4922,7 @@
 ;;} ")

 (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)) 1))]
   ""
@@ -4932,7 +4932,7 @@
 } ")

 (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)))]
   ""
@@ -4959,7 +4959,7 @@

 ;; 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
@@ -4994,7 +4994,7 @@
 } ")

 (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"
@@ -5328,7 +5328,7 @@
 ; 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")))]
@@ -5344,7 +5344,7 @@
 }")

 (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")))]
@@ -5382,7 +5382,7 @@
 ; 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")))]
@@ -5398,7 +5398,7 @@
 }")

 (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")))]
@@ -5428,7 +5428,7 @@
 ;; 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" "")))]
@@ -5436,7 +5436,7 @@
   "")

 (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")))]
@@ -5444,7 +5444,7 @@
   "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" "")))]
@@ -5452,7 +5452,7 @@
   "")

 (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")))]
@@ -5512,7 +5512,7 @@
 }")

 (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" ""))]
@@ -5531,7 +5531,7 @@
 ;; (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")))]
@@ -5539,7 +5539,7 @@
   "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")))]
@@ -5654,7 +5654,7 @@
 }")

 (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"
@@ -5664,7 +5664,7 @@
 } ")

 (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"
@@ -5674,7 +5674,7 @@
 } ")

 (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")]))]
@@ -5685,7 +5685,7 @@
 } ")

 (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")]))]
@@ -6560,7 +6560,7 @@
 (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)))
@@ -6603,7 +6603,7 @@
 (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)))
@@ -6649,7 +6649,7 @@
 (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 "" ""))
@@ -6694,7 +6694,7 @@
 (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 "" ""))
@@ -6708,7 +6708,7 @@
 (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 "" ""))
@@ -6997,7 +6997,7 @@
 ;; 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"))]
   ""
   "*
@@ -7464,7 +7464,7 @@
 }")

 (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"
   "*
@@ -7496,7 +7496,7 @@


 (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"
@@ -7532,7 +7532,7 @@
 }")

 (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"
@@ -7548,32 +7548,32 @@
 }")

 (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"
   "*
@@ -7584,46 +7584,46 @@
 }")

 (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"
@@ -7635,28 +7635,28 @@
 }")

 (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"
@@ -7668,28 +7668,28 @@
 }")

 (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"
@@ -7701,28 +7701,28 @@
 }")

 (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"
@@ -7734,7 +7734,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -7772,7 +7772,7 @@
 }")

 (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"
   "*
@@ -7783,7 +7783,7 @@
 }")

 (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" "")))]
   ""
   "
@@ -7821,7 +7821,7 @@
 }")

 (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"
   "*
@@ -7832,13 +7832,13 @@
 }")

 (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_fast_math"
   "*
@@ -7850,7 +7850,7 @@
 }")

 (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_fast_math"
   "*
@@ -7862,13 +7862,13 @@
 }")

 (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_fast_math"
   "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_fast_math"
   "*
@@ -7880,7 +7880,7 @@
 }")

 (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_fast_math"
   "*
@@ -7892,7 +7892,7 @@
 }")

 (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_fast_math"
   "fcos%.x %1,%0")
Index: gcc/config/m68k/m68k.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/m68k/m68k.c,v
retrieving revision 1.39.2.2
diff -u -r1.39.2.2 m68k.c
--- m68k.c	2001/05/12 20:32:50	1.39.2.2
+++ m68k.c	2001/07/29 16:38:41
@@ -33,6 +33,8 @@
 #include "insn-attr.h"
 #include "recog.h"
 #include "toplev.h"
+#include "expr.h"
+#include "reload.h"
 #include "tm_p.h"

 /* Needed for use_return_insn.  */
@@ -877,7 +879,7 @@
      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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]