[patch] Add fido support (Part 5/n, Take 2)

Kazu Hirata kazu@codesourcery.com
Tue Jan 2 23:22:00 GMT 2007


Hi,

Attached is a patch to rework bfd_mach_fido.

When I submitted a patch to issue a warning on tbl instructions on
fido, Andreas Schwab and others suggested that we make the assembler
reject the unsupported instructions.

This patch makes fido a new m68k architecture by itself, not a variant
of CPU32, thus rejecting tbl instructions on fido.

At the same time, the patch allows the users to link CPU32 objects
with fido objects with a warning like so:

  warning: linking CPU32 objects with fido objects

This warning should make it easier to avoid tbl instructions quietly
sneaking into a fido executable.

Tested by building the toolchain and running binutils testsuite.  OK
to apply?

Kazu Hirata

bfd/
2007-01-02  Kazu Hirata  <kazu@codesourcery.com>

	* archures.c (bfd_mach_cpu32_fido): Rename to bfd_mach_fido.
	* bfd-in2.h: Regenerate.
	* cpu-m68k.c (arch_info_struct): Use bfd_mach_fido instead of
	bfd_mach_cpu32_fido.
	(m68k_arch_features): Use fido_a instead of cpu32.
	(bfd_m68k_compatible): Reject the combination of Fido and
	ColdFire.  Accept the combination of CPU32 and Fido with a
	warning.
	* elf32-m68k.c (elf32_m68k_object_p,
	elf32_m68k_merge_private_bfd_data,
	elf32_m68k_print_private_bfd_data): Treat Fido as an
	architecture by itself.

binutils/
2007-01-02  Kazu Hirata  <kazu@codesourcery.com>

	* readelf.c (get_machine_flags): Treat Fido as an architecture
	by itself.

gas/
2007-01-02  Kazu Hirata  <kazu@codesourcery.com>

	* config/tc-m68k.c (m68k_archs, m68k_cpus): Treat Fido as an
	architecture by itself.
	(m68k_ip): Don't issue a warning for tbl instructions on fido.
	(m68k_elf_final_processing): Treat Fido as an architecture by
	itself.

include/elf/
2007-01-02  Kazu Hirata  <kazu@codesourcery.com>

	* m68k.h (EF_M68K_FIDO): New.
	(EF_M68K_ARCH_MASK): OR EF_M68K_FIDO.
	(EF_M68K_CPU32_FIDO_A, EF_M68K_CPU32_MASK): Remove.

include/opcode/
2007-01-02  Kazu Hirata  <kazu@codesourcery.com>

	* m68k.h (m68010up): OR fido_a.

opcodes/
2007-01-02  Kazu Hirata  <kazu@codesourcery.com>

	* m68k-opc.c (m68k_opcodes): Replace cpu32 with
	cpu32 | fido_a except on tbl instructions.

Index: bfd/archures.c
===================================================================
RCS file: /cvs/src/src/bfd/archures.c,v
retrieving revision 1.121
diff -u -d -p -r1.121 archures.c
--- bfd/archures.c	25 Dec 2006 22:39:21 -0000	1.121
+++ bfd/archures.c	2 Jan 2007 23:02:24 -0000
@@ -80,7 +80,7 @@ DESCRIPTION
 .#define bfd_mach_m68040 6
 .#define bfd_mach_m68060 7
 .#define bfd_mach_cpu32  8
-.#define bfd_mach_cpu32_fido  9
+.#define bfd_mach_fido   9
 .#define bfd_mach_mcf_isa_a_nodiv 10
 .#define bfd_mach_mcf_isa_a 11
 .#define bfd_mach_mcf_isa_a_mac 12
Index: bfd/bfd-in2.h
===================================================================
RCS file: /cvs/src/src/bfd/bfd-in2.h,v
retrieving revision 1.411
diff -u -d -p -r1.411 bfd-in2.h
--- bfd/bfd-in2.h	25 Dec 2006 22:39:21 -0000	1.411
+++ bfd/bfd-in2.h	2 Jan 2007 23:02:24 -0000
@@ -1715,7 +1715,7 @@ enum bfd_architecture
 #define bfd_mach_m68040 6
 #define bfd_mach_m68060 7
 #define bfd_mach_cpu32  8
-#define bfd_mach_cpu32_fido  9
+#define bfd_mach_fido   9
 #define bfd_mach_mcf_isa_a_nodiv 10
 #define bfd_mach_mcf_isa_a 11
 #define bfd_mach_mcf_isa_a_mac 12
Index: bfd/cpu-m68k.c
===================================================================
RCS file: /cvs/src/src/bfd/cpu-m68k.c,v
retrieving revision 1.15
diff -u -d -p -r1.15 cpu-m68k.c
--- bfd/cpu-m68k.c	25 Dec 2006 22:39:21 -0000	1.15
+++ bfd/cpu-m68k.c	2 Jan 2007 23:02:24 -0000
@@ -41,7 +41,7 @@ static const bfd_arch_info_type arch_inf
     N(bfd_mach_m68040,  "m68k:68040", FALSE, &arch_info_struct[6]),
     N(bfd_mach_m68060,  "m68k:68060", FALSE, &arch_info_struct[7]),
     N(bfd_mach_cpu32,   "m68k:cpu32", FALSE, &arch_info_struct[8]),
-    N(bfd_mach_cpu32_fido, "m68k:fido", FALSE, &arch_info_struct[9]),
+    N(bfd_mach_fido,    "m68k:fido",  FALSE, &arch_info_struct[9]),
 
     /* Various combinations of CF architecture features */
     N(bfd_mach_mcf_isa_a_nodiv, "m68k:isa-a:nodiv",
@@ -108,7 +108,7 @@ static const unsigned m68k_arch_features
   m68040|m68881|m68851,
   m68060|m68881|m68851,
   cpu32|m68881,
-  cpu32|m68881|fido_a,
+  fido_a|m68881,
   mcfisa_a,
   mcfisa_a|mcfhwdiv,
   mcfisa_a|mcfhwdiv|mcfmac,
@@ -214,6 +214,10 @@ bfd_m68k_compatible (const bfd_arch_info
       if ((~features & (cpu32 | mcfisa_a)) == 0)
 	return NULL;
 
+      /* Fido and Coldfire are incompatible.  */
+      if ((~features & (fido_a | mcfisa_a)) == 0)
+	return NULL;
+
       /* ISA A+ and ISA B are incompatible.  */
       if ((~features & (mcfisa_aa | mcfisa_b)) == 0)
 	return NULL;
@@ -222,6 +226,22 @@ bfd_m68k_compatible (const bfd_arch_info
       if ((~features & (mcfmac | mcfemac)) == 0)
 	return NULL;
 
+      /* CPU32 is compatible with Fido except that Fido does not
+	 support tbl instructions.  Warn when the user wants to mix
+	 the two.  */
+      if ((a->mach == bfd_mach_cpu32 && b->mach == bfd_mach_fido)
+	  || (a->mach == bfd_mach_fido && b->mach == bfd_mach_cpu32))
+	{
+	  static int cpu32_fido_mix_warning;
+	  if (!cpu32_fido_mix_warning)
+	    {
+	      cpu32_fido_mix_warning = 1;
+	      (*_bfd_error_handler) ("warning: linking CPU32 objects with fido objects");
+	    }
+	  return bfd_lookup_arch (a->arch,
+				  bfd_m68k_features_to_mach (fido_a | m68881));
+	}
+
       return bfd_lookup_arch (a->arch, bfd_m68k_features_to_mach (features));
     }
   else
Index: bfd/elf32-m68k.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-m68k.c,v
retrieving revision 1.96
diff -u -d -p -r1.96 elf32-m68k.c
--- bfd/elf32-m68k.c	25 Dec 2006 22:39:21 -0000	1.96
+++ bfd/elf32-m68k.c	2 Jan 2007 23:02:24 -0000
@@ -432,14 +432,9 @@ elf32_m68k_object_p (bfd *abfd)
   if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_M68000)
     features |= m68000;
   else if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32)
-    {
-      features |= cpu32;
-      switch (eflags & EF_M68K_CPU32_MASK)
-	{
-        case EF_M68K_CPU32_FIDO_A:
-	  features |= fido_a; break;
-	}
-    }
+    features |= cpu32;
+  else if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+    features |= fido_a;
   else
     {
       switch (eflags & EF_M68K_CF_ISA_MASK)
@@ -530,7 +525,9 @@ elf32_m68k_merge_private_bfd_data (ibfd,
       if ((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_M68000)
 	variant_mask = 0;
       else if ((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32)
-	variant_mask = EF_M68K_CPU32_MASK;
+	variant_mask = 0;
+      else if ((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+	variant_mask = 0;
       else
 	variant_mask = EF_M68K_CF_ISA_MASK;
 
@@ -538,6 +535,12 @@ elf32_m68k_merge_private_bfd_data (ibfd,
       out_isa = (out_flags & variant_mask);
       if (in_isa > out_isa)
 	out_flags ^= in_isa ^ out_isa;
+      if (((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32
+	   && (out_flags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+	  || ((in_flags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO
+	      && (out_flags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32))
+	out_flags = EF_M68K_FIDO;
+      else
       out_flags |= in_flags ^ in_isa;
     }
   elf_elfheader (obfd)->e_flags = out_flags;
@@ -567,11 +570,9 @@ elf32_m68k_print_private_bfd_data (abfd,
   if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_M68000)
     fprintf (file, " [m68000]");
   else if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32)
-    {
-      fprintf (file, " [cpu32]");
-      if (eflags & EF_M68K_CPU32_FIDO_A)
-	fprintf (file, " [fido]");
-    }
+    fprintf (file, " [cpu32]");
+  else if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+    fprintf (file, " [fido]");
   else
     {
       if ((eflags & EF_M68K_ARCH_MASK) == EF_M68K_CFV4E)
Index: binutils/readelf.c
===================================================================
RCS file: /cvs/src/src/binutils/readelf.c,v
retrieving revision 1.354
diff -u -d -p -r1.354 readelf.c
--- binutils/readelf.c	25 Dec 2006 22:39:21 -0000	1.354
+++ binutils/readelf.c	2 Jan 2007 23:02:24 -0000
@@ -2015,11 +2015,9 @@ get_machine_flags (unsigned e_flags, uns
 	  if ((e_flags & EF_M68K_ARCH_MASK) == EF_M68K_M68000)
 	    strcat (buf, ", m68000");
 	  else if ((e_flags & EF_M68K_ARCH_MASK) == EF_M68K_CPU32)
-	    {
-	      strcat (buf, ", cpu32");
-	      if (e_flags & EF_M68K_CPU32_FIDO_A)
-		strcat (buf, ", fido_a");
-	    }
+	    strcat (buf, ", cpu32");
+	  else if ((e_flags & EF_M68K_ARCH_MASK) == EF_M68K_FIDO)
+	    strcat (buf, ", fido_a");
 	  else
 	    {
 	      char const *isa = _("unknown");
Index: gas/config/tc-m68k.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-m68k.c,v
retrieving revision 1.81
diff -u -d -p -r1.81 tc-m68k.c
--- gas/config/tc-m68k.c	27 Dec 2006 07:15:02 -0000	1.81
+++ gas/config/tc-m68k.c	2 Jan 2007 23:02:24 -0000
@@ -425,7 +425,7 @@ static const struct m68k_cpu m68k_archs[
   {m68040,					m68040_ctrl, "68040", 0},
   {m68060,					m68060_ctrl, "68060", 0},
   {cpu32|m68881,				cpu32_ctrl, "cpu32", 0},
-  {cpu32|fido_a,				fido_ctrl, "fidoa", 0},
+  {fido_a,					fido_ctrl, "fidoa", 0},
   {mcfisa_a|mcfhwdiv,				NULL, "isaa", 0},
   {mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp,		NULL, "isaaplus", 0},
   {mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp,		NULL, "isab", 0},
@@ -557,7 +557,7 @@ static const struct m68k_cpu m68k_cpus[]
   {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "5485", -1},
   {mcfisa_a|mcfisa_b|mcfhwdiv|mcfemac|mcfusp|cfloat, mcfv4e_ctrl, "548x", 0},
   
-  {cpu32|fido_a,				fido_ctrl, "fido", 1},
+  {fido_a,				fido_ctrl, "fido", 1},
 
   {0,NULL,NULL, 0}
   };
@@ -7514,11 +7514,9 @@ m68k_elf_final_processing (void)
     flags |= EF_M68K_CFV4E;
   /* Set file-specific flags if this is a cpu32 processor.  */
   if (cpu_of_arch (current_architecture) & cpu32)
-    {
-      flags |= EF_M68K_CPU32;
-      if (cpu_of_arch (current_architecture) & fido_a)
-	flags |= EF_M68K_CPU32_FIDO_A;
-    }
+    flags |= EF_M68K_CPU32;
+  else if (cpu_of_arch (current_architecture) & fido_a)
+    flags |= EF_M68K_FIDO;
   else if ((cpu_of_arch (current_architecture) & m68000up)
 	   && !(cpu_of_arch (current_architecture) & m68020up))
     flags |= EF_M68K_M68000;
Index: include/elf/m68k.h
===================================================================
RCS file: /cvs/src/src/include/elf/m68k.h,v
retrieving revision 1.15
diff -u -d -p -r1.15 m68k.h
--- include/elf/m68k.h	25 Dec 2006 22:39:21 -0000	1.15
+++ include/elf/m68k.h	2 Jan 2007 23:02:24 -0000
@@ -57,7 +57,9 @@ END_RELOC_NUMBERS (R_68K_max)
 #define EF_M68K_CPU32    0x00810000
 #define EF_M68K_M68000   0x01000000
 #define EF_M68K_CFV4E    0x00008000
-#define EF_M68K_ARCH_MASK (EF_M68K_M68000 | EF_M68K_CPU32 | EF_M68K_CFV4E)
+#define EF_M68K_FIDO     0x02000000
+#define EF_M68K_ARCH_MASK						\
+  (EF_M68K_M68000 | EF_M68K_CPU32 | EF_M68K_CFV4E | EF_M68K_FIDO)
 
 /* We use the bottom 8 bits to encode information about the
    coldfire variant.  If we use any of these bits, the top 24 bits are
@@ -76,10 +78,4 @@ END_RELOC_NUMBERS (R_68K_max)
 #define EF_M68K_CF_FLOAT	0x40  /* Has float insns */
 #define EF_M68K_CF_MASK		0xFF
      
-/* We use the bottom 8 bits to encode information about the
-   CPU32 variant.  If we use any of these bits, the top 24 bits must
-   be EF_M68K_CPU32.  */
-#define EF_M68K_CPU32_FIDO_A	0x01
-#define EF_M68K_CPU32_MASK	0xFF
-
 #endif
Index: include/opcode/m68k.h
===================================================================
RCS file: /cvs/src/src/include/opcode/m68k.h,v
retrieving revision 1.15
diff -u -d -p -r1.15 m68k.h
--- include/opcode/m68k.h	25 Dec 2006 22:39:21 -0000	1.15
+++ include/opcode/m68k.h	2 Jan 2007 23:02:24 -0000
@@ -49,7 +49,7 @@
 #define	m68040up   (m68040 | m68060)
 #define	m68030up   (m68030 | m68040up)
 #define	m68020up   (m68020 | m68030up)
-#define	m68010up   (m68010 | cpu32 | m68020up)
+#define	m68010up   (m68010 | cpu32 | fido_a | m68020up)
 #define	m68000up   (m68000 | m68010up)
 
 #define	mfloat  (m68881 | m68040 | m68060)
Index: opcodes/m68k-opc.c
===================================================================
RCS file: /cvs/src/src/opcodes/m68k-opc.c,v
retrieving revision 1.21
diff -u -d -p -r1.21 m68k-opc.c
--- opcodes/m68k-opc.c	27 Dec 2006 07:10:10 -0000	1.21
+++ opcodes/m68k-opc.c	2 Jan 2007 23:02:24 -0000
@@ -131,20 +131,20 @@ const struct m68k_opcode m68k_opcodes[] 
 {"bgtw", 2,	one(0067000),	one(0177777), "BW", m68000up | mcfisa_a },
 {"blew", 2,	one(0067400),	one(0177777), "BW", m68000up | mcfisa_a },
 
-{"bhil", 2,	one(0061377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"blsl", 2,	one(0061777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bccl", 2,	one(0062377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bcsl", 2,	one(0062777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bnel", 2,	one(0063377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"beql", 2,	one(0063777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bvcl", 2,	one(0064377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bvsl", 2,	one(0064777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bpll", 2,	one(0065377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bmil", 2,	one(0065777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bgel", 2,	one(0066377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bltl", 2,	one(0066777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"bgtl", 2,	one(0067377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
-{"blel", 2,	one(0067777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
+{"bhil", 2,	one(0061377),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"blsl", 2,	one(0061777),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bccl", 2,	one(0062377),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bcsl", 2,	one(0062777),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bnel", 2,	one(0063377),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"beql", 2,	one(0063777),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bvcl", 2,	one(0064377),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bvsl", 2,	one(0064777),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bpll", 2,	one(0065377),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bmil", 2,	one(0065777),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bgel", 2,	one(0066377),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bltl", 2,	one(0066777),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"bgtl", 2,	one(0067377),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
+{"blel", 2,	one(0067777),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
 
 {"bhis", 2,	one(0061000),	one(0177400), "BB", m68000up | mcfisa_a },
 {"blss", 2,	one(0061400),	one(0177400), "BB", m68000up | mcfisa_a },
@@ -193,14 +193,14 @@ const struct m68k_opcode m68k_opcodes[] 
 {"bfset", 4,	two(0167300, 0), two(0177700, 0170000),	"?sO2O3",   m68020up },
 {"bftst", 4,	two(0164300, 0), two(0177700, 0170000),	"/sO2O3",   m68020up },
 
-{"bgnd", 2,	one(0045372),	one(0177777), "", cpu32 },
+{"bgnd", 2,	one(0045372),	one(0177777), "", cpu32 | fido_a },
 
 {"bitrev", 2,	one(0000300),	one(0177770), "Ds", mcfisa_aa},
 
 {"bkpt", 2,	one(0044110),	one(0177770), "ts", m68010up },
 
 {"braw", 2,	one(0060000),	one(0177777), "BW", m68000up | mcfisa_a },
-{"bral", 2,	one(0060377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
+{"bral", 2,	one(0060377),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
 {"bras", 2,	one(0060000),	one(0177400), "BB", m68000up | mcfisa_a },
 
 {"bset", 2,	one(0000700),	one(0170700), "Dd$s", m68000up | mcfisa_a },
@@ -209,7 +209,7 @@ const struct m68k_opcode m68k_opcodes[] 
 {"bset", 4,	one(0004300),	one(0177700), "#bqs", mcfisa_a },
 
 {"bsrw", 2,	one(0060400),	one(0177777), "BW", m68000up | mcfisa_a },
-{"bsrl", 2,	one(0060777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
+{"bsrl", 2,	one(0060777),	one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b},
 {"bsrs", 2,	one(0060400),	one(0177400), "BB", m68000up | mcfisa_a },
 
 {"btst", 2,	one(0000400),	one(0170700), "Dd;b", m68000up | mcfisa_a },
@@ -229,9 +229,9 @@ const struct m68k_opcode m68k_opcodes[] 
 {"casw", 4,	two(0006300, 0), two(0177700, 0177070),	"D3D2~s", m68020up },
 {"casl", 4,	two(0007300, 0), two(0177700, 0177070),	"D3D2~s", m68020up },
 
-{"chk2b", 4, 	two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
-{"chk2w", 4, 	two(0001300,0004000),	two(0177700,07777), "!sR1", m68020up | cpu32 },
-{"chk2l", 4, 	two(0002300,0004000),	two(0177700,07777), "!sR1", m68020up | cpu32 },
+{"chk2b", 4, 	two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
+{"chk2w", 4, 	two(0001300,0004000),	two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
+{"chk2l", 4, 	two(0002300,0004000),	two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
 
 {"chkl", 2,	one(0040400),		one(0170700), ";lDd", m68000up },
 {"chkw", 2,	one(0040600),		one(0170700), ";wDd", m68000up },
@@ -256,9 +256,9 @@ const struct m68k_opcode m68k_opcodes[] 
 {"clrw", 2,	one(0041100),	one(0177700), "$s", m68000up | mcfisa_a },
 {"clrl", 2,	one(0041200),	one(0177700), "$s", m68000up | mcfisa_a },
 
-{"cmp2b", 4,	two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
-{"cmp2w", 4,	two(0001300,0),	two(0177700,07777), "!sR1", m68020up | cpu32 },
-{"cmp2l", 4,	two(0002300,0),	two(0177700,07777), "!sR1", m68020up | cpu32 },
+{"cmp2b", 4,	two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
+{"cmp2w", 4,	two(0001300,0),	two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
+{"cmp2l", 4,	two(0002300,0),	two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a },
 
 {"cmpaw", 2,	one(0130300),	one(0170700), "*wAd", m68000up },
 {"cmpal", 2,	one(0130700),	one(0170700), "*lAd", m68000up | mcfisa_a },
@@ -310,21 +310,21 @@ const struct m68k_opcode m68k_opcodes[] 
 
 {"divsw", 2,	one(0100700),	one(0170700), ";wDd", m68000up | mcfhwdiv },
 
-{"divsl", 4, 	two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
-{"divsl", 4, 	two(0046100,0004000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
+{"divsl", 4, 	two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up | cpu32 | fido_a },
+{"divsl", 4, 	two(0046100,0004000),two(0177700,0107770),";lDD",   m68020up | cpu32 | fido_a },
 {"divsl", 4, 	two(0046100,0004000),two(0177700,0107770),"qsDD",   mcfhwdiv },
 
-{"divsll", 4, 	two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
-{"divsll", 4, 	two(0046100,0004000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
+{"divsll", 4, 	two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up | cpu32 | fido_a },
+{"divsll", 4, 	two(0046100,0004000),two(0177700,0107770),";lDD",  m68020up | cpu32 | fido_a },
 
 {"divuw", 2,	one(0100300),		one(0170700), ";wDd", m68000up | mcfhwdiv },
 
-{"divul", 4,	two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
-{"divul", 4,	two(0046100,0000000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
+{"divul", 4,	two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up | cpu32 | fido_a },
+{"divul", 4,	two(0046100,0000000),two(0177700,0107770),";lDD",   m68020up | cpu32 | fido_a },
 {"divul", 4,	two(0046100,0000000),two(0177700,0107770),"qsDD",   mcfhwdiv },
 
-{"divull", 4,	two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
-{"divull", 4,	two(0046100,0000000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
+{"divull", 4,	two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up | cpu32 | fido_a },
+{"divull", 4,	two(0046100,0000000),two(0177700,0107770),";lDD",  m68020up | cpu32 | fido_a },
 
 {"eorib", 4,	one(0005000),	one(0177700), "#b$s", m68000up },
 {"eorib", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
@@ -358,7 +358,7 @@ const struct m68k_opcode m68k_opcodes[] 
 
 {"extw", 2,	one(0044200),	one(0177770), "Ds", m68000up|mcfisa_a },
 {"extl", 2,	one(0044300),	one(0177770), "Ds", m68000up|mcfisa_a },
-{"extbl", 2,	one(0044700),	one(0177770), "Ds", m68020up|cpu32|mcfisa_a },
+{"extbl", 2,	one(0044700),	one(0177770), "Ds", m68020up | cpu32 | fido_a | mcfisa_a },
 
 {"ff1", 2,   	one(0002300), one(0177770), "Ds", mcfisa_aa},
 
@@ -1437,12 +1437,12 @@ const struct m68k_opcode m68k_opcodes[] 
 
 {"lea", 2,	one(0040700),	one(0170700), "!sAd", m68000up | mcfisa_a },
 
-{"lpstop", 6,	two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 },
+{"lpstop", 6,	two(0174000,0000700),two(0177777,0177777),"#w", cpu32 | fido_a | m68060 },
 
 {"linkw", 4,	one(0047120),	one(0177770), "As#w", m68000up | mcfisa_a },
-{"linkl", 6,	one(0044010),	one(0177770), "As#l", m68020up | cpu32 },
+{"linkl", 6,	one(0044010),	one(0177770), "As#l", m68020up | cpu32 | fido_a },
 {"link", 4,	one(0047120),	one(0177770), "As#W", m68000up | mcfisa_a },
-{"link", 6,	one(0044010),	one(0177770), "As#l", m68020up | cpu32 },
+{"link", 6,	one(0044010),	one(0177770), "As#l", m68020up | cpu32 | fido_a },
 
 {"lslb", 2,	one(0160410),	one(0170770), "QdDs", m68000up },
 {"lslb", 2,	one(0160450),	one(0170770), "DdDs", m68000up },
@@ -1672,14 +1672,14 @@ const struct m68k_opcode m68k_opcodes[] 
 {"msacl", 4,  	two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
 
 {"mulsw", 2,	one(0140700),		one(0170700), ";wDd", m68000up|mcfisa_a },
-{"mulsl", 4,	two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
+{"mulsl", 4,	two(0046000,004000), two(0177700,0107770), ";lD1", m68020up | cpu32 | fido_a },
 {"mulsl", 4,	two(0046000,004000), two(0177700,0107770), "qsD1", mcfisa_a },
-{"mulsl", 4,	two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
+{"mulsl", 4,	two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up | cpu32 | fido_a },
 
 {"muluw", 2,	one(0140300),		one(0170700), ";wDd", m68000up|mcfisa_a },
-{"mulul", 4,	two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
+{"mulul", 4,	two(0046000,000000), two(0177700,0107770), ";lD1", m68020up | cpu32 | fido_a },
 {"mulul", 4,	two(0046000,000000), two(0177700,0107770), "qsD1", mcfisa_a },
-{"mulul", 4,	two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
+{"mulul", 4,	two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up | cpu32 | fido_a },
 
 {"nbcd", 2,	one(0044000),	one(0177700), "$s", m68000up },
 
@@ -2000,59 +2000,59 @@ const struct m68k_opcode m68k_opcodes[] 
 
   /* Traps have to come before conditional sets, as they have a more
      specific opcode.  */
-{"trapcc", 2,	one(0052374),	one(0177777), "", m68020up | cpu32 },
-{"trapcs", 2,	one(0052774),	one(0177777), "", m68020up | cpu32 },
-{"trapeq", 2,	one(0053774),	one(0177777), "", m68020up | cpu32 },
+{"trapcc", 2,	one(0052374),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapcs", 2,	one(0052774),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapeq", 2,	one(0053774),	one(0177777), "", m68020up | cpu32 | fido_a },
 {"tpf", 2,	one(0050774),	one(0177777), "", mcfisa_a },
-{"trapf", 2,	one(0050774),	one(0177777), "", m68020up | cpu32 | mcfisa_a },
-{"trapge", 2,	one(0056374),	one(0177777), "", m68020up | cpu32 },
-{"trapgt", 2,	one(0057374),	one(0177777), "", m68020up | cpu32 },
-{"traphi", 2,	one(0051374),	one(0177777), "", m68020up | cpu32 },
-{"traple", 2,	one(0057774),	one(0177777), "", m68020up | cpu32 },
-{"trapls", 2,	one(0051774),	one(0177777), "", m68020up | cpu32 },
-{"traplt", 2,	one(0056774),	one(0177777), "", m68020up | cpu32 },
-{"trapmi", 2,	one(0055774),	one(0177777), "", m68020up | cpu32 },
-{"trapne", 2,	one(0053374),	one(0177777), "", m68020up | cpu32 },
-{"trappl", 2,	one(0055374),	one(0177777), "", m68020up | cpu32 },
-{"trapt", 2,	one(0050374),	one(0177777), "", m68020up | cpu32 },
-{"trapvc", 2,	one(0054374),	one(0177777), "", m68020up | cpu32 },
-{"trapvs", 2,	one(0054774),	one(0177777), "", m68020up | cpu32 },
+{"trapf", 2,	one(0050774),	one(0177777), "", m68020up | cpu32 | fido_a | mcfisa_a },
+{"trapge", 2,	one(0056374),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapgt", 2,	one(0057374),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"traphi", 2,	one(0051374),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"traple", 2,	one(0057774),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapls", 2,	one(0051774),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"traplt", 2,	one(0056774),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapmi", 2,	one(0055774),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapne", 2,	one(0053374),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trappl", 2,	one(0055374),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapt", 2,	one(0050374),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapvc", 2,	one(0054374),	one(0177777), "", m68020up | cpu32 | fido_a },
+{"trapvs", 2,	one(0054774),	one(0177777), "", m68020up | cpu32 | fido_a },
 
-{"trapccw", 4,	one(0052372),	one(0177777), "#w", m68020up|cpu32 },
-{"trapcsw", 4,	one(0052772),	one(0177777), "#w", m68020up|cpu32 },
-{"trapeqw", 4,	one(0053772),	one(0177777), "#w", m68020up|cpu32 },
+{"trapccw", 4,	one(0052372),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapcsw", 4,	one(0052772),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapeqw", 4,	one(0053772),	one(0177777), "#w", m68020up | cpu32 | fido_a },
 {"tpfw", 4,	one(0050772),	one(0177777), "#w", mcfisa_a},
-{"trapfw", 4,	one(0050772),	one(0177777), "#w", m68020up|cpu32|mcfisa_a},
-{"trapgew", 4,	one(0056372),	one(0177777), "#w", m68020up|cpu32 },
-{"trapgtw", 4,	one(0057372),	one(0177777), "#w", m68020up|cpu32 },
-{"traphiw", 4,	one(0051372),	one(0177777), "#w", m68020up|cpu32 },
-{"traplew", 4,	one(0057772),	one(0177777), "#w", m68020up|cpu32 },
-{"traplsw", 4,	one(0051772),	one(0177777), "#w", m68020up|cpu32 },
-{"trapltw", 4,	one(0056772),	one(0177777), "#w", m68020up|cpu32 },
-{"trapmiw", 4,	one(0055772),	one(0177777), "#w", m68020up|cpu32 },
-{"trapnew", 4,	one(0053372),	one(0177777), "#w", m68020up|cpu32 },
-{"trapplw", 4,	one(0055372),	one(0177777), "#w", m68020up|cpu32 },
-{"traptw", 4,	one(0050372),	one(0177777), "#w", m68020up|cpu32 },
-{"trapvcw", 4,	one(0054372),	one(0177777), "#w", m68020up|cpu32 },
-{"trapvsw", 4,	one(0054772),	one(0177777), "#w", m68020up|cpu32 },
+{"trapfw", 4,	one(0050772),	one(0177777), "#w", m68020up | cpu32 | fido_a | mcfisa_a},
+{"trapgew", 4,	one(0056372),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapgtw", 4,	one(0057372),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"traphiw", 4,	one(0051372),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"traplew", 4,	one(0057772),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"traplsw", 4,	one(0051772),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapltw", 4,	one(0056772),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapmiw", 4,	one(0055772),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapnew", 4,	one(0053372),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapplw", 4,	one(0055372),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"traptw", 4,	one(0050372),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapvcw", 4,	one(0054372),	one(0177777), "#w", m68020up | cpu32 | fido_a },
+{"trapvsw", 4,	one(0054772),	one(0177777), "#w", m68020up | cpu32 | fido_a },
 
-{"trapccl", 6,	one(0052373),	one(0177777), "#l", m68020up|cpu32 },
-{"trapcsl", 6,	one(0052773),	one(0177777), "#l", m68020up|cpu32 },
-{"trapeql", 6,	one(0053773),	one(0177777), "#l", m68020up|cpu32 },
+{"trapccl", 6,	one(0052373),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapcsl", 6,	one(0052773),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapeql", 6,	one(0053773),	one(0177777), "#l", m68020up | cpu32 | fido_a },
 {"tpfl", 6,	one(0050773),	one(0177777), "#l", mcfisa_a},
-{"trapfl", 6,	one(0050773),	one(0177777), "#l", m68020up|cpu32|mcfisa_a},
-{"trapgel", 6,	one(0056373),	one(0177777), "#l", m68020up|cpu32 },
-{"trapgtl", 6,	one(0057373),	one(0177777), "#l", m68020up|cpu32 },
-{"traphil", 6,	one(0051373),	one(0177777), "#l", m68020up|cpu32 },
-{"traplel", 6,	one(0057773),	one(0177777), "#l", m68020up|cpu32 },
-{"traplsl", 6,	one(0051773),	one(0177777), "#l", m68020up|cpu32 },
-{"trapltl", 6,	one(0056773),	one(0177777), "#l", m68020up|cpu32 },
-{"trapmil", 6,	one(0055773),	one(0177777), "#l", m68020up|cpu32 },
-{"trapnel", 6,	one(0053373),	one(0177777), "#l", m68020up|cpu32 },
-{"trappll", 6,	one(0055373),	one(0177777), "#l", m68020up|cpu32 },
-{"traptl", 6,	one(0050373),	one(0177777), "#l", m68020up|cpu32 },
-{"trapvcl", 6,	one(0054373),	one(0177777), "#l", m68020up|cpu32 },
-{"trapvsl", 6,	one(0054773),	one(0177777), "#l", m68020up|cpu32 },
+{"trapfl", 6,	one(0050773),	one(0177777), "#l", m68020up | cpu32 | fido_a | mcfisa_a},
+{"trapgel", 6,	one(0056373),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapgtl", 6,	one(0057373),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"traphil", 6,	one(0051373),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"traplel", 6,	one(0057773),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"traplsl", 6,	one(0051773),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapltl", 6,	one(0056773),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapmil", 6,	one(0055773),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapnel", 6,	one(0053373),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trappll", 6,	one(0055373),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"traptl", 6,	one(0050373),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapvcl", 6,	one(0054373),	one(0177777), "#l", m68020up | cpu32 | fido_a },
+{"trapvsl", 6,	one(0054773),	one(0177777), "#l", m68020up | cpu32 | fido_a },
 
 {"trapv", 2,	one(0047166),	one(0177777), "", m68000up },
 
@@ -2160,11 +2160,11 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
 
 {"trapx", 2,	one(0047060),	one(0177760), "Ts", fido_a },
 
-{"tstb", 2,	one(0045000),	one(0177700), ";b", m68020up|cpu32|mcfisa_a },
+{"tstb", 2,	one(0045000),	one(0177700), ";b", m68020up | cpu32 | fido_a | mcfisa_a },
 {"tstb", 2,	one(0045000),	one(0177700), "$b", m68000up },
-{"tstw", 2,	one(0045100),	one(0177700), "*w", m68020up|cpu32|mcfisa_a },
+{"tstw", 2,	one(0045100),	one(0177700), "*w", m68020up | cpu32 | fido_a | mcfisa_a },
 {"tstw", 2,	one(0045100),	one(0177700), "$w", m68000up },
-{"tstl", 2,	one(0045200),	one(0177700), "*l", m68020up|cpu32|mcfisa_a },
+{"tstl", 2,	one(0045200),	one(0177700), "*l", m68020up | cpu32 | fido_a | mcfisa_a },
 {"tstl", 2,	one(0045200),	one(0177700), "$l", m68000up },
 
 {"unlk", 2,	one(0047130),	one(0177770), "As", m68000up | mcfisa_a },



More information about the Binutils mailing list