Add ColfFire v4 support
authorNick Clifton <nickc@redhat.com>
Tue, 21 Oct 2003 13:28:59 +0000 (13:28 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 21 Oct 2003 13:28:59 +0000 (13:28 +0000)
15 files changed:
bfd/ChangeLog
bfd/archures.c
bfd/bfd-in2.h
bfd/cpu-m68k.c
bfd/ieee.c
gas/ChangeLog
gas/NEWS
gas/config/m68k-parse.h
gas/config/tc-m68k.c
gas/doc/c-m68k.texi
include/opcode/ChangeLog
include/opcode/m68k.h
opcodes/ChangeLog
opcodes/m68k-dis.c
opcodes/m68k-opc.c

index 6e2e09581b63b2f190bad05d0d2a6a0020a20142..7ae6b66aa5c86c5d7667d0c13cc0ce013837a22e 100644 (file)
@@ -1,3 +1,15 @@
+2003-10-21  Thorsten Brehm  <brehm@gmx.net>
+
+       * archures.c (bfd_default_scan): Add support for mcf528x.
+       * ieee.c (ieee_write_processor): Likewise.
+
+2003-10-21  Peter Barada  <pbarada@mail.wm.sps.mot.com>
+            Bernardo Innocenti  <bernie@develer.com>
+
+       * archures.c: Add MCF528x (MCFv4) support.
+       * bfd/cpu-m68k.c (arch_info_struct): Likewise.
+       * bfd-in2.h: Regenerate.
+
 2003-10-20  Andrew Cagney  <cagney@redhat.com>
 
        * targets.c: Replace "struct sec" with "struct bfd_section"
index 271b031f49e8a72781dc462301716dd8fc212295..b71434e12942e509496b29e7a7d12232248a06bc 100644 (file)
@@ -84,6 +84,7 @@ DESCRIPTION
 .#define bfd_mach_mcf5206e 10
 .#define bfd_mach_mcf5307  11
 .#define bfd_mach_mcf5407  12
+.#define bfd_mach_mcf528x  13
 .  bfd_arch_vax,       {* DEC Vax *}
 .  bfd_arch_i960,      {* Intel 960 *}
 .    {* The order of the following is important.
@@ -959,6 +960,10 @@ bfd_default_scan (const bfd_arch_info_type *info, const char *string)
       arch = bfd_arch_m68k;
       number = bfd_mach_mcf5407;
       break;
+    case 5282:
+      arch = bfd_arch_m68k;
+      number = bfd_mach_mcf528x;
+      break;
 
     case 32000:
       arch = bfd_arch_we32k;
index e7d25cb59d1940bafb2683bf0d21b0419b07d00f..b58d6cae8844ce5e2172f1408a3f997fa661abe8 100644 (file)
@@ -1519,6 +1519,7 @@ enum bfd_architecture
 #define bfd_mach_mcf5206e 10
 #define bfd_mach_mcf5307  11
 #define bfd_mach_mcf5407  12
+#define bfd_mach_mcf528x  13
   bfd_arch_vax,       /* DEC Vax */
   bfd_arch_i960,      /* Intel 960 */
     /* The order of the following is important.
index 1648340fa54fc9e9aa7ecbd0b7fa6f41dec951fe..71c70297d1d6769f2e0f904da839182019a626ed 100644 (file)
@@ -1,23 +1,23 @@
 /* BFD library support routines for architectures.
-   Copyright 1990, 1991, 1992, 1993, 1994, 1997, 1998, 2000, 2001, 2002
-   Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992, 1993, 1994, 1997, 1998, 2000, 2001, 2002,
+   2003 Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Cygnus Support.
 
-This file is part of BFD, the Binary File Descriptor library.
+   This file is part of BFD, the Binary File Descriptor library.
 
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
@@ -28,18 +28,19 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 static const bfd_arch_info_type arch_info_struct[] =
   {
-    N(bfd_mach_m68000, "m68k:68000", FALSE, &arch_info_struct[1]),
-    N(bfd_mach_m68008, "m68k:68008", FALSE, &arch_info_struct[2]),
-    N(bfd_mach_m68010, "m68k:68010", FALSE, &arch_info_struct[3]),
-    N(bfd_mach_m68020, "m68k:68020", FALSE, &arch_info_struct[4]),
-    N(bfd_mach_m68030, "m68k:68030", FALSE, &arch_info_struct[5]),
-    N(bfd_mach_m68040, "m68k:68040", FALSE, &arch_info_struct[6]),
-    N(bfd_mach_cpu32,  "m68k:cpu32", FALSE, &arch_info_struct[7]),
-    N(bfd_mach_mcf5200,"m68k:5200",  FALSE, &arch_info_struct[8]),
-    N(bfd_mach_mcf5206e,"m68k:5206e",FALSE, &arch_info_struct[9]),
-    N(bfd_mach_mcf5307, "m68k:5307", FALSE, &arch_info_struct[10]),
-    N(bfd_mach_mcf5407, "m68k:5407", FALSE, &arch_info_struct[11]),
-    N(bfd_mach_m68060, "m68k:68060", FALSE, 0),
+    N(bfd_mach_m68000,  "m68k:68000", FALSE, &arch_info_struct[1]),
+    N(bfd_mach_m68008,  "m68k:68008", FALSE, &arch_info_struct[2]),
+    N(bfd_mach_m68010,  "m68k:68010", FALSE, &arch_info_struct[3]),
+    N(bfd_mach_m68020,  "m68k:68020", FALSE, &arch_info_struct[4]),
+    N(bfd_mach_m68030,  "m68k:68030", FALSE, &arch_info_struct[5]),
+    N(bfd_mach_m68040,  "m68k:68040", FALSE, &arch_info_struct[6]),
+    N(bfd_mach_cpu32,   "m68k:cpu32", FALSE, &arch_info_struct[7]),
+    N(bfd_mach_mcf5200, "m68k:5200",  FALSE, &arch_info_struct[8]),
+    N(bfd_mach_mcf5206e,"m68k:5206e", FALSE, &arch_info_struct[9]),
+    N(bfd_mach_mcf5307, "m68k:5307",  FALSE, &arch_info_struct[10]),
+    N(bfd_mach_mcf5407, "m68k:5407",  FALSE, &arch_info_struct[11]),
+    N(bfd_mach_m68060,  "m68k:68060", FALSE, &arch_info_struct[12]),
+    N(bfd_mach_mcf528x, "m68k:528x",  FALSE, 0),
   };
 
 const bfd_arch_info_type bfd_m68k_arch =
index 4e1631a2c79bffbfcf9123ea4651b9ae5b9a4fe1..0445a6dbb19cdac9fa12d37695fdc65c599f1924 100644 (file)
@@ -3704,6 +3704,7 @@ ieee_write_processor (abfd)
          case bfd_mach_mcf5206e:id = "5206e"; break;
          case bfd_mach_mcf5307:id = "5307";  break;
          case bfd_mach_mcf5407:id = "5407";  break;
+         case bfd_mach_mcf528x:id = "5282";  break;
          }
 
        if (! ieee_write_id (abfd, id))
index 669faad248ae7be40d3262ad86f77eed1626f376..0c61c8b3109278a2c6b851cc72dcc8580e81e669 100644 (file)
@@ -1,3 +1,11 @@
+2003-10-21  Peter Barada  <pbarada@mail.wm.sps.mot.com>
+            Bernardo Innocenti  <bernie@develer.com>
+
+       * config/tc-m68k.c: Add MCF528x (MCFv4) support.
+       * config/m68k-parse.h: Likewise.
+       * NEWS: Mention the new support.
+       * doc/c-m68k.texi: Document new processor selection switch.
+
 2003-10-19  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
 
        * config/tc-mips.c (normalize_constant_expr): New function to fix sign
index cec4132652b8c56e9c30abc93fb17b15a2e40780..d4c373ccdd8ee8e868624f37303bc5286ed3d3cd 100644 (file)
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,7 @@
 -*- text -*-
 
+* Support for Motorola ColdFire MCF528x added.
+
 * Added --gstabs+ switch to enable the generation of STABS debug format
   information with GNU extensions.
  
index 6482007504a42044f795f91a90f289f7be5bba03..c82e69fc65a0fa86a4340e3350d0220ae84fd20b 100644 (file)
@@ -1,6 +1,6 @@
 /* m68k-parse.h -- header file for m68k assembler
-   Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000
-   Free Software Foundation, Inc.
+   Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000,
+   2003 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -105,14 +105,23 @@ enum m68k_register
   TC,
   SRP,
   URP,
-  BUSCR,                       /* 68060 added these */
+  BUSCR,                       /* 68060 added these */
   PCR,
-  ROMBAR,                      /* mcf5200 added these */
+  ROMBAR,                      /* mcf5200 added these */
   RAMBAR0,
   RAMBAR1,
+  MMUBAR,                      /* mcfv4e added these.  */
+  ROMBAR1,                     /* mcfv4e added these.  */
+  MPCR, EDRAMBAR, SECMBAR,     /* mcfv4e added these.  */
+  PCR1U0, PCR1L0, PCR1U1, PCR1L1,/* mcfv4e added these.  */
+  PCR2U0, PCR2L0, PCR2U1, PCR2L1,/* mcfv4e added these.  */
+  PCR3U0, PCR3L0, PCR3U1, PCR3L1,/* mcfv4e added these.  */
+  MBAR0, MBAR1,                        /* mcfv4e added these.  */
+  ACR0, ACR1, ACR2, ACR3,       /* mcf5200 added these.  */
+  FLASHBAR, RAMBAR,            /* mcf528x added these.  */
   MBAR,
 #define last_movec_reg MBAR
-  /* end of movec ordering constraints */
+  /* End of movec ordering constraints.  */
 
   FPI,
   FPS,
index 5539ed126d54cb77cd8457ab867c380385a35c38..5d53fa8515ab52a2643d01b03cf4a35183cbe455 100644 (file)
@@ -1,7 +1,6 @@
 /* tc-m68k.c -- Assemble for the m68k family
    Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003
-   Free Software Foundation, Inc.
+   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -168,10 +167,21 @@ static const enum m68k_register m68060_control_regs[] = {
   0
 };
 static const enum m68k_register mcf_control_regs[] = {
-  CACR, TC, ITT0, ITT1, DTT0, DTT1, VBR, ROMBAR,
+  CACR, TC, ACR0, ACR1, ACR2, ACR3, VBR, ROMBAR,
   RAMBAR0, RAMBAR1, MBAR,
   0
 };
+static const enum m68k_register mcf528x_control_regs[] = {
+  CACR, ACR0, ACR1, VBR, FLASHBAR, RAMBAR,
+  0
+};
+static const enum m68k_register mcfv4e_control_regs[] = {
+  CACR, TC, ITT0, ITT1, DTT0, DTT1, BUSCR, VBR, PC, ROMBAR,
+  ROMBAR1, RAMBAR0, RAMBAR1, MPCR, EDRAMBAR, SECMBAR, MBAR, MBAR0, MBAR1,
+  PCR1U0, PCR1L0, PCR1U1, PCR1L1, PCR2U0, PCR2L0, PCR2U1, PCR2L1,
+  PCR3U0, PCR3L0, PCR3U1, PCR3L1,
+  0
+};
 #define cpu32_control_regs m68010_control_regs
 
 static const enum m68k_register *control_regs;
@@ -225,13 +235,14 @@ struct m68k_it
   reloc[5];                    /* Five is enough???  */
 };
 
-#define cpu_of_arch(x)         ((x) & (m68000up|mcf))
+#define cpu_of_arch(x)         ((x) & (m68000up | mcf))
 #define float_of_arch(x)       ((x) & mfloat)
 #define mmu_of_arch(x)         ((x) & mmmu)
-#define arch_coldfire_p(x)     (((x) & mcf) != 0)
+#define arch_coldfire_p(x)     ((x) & mcf)
+#define arch_coldfire_v4e_p(x) ((x) & mcfv4e)
 
 /* Macros for determining if cpu supports a specific addressing mode.  */
-#define HAVE_LONG_BRANCH(x)     ((x) & (m68020|m68030|m68040|m68060|cpu32|mcf5407))
+#define HAVE_LONG_BRANCH(x)     ((x) & (m68020|m68030|m68040|m68060|cpu32|mcf5407|mcfv4e))
 
 static struct m68k_it the_ins; /* The instruction being assembled.  */
 
@@ -360,19 +371,21 @@ struct m68k_cpu
 
 static const struct m68k_cpu archs[] =
   {
-    { m68000, "68000", 0 },
-    { m68010, "68010", 0 },
-    { m68020, "68020", 0 },
-    { m68030, "68030", 0 },
-    { m68040, "68040", 0 },
-    { m68060, "68060", 0 },
-    { cpu32,  "cpu32", 0 },
-    { m68881, "68881", 0 },
-    { m68851, "68851", 0 },
-    { mcf5200, "5200", 0 },
-    { mcf5206e, "5206e", 0 },
-    { mcf5307, "5307", 0},
-    { mcf5407, "5407", 0},
+    { m68000,  "68000", 0 },
+    { m68010,  "68010", 0 },
+    { m68020,  "68020", 0 },
+    { m68030,  "68030", 0 },
+    { m68040,  "68040", 0 },
+    { m68060,  "68060", 0 },
+    { cpu32,   "cpu32", 0 },
+    { m68881,  "68881", 0 },
+    { m68851,  "68851", 0 },
+    { mcf5200, "5200",  0 },
+    { mcf5206e,"5206e", 0 },
+    { mcf528x, "528x",  0 },
+    { mcf5307, "5307",  0 },
+    { mcf5407, "5407",  0 },
+    { mcfv4e,  "cfv4e", 0 },
     /* Aliases (effectively, so far as gas is concerned) for the above
        cpus.  */
     { m68020, "68k", 1 },
@@ -403,6 +416,7 @@ static const struct m68k_cpu archs[] =
     { mcf5200, "5202", 1 },
     { mcf5200, "5204", 1 },
     { mcf5200, "5206", 1 },
+    { mcf5407, "cfv4", 1 },
   };
 
 static const int n_archs = sizeof (archs) / sizeof (archs[0]);
@@ -1498,6 +1512,24 @@ m68k_ip (instring)
                    losing++;
                  break;
 
+                case 'b':
+                  switch (opP->mode)
+                    {
+                    case IMMED:
+                    case ABSL:
+                    case AREG:
+                    case FPREG:
+                    case CONTROL:
+                    case POST:
+                    case PRE:
+                    case REGLST:
+                     losing++;
+                     break;
+                   default:
+                     break;
+                    }
+                  break;
+
                case 'C':
                  if (opP->mode != CONTROL || opP->reg != CCR)
                    losing++;
@@ -1702,6 +1734,16 @@ m68k_ip (instring)
                    losing++;
                  break;
 
+               case 'x':
+                 if (opP->mode != IMMED)
+                   losing++;
+                 else if (opP->disp.exp.X_op != O_constant
+                          || opP->disp.exp.X_add_number < -1
+                           || opP->disp.exp.X_add_number > 7
+                           || opP->disp.exp.X_add_number == 0)
+                   losing++;
+                 break;
+
                  /* JF these are out of order.  We could put them
                     in order if we were willing to put up with
                     bunches of #ifdef m68851s in the code.
@@ -1763,6 +1805,25 @@ m68k_ip (instring)
                    losing++;
                  break;
 
+               case 'w':
+                 switch (opP->mode)
+                   {
+                     case IMMED:
+                     case ABSL:
+                     case AREG:
+                     case DREG:
+                     case FPREG:
+                     case CONTROL:
+                     case POST:
+                     case PRE:
+                     case REGLST:
+                       losing++;
+                       break;
+                     default:
+                       break;
+                   }
+                 break;
+
                case 'X':
                  if (opP->mode != CONTROL
                      || (!(opP->reg >= BAD && opP->reg <= BAD + 7)
@@ -1807,6 +1868,18 @@ m68k_ip (instring)
                    opP->mode = AREG;
                  break;
 
+                case 'y':
+                  if (!(opP->mode == AINDR
+                        || (opP->mode == DISP && !(opP->reg == PC ||
+                                                   opP->reg == ZPC))))
+                    losing++;
+                  break;
+
+                case 'z':
+                  if (!(opP->mode == AINDR || opP->mode == DISP))
+                    losing++;
+                  break;
+
                default:
                  abort ();
                }
@@ -1833,6 +1906,9 @@ m68k_ip (instring)
              cp = buf + strlen (buf);
              switch (ok_arch)
                {
+               case cfloat:
+                 strcpy (cp, _("ColdFire fpu (cfv4e)"));
+                 break;
                case mfloat:
                  strcpy (cp, _("fpu (68040, 68060 or 68881/68882)"));
                  break;
@@ -1908,12 +1984,16 @@ m68k_ip (instring)
        case '/':
        case '<':
        case '>':
+       case 'b':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'v':
+       case 'w':
+       case 'y':
+       case 'z':
 #ifndef NO_68851
        case '|':
 #endif
@@ -1922,7 +2002,7 @@ m68k_ip (instring)
            case IMMED:
              tmpreg = 0x3c;    /* 7.4 */
              if (strchr ("bwl", s[1]))
-               nextword = get_num (&opP->disp, 80);
+               nextword = get_num (&opP->disp, 90);
              else
                nextword = get_num (&opP->disp, 0);
              if (isvar (&opP->disp))
@@ -2034,7 +2114,7 @@ m68k_ip (instring)
              break;
            case DISP:
 
-             nextword = get_num (&opP->disp, 80);
+             nextword = get_num (&opP->disp, 90);
 
              if (opP->reg == PC
                  && ! isvar (&opP->disp)
@@ -2130,9 +2210,9 @@ m68k_ip (instring)
            case PRE:
            case BASE:
              nextword = 0;
-             baseo = get_num (&opP->disp, 80);
+             baseo = get_num (&opP->disp, 90);
              if (opP->mode == POST || opP->mode == PRE)
-               outro = get_num (&opP->odisp, 80);
+               outro = get_num (&opP->odisp, 90);
              /* Figure out the `addressing mode'.
                 Also turn on the BASE_DISABLE bit, if needed.  */
              if (opP->reg == PC || opP->reg == ZPC)
@@ -2175,7 +2255,8 @@ m68k_ip (instring)
                  if ((opP->index.scale != 1
                       && cpu_of_arch (current_architecture) < m68020)
                      || (opP->index.scale == 8
-                         && arch_coldfire_p (current_architecture)))
+                         && (arch_coldfire_p (current_architecture)
+                              && !arch_coldfire_v4e_p(current_architecture))))
                    {
                      opP->error =
                        _("scale factor invalid on this architecture; needs cpu32 or 68020 or higher");
@@ -2380,7 +2461,7 @@ m68k_ip (instring)
              break;
 
            case ABSL:
-             nextword = get_num (&opP->disp, 80);
+             nextword = get_num (&opP->disp, 90);
              switch (opP->disp.size)
                {
                default:
@@ -2456,7 +2537,7 @@ m68k_ip (instring)
              break;
            case '3':
            default:
-             tmpreg = 80;
+             tmpreg = 90;
              break;
            }
          tmpreg = get_num (&opP->disp, tmpreg);
@@ -2523,7 +2604,7 @@ m68k_ip (instring)
          break;
 
        case 'B':
-         tmpreg = get_num (&opP->disp, 80);
+         tmpreg = get_num (&opP->disp, 90);
          switch (s[1])
            {
            case 'B':
@@ -2643,7 +2724,7 @@ m68k_ip (instring)
 
        case 'd':               /* JF this is a kludge.  */
          install_operand ('s', opP->reg - ADDR);
-         tmpreg = get_num (&opP->disp, 80);
+         tmpreg = get_num (&opP->disp, 90);
          if (!issword (tmpreg))
            {
              as_warn (_("Expression out of range, using 0"));
@@ -2687,15 +2768,19 @@ m68k_ip (instring)
            case TC:
              tmpreg = 0x003;
              break;
+           case ACR0:
            case ITT0:
              tmpreg = 0x004;
              break;
+           case ACR1:
            case ITT1:
              tmpreg = 0x005;
              break;
+           case ACR2:
            case DTT0:
              tmpreg = 0x006;
              break;
+           case ACR3:
            case DTT1:
              tmpreg = 0x007;
              break;
@@ -2733,15 +2818,67 @@ m68k_ip (instring)
             case ROMBAR:
              tmpreg = 0xC00;
              break;
+            case ROMBAR1:
+              tmpreg = 0xC01;
+              break;
+           case FLASHBAR:
            case RAMBAR0:
              tmpreg = 0xC04;
              break;
+           case RAMBAR:
            case RAMBAR1:
              tmpreg = 0xC05;
              break;
+            case MPCR:
+              tmpreg = 0xC0C;
+              break;
+            case EDRAMBAR:
+              tmpreg = 0xC0D;
+              break;
+            case MBAR0:
+            case SECMBAR:
+              tmpreg = 0xC0E;
+              break;
+            case MBAR1:
            case MBAR:
              tmpreg = 0xC0F;
              break;
+            case PCR1U0:
+              tmpreg = 0xD02;
+              break;
+            case PCR1L0:
+              tmpreg = 0xD03;
+              break;
+            case PCR2U0:
+              tmpreg = 0xD04;
+              break;
+            case PCR2L0:
+              tmpreg = 0xD05;
+              break;
+            case PCR3U0:
+              tmpreg = 0xD06;
+              break;
+            case PCR3L0:
+              tmpreg = 0xD07;
+              break;
+            case PCR1L1:
+              tmpreg = 0xD0A;
+              break;
+            case PCR1U1:
+              tmpreg = 0xD0B;
+              break;
+            case PCR2L1:
+              tmpreg = 0xD0C;
+              break;
+            case PCR2U1:
+              tmpreg = 0xD0D;
+              break;
+            case PCR3L1:
+              tmpreg = 0xD0E;
+              break;
+            case PCR3U1:
+              tmpreg = 0xD0F;
+              break;
            default:
              abort ();
            }
@@ -2990,7 +3127,7 @@ m68k_ip (instring)
        case '_':       /* used only for move16 absolute 32-bit address.  */
          if (isvar (&opP->disp))
            add_fix ('l', &opP->disp, 0, 0);
-         tmpreg = get_num (&opP->disp, 80);
+         tmpreg = get_num (&opP->disp, 90);
          addword (tmpreg >> 16);
          addword (tmpreg & 0xFFFF);
          break;
@@ -2999,6 +3136,12 @@ m68k_ip (instring)
          opP->reg -= (DATA0L);
          opP->reg &= 0x0F;     /* remove upper/lower bit.  */
          break;
+       case 'x':
+         tmpreg = get_num (&opP->disp, 80);
+         if (tmpreg == -1)
+           tmpreg = 0;
+         install_operand (s[1], tmpreg);
+         break;
        default:
          abort ();
        }
@@ -3394,10 +3537,10 @@ static const struct init_entry init_table[] =
   /* mcf5200 versions of same.  The ColdFire programmer's reference
      manual indicated that the order is 2,3,0,1, but Ken Rose
      <rose@netcom.com> says that 0,1,2,3 is the correct order.  */
-  { "acr0", ITT0 },            /* Access Control Unit 0.  */
-  { "acr1", ITT1 },            /* Access Control Unit 1.  */
-  { "acr2", DTT0 },            /* Access Control Unit 2.  */
-  { "acr3", DTT1 },            /* Access Control Unit 3.  */
+  { "acr0", ACR0 },            /* Access Control Unit 0.  */
+  { "acr1", ACR1 },            /* Access Control Unit 1.  */
+  { "acr2", ACR2 },            /* Access Control Unit 2.  */
+  { "acr3", ACR3 },            /* Access Control Unit 3.  */
 
   { "tc", TC },                        /* MMU Translation Control Register.  */
   { "tcr", TC },
@@ -3413,6 +3556,31 @@ static const struct init_entry init_table[] =
   { "rambar0", RAMBAR0 },      /* ROM Base Address Register.  */
   { "rambar1", RAMBAR1 },      /* ROM Base Address Register.  */
   { "mbar", MBAR },            /* Module Base Address Register.  */
+
+  { "mbar0",    MBAR0 },       /* mcfv4e registers.  */
+  { "mbar1",    MBAR1 },       /* mcfv4e registers.  */
+  { "rombar0",  ROMBAR },      /* mcfv4e registers.  */
+  { "rombar1",  ROMBAR1 },     /* mcfv4e registers.  */
+  { "mpcr",     MPCR },                /* mcfv4e registers.  */
+  { "edrambar", EDRAMBAR },    /* mcfv4e registers.  */
+  { "secmbar",  SECMBAR },     /* mcfv4e registers.  */
+  { "asid",     TC },          /* mcfv4e registers.  */
+  { "mmubar",   BUSCR },       /* mcfv4e registers.  */
+  { "pcr1u0",   PCR1U0 },      /* mcfv4e registers.  */
+  { "pcr1l0",   PCR1L0 },      /* mcfv4e registers.  */
+  { "pcr2u0",   PCR2U0 },      /* mcfv4e registers.  */
+  { "pcr2l0",   PCR2L0 },      /* mcfv4e registers.  */
+  { "pcr3u0",   PCR3U0 },      /* mcfv4e registers.  */
+  { "pcr3l0",   PCR3L0 },      /* mcfv4e registers.  */
+  { "pcr1u1",   PCR1U1 },      /* mcfv4e registers.  */
+  { "pcr1l1",   PCR1L1 },      /* mcfv4e registers.  */
+  { "pcr2u1",   PCR2U1 },      /* mcfv4e registers.  */
+  { "pcr2l1",   PCR2L1 },      /* mcfv4e registers.  */
+  { "pcr3u1",   PCR3U1 },      /* mcfv4e registers.  */
+  { "pcr3l1",   PCR3L1 },      /* mcfv4e registers.  */
+
+  { "flashbar", FLASHBAR },    /* mcf528x registers.  */
+  { "rambar",   RAMBAR },      /* mcf528x registers.  */
   /* End of control registers.  */
 
   { "ac", AC },
@@ -3970,6 +4138,12 @@ select_control_regs ()
     case mcf5407:
       control_regs = mcf_control_regs;
       break;
+    case mcf528x:
+      control_regs = mcf528x_control_regs;
+      break;
+    case mcfv4e:
+      control_regs = mcfv4e_control_regs;
+      break;
     default:
       abort ();
     }
@@ -4808,17 +4982,16 @@ md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
    aren't OK are an error (what a shock, no?)
 
    0:  Everything is OK
-   10:  Absolute 1:8   only
-   20:  Absolute 0:7   only
-   30:  absolute 0:15  only
-   40:  Absolute 0:31  only
-   50:  absolute 0:127 only
+   10:  Absolute 1:8      only
+   20:  Absolute 0:7      only
+   30:  absolute 0:15     only
+   40:  Absolute 0:31     only
+   50:  absolute 0:127    only
    55:  absolute -64:63    only
-   60:  absolute -128:127      only
-   70:  absolute 0:4095        only
-   80:  No bignums
-
-   */
+   60:  absolute -128:127  only
+   70:  absolute 0:4095           only
+   80:  absolute -1, 1:7   only
+   90:  No bignums.          */
 
 static int
 get_num (exp, ok)
@@ -4881,6 +5054,15 @@ get_num (exp, ok)
              offs (exp) = 0;
            }
          break;
+       case 80:
+         if (offs (exp) < -1
+              || offs (exp) > 7
+              || offs (exp) == 0)
+           {
+             as_warn (_("expression out of range: defaulting to 1"));
+             offs (exp) = 1;
+           }
+         break;
        default:
          break;
        }
@@ -4888,7 +5070,7 @@ get_num (exp, ok)
   else if (exp->exp.X_op == O_big)
     {
       if (offs (exp) <= 0      /* flonum.  */
-         && (ok == 80          /* no bignums.  */
+         && (ok == 90          /* no bignums */
              || (ok > 10       /* Small-int ranges including 0 ok.  */
                  /* If we have a flonum zero, a zero integer should
                     do as well (e.g., in moveq).  */
@@ -4916,7 +5098,7 @@ get_num (exp, ok)
     }
   else
     {
-      if (ok >= 10 && ok <= 70)
+      if (ok >= 10 && ok <= 80)
        {
          op (exp) = O_constant;
          adds (exp) = 0;
@@ -6951,7 +7133,8 @@ md_show_usage (stream)
 -l                     use 1 word for refs to undefined symbols [default 2]\n\
 -m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060 |\n\
 -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -m68360 | -mcpu32 |\n\
--m5200  | -m5202  | -m5204  | -m5206  | -m5206e | -m5307  | -m5407\n\
+-m5200  | -m5202  | -m5204  | -m5206  | -m5206e | -m528x  | -m5307  |\n\
+-m5407  | -mcfv4  | -mcfv4e\n\
                        specify variant of 680X0 architecture [default %s]\n\
 -m68881 | -m68882 | -mno-68881 | -mno-68882\n\
                        target has/lacks floating-point coprocessor\n\
index 15c9968dfd0bbc47c75c5144716b6add8a475843..cafad4d59e6f4ccce0b1c68206cd73441ca5d417 100644 (file)
@@ -1,4 +1,4 @@
-@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
+@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2003
 @c Free Software Foundation, Inc.
 @c This is part of the GAS manual.
 @c For copying conditions, see the file as.texinfo.
@@ -165,6 +165,15 @@ Assemble for the 68060.
 Assemble for the CPU32 family of chips.
 
 @item -m5200
+@item -m5202
+@item -m5204
+@item -m5206
+@item -m5206e
+@item -m528x
+@item -m5307
+@item -m5407
+@item -mcfv4
+@item -mcfv4e
 Assemble for the ColdFire family of chips.
 
 @item -m68881
index b557db535041cec01980d5f2a3d9e3fff2d3c97d..42cf9a5e4f54b2367648966af65c3cd0093400d8 100644 (file)
@@ -1,3 +1,8 @@
+2003-10-21  Peter Barada  <pbarada@mail.wm.sps.mot.com>
+            Bernardo Innocenti  <bernie@develer.com>
+
+       * m68k.h: Add MCFv4/MCF5528x support.
+
 2003-10-19  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * mmix.h (JMP_INSN_BYTE): Define.
index 3371d38a7cd53d1b548e75edfee588ce39835d3a..3f189841d8f85cf586cb8639c74f353b5a494fa1 100644 (file)
@@ -1,55 +1,61 @@
 /* Opcode table header for m680[01234]0/m6888[12]/m68851.
-   Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001
-   Free Software Foundation, Inc.
+   Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001,
+   2003 Free Software Foundation, Inc.
 
-This file is part of GDB, GAS, and the GNU binutils.
+   This file is part of GDB, GAS, and the GNU binutils.
 
-GDB, GAS, and the GNU binutils are free software; you can redistribute
-them and/or modify them under the terms of the GNU General Public
-License as published by the Free Software Foundation; either version
-1, or (at your option) any later version.
+   GDB, GAS, and the GNU binutils are free software; you can redistribute
+   them and/or modify them under the terms of the GNU General Public
+   License as published by the Free Software Foundation; either version
+   1, or (at your option) any later version.
 
-GDB, GAS, and the GNU binutils are distributed in the hope that they
-will be useful, but WITHOUT ANY WARRANTY; without even the implied
-warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
-the GNU General Public License for more details.
+   GDB, GAS, and the GNU binutils are distributed in the hope that they
+   will be useful, but WITHOUT ANY WARRANTY; without even the implied
+   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+   the GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this file; see the file COPYING.  If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this file; see the file COPYING.  If not, write to the Free
+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
 
 /* These are used as bit flags for the arch field in the m68k_opcode
    structure.  */
 #define        _m68k_undef  0
-#define        m68000  0x001
-#define        m68008  m68000 /* synonym for -m68000.  otherwise unused. */
-#define        m68010  0x002
-#define        m68020  0x004
-#define        m68030  0x008
-#define m68ec030 m68030 /* similar enough to -m68030 to ignore differences;
+#define        m68000   0x001
+#define        m68008   m68000 /* Synonym for -m68000.  otherwise unused.  */
+#define        m68010   0x002
+#define        m68020   0x004
+#define        m68030   0x008
+#define m68ec030 m68030 /* Similar enough to -m68030 to ignore differences;
                           gas will deal with the few differences.  */
-#define        m68040  0x010
-/* there is no 68050 */
-#define m68060  0x020
-#define        m68881  0x040
-#define        m68882  m68881 /* synonym for -m68881.  otherwise unused. */
-#define        m68851  0x080
-#define cpu32  0x100   /* e.g., 68332 */
-#define mcf5200 0x200
+#define        m68040   0x010
+/* There is no 68050.  */
+#define m68060   0x020
+#define        m68881   0x040
+#define        m68882   m68881 /* Synonym for -m68881.  otherwise unused.  */
+#define        m68851   0x080
+#define cpu32   0x100  /* e.g., 68332 */
+#define mcf5200  0x200
 #define mcf5206e 0x400
-#define mcf5307 0x800
-#define mcf5407 0x1000
-
- /* handy aliases */
-#define        m68040up  (m68040 | m68060)
-#define        m68030up  (m68030 | m68040up)
-#define        m68020up  (m68020 | m68030up)
-#define        m68010up  (m68010 | cpu32 | m68020up)
-#define        m68000up  (m68000 | m68010up)
-#define mcf       (mcf5200 | mcf5206e | mcf5307 | mcf5407)
-#define mcf5307up (mcf5307 | mcf5407)
-
+#define mcf5307  0x800
+#define mcf5407  0x1000
+#define mcfv4e   0x2000
+#define mcf528x  0x4000
+
+ /* Handy aliases.  */
+#define        m68040up   (m68040 | m68060)
+#define        m68030up   (m68030 | m68040up)
+#define        m68020up   (m68020 | m68030up)
+#define        m68010up   (m68010 | cpu32 | m68020up)
+#define        m68000up   (m68000 | m68010up)
+#define mcf        (mcf5200 | mcf5206e | mcf528x | mcf5307 | mcf5407 | mcfv4e)
+#define mcf5206eup (mcf5206e | mcf528x | mcf5307 | mcf5407 | mcfv4e)
+#define mcf5307up  (mcf5307 | mcf5407 | mcfv4e)
+#define mcfv4up    (mcf5407 | mcfv4e)
+#define mcfv4eup   (mcfv4e)
+
+#define cfloat  (mcfv4e)
 #define        mfloat  (m68881 | m68882 | m68040 | m68060)
 #define        mmmu    (m68851 | m68030 | m68040 | m68060)
 
@@ -93,7 +99,7 @@ struct m68k_opcode_alias
    operand; the second, the place it is stored.  */
 
 /* Kinds of operands:
-   Characters used: AaBCcDdEFfGHIJkLlMmnOopQqRrSsTtU VvWXYZ0123|*~%;@!&$?/<>#^+-
+   Characters used: AaBbCcDdEFfGHIJkLlMmnOopQqRrSsTtU VvWwXxYyZz0123|*~%;@!&$?/<>#^+-
 
    D  data register only.  Stored as 3 bits.
    A  address register only.  Stored as 3 bits.
@@ -141,7 +147,7 @@ struct m68k_opcode_alias
        Possible values:
        0x000   SFC     Source Function Code reg        [60, 40, 30, 20, 10]
        0x001   DFC     Data Function Code reg          [60, 40, 30, 20, 10]
-       0x002   CACR    Cache Control Register          [60, 40, 30, 20]
+       0x002   CACR    Cache Control Register          [60, 40, 30, 20, mcf]
        0x003   TC      MMU Translation Control         [60, 40]
        0x004   ITT0    Instruction Transparent
                                Translation reg 0       [60, 40]
@@ -153,7 +159,7 @@ struct m68k_opcode_alias
                                Translation reg 1       [60, 40]
        0x008   BUSCR   Bus Control Register            [60]
        0x800   USP     User Stack Pointer              [60, 40, 30, 20, 10]
-       0x801   VBR     Vector Base reg                 [60, 40, 30, 20, 10]
+        0x801   VBR     Vector Base reg                 [60, 40, 30, 20, 10, mcf]
        0x802   CAAR    Cache Address Register          [        30, 20]
        0x803   MSP     Master Stack Pointer            [    40, 30, 20]
        0x804   ISP     Interrupt Stack Pointer         [    40, 30, 20]
@@ -165,6 +171,8 @@ struct m68k_opcode_alias
        0xC04   RAMBAR0 RAM Base Address Register 0     [520X]
        0xC05   RAMBAR1 RAM Base Address Register 0     [520X]
        0xC0F   MBAR0   RAM Base Address Register 0     [520X]
+        0xC04   FLASHBAR FLASH Base Address Register    [mcf528x]
+        0xC05   RAMBAR  Static RAM Base Address Register [mcf528x]
 
     L  Register list of the type d0-d7/a0-a7 etc.
        (New!  Improved!  Can also hold fp0-fp7, as well!)
@@ -218,11 +226,14 @@ struct m68k_opcode_alias
    coldfire bset/bclr/btst/mulsl/mulul operands:
    q                                           (modes 0,2-5)
    v                                           (modes 0,2-5,7.0,7.1)
-*/
-
-/* For the 68851: */
-/*
-   I didn't use much imagination in choosing the 
+   b                                            (modes 0,2-5,7.2)
+   w                                            (modes 2-5,7.2)
+   y                                           (modes 2,5)
+   z                                           (modes 2,5,7.2)
+   x  mov3q immediate operand.  */
+
+/* For the 68851:  */
+/* I didn't use much imagination in choosing the
    following codes, so many of them aren't very
    mnemonic. -rab
 
index 996aee604fc86563cda5d627b722527d03acd18f..b7defcdf08a3cdca080c9d423dbbcf15c4b512db 100644 (file)
@@ -1,3 +1,9 @@
+2003-10-21  Peter Barada  <pbarada@mail.wm.sps.mot.com>
+            Bernardo Innocenti  <bernie@develer.com>
+
+       * m68k-dis.c: Add MCFv4/MCF5528x support.
+       * m68k-opc.c: Likewise.
+
 2003-10-10  Dave Brolley  <brolley@redhat.com>
 
        * frv-asm.c,frv-desc.c,frv-opc.c: Regenerated.
index 12c0b9460ef5ba43a7565973c9b7033956bb3b20..bfd8c893fafbc247dc76acdc6b3f35f986adcf33 100644 (file)
@@ -1,21 +1,21 @@
 /* Print Motorola 68k instructions.
    Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-   1998, 1999, 2000, 2001, 2002
+   1998, 1999, 2000, 2001, 2002, 2003
    Free Software Foundation, Inc.
 
-This file is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "sysdep.h"
 #include "dis-asm.h"
@@ -263,6 +263,9 @@ print_insn_m68k (memaddr, info)
     case bfd_mach_mcf5200:
       arch_mask = mcf5200;
       break;
+    case bfd_mach_mcf528x:
+      arch_mask = mcf528x;
+      break;
     case bfd_mach_mcf5206e:
       arch_mask = mcf5206e;
       break;
@@ -342,7 +345,7 @@ print_insn_m68k (memaddr, info)
   /* Point at first word of argument data,
      and at descriptor for first argument.  */
   p = buffer + 2;
-  
+
   /* Figure out how long the fixed-size portion of the instruction is.
      The only place this is stored in the opcode table is
      in the arguments--look for arguments which specify fields in the 2nd
@@ -406,10 +409,10 @@ print_insn_m68k (memaddr, info)
     }
 
   FETCH_DATA (info, p);
-  
+
   d = best->args;
 
-  /* We can the operands twice.  The first time we don't print anything,
+  /* We scan the operands twice.  The first time we don't print anything,
      but look for errors. */
 
   save_p = p;
@@ -537,12 +540,16 @@ print_insn_arg (d, buffer, p0, addr, info)
 
     case 'J':
       {
+       /* FIXME: There's a problem here, different m68k processors call the
+          same address different names. This table can't get it right
+          because it doesn't know which processor it's disassembling for.  */
        static const struct { char *name; int value; } names[]
          = {{"%sfc", 0x000}, {"%dfc", 0x001}, {"%cacr", 0x002},
             {"%tc",  0x003}, {"%itt0",0x004}, {"%itt1", 0x005},
              {"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008},
             {"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802},
             {"%msp", 0x803}, {"%isp", 0x804},
+            {"%flashbar", 0xc04}, {"%rambar", 0xc05}, /* mcf528x added these.  */
 
             /* Should we be calling this psr like we do in case 'Y'?  */
             {"%mmusr",0x805},
@@ -569,6 +576,14 @@ print_insn_arg (d, buffer, p0, addr, info)
       (*info->fprintf_func) (info->stream, "#%d", val);
       break;
 
+    case 'x':
+      val = fetch_arg (buffer, place, 3, info);
+      /* 0 means -1.  */
+      if (val == 0)
+       val = -1;
+      (*info->fprintf_func) (info->stream, "#%d", val);
+      break;
+
     case 'M':
       if (place == 'h')
        {
@@ -724,7 +739,7 @@ print_insn_arg (d, buffer, p0, addr, info)
     case 'I':
       /* Get coprocessor ID... */
       val = fetch_arg (buffer, 'd', 3, info);
-      
+
       if (val != 1)                            /* Unusual coprocessor ID? */
        (*info->fprintf_func) (info->stream, "(cpid=%d) ", val);
       break;
@@ -748,7 +763,10 @@ print_insn_arg (d, buffer, p0, addr, info)
     case 'p':
     case 'q':
     case 'v':
-
+    case 'b':
+    case 'w':
+    case 'y':
+    case 'z':
       if (place == 'd')
        {
          val = fetch_arg (buffer, 'x', 6, info);
@@ -1023,7 +1041,7 @@ print_insn_arg (d, buffer, p0, addr, info)
       {
        short is_upper = 0;
        int reg = fetch_arg (buffer, place, 5, info);
-       
+
        if (reg & 0x10)
          {
            is_upper = 1;
@@ -1034,7 +1052,7 @@ print_insn_arg (d, buffer, p0, addr, info)
                               is_upper ? "u" : "l");
       }
       break;
-       
+
     default:
       return -2;
     }
@@ -1121,7 +1139,7 @@ fetch_arg (buffer, code, bits, info)
       val = (buffer[2] << 8) + buffer[3];
       val >>= 7;
       break;
-      
+
     case '8':
       FETCH_DATA (info, buffer + 3);
       val = (buffer[2] << 8) + buffer[3];
@@ -1138,13 +1156,13 @@ fetch_arg (buffer, code, bits, info)
       val = (buffer[1] >> 6);
       break;
 
-    case 'm': 
+    case 'm':
       val = (buffer[1] & 0x40 ? 0x8 : 0)
        | ((buffer[0] >> 1) & 0x7)
        | (buffer[3] & 0x80 ? 0x10 : 0);
       break;
 
-    case 'n': 
+    case 'n':
       val = (buffer[1] & 0x40 ? 0x8 : 0) | ((buffer[0] >> 1) & 0x7);
       break;
 
index 79d7db07de4ef7477f3d0bc91924e44ae4594080..a2b2a5e669450c041cae141da0f9a86649c64d53 100644 (file)
@@ -1,24 +1,24 @@
 /* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001
+   2000, 2001, 2003
    Free Software Foundation, Inc.
 
-This file is part of GDB, GAS, and the GNU binutils.
+   This file is part of GDB, GAS, and the GNU binutils.
 
-GDB, GAS, and the GNU binutils are free software; you can redistribute
-them and/or modify them under the terms of the GNU General Public
-License as published by the Free Software Foundation; either version
-1, or (at your option) any later version.
+   GDB, GAS, and the GNU binutils are free software; you can redistribute
+   them and/or modify them under the terms of the GNU General Public
+   License as published by the Free Software Foundation; either version
+   1, or (at your option) any later version.
 
-GDB, GAS, and the GNU binutils are distributed in the hope that they
-will be useful, but WITHOUT ANY WARRANTY; without even the implied
-warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
-the GNU General Public License for more details.
+   GDB, GAS, and the GNU binutils are distributed in the hope that they
+   will be useful, but WITHOUT ANY WARRANTY; without even the implied
+   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+   the GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this file; see the file COPYING.  If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this file; see the file COPYING.  If not, write to the Free
+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
 
 #include "sysdep.h"
 #include "opcode/m68k.h"
@@ -131,20 +131,20 @@ const struct m68k_opcode m68k_opcodes[] =
 {"bgtw",       one(0067000),   one(0177777), "BW", m68000up | mcf },
 {"blew",       one(0067400),   one(0177777), "BW", m68000up | mcf },
 
-{"bhil",       one(0061377),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"blsl",       one(0061777),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bccl",       one(0062377),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bcsl",       one(0062777),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bnel",       one(0063377),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"beql",       one(0063777),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bvcl",       one(0064377),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bvsl",       one(0064777),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bpll",       one(0065377),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bmil",       one(0065777),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bgel",       one(0066377),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bltl",       one(0066777),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"bgtl",       one(0067377),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
-{"blel",       one(0067777),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
+{"bhil",       one(0061377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"blsl",       one(0061777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bccl",       one(0062377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bcsl",       one(0062777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bnel",       one(0063377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"beql",       one(0063777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bvcl",       one(0064377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bvsl",       one(0064777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bpll",       one(0065377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bmil",       one(0065777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bgel",       one(0066377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bltl",       one(0066777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bgtl",       one(0067377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"blel",       one(0067777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
 
 {"bhis",       one(0061000),   one(0177400), "BB", m68000up | mcf },
 {"blss",       one(0061400),   one(0177400), "BB", m68000up | mcf },
@@ -180,8 +180,7 @@ const struct m68k_opcode m68k_opcodes[] =
 {"bchg",       one(0004100),   one(0177700), "#b$s", m68000up },
 {"bchg",       one(0004100),   one(0177700), "#bqs", mcf },
 
-{"bclr",       one(0000600),   one(0170700), "Dd$s", m68000up },
-{"bclr",       one(0000600),   one(0170700), "Ddvs", mcf },
+{"bclr",       one(0000600),   one(0170700), "Dd$s", m68000up | mcf },
 {"bclr",       one(0004200),   one(0177700), "#b$s", m68000up },
 {"bclr",       one(0004200),   one(0177700), "#bqs", mcf },
 
@@ -194,28 +193,32 @@ const struct m68k_opcode m68k_opcodes[] =
 {"bfset",      two(0167300, 0), two(0177700, 0170000), "?sO2O3",   m68020up },
 {"bftst",      two(0164300, 0), two(0177700, 0170000), "/sO2O3",   m68020up },
 
-{"bgnd",       one(0045372),           one(0177777), "", cpu32 },
+{"bgnd",       one(0045372),   one(0177777), "", cpu32 },
 
-{"bkpt",       one(0044110),           one(0177770), "ts", m68010up },
+{"bitrev",     one(0000300),   one(0177770), "Ds", mcf528x},
+
+{"bkpt",       one(0044110),   one(0177770), "ts", m68010up },
 
 {"braw",       one(0060000),   one(0177777), "BW", m68000up | mcf },
-{"bral",       one(0060377),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
+{"bral",       one(0060377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
 {"bras",       one(0060000),   one(0177400), "BB", m68000up | mcf },
 
-{"bset",       one(0000700),   one(0170700), "Dd$s", m68000up },
+{"bset",       one(0000700),   one(0170700), "Dd$s", m68000up | mcf },
 {"bset",       one(0000700),   one(0170700), "Ddvs", mcf },
 {"bset",       one(0004300),   one(0177700), "#b$s", m68000up },
 {"bset",       one(0004300),   one(0177700), "#bqs", mcf },
 
 {"bsrw",       one(0060400),   one(0177777), "BW", m68000up | mcf },
-{"bsrl",       one(0060777),   one(0177777), "BL", m68020up | cpu32 | mcf5407},
+{"bsrl",       one(0060777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
 {"bsrs",       one(0060400),   one(0177400), "BB", m68000up | mcf },
 
 {"btst",       one(0000400),   one(0170700), "Dd;b", m68000up | mcf },
 {"btst",       one(0004000),   one(0177700), "#b@s", m68000up },
 {"btst",       one(0004000),   one(0177700), "#bqs", mcf },
 
-{"callm",      one(0003300),           one(0177700), "#b!s", m68020 },
+{"byterev",    one(0001300),   one(0177770), "Ds", mcf528x},
+
+{"callm",      one(0003300),   one(0177700), "#b!s", m68020 },
 
 {"cas2w",     two(0006374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
 {"cas2w",     two(0006374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
@@ -261,9 +264,9 @@ const struct m68k_opcode m68k_opcodes[] =
 {"cmpal",      one(0130700),   one(0170700), "*lAd", m68000up | mcf },
 
 {"cmpib",      one(0006000),   one(0177700), "#b@s", m68000up },
-{"cmpib",      one(0006000),   one(0177700), "#bDs", mcf5407 },
+{"cmpib",      one(0006000),   one(0177700), "#bDs", mcfv4up },
 {"cmpiw",      one(0006100),   one(0177700), "#w@s", m68000up },
-{"cmpiw",      one(0006100),   one(0177700), "#wDs", mcf5407 },
+{"cmpiw",      one(0006100),   one(0177700), "#wDs", mcfv4up },
 {"cmpil",      one(0006200),   one(0177700), "#l@s", m68000up },
 {"cmpil",      one(0006200),   one(0177700), "#lDs", mcf },
 
@@ -273,15 +276,15 @@ const struct m68k_opcode m68k_opcodes[] =
 
 /* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions.  */
 {"cmpb",       one(0006000),   one(0177700), "#b@s", m68000up },
-{"cmpb",       one(0006000),   one(0177700), "#bDs", mcf5407 },
+{"cmpb",       one(0006000),   one(0177700), "#bDs", mcfv4up },
 {"cmpb",       one(0130410),   one(0170770), "+s+d", m68000up },
 {"cmpb",       one(0130000),   one(0170700), ";bDd", m68000up },
-{"cmpb",       one(0130000),   one(0170700), "*bDd", mcf5407 },
+{"cmpb",       one(0130000),   one(0170700), "*bDd", mcfv4up },
 {"cmpw",       one(0130300),   one(0170700), "*wAd", m68000up },
 {"cmpw",       one(0006100),   one(0177700), "#w@s", m68000up },
-{"cmpw",       one(0006100),   one(0177700), "#wDs", mcf5407 },
+{"cmpw",       one(0006100),   one(0177700), "#wDs", mcfv4up },
 {"cmpw",       one(0130510),   one(0170770), "+s+d", m68000up },
-{"cmpw",       one(0130100),   one(0170700), "*wDd", m68000up | mcf5407 },
+{"cmpw",       one(0130100),   one(0170700), "*wDd", m68000up | mcfv4up },
 {"cmpl",       one(0130700),   one(0170700), "*lAd", m68000up | mcf },
 {"cmpl",       one(0006200),   one(0177700), "#l@s", m68000up },
 {"cmpl",       one(0006200),   one(0177700), "#lDs", mcf },
@@ -305,20 +308,20 @@ const struct m68k_opcode m68k_opcodes[] =
 {"dbvc",       one(0054310),   one(0177770), "DsBw", m68000up },
 {"dbvs",       one(0054710),   one(0177770), "DsBw", m68000up },
 
-{"divsw",      one(0100700),   one(0170700), ";wDd", m68000up | mcf5307up | mcf5206e },
+{"divsw",      one(0100700),   one(0170700), ";wDd", m68000up | mcf5206eup },
 
 {"divsl", two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
 {"divsl", two(0046100,0004000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
-{"divsl", two(0046100,0004000),two(0177700,0107770),"qsDD",   mcf5307up | mcf5206e },
+{"divsl", two(0046100,0004000),two(0177700,0107770),"qsDD",   mcf5206eup },
 
 {"divsll", two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
 {"divsll", two(0046100,0004000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
 
-{"divuw",      one(0100300),           one(0170700), ";wDd", m68000up | mcf5307up | mcf5206e },
+{"divuw",      one(0100300),           one(0170700), ";wDd", m68000up | mcf5206eup },
 
 {"divul", two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
 {"divul", two(0046100,0000000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
-{"divul", two(0046100,0000000),two(0177700,0107770),"qsDD",   mcf5307up | mcf5206e },
+{"divul", two(0046100,0000000),two(0177700,0107770),"qsDD",   mcf5206eup },
 
 {"divull", two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
 {"divull", two(0046100,0000000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
@@ -357,33 +360,56 @@ const struct m68k_opcode m68k_opcodes[] =
 {"extl",       one(0044300),   one(0177770), "Ds", m68000up|mcf },
 {"extbl",      one(0044700),   one(0177770), "Ds", m68020up|cpu32|mcf },
 
+{"ff1",   one(0002300), one(0177770), "Ds", mcf528x},
+
 /* float stuff starts here */
 
 {"fabsb",      two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"fabsb",      two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fabsd",      two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fabsd",      two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt", cfloat },
 {"fabsd",      two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fabsd",      two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fabsl",      two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fabsl",      two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fabsp",      two(0xF000, 0x4C18), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
+{"fabss",      two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", cfloat },
 {"fabss",      two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
 {"fabsw",      two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fabsw",      two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fabsx",      two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fabsx",      two(0xF000, 0x4818), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"fabsx",      two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
 {"fsabsb",     two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fsabsb",     two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsabsd",     two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fsabsd",     two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt", cfloat },
 {"fsabsd",     two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fsabsd",     two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fsabsl",     two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fsabsl",     two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsabsp",     two(0xF000, 0x4C58), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
+{"fsabss",     two(0xF000, 0x4258), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsabss",     two(0xF000, 0x4458), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
 {"fsabsw",     two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fsabsw",     two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsabsx",     two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fsabsx",     two(0xF000, 0x4858), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 {"fsabsx",     two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
 
+{"fdabsb",     two(0xF000, 0x585C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdabsb",     two(0xF000, 0x585c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up},
+{"fdabsd",     two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fdabsd",     two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiFt", cfloat },
+{"fdabsd",     two(0xF000, 0x545C), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fdabsd",     two(0xF000, 0x545c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up},
+{"fdabsl",     two(0xF000, 0x405C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdabsl",     two(0xF000, 0x405c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up},
 {"fdabsp",     two(0xF000, 0x4C5c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up},
+{"fdabss",     two(0xF000, 0x425C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdabss",     two(0xF000, 0x445c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up},
+{"fdabsw",     two(0xF000, 0x505C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdabsw",     two(0xF000, 0x505c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up},
 {"fdabsx",     two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up},
 {"fdabsx",     two(0xF000, 0x485c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up},
@@ -400,28 +426,47 @@ const struct m68k_opcode m68k_opcodes[] =
 {"facosx",     two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
 {"faddb",      two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"faddb",      two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"faddd",      two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"faddd",      two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"faddd",      two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"faddd",      two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"faddl",      two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"faddl",      two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"faddp",      two(0xF000, 0x4C22), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fadds",      two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fadds",      two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"faddw",      two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"faddw",      two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"faddx",      two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"faddx",      two(0xF000, 0x4822), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 
 {"fsaddb",     two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fsaddb",     two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsaddd",     two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fsaddd",     two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fsaddd",     two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fsaddl",     two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fsaddl",     two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsaddp",     two(0xF000, 0x4C62), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fsadds",     two(0xF000, 0x4462), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fsadds",     two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsaddw",     two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fsaddw",     two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsaddx",     two(0xF000, 0x0062), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fsaddx",     two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 
+{"fdaddb",     two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdaddb",     two(0xF000, 0x5866), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fdaddd",     two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fdaddd",     two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdaddd",     two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fdaddl",     two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fdaddl",     two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
 {"fdaddp",     two(0xF000, 0x4C66), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fdadds",     two(0xF000, 0x4466), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fdadds",     two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdaddw",     two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdaddw",     two(0xF000, 0x5066), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
 {"fdaddx",     two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fdaddx",     two(0xF000, 0x4866), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
@@ -456,111 +501,117 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fatanhx",    two(0xF000, 0x480D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"fatanhx",    two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
-{"fbeq",       one(0xF081),            one(0xF1FF), "IdBW", mfloat },
-{"fbf",                one(0xF080),            one(0xF1FF), "IdBW", mfloat },
-{"fbge",       one(0xF093),            one(0xF1FF), "IdBW", mfloat },
-{"fbgl",       one(0xF096),            one(0xF1FF), "IdBW", mfloat },
-{"fbgle",      one(0xF097),            one(0xF1FF), "IdBW", mfloat },
-{"fbgt",       one(0xF092),            one(0xF1FF), "IdBW", mfloat },
-{"fble",       one(0xF095),            one(0xF1FF), "IdBW", mfloat },
-{"fblt",       one(0xF094),            one(0xF1FF), "IdBW", mfloat },
-{"fbne",       one(0xF08E),            one(0xF1FF), "IdBW", mfloat },
-{"fbnge",      one(0xF09C),            one(0xF1FF), "IdBW", mfloat },
-{"fbngl",      one(0xF099),            one(0xF1FF), "IdBW", mfloat },
-{"fbngle",     one(0xF098),            one(0xF1FF), "IdBW", mfloat },
-{"fbngt",      one(0xF09D),            one(0xF1FF), "IdBW", mfloat },
-{"fbnle",      one(0xF09A),            one(0xF1FF), "IdBW", mfloat },
-{"fbnlt",      one(0xF09B),            one(0xF1FF), "IdBW", mfloat },
-{"fboge",      one(0xF083),            one(0xF1FF), "IdBW", mfloat },
-{"fbogl",      one(0xF086),            one(0xF1FF), "IdBW", mfloat },
-{"fbogt",      one(0xF082),            one(0xF1FF), "IdBW", mfloat },
-{"fbole",      one(0xF085),            one(0xF1FF), "IdBW", mfloat },
-{"fbolt",      one(0xF084),            one(0xF1FF), "IdBW", mfloat },
-{"fbor",       one(0xF087),            one(0xF1FF), "IdBW", mfloat },
-{"fbseq",      one(0xF091),            one(0xF1FF), "IdBW", mfloat },
-{"fbsf",       one(0xF090),            one(0xF1FF), "IdBW", mfloat },
-{"fbsne",      one(0xF09E),            one(0xF1FF), "IdBW", mfloat },
-{"fbst",       one(0xF09F),            one(0xF1FF), "IdBW", mfloat },
-{"fbt",                one(0xF08F),            one(0xF1FF), "IdBW", mfloat },
-{"fbueq",      one(0xF089),            one(0xF1FF), "IdBW", mfloat },
-{"fbuge",      one(0xF08B),            one(0xF1FF), "IdBW", mfloat },
-{"fbugt",      one(0xF08A),            one(0xF1FF), "IdBW", mfloat },
-{"fbule",      one(0xF08D),            one(0xF1FF), "IdBW", mfloat },
-{"fbult",      one(0xF08C),            one(0xF1FF), "IdBW", mfloat },
-{"fbun",       one(0xF088),            one(0xF1FF), "IdBW", mfloat },
-
-{"fbeql",      one(0xF0C1),            one(0xF1FF), "IdBC", mfloat },
-{"fbfl",       one(0xF0C0),            one(0xF1FF), "IdBC", mfloat },
-{"fbgel",      one(0xF0D3),            one(0xF1FF), "IdBC", mfloat },
-{"fbgll",      one(0xF0D6),            one(0xF1FF), "IdBC", mfloat },
-{"fbglel",     one(0xF0D7),            one(0xF1FF), "IdBC", mfloat },
-{"fbgtl",      one(0xF0D2),            one(0xF1FF), "IdBC", mfloat },
-{"fblel",      one(0xF0D5),            one(0xF1FF), "IdBC", mfloat },
-{"fbltl",      one(0xF0D4),            one(0xF1FF), "IdBC", mfloat },
-{"fbnel",      one(0xF0CE),            one(0xF1FF), "IdBC", mfloat },
-{"fbngel",     one(0xF0DC),            one(0xF1FF), "IdBC", mfloat },
-{"fbngll",     one(0xF0D9),            one(0xF1FF), "IdBC", mfloat },
-{"fbnglel",    one(0xF0D8),            one(0xF1FF), "IdBC", mfloat },
-{"fbngtl",     one(0xF0DD),            one(0xF1FF), "IdBC", mfloat },
-{"fbnlel",     one(0xF0DA),            one(0xF1FF), "IdBC", mfloat },
-{"fbnltl",     one(0xF0DB),            one(0xF1FF), "IdBC", mfloat },
-{"fbogel",     one(0xF0C3),            one(0xF1FF), "IdBC", mfloat },
-{"fbogll",     one(0xF0C6),            one(0xF1FF), "IdBC", mfloat },
-{"fbogtl",     one(0xF0C2),            one(0xF1FF), "IdBC", mfloat },
-{"fbolel",     one(0xF0C5),            one(0xF1FF), "IdBC", mfloat },
-{"fboltl",     one(0xF0C4),            one(0xF1FF), "IdBC", mfloat },
-{"fborl",      one(0xF0C7),            one(0xF1FF), "IdBC", mfloat },
-{"fbseql",     one(0xF0D1),            one(0xF1FF), "IdBC", mfloat },
-{"fbsfl",      one(0xF0D0),            one(0xF1FF), "IdBC", mfloat },
-{"fbsnel",     one(0xF0DE),            one(0xF1FF), "IdBC", mfloat },
-{"fbstl",      one(0xF0DF),            one(0xF1FF), "IdBC", mfloat },
-{"fbtl",       one(0xF0CF),            one(0xF1FF), "IdBC", mfloat },
-{"fbueql",     one(0xF0C9),            one(0xF1FF), "IdBC", mfloat },
-{"fbugel",     one(0xF0CB),            one(0xF1FF), "IdBC", mfloat },
-{"fbugtl",     one(0xF0CA),            one(0xF1FF), "IdBC", mfloat },
-{"fbulel",     one(0xF0CD),            one(0xF1FF), "IdBC", mfloat },
-{"fbultl",     one(0xF0CC),            one(0xF1FF), "IdBC", mfloat },
-{"fbunl",      one(0xF0C8),            one(0xF1FF), "IdBC", mfloat },
-
-{"fjeq",       one(0xF081),            one(0xF1BF), "IdBc", mfloat },
-{"fjf",                one(0xF080),            one(0xF1BF), "IdBc", mfloat },
-{"fjge",       one(0xF093),            one(0xF1BF), "IdBc", mfloat },
-{"fjgl",       one(0xF096),            one(0xF1BF), "IdBc", mfloat },
-{"fjgle",      one(0xF097),            one(0xF1BF), "IdBc", mfloat },
-{"fjgt",       one(0xF092),            one(0xF1BF), "IdBc", mfloat },
-{"fjle",       one(0xF095),            one(0xF1BF), "IdBc", mfloat },
-{"fjlt",       one(0xF094),            one(0xF1BF), "IdBc", mfloat },
-{"fjne",       one(0xF08E),            one(0xF1BF), "IdBc", mfloat },
-{"fjnge",      one(0xF09C),            one(0xF1BF), "IdBc", mfloat },
-{"fjngl",      one(0xF099),            one(0xF1BF), "IdBc", mfloat },
-{"fjngle",     one(0xF098),            one(0xF1BF), "IdBc", mfloat },
-{"fjngt",      one(0xF09D),            one(0xF1BF), "IdBc", mfloat },
-{"fjnle",      one(0xF09A),            one(0xF1BF), "IdBc", mfloat },
-{"fjnlt",      one(0xF09B),            one(0xF1BF), "IdBc", mfloat },
-{"fjoge",      one(0xF083),            one(0xF1BF), "IdBc", mfloat },
-{"fjogl",      one(0xF086),            one(0xF1BF), "IdBc", mfloat },
-{"fjogt",      one(0xF082),            one(0xF1BF), "IdBc", mfloat },
-{"fjole",      one(0xF085),            one(0xF1BF), "IdBc", mfloat },
-{"fjolt",      one(0xF084),            one(0xF1BF), "IdBc", mfloat },
-{"fjor",       one(0xF087),            one(0xF1BF), "IdBc", mfloat },
-{"fjseq",      one(0xF091),            one(0xF1BF), "IdBc", mfloat },
-{"fjsf",       one(0xF090),            one(0xF1BF), "IdBc", mfloat },
-{"fjsne",      one(0xF09E),            one(0xF1BF), "IdBc", mfloat },
-{"fjst",       one(0xF09F),            one(0xF1BF), "IdBc", mfloat },
-{"fjt",                one(0xF08F),            one(0xF1BF), "IdBc", mfloat },
-{"fjueq",      one(0xF089),            one(0xF1BF), "IdBc", mfloat },
-{"fjuge",      one(0xF08B),            one(0xF1BF), "IdBc", mfloat },
-{"fjugt",      one(0xF08A),            one(0xF1BF), "IdBc", mfloat },
-{"fjule",      one(0xF08D),            one(0xF1BF), "IdBc", mfloat },
-{"fjult",      one(0xF08C),            one(0xF1BF), "IdBc", mfloat },
-{"fjun",       one(0xF088),            one(0xF1BF), "IdBc", mfloat },
-
+{"fbeq",       one(0xF081),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbf",                one(0xF080),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbge",       one(0xF093),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbgl",       one(0xF096),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbgle",      one(0xF097),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbgt",       one(0xF092),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fble",       one(0xF095),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fblt",       one(0xF094),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbne",       one(0xF08E),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbnge",      one(0xF09C),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbngl",      one(0xF099),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbngle",     one(0xF098),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbngt",      one(0xF09D),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbnle",      one(0xF09A),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbnlt",      one(0xF09B),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fboge",      one(0xF083),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbogl",      one(0xF086),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbogt",      one(0xF082),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbole",      one(0xF085),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbolt",      one(0xF084),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbor",       one(0xF087),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbseq",      one(0xF091),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbsf",       one(0xF090),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbsne",      one(0xF09E),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbst",       one(0xF09F),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbt",                one(0xF08F),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbueq",      one(0xF089),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbuge",      one(0xF08B),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbugt",      one(0xF08A),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbule",      one(0xF08D),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbult",      one(0xF08C),            one(0xF1FF), "IdBW", mfloat | cfloat },
+{"fbun",       one(0xF088),            one(0xF1FF), "IdBW", mfloat | cfloat },
+
+{"fbeql",      one(0xF0C1),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbfl",       one(0xF0C0),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbgel",      one(0xF0D3),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbgll",      one(0xF0D6),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbglel",     one(0xF0D7),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbgtl",      one(0xF0D2),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fblel",      one(0xF0D5),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbltl",      one(0xF0D4),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbnel",      one(0xF0CE),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbngel",     one(0xF0DC),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbngll",     one(0xF0D9),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbnglel",    one(0xF0D8),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbngtl",     one(0xF0DD),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbnlel",     one(0xF0DA),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbnltl",     one(0xF0DB),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbogel",     one(0xF0C3),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbogll",     one(0xF0C6),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbogtl",     one(0xF0C2),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbolel",     one(0xF0C5),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fboltl",     one(0xF0C4),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fborl",      one(0xF0C7),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbseql",     one(0xF0D1),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbsfl",      one(0xF0D0),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbsnel",     one(0xF0DE),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbstl",      one(0xF0DF),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbtl",       one(0xF0CF),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbueql",     one(0xF0C9),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbugel",     one(0xF0CB),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbugtl",     one(0xF0CA),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbulel",     one(0xF0CD),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbultl",     one(0xF0CC),            one(0xF1FF), "IdBC", mfloat | cfloat },
+{"fbunl",      one(0xF0C8),            one(0xF1FF), "IdBC", mfloat | cfloat },
+
+{"fjeq",       one(0xF081),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjf",                one(0xF080),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjge",       one(0xF093),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjgl",       one(0xF096),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjgle",      one(0xF097),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjgt",       one(0xF092),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjle",       one(0xF095),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjlt",       one(0xF094),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjne",       one(0xF08E),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjnge",      one(0xF09C),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjngl",      one(0xF099),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjngle",     one(0xF098),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjngt",      one(0xF09D),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjnle",      one(0xF09A),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjnlt",      one(0xF09B),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjoge",      one(0xF083),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjogl",      one(0xF086),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjogt",      one(0xF082),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjole",      one(0xF085),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjolt",      one(0xF084),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjor",       one(0xF087),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjseq",      one(0xF091),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjsf",       one(0xF090),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjsne",      one(0xF09E),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjst",       one(0xF09F),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjt",                one(0xF08F),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjueq",      one(0xF089),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjuge",      one(0xF08B),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjugt",      one(0xF08A),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjule",      one(0xF08D),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjult",      one(0xF08C),            one(0xF1BF), "IdBc", mfloat | cfloat },
+{"fjun",       one(0xF088),            one(0xF1BF), "IdBc", mfloat | cfloat },
+
+{"fcmpb",      two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fcmpb",      two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
 {"fcmpd",      two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fcmpd",      two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
+{"fcmpd",      two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fcmpl",      two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fcmpl",      two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fcmpp",      two(0xF000, 0x4C38), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fcmps",      two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fcmps",      two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fcmpw",      two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fcmpw",      two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fcmpx",      two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fcmpx",      two(0xF000, 0x4838), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 
@@ -618,29 +669,47 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fdbun",      two(0xF048, 0x0008), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
 
 {"fdivb",      two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"fdivb",      two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdivd",      two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fdivd",      two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fdivd",      two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fdivl",      two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fdivl",      two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdivp",      two(0xF000, 0x4C20), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fdivs",      two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fdivs",      two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdivw",      two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fdivw",      two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdivx",      two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fdivx",      two(0xF000, 0x4820), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 
 {"fsdivb",     two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fsdivb",     two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsdivd",     two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fsdivd",     two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fsdivd",     two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fsdivl",     two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fsdivl",     two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsdivp",     two(0xF000, 0x4C60), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fsdivs",     two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fsdivs",     two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsdivw",     two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fsdivw",     two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsdivx",     two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fsdivx",     two(0xF000, 0x4860), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 
 {"fddivb",     two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fddivb",     two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fddivd",     two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fddivd",     two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fddivd",     two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fddivl",     two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fddivl",     two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fddivp",     two(0xF000, 0x4C64), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fddivs",     two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fddivs",     two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fddivw",     two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fddivw",     two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fddivx",     two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fddivx",     two(0xF000, 0x4864), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 
@@ -685,21 +754,35 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fgetmanx",   two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
 {"fintb",      two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"fintb",      two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fintd",      two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fintd",      two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt", cfloat },
 {"fintd",      two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fintd",      two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fintl",      two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fintl",      two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fintp",      two(0xF000, 0x4C01), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fints",      two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fints",      two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fintw",      two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fintw",      two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fintx",      two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fintx",      two(0xF000, 0x4801), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"fintx",      two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
 {"fintrzb",    two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"fintrzb",    two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fintrzd",    two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fintrzd",    two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
 {"fintrzd",    two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fintrzd",    two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fintrzl",    two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fintrzl",    two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fintrzp",    two(0xF000, 0x4C03), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fintrzs",    two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fintrzs",    two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fintrzw",    two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fintrzw",    two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fintrzx",    two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fintrzx",    two(0xF000, 0x4803), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"fintrzx",    two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
@@ -753,12 +836,22 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fmodx",      two(0xF000, 0x0021), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fmodx",      two(0xF000, 0x4821), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 
+{"fmoveb",     two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fmoveb",     two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
 {"fmoveb",     two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
 {"fmoveb",     two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7$b", mfloat },
 {"fmoved",     two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
 {"fmoved",     two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7~F", mfloat },
+{"fmoved",     two(0xF000, 0x0000), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fmoved",     two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
+{"fmoved",     two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
 {"fmovel",     two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
 {"fmovel",     two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7$l", mfloat },
+{"fmovel",     two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fmovel",     two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
+  /* Move the FP control registers */
+{"fmovel",     two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8ps", cfloat },
+{"fmovel",     two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Iibss8", cfloat },
 /* FIXME: the next two variants should not permit moving an address
    register to anything but the floating point instruction register.  */
 {"fmovel",     two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
@@ -768,32 +861,63 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fmovep",     two(0xF000, 0x7C00), two(0xF1C0, 0xFC0F), "IiF7~pDk", mfloat },
 {"fmoves",     two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
 {"fmoves",     two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7$f", mfloat },
+{"fmoves",     two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fmoves",     two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fmovew",     two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
 {"fmovew",     two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7$w", mfloat },
+{"fmovew",     two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fmovew",     two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fmovex",     two(0xF000, 0x0000), two(0xF1FF, 0xE07F), "IiF8F7", mfloat },
 {"fmovex",     two(0xF000, 0x4800), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"fmovex",     two(0xF000, 0x6800), two(0xF1C0, 0xFC7F), "IiF7~x", mfloat },
 
 {"fsmoveb",    two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fsmoveb",    two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsmoveb",    two(0xF000, 0x7840), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
+{"fsmoved",    two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fsmoved",    two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fsmoved",    two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
+{"fsmoved",    two(0xF000, 0x7440), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
 {"fsmovel",    two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fsmovel",    two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsmovel",    two(0xF000, 0x6040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fsmoves",    two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fsmoves",    two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsmoves",    two(0xF000, 0x6440), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fsmovew",    two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fsmovew",    two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsmovew",    two(0xF000, 0x7040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fsmovex",    two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fsmovex",    two(0xF000, 0x4840), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 {"fsmovep",    two(0xF000, 0x4C40), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 
 {"fdmoveb",    two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fdmoveb",    two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdmoveb",    two(0xF000, 0x7844), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
+{"fdmoved",    two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fdmoved",    two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fdmoved",    two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
+{"fdmoved",    two(0xF000, 0x7444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fdmovel",    two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fdmovel",    two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdmovel",    two(0xF000, 0x6044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fdmoves",    two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fdmoves",    two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdmoves",    two(0xF000, 0x6444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fdmovew",    two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fdmovew",    two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdmovew",    two(0xF000, 0x7044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
 {"fdmovex",    two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fdmovex",    two(0xF000, 0x4844), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 {"fdmovep",    two(0xF000, 0x4C44), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 
 {"fmovecrx",   two(0xF000, 0x5C00), two(0xF1FF, 0xFC00), "Ii#CF7", mfloat },
 
+{"fmovemd",    two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizsl3", cfloat },
+{"fmovemd",    two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
+{"fmovemd",    two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
+{"fmovemd",    two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Iil3ys", cfloat },
+
 {"fmovemx",    two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
 {"fmovemx",    two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
 {"fmovemx",    two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
@@ -814,6 +938,11 @@ const struct m68k_opcode m68k_opcodes[] =
    target is a single %fpiar.  */
 {"fmoveml",    two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*lL8", mfloat },
 
+{"fmovem",     two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "IizsL3", cfloat },
+{"fmovem",     two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
+{"fmovem",     two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
+{"fmovem",     two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "IiL3ys", cfloat },
+
 {"fmovem",     two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
 {"fmovem",     two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
 {"fmovem",     two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
@@ -832,63 +961,102 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fmovem",     two(0xF000, 0x8000), two(0xF2C0, 0xE3FF), "Ii*sL8", mfloat },
 
 {"fmulb",      two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"fmulb",      two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fmuld",      two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fmuld",      two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fmuld",      two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fmull",      two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fmull",      two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fmulp",      two(0xF000, 0x4C23), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fmuls",      two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fmuls",      two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fmulw",      two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fmulw",      two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fmulx",      two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fmulx",      two(0xF000, 0x4823), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 
 {"fsmulb",     two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fsmulb",     two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsmuld",     two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fsmuld",     two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fsmuld",     two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fsmull",     two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fsmull",     two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsmulp",     two(0xF000, 0x4C63), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fsmuls",     two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fsmuls",     two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsmulw",     two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fsmulw",     two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsmulx",     two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fsmulx",     two(0xF000, 0x4863), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 
 {"fdmulb",     two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fdmulb",     two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdmuld",     two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fdmuld",     two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fdmuld",     two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fdmull",     two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fdmull",     two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdmulp",     two(0xF000, 0x4C67), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fdmuls",     two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fdmuls",     two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdmulw",     two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fdmulw",     two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdmulx",     two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fdmulx",     two(0xF000, 0x4867), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 
 {"fnegb",      two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"fnegb",      two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fnegd",      two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fnegd",      two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
 {"fnegd",      two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fnegd",      two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fnegl",      two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fnegl",      two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fnegp",      two(0xF000, 0x4C1A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fnegs",      two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fnegs",      two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fnegw",      two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fnegw",      two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fnegx",      two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fnegx",      two(0xF000, 0x481A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"fnegx",      two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
 {"fsnegb",     two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fsnegb",     two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsnegd",     two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fsnegd",     two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
 {"fsnegd",     two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fsnegd",     two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fsnegl",     two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fsnegl",     two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsnegp",     two(0xF000, 0x4C5A), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fsnegs",     two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fsnegs",     two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsnegw",     two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fsnegw",     two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsnegx",     two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fsnegx",     two(0xF000, 0x485A), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 {"fsnegx",     two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
 
 {"fdnegb",     two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fdnegb",     two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdnegd",     two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fdnegd",     two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
 {"fdnegd",     two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fdnegd",     two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fdnegl",     two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fdnegl",     two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdnegp",     two(0xF000, 0x4C5E), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fdnegs",     two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fdnegs",     two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdnegw",     two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fdnegw",     two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdnegx",     two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fdnegx",     two(0xF000, 0x485E), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 {"fdnegx",     two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
 
-{"fnop",       two(0xF280, 0x0000), two(0xFFFF, 0xFFFF), "Ii", mfloat },
+{"fnop",       two(0xF280, 0x0000), two(0xFFFF, 0xFFFF), "Ii", mfloat | cfloat },
 
 {"fremb",      two(0xF000, 0x5825), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
 {"fremd",      two(0xF000, 0x5425), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
@@ -900,8 +1068,10 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fremx",      two(0xF000, 0x4825), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 
 {"frestore",   one(0xF140),            one(0xF1C0), "Id<s", mfloat },
+{"frestore",   one(0xF140),            one(0xF1C0), "Idys", cfloat },
 
 {"fsave",      one(0xF100),            one(0xF1C0), "Id>s", mfloat },
+{"fsave",      one(0xF100),            one(0xF1C0), "Idzs", cfloat },
 
 {"fscaleb",    two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
 {"fscaled",    two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
@@ -998,60 +1168,98 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fsinhx",     two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
 {"fsqrtb",     two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"fsqrtb",     two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsqrtd",     two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fsqrtd",     two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
 {"fsqrtd",     two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fsqrtd",     two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fsqrtl",     two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fsqrtl",     two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsqrtp",     two(0xF000, 0x4C04), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fsqrts",     two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fsqrts",     two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsqrtw",     two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fsqrtw",     two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsqrtx",     two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fsqrtx",     two(0xF000, 0x4804), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"fsqrtx",     two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
 {"fssqrtb",    two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fssqrtb",    two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fssqrtd",    two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fssqrtd",    two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
 {"fssqrtd",    two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fssqrtd",    two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fssqrtl",    two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fssqrtl",    two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fssqrtp",    two(0xF000, 0x4C41), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fssqrts",    two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fssqrts",    two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fssqrtw",    two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fssqrtw",    two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fssqrtx",    two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fssqrtx",    two(0xF000, 0x4841), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 {"fssqrtx",    two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
 
 {"fdsqrtb",    two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fdsqrtb",    two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fdsqrtd",    two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fdsqrtd",    two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
 {"fdsqrtd",    two(0xF000, 0x5445), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
 {"fdsqrtl",    two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fdsqrtl",    two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdsqrtp",    two(0xF000, 0x4C45), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fdsqrts",    two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fdsqrts",    two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdsqrtw",    two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fdsqrtw",    two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdsqrtx",    two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fdsqrtx",    two(0xF000, 0x4845), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 {"fdsqrtx",    two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
 
 {"fsubb",      two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
+{"fsubb",      two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
+{"fsubd",      two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fsubd",      two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
+{"fsubd",      two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fsubl",      two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
+{"fsubl",      two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsubp",      two(0xF000, 0x4C28), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fsubs",      two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
+{"fsubs",      two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsubw",      two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
+{"fsubw",      two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fsubx",      two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fsubx",      two(0xF000, 0x4828), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"fsubx",      two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
+{"fssubb",     two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fssubb",     two(0xF000, 0x5868), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fssubd",     two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
 {"fssubd",     two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fssubd",     two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fssubl",     two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
+{"fssubl",     two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fssubp",     two(0xF000, 0x4C68), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
 {"fssubs",     two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fssubs",     two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fssubw",     two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
+{"fssubw",     two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fssubx",     two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fssubx",     two(0xF000, 0x4868), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
 {"fssubx",     two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
 
+{"fdsubb",     two(0xF000, 0x586A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdsubb",     two(0xF000, 0x586c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
+{"fdsubd",     two(0xF000, 0x006A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
+{"fdsubd",     two(0xF000, 0x546A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
 {"fdsubd",     two(0xF000, 0x546c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
+{"fdsubl",     two(0xF000, 0x406A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdsubl",     two(0xF000, 0x406c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
 {"fdsubp",     two(0xF000, 0x4C6c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
+{"fdsubs",     two(0xF000, 0x446A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdsubs",     two(0xF000, 0x446c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
+{"fdsubw",     two(0xF000, 0x506A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
 {"fdsubw",     two(0xF000, 0x506c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
 {"fdsubx",     two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
 {"fdsubx",     two(0xF000, 0x486c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
@@ -1119,7 +1327,7 @@ const struct m68k_opcode m68k_opcodes[] =
 {"ftrapule",   two(0xF07C, 0x000D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
 {"ftrapult",   two(0xF07C, 0x000C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
 {"ftrapun",    two(0xF07C, 0x0008), two(0xF1FF, 0xFFFF), "Ii", mfloat },
-        
+
 {"ftrapeqw",   two(0xF07A, 0x0001), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
 {"ftrapfw",    two(0xF07A, 0x0000), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
 {"ftrapgew",   two(0xF07A, 0x0013), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
@@ -1187,11 +1395,17 @@ const struct m68k_opcode m68k_opcodes[] =
 {"ftrapunl",   two(0xF07B, 0x0008), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
 
 {"ftstb",      two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Ii;b", mfloat },
+{"ftstb",      two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
+{"ftstd",      two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", cfloat },
 {"ftstd",      two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Ii;F", mfloat },
+{"ftstd",      two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
 {"ftstl",      two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Ii;l", mfloat },
+{"ftstl",      two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
 {"ftstp",      two(0xF000, 0x4C3A), two(0xF1C0, 0xFC7F), "Ii;p", mfloat },
 {"ftsts",      two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Ii;f", mfloat },
+{"ftsts",      two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
 {"ftstw",      two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Ii;w", mfloat },
+{"ftstw",      two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
 {"ftstx",      two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", mfloat },
 {"ftstx",      two(0xF000, 0x483A), two(0xF1C0, 0xFC7F), "Ii;x", mfloat },
 
@@ -1207,7 +1421,8 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"halt",       one(0045310),   one(0177777), "",     m68060 | mcf },
 
-{"illegal",    one(0045374),   one(0177777), "",     m68000up },
+{"illegal",    one(0045374),   one(0177777), "",     m68000up | mcf },
+{"intouch",    one(0xf428),    one(0xfff8), "As",    mcfv4eup },
 
 {"jmp",                one(0047300),   one(0177700), "!s", m68000up | mcf },
 
@@ -1245,57 +1460,57 @@ const struct m68k_opcode m68k_opcodes[] =
 {"lsrl",       one(0160250),   one(0170770), "DdDs", m68000up | mcf },
 
   /* FIXME: add MAM mode (`&' after <ea> operand) / remove MACM */
-{"macw",  two(0120000, 0000000), two(0170660, 0005400), "uMum", mcf5307up | mcf5206e },
-{"macw",  two(0120000, 0001000), two(0170660, 0005400), "uMumMh",mcf5307up | mcf5206e },
-{"macw",  two(0120220, 0000000), two(0170670, 0005460), "uNuoasRn", mcf5307up | mcf5206e },
-{"macw",  two(0120230, 0000000), two(0170670, 0005460), "uNuo+sRn", mcf5307up | mcf5206e },
-{"macw",  two(0120240, 0000000), two(0170670, 0005460), "uNuo-sRn", mcf5307up | mcf5206e },
-{"macw",  two(0120250, 0000000), two(0170670, 0005460), "uNuodsRn", mcf5307up | mcf5206e },
-{"macw",  two(0120220, 0001000), two(0170670, 0005460), "uNuoMhasRn", mcf5307up | mcf5206e },
-{"macw",  two(0120230, 0001000), two(0170670, 0005460), "uNuoMh+sRn", mcf5307up | mcf5206e },
-{"macw",  two(0120240, 0001000), two(0170670, 0005460), "uNuoMh-sRn", mcf5307up | mcf5206e },
-{"macw",  two(0120250, 0001000), two(0170670, 0005460), "uNuoMhdsRn", mcf5307up | mcf5206e },
-{"macmw", two(0120220, 0000040), two(0170670, 0005460), "uNuoasRn", mcf5307up | mcf5206e },
-{"macmw", two(0120230, 0000040), two(0170670, 0005460), "uNuo+sRn", mcf5307up | mcf5206e },
-{"macmw", two(0120240, 0000040), two(0170670, 0005460), "uNuo-sRn", mcf5307up | mcf5206e },
-{"macmw", two(0120250, 0000040), two(0170670, 0005460), "uNuodsRn", mcf5307up | mcf5206e },
-{"macmw", two(0120220, 0001040), two(0170670, 0005460), "uNuoMhasRn", mcf5307up | mcf5206e },
-{"macmw", two(0120230, 0001040), two(0170670, 0005460), "uNuoMh+sRn", mcf5307up | mcf5206e },
-{"macmw", two(0120240, 0001040), two(0170670, 0005460), "uNuoMh-sRn", mcf5307up | mcf5206e },
-{"macmw", two(0120250, 0001040), two(0170670, 0005460), "uNuoMhdsRn", mcf5307up | mcf5206e },
-
-{"macl",  two(0120000, 0004000), two(0170660, 0005400), "RsRm", mcf5307up | mcf5206e },
-{"macl",  two(0120000, 0005000), two(0170660, 0005400), "RsRmMh", mcf5307up | mcf5206e },
-{"macl",  two(0120220, 0004000), two(0170670, 0005460), "R3R1asRn", mcf5307up | mcf5206e },
-{"macl",  two(0120230, 0004000), two(0170670, 0005460), "R3R1+sRn", mcf5307up | mcf5206e },
-{"macl",  two(0120240, 0004000), two(0170670, 0005460), "R3R1-sRn", mcf5307up | mcf5206e },
-{"macl",  two(0120250, 0004000), two(0170670, 0005460), "R3R1dsRn", mcf5307up | mcf5206e },
-{"macl",  two(0120220, 0005000), two(0170670, 0005460), "R3R1MhasRn", mcf5307up | mcf5206e },
-{"macl",  two(0120230, 0005000), two(0170670, 0005460), "R3R1Mh+sRn", mcf5307up | mcf5206e },
-{"macl",  two(0120240, 0005000), two(0170670, 0005460), "R3R1Mh-sRn", mcf5307up | mcf5206e },
-{"macl",  two(0120250, 0005000), two(0170670, 0005460), "R3R1MhdsRn", mcf5307up | mcf5206e },
-{"macml", two(0120220, 0004040), two(0170670, 0005460), "R3R1asRn", mcf5307up | mcf5206e },
-{"macml", two(0120230, 0004040), two(0170670, 0005460), "R3R1+sRn", mcf5307up | mcf5206e },
-{"macml", two(0120240, 0004040), two(0170670, 0005460), "R3R1-sRn", mcf5307up | mcf5206e },
-{"macml", two(0120250, 0004040), two(0170670, 0005460), "R3R1dsRn", mcf5307up | mcf5206e },
-{"macml", two(0120220, 0005040), two(0170670, 0005460), "R3R1MhasRn", mcf5307up | mcf5206e },
-{"macml", two(0120230, 0005040), two(0170670, 0005460), "R3R1Mh+sRn", mcf5307up | mcf5206e },
-{"macml", two(0120240, 0005040), two(0170670, 0005460), "R3R1Mh-sRn", mcf5307up | mcf5206e },
-{"macml", two(0120250, 0005040), two(0170670, 0005460), "R3R1MhdsRn", mcf5307up | mcf5206e },
-
-/* NOTE: The mcf5200 family programmer's reference manual does not 
+{"macw",  two(0120000, 0000000), two(0170660, 0005400), "uMum", mcf5206eup },
+{"macw",  two(0120000, 0001000), two(0170660, 0005400), "uMumMh",mcf5206eup },
+{"macw",  two(0120220, 0000000), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
+{"macw",  two(0120230, 0000000), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
+{"macw",  two(0120240, 0000000), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
+{"macw",  two(0120250, 0000000), two(0170670, 0005460), "uNuodsRn", mcf5206eup },
+{"macw",  two(0120220, 0001000), two(0170670, 0005460), "uNuoMhasRn", mcf5206eup },
+{"macw",  two(0120230, 0001000), two(0170670, 0005460), "uNuoMh+sRn", mcf5206eup },
+{"macw",  two(0120240, 0001000), two(0170670, 0005460), "uNuoMh-sRn", mcf5206eup },
+{"macw",  two(0120250, 0001000), two(0170670, 0005460), "uNuoMhdsRn", mcf5206eup },
+{"macmw", two(0120220, 0000040), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
+{"macmw", two(0120230, 0000040), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
+{"macmw", two(0120240, 0000040), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
+{"macmw", two(0120250, 0000040), two(0170670, 0005460), "uNuodsRn", mcf5206eup },
+{"macmw", two(0120220, 0001040), two(0170670, 0005460), "uNuoMhasRn", mcf5206eup },
+{"macmw", two(0120230, 0001040), two(0170670, 0005460), "uNuoMh+sRn", mcf5206eup },
+{"macmw", two(0120240, 0001040), two(0170670, 0005460), "uNuoMh-sRn", mcf5206eup },
+{"macmw", two(0120250, 0001040), two(0170670, 0005460), "uNuoMhdsRn", mcf5206eup },
+
+{"macl",  two(0120000, 0004000), two(0170660, 0005400), "RsRm", mcf5206eup },
+{"macl",  two(0120000, 0005000), two(0170660, 0005400), "RsRmMh", mcf5206eup },
+{"macl",  two(0120220, 0004000), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
+{"macl",  two(0120230, 0004000), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
+{"macl",  two(0120240, 0004000), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
+{"macl",  two(0120250, 0004000), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
+{"macl",  two(0120220, 0005000), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
+{"macl",  two(0120230, 0005000), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
+{"macl",  two(0120240, 0005000), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
+{"macl",  two(0120250, 0005000), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
+{"macml", two(0120220, 0004040), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
+{"macml", two(0120230, 0004040), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
+{"macml", two(0120240, 0004040), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
+{"macml", two(0120250, 0004040), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
+{"macml", two(0120220, 0005040), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
+{"macml", two(0120230, 0005040), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
+{"macml", two(0120240, 0005040), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
+{"macml", two(0120250, 0005040), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
+
+/* NOTE: The mcf5200 family programmer's reference manual does not
    indicate the byte form of the movea instruction is invalid (as it
    is on 68000 family cpus).  However, experiments on the 5202 yeild
    unexpected results.  The value is copied, but it is not sign extended
-   (as is done with movea.w) and the top three bytes in the address 
+   (as is done with movea.w) and the top three bytes in the address
    register are not disturbed.  I don't know if this is the intended
    behavior --- it could be a hole in instruction decoding (Motorola
    decided not to trap all invalid instructions for performance reasons)
-   --- but I suspect that it is not.   
+   --- but I suspect that it is not.
 
-   I reported this to Motorola ISD Technical Communications Support, 
-   which replied that other coldfire assemblers reject movea.b.  For 
-   this reason I've decided to not allow moveab. 
+   I reported this to Motorola ISD Technical Communications Support,
+   which replied that other coldfire assemblers reject movea.b.  For
+   this reason I've decided to not allow moveab.
 
        jtc@cygnus.com - 97/01/24
  */
@@ -1347,13 +1562,13 @@ const struct m68k_opcode m68k_opcodes[] =
 {"moveb",      one(0010200),   one(0170700), "obad", mcf },
 {"moveb",      one(0010300),   one(0170700), "ob+d", mcf },
 {"moveb",      one(0010400),   one(0170700), "ob-d", mcf },
-{"moveb",      one(0010000),   one(0170000), "obnd", mcf5407 },
+{"moveb",      one(0010000),   one(0170000), "obnd", mcfv4up },
 
 {"movew",      one(0030000),   one(0170000), "*w%d", m68000up },
 {"movew",      one(0030000),   one(0170000), "ms%d", mcf },
 {"movew",      one(0030000),   one(0170000), "nspd", mcf },
 {"movew",      one(0030000),   one(0170000), "owmd", mcf },
-{"movew",      one(0030000),   one(0170000), "ownd", mcf5407 },
+{"movew",      one(0030000),   one(0170000), "ownd", mcfv4up },
 {"movew",      one(0040300),   one(0177700), "Ss$s", m68000up },
 {"movew",      one(0040300),   one(0177770), "SsDs", mcf },
 {"movew",      one(0041300),   one(0177700), "Cs$s", m68010up },
@@ -1370,25 +1585,25 @@ const struct m68k_opcode m68k_opcodes[] =
 {"movel",      one(0020000),   one(0170000), "ms%d", mcf },
 {"movel",      one(0020000),   one(0170000), "nspd", mcf },
 {"movel",      one(0020000),   one(0170000), "olmd", mcf },
-{"movel",      one(0020000),   one(0170000), "olnd", mcf5407 },
-{"movel",      one(0047140),   one(0177770), "AsUd", m68000up },
-{"movel",      one(0047150),   one(0177770), "UdAs", m68000up },
-{"movel",      one(0120600),   one(0177760), "EsRs", mcf5307up | mcf5206e },
-{"movel",      one(0120400),   one(0177760), "RsEs", mcf5307up | mcf5206e },
-{"movel",      one(0120474),   one(0177777), "#lEs", mcf5307up | mcf5206e },
-{"movel",      one(0124600),   one(0177760), "GsRs", mcf5307up | mcf5206e },
-{"movel",      one(0124400),   one(0177760), "RsGs", mcf5307up | mcf5206e },
-{"movel",      one(0124474),   one(0177777), "#lGs", mcf5307up | mcf5206e },
-{"movel",      one(0126600),   one(0177760), "HsRs", mcf5307up | mcf5206e },
-{"movel",      one(0126400),   one(0177760), "RsHs", mcf5307up | mcf5206e },
-{"movel",      one(0126474),   one(0177777), "#lHs", mcf5307up | mcf5206e },
-{"movel",      one(0124700),   one(0177777), "GsCs", mcf5307up | mcf5206e },
+{"movel",      one(0020000),   one(0170000), "olnd", mcfv4up },
+{"movel",      one(0047140),   one(0177770), "AsUd", m68000up | mcfv4e },
+{"movel",      one(0047150),   one(0177770), "UdAs", m68000up | mcfv4e },
+{"movel",      one(0120600),   one(0177760), "EsRs", mcf5206eup },
+{"movel",      one(0120400),   one(0177760), "RsEs", mcf5206eup },
+{"movel",      one(0120474),   one(0177777), "#lEs", mcf5206eup },
+{"movel",      one(0124600),   one(0177760), "GsRs", mcf5206eup },
+{"movel",      one(0124400),   one(0177760), "RsGs", mcf5206eup },
+{"movel",      one(0124474),   one(0177777), "#lGs", mcf5206eup },
+{"movel",      one(0126600),   one(0177760), "HsRs", mcf5206eup },
+{"movel",      one(0126400),   one(0177760), "RsHs", mcf5206eup },
+{"movel",      one(0126474),   one(0177777), "#lHs", mcf5206eup },
+{"movel",      one(0124700),   one(0177777), "GsCs", mcf5206eup },
 
 {"move",       one(0030000),   one(0170000), "*w%d", m68000up },
 {"move",       one(0030000),   one(0170000), "ms%d", mcf },
 {"move",       one(0030000),   one(0170000), "nspd", mcf },
 {"move",       one(0030000),   one(0170000), "owmd", mcf },
-{"move",       one(0030000),   one(0170000), "ownd", mcf5407 },
+{"move",       one(0030000),   one(0170000), "ownd", mcfv4up },
 {"move",       one(0040300),   one(0177700), "Ss$s", m68000up },
 {"move",       one(0040300),   one(0177770), "SsDs", mcf },
 {"move",       one(0041300),   one(0177700), "Cs$s", m68010up },
@@ -1403,11 +1618,11 @@ const struct m68k_opcode m68k_opcodes[] =
 {"move",       one(0047140),   one(0177770), "AsUd", m68000up },
 {"move",       one(0047150),   one(0177770), "UdAs", m68000up },
 
-{"mov3ql",     one(0120500),   one(0170700), "Qd%s", mcf5407 },
-{"mvsb",       one(0070400),   one(0170700), "*bDd", mcf5407 },
-{"mvsw",       one(0070500),   one(0170700), "*wDd", mcf5407 },
-{"mvzb",       one(0070600),   one(0170700), "*bDd", mcf5407 },
-{"mvzw",       one(0070700),   one(0170700), "*wDd", mcf5407 },
+{"mov3ql",     one(0120500),   one(0170700), "xd%s", mcfv4up },
+{"mvsb",       one(0070400),   one(0170700), "*bDd", mcfv4up },
+{"mvsw",       one(0070500),   one(0170700), "*wDd", mcfv4up },
+{"mvzb",       one(0070600),   one(0170700), "*bDd", mcfv4up },
+{"mvzw",       one(0070700),   one(0170700), "*wDd", mcfv4up },
 
 {"movesb",     two(0007000, 0),     two(0177700, 07777), "~sR1", m68010up },
 {"movesb",     two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up },
@@ -1423,43 +1638,43 @@ const struct m68k_opcode m68k_opcodes[] =
 {"move16",     one(0xf618),            one(0xfff8), "_Las", m68040up },
 
   /* FIXME: add MAM mode (`&' after <ea> operand) / remove MSACM */
-{"msacw",  two(0120000, 0000400), two(0170660, 0005400), "uMum", mcf5307up | mcf5206e },
-{"msacw",  two(0120000, 0001400), two(0170660, 0005400), "uMumMh", mcf5307up | mcf5206e },
-{"msacw",  two(0120220, 0000400), two(0170670, 0005460), "uNuoasRn", mcf5307up | mcf5206e },
-{"msacw",  two(0120230, 0000400), two(0170670, 0005460), "uNuo+sRn", mcf5307up | mcf5206e },
-{"msacw",  two(0120240, 0000400), two(0170670, 0005460), "uNuo-sRn", mcf5307up | mcf5206e },
-{"msacw",  two(0120250, 0000400), two(0170670, 0005460), "uNuodsRn", mcf5307up | mcf5206e },
-{"msacw",  two(0120220, 0001400), two(0170670, 0005460), "uNuoMhasRn", mcf5307up | mcf5206e },
-{"msacw",  two(0120230, 0001400), two(0170670, 0005460), "uNuoMh+sRn", mcf5307up | mcf5206e },
-{"msacw",  two(0120240, 0001400), two(0170670, 0005460), "uNuoMh-sRn", mcf5307up | mcf5206e },
-{"msacw",  two(0120250, 0001400), two(0170670, 0005460), "uNuoMhdsRn", mcf5307up | mcf5206e },
-{"msacmw", two(0120220, 0000440), two(0170670, 0005460), "uNuoasRn", mcf5307up | mcf5206e },
-{"msacmw", two(0120230, 0000440), two(0170670, 0005460), "uNuo+sRn", mcf5307up | mcf5206e },
-{"msacmw", two(0120240, 0000440), two(0170670, 0005460), "uNuo-sRn", mcf5307up | mcf5206e },
-{"msacmw", two(0120250, 0000440), two(0170670, 0005460), "uNuodsRn", mcf5307up | mcf5206e },
-{"msacmw", two(0120220, 0001440), two(0170670, 0005460), "uNuoMhasRn", mcf5307up | mcf5206e },
-{"msacmw", two(0120230, 0001440), two(0170670, 0005460), "uNuoMh+sRn", mcf5307up | mcf5206e },
-{"msacmw", two(0120240, 0001440), two(0170670, 0005460), "uNuoMh-sRn", mcf5307up | mcf5206e },
-{"msacmw", two(0120250, 0001440), two(0170670, 0005460), "uNuoMhdsRn", mcf5307up | mcf5206e },
-
-{"msacl",  two(0120000, 0004400), two(0170660, 0005400), "RsRm", mcf5307up | mcf5206e },
-{"msacl",  two(0120000, 0005400), two(0170660, 0005400), "RsRmMh", mcf5307up | mcf5206e },
-{"msacl",  two(0120220, 0004400), two(0170670, 0005460), "R3R1asRn", mcf5307up | mcf5206e },
-{"msacl",  two(0120230, 0004400), two(0170670, 0005460), "R3R1+sRn", mcf5307up | mcf5206e },
-{"msacl",  two(0120240, 0004400), two(0170670, 0005460), "R3R1-sRn", mcf5307up | mcf5206e },
-{"msacl",  two(0120250, 0004400), two(0170670, 0005460), "R3R1dsRn", mcf5307up | mcf5206e },
-{"msacl",  two(0120220, 0005400), two(0170670, 0005460), "R3R1MhasRn", mcf5307up | mcf5206e },
-{"msacl",  two(0120230, 0005400), two(0170670, 0005460), "R3R1Mh+sRn", mcf5307up | mcf5206e },
-{"msacl",  two(0120240, 0005400), two(0170670, 0005460), "R3R1Mh-sRn", mcf5307up | mcf5206e },
-{"msacl",  two(0120250, 0005400), two(0170670, 0005460), "R3R1MhdsRn", mcf5307up | mcf5206e },
-{"msacml", two(0120220, 0004440), two(0170670, 0005460), "R3R1asRn", mcf5307up | mcf5206e },
-{"msacml", two(0120230, 0004440), two(0170670, 0005460), "R3R1+sRn", mcf5307up | mcf5206e },
-{"msacml", two(0120240, 0004440), two(0170670, 0005460), "R3R1-sRn", mcf5307up | mcf5206e },
-{"msacml", two(0120250, 0004440), two(0170670, 0005460), "R3R1dsRn", mcf5307up | mcf5206e },
-{"msacml", two(0120220, 0005440), two(0170670, 0005460), "R3R1MhasRn", mcf5307up | mcf5206e },
-{"msacml", two(0120230, 0005440), two(0170670, 0005460), "R3R1Mh+sRn", mcf5307up | mcf5206e },
-{"msacml", two(0120240, 0005440), two(0170670, 0005460), "R3R1Mh-sRn", mcf5307up | mcf5206e },
-{"msacml", two(0120250, 0005440), two(0170670, 0005460), "R3R1MhdsRn", mcf5307up | mcf5206e },
+{"msacw",  two(0120000, 0000400), two(0170660, 0005400), "uMum", mcf5206eup },
+{"msacw",  two(0120000, 0001400), two(0170660, 0005400), "uMumMh", mcf5206eup },
+{"msacw",  two(0120220, 0000400), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
+{"msacw",  two(0120230, 0000400), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
+{"msacw",  two(0120240, 0000400), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
+{"msacw",  two(0120250, 0000400), two(0170670, 0005460), "uNuodsRn", mcf5206eup },
+{"msacw",  two(0120220, 0001400), two(0170670, 0005460), "uNuoMhasRn", mcf5206eup },
+{"msacw",  two(0120230, 0001400), two(0170670, 0005460), "uNuoMh+sRn", mcf5206eup },
+{"msacw",  two(0120240, 0001400), two(0170670, 0005460), "uNuoMh-sRn", mcf5206eup },
+{"msacw",  two(0120250, 0001400), two(0170670, 0005460), "uNuoMhdsRn", mcf5206eup },
+{"msacmw", two(0120220, 0000440), two(0170670, 0005460), "uNuoasRn", mcf5206eup },
+{"msacmw", two(0120230, 0000440), two(0170670, 0005460), "uNuo+sRn", mcf5206eup },
+{"msacmw", two(0120240, 0000440), two(0170670, 0005460), "uNuo-sRn", mcf5206eup },
+{"msacmw", two(0120250, 0000440), two(0170670, 0005460), "uNuodsRn", mcf5206eup },
+{"msacmw", two(0120220, 0001440), two(0170670, 0005460), "uNuoMhasRn", mcf5206eup },
+{"msacmw", two(0120230, 0001440), two(0170670, 0005460), "uNuoMh+sRn", mcf5206eup },
+{"msacmw", two(0120240, 0001440), two(0170670, 0005460), "uNuoMh-sRn", mcf5206eup },
+{"msacmw", two(0120250, 0001440), two(0170670, 0005460), "uNuoMhdsRn", mcf5206eup },
+
+{"msacl",  two(0120000, 0004400), two(0170660, 0005400), "RsRm", mcf5206eup },
+{"msacl",  two(0120000, 0005400), two(0170660, 0005400), "RsRmMh", mcf5206eup },
+{"msacl",  two(0120220, 0004400), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
+{"msacl",  two(0120230, 0004400), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
+{"msacl",  two(0120240, 0004400), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
+{"msacl",  two(0120250, 0004400), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
+{"msacl",  two(0120220, 0005400), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
+{"msacl",  two(0120230, 0005400), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
+{"msacl",  two(0120240, 0005400), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
+{"msacl",  two(0120250, 0005400), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
+{"msacml", two(0120220, 0004440), two(0170670, 0005460), "R3R1asRn", mcf5206eup },
+{"msacml", two(0120230, 0004440), two(0170670, 0005460), "R3R1+sRn", mcf5206eup },
+{"msacml", two(0120240, 0004440), two(0170670, 0005460), "R3R1-sRn", mcf5206eup },
+{"msacml", two(0120250, 0004440), two(0170670, 0005460), "R3R1dsRn", mcf5206eup },
+{"msacml", two(0120220, 0005440), two(0170670, 0005460), "R3R1MhasRn", mcf5206eup },
+{"msacml", two(0120230, 0005440), two(0170670, 0005460), "R3R1Mh+sRn", mcf5206eup },
+{"msacml", two(0120240, 0005440), two(0170670, 0005460), "R3R1Mh-sRn", mcf5206eup },
+{"msacml", two(0120250, 0005440), two(0170670, 0005460), "R3R1MhdsRn", mcf5206eup },
 
 {"mulsw",      one(0140700),           one(0170700), ";wDd", m68000up|mcf },
 {"mulsl",      two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
@@ -1736,8 +1951,8 @@ const struct m68k_opcode m68k_opcodes[] =
 {"pvalid",     two(0xf000, 0x2c00),    two(0xffc0, 0xfff8), "A3&s", m68851 },
 
   /* FIXME: don't allow Dw==Dx. */
-{"remsl",       two(0x4c40, 0x0800),    two(0xffc0, 0x8ff8), "qsD3D1", mcf5307up | mcf5206e },
-{"remul",       two(0x4c40, 0x0000),    two(0xffc0, 0x8ff8), "qsD3D1", mcf5307up | mcf5206e },
+{"remsl",       two(0x4c40, 0x0800),    two(0xffc0, 0x8ff8), "qsD3D1", mcf5206eup },
+{"remul",       two(0x4c40, 0x0000),    two(0xffc0, 0x8ff8), "qsD3D1", mcf5206eup },
 
 {"reset",      one(0047160),           one(0177777), "", m68000up },
 
@@ -1783,7 +1998,7 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"rts",                one(0047165),           one(0177777), "",   m68000up | mcf },
 
-{"satsl",      one(0046200),           one(0177770), "Ds", mcf5407 },
+{"satsl",      one(0046200),           one(0177770), "Ds", mcfv4up },
 
 {"sbcd",       one(0100400),           one(0170770), "DsDd", m68000up },
 {"sbcd",       one(0100410),           one(0170770), "-s-d", m68000up },
@@ -1823,6 +2038,8 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"stop",       one(0047162),   one(0177777), "#w", m68000up | mcf },
 
+{"strldsr", two(0040347,0043374), two(0177777,0177777), "#w", mcf528x},
+
 {"subal",      one(0110700),   one(0170700), "*lAd", m68000up | mcf },
 {"subaw",      one(0110300),   one(0170700), "*wAd", m68000up },
 
@@ -1870,7 +2087,7 @@ const struct m68k_opcode m68k_opcodes[] =
 {"swbeg",      one(0045374),   one(0177777), "#w",   m68000up | mcf },
 {"swbegl",     one(0045375),   one(0177777), "#l",   m68000up | mcf },
 
-{"tas",                one(0045300),   one(0177700), "$s", m68000up | mcf5407},
+{"tas",                one(0045300),   one(0177700), "$s", m68000up | mcfv4up},
 
 #define TBL1(name,signed,round,size)                                   \
   {name, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400),    \
@@ -2205,6 +2422,11 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =
   { "ftests",  "ftsts", },
   { "ftestw",  "ftstw", },
   { "ftestx",  "ftstx", },
+
+  { "bitrevl",  "bitrev", },  /* for mcf528x only */
+  { "byterevl", "byterev", },
+  { "ff1l",     "ff1", },
+
 };
 
 const int m68k_numaliases =