diff --git a/gas/ChangeLog b/gas/ChangeLog
index 2ed0a61729d..61eccb59191 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,13 @@
 Thu Aug 10 00:38:11 1995  Ian Lance Taylor  <ian@cygnus.com>
 
+	* config/tc-m68k.c (m68k_ip): When recognizing '#', use isbyte and
+	iword rather than expr8 and expr16.  When recognizing 'M', use
+	issbyte rather than expr8.  When recognizing 'Q' and 't', just
+	check for O_constant rather than using expr8.
+	* config/m68k-parse.h (expr8, expr16): Don't define.
+	* Makefile.in (m68k-parse.o): Depend upon m68k-parse.h, not
+	m68k-parse.y.
+
 	* read.c (potable): Add spc, ttl, xcom, xref.
 	(s_mri_sect): New function.
 	* read.h (s_mri_sect): Declare.
diff --git a/gas/Makefile.in b/gas/Makefile.in
index 1aaf8f24a8d..dc1d1129183 100644
--- a/gas/Makefile.in
+++ b/gas/Makefile.in
@@ -354,7 +354,7 @@ e-mipsecoff.o : $(srcdir)/config/e-mipsecoff.c
 m68k-parse.c: $(srcdir)/config/m68k-parse.y
 	$(BISON) $(BISONFLAGS) $(srcdir)/config/m68k-parse.y
 	mv -f y.tab.c m68k-parse.c
-m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.y
+m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h
 
 # Remake the info files.
 
diff --git a/gas/config/tc-m68k.c b/gas/config/tc-m68k.c
index 55137c5d31f..6e320c0baef 100644
--- a/gas/config/tc-m68k.c
+++ b/gas/config/tc-m68k.c
@@ -768,11 +768,13 @@ m68k_ip (instring)
 		    losing++;
 		  else if (s[1] == 'b'
 			   && ! isvar (&opP->disp)
-			   && ! expr8 (&opP->disp))
+			   && (opP->disp.exp.X_op != O_constant
+			       || ! isbyte (opP->disp.exp.X_add_number)))
 		    losing++;
 		  else if (s[1] == 'w'
 			   && ! isvar (&opP->disp)
-			   && ! expr16 (&opP->disp))
+			   && (opP->disp.exp.X_op != O_constant
+			       || ! isword (opP->disp.exp.X_add_number)))
 		    losing++;
 		  break;
 
@@ -1076,7 +1078,8 @@ m68k_ip (instring)
 		case 'M':
 		  if (opP->mode != IMMED)
 		    losing++;
-		  else if (! expr8 (&opP->disp))
+		  else if (opP->disp.exp.X_op != O_constant
+			   || ! issbyte (opP->disp.exp.X_add_number))
 		    losing++;
 		  else if (! m68k_quick
 			   && instring[3] != 'q'
@@ -1092,7 +1095,7 @@ m68k_ip (instring)
 		case 'Q':
 		  if (opP->mode != IMMED)
 		    losing++;
-		  else if (! expr8 (&opP->disp)
+		  else if (opP->disp.exp.X_op != O_constant
 			   || opP->disp.exp.X_add_number < 1
 			   || opP->disp.exp.X_add_number > 8)
 		    losing++;
@@ -1139,7 +1142,7 @@ m68k_ip (instring)
 		case 't':
 		  if (opP->mode != IMMED)
 		    losing++;
-		  else if (! expr8 (&opP->disp)
+		  else if (opP->disp.exp.X_op != O_constant
 			   || opP->disp.exp.X_add_number < 0
 			   || opP->disp.exp.X_add_number > 7)
 		    losing++;