2004-03-12 Michal Ludvig <mludvig@suse.cz>
[deliverable/binutils-gdb.git] / opcodes / m68k-opc.c
index 4b515fd5935ec638dfc96e0b1f45ede359f1d65e..8fa6c0e7405afb23c1a3cd4cb32dd860af6c16e3 100644 (file)
@@ -1,24 +1,26 @@
 /* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
-   Copyright 1989, 91, 92, 93, 94, 95, 96, 1997 Free Software Foundation.
+   Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+   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 "ansidecl.h"
+#include "sysdep.h"
 #include "opcode/m68k.h"
 
 #define one(x) ((unsigned int) (x) << 16)
@@ -34,16 +36,16 @@ const struct m68k_opcode m68k_opcodes[] =
 {"abcd",       one(0140410),   one(0170770), "-s-d", m68000up },
 
 {"addaw",      one(0150300),   one(0170700), "*wAd", m68000up },
-{"addal",      one(0150700),   one(0170700), "*lAd", m68000up | mcf5200 },
+{"addal",      one(0150700),   one(0170700), "*lAd", m68000up | mcf },
 
 {"addib",      one(0003000),   one(0177700), "#b$s", m68000up },
 {"addiw",      one(0003100),   one(0177700), "#w$s", m68000up },
 {"addil",      one(0003200),   one(0177700), "#l$s", m68000up },
-{"addil",      one(0003200),   one(0177700), "#lDs", mcf5200 },
+{"addil",      one(0003200),   one(0177700), "#lDs", mcf },
 
 {"addqb",      one(0050000),   one(0170700), "Qd$b", m68000up },
 {"addqw",      one(0050100),   one(0170700), "Qd%w", m68000up },
-{"addql",      one(0050200),   one(0170700), "Qd%l", m68000up | mcf5200 },
+{"addql",      one(0050200),   one(0170700), "Qd%l", m68000up | mcf },
 
 /* The add opcode can generate the adda, addi, and addq instructions.  */
 {"addb",       one(0050000),   one(0170700), "Qd$b", m68000up },
@@ -55,18 +57,18 @@ const struct m68k_opcode m68k_opcodes[] =
 {"addw",       one(0003100),   one(0177700), "#w$s", m68000up },
 {"addw",       one(0150100),   one(0170700), "*wDd", m68000up },
 {"addw",       one(0150500),   one(0170700), "Dd~w", m68000up },
-{"addl",       one(0050200),   one(0170700), "Qd%l", m68000up | mcf5200 },
+{"addl",       one(0050200),   one(0170700), "Qd%l", m68000up | mcf },
 {"addl",       one(0003200),   one(0177700), "#l$s", m68000up },
-{"addl",       one(0003200),   one(0177700), "#lDs", mcf5200 },
-{"addl",       one(0150700),   one(0170700), "*lAd", m68000up | mcf5200 },
-{"addl",       one(0150200),   one(0170700), "*lDd", m68000up | mcf5200 },
-{"addl",       one(0150600),   one(0170700), "Dd~l", m68000up | mcf5200 },
+{"addl",       one(0003200),   one(0177700), "#lDs", mcf },
+{"addl",       one(0150700),   one(0170700), "*lAd", m68000up | mcf },
+{"addl",       one(0150200),   one(0170700), "*lDd", m68000up | mcf },
+{"addl",       one(0150600),   one(0170700), "Dd~l", m68000up | mcf },
 
 {"addxb",      one(0150400),   one(0170770), "DsDd", m68000up },
 {"addxb",      one(0150410),   one(0170770), "-s-d", m68000up },
 {"addxw",      one(0150500),   one(0170770), "DsDd", m68000up },
 {"addxw",      one(0150510),   one(0170770), "-s-d", m68000up },
-{"addxl",      one(0150600),   one(0170770), "DsDd", m68000up | mcf5200 },
+{"addxl",      one(0150600),   one(0170770), "DsDd", m68000up | mcf },
 {"addxl",      one(0150610),   one(0170770), "-s-d", m68000up },
 
 {"andib",      one(0001000),   one(0177700), "#b$s", m68000up },
@@ -74,7 +76,7 @@ const struct m68k_opcode m68k_opcodes[] =
 {"andiw",      one(0001100),   one(0177700), "#w$s", m68000up },
 {"andiw",      one(0001174),   one(0177777), "#wSs", m68000up },
 {"andil",      one(0001200),   one(0177700), "#l$s", m68000up },
-{"andil",      one(0001200),   one(0177700), "#lDs", mcf5200 },
+{"andil",      one(0001200),   one(0177700), "#lDs", mcf },
 {"andi",       one(0001100),   one(0177700), "#w$s", m68000up },
 {"andi",       one(0001074),   one(0177777), "#bCs", m68000up },
 {"andi",       one(0001174),   one(0177777), "#wSs", m68000up },
@@ -89,9 +91,9 @@ const struct m68k_opcode m68k_opcodes[] =
 {"andw",       one(0140100),   one(0170700), ";wDd", m68000up },
 {"andw",       one(0140500),   one(0170700), "Dd~w", m68000up },
 {"andl",       one(0001200),   one(0177700), "#l$s", m68000up },
-{"andl",       one(0001200),   one(0177700), "#lDs", mcf5200 },
-{"andl",       one(0140200),   one(0170700), ";lDd", m68000up | mcf5200 },
-{"andl",       one(0140600),   one(0170700), "Dd~l", m68000up | mcf5200 },
+{"andl",       one(0001200),   one(0177700), "#lDs", mcf },
+{"andl",       one(0140200),   one(0170700), ";lDd", m68000up | mcf },
+{"andl",       one(0140600),   one(0170700), "Dd~l", m68000up | mcf },
 {"and",                one(0001100),   one(0177700), "#w$w", m68000up },
 {"and",                one(0001074),   one(0177777), "#bCs", m68000up },
 {"and",                one(0001174),   one(0177777), "#wSs", m68000up },
@@ -103,82 +105,84 @@ const struct m68k_opcode m68k_opcodes[] =
 {"aslw",       one(0160500),   one(0170770), "QdDs", m68000up },
 {"aslw",       one(0160540),   one(0170770), "DdDs", m68000up },
 {"aslw",       one(0160700),   one(0177700), "~s",   m68000up },
-{"asll",       one(0160600),   one(0170770), "QdDs", m68000up | mcf5200 },
-{"asll",       one(0160640),   one(0170770), "DdDs", m68000up | mcf5200 },
+{"asll",       one(0160600),   one(0170770), "QdDs", m68000up | mcf },
+{"asll",       one(0160640),   one(0170770), "DdDs", m68000up | mcf },
 
 {"asrb",       one(0160000),   one(0170770), "QdDs", m68000up },
 {"asrb",       one(0160040),   one(0170770), "DdDs", m68000up },
 {"asrw",       one(0160100),   one(0170770), "QdDs", m68000up },
 {"asrw",       one(0160140),   one(0170770), "DdDs", m68000up },
 {"asrw",       one(0160300),   one(0177700), "~s",   m68000up },
-{"asrl",       one(0160200),   one(0170770), "QdDs", m68000up | mcf5200 },
-{"asrl",       one(0160240),   one(0170770), "DdDs", m68000up | mcf5200 },
-
-{"bhiw",       one(0061000),   one(0177777), "BW", m68000up | mcf5200 },
-{"blsw",       one(0061400),   one(0177777), "BW", m68000up | mcf5200 },
-{"bccw",       one(0062000),   one(0177777), "BW", m68000up | mcf5200 },
-{"bcsw",       one(0062400),   one(0177777), "BW", m68000up | mcf5200 },
-{"bnew",       one(0063000),   one(0177777), "BW", m68000up | mcf5200 },
-{"beqw",       one(0063400),   one(0177777), "BW", m68000up | mcf5200 },
-{"bvcw",       one(0064000),   one(0177777), "BW", m68000up | mcf5200 },
-{"bvsw",       one(0064400),   one(0177777), "BW", m68000up | mcf5200 },
-{"bplw",       one(0065000),   one(0177777), "BW", m68000up | mcf5200 },
-{"bmiw",       one(0065400),   one(0177777), "BW", m68000up | mcf5200 },
-{"bgew",       one(0066000),   one(0177777), "BW", m68000up | mcf5200 },
-{"bltw",       one(0066400),   one(0177777), "BW", m68000up | mcf5200 },
-{"bgtw",       one(0067000),   one(0177777), "BW", m68000up | mcf5200 },
-{"blew",       one(0067400),   one(0177777), "BW", m68000up | mcf5200 },
-
-{"bhil",       one(0061377),   one(0177777), "BL", m68020up | cpu32 },
-{"blsl",       one(0061777),   one(0177777), "BL", m68020up | cpu32 },
-{"bccl",       one(0062377),   one(0177777), "BL", m68020up | cpu32 },
-{"bcsl",       one(0062777),   one(0177777), "BL", m68020up | cpu32 },
-{"bnel",       one(0063377),   one(0177777), "BL", m68020up | cpu32 },
-{"beql",       one(0063777),   one(0177777), "BL", m68020up | cpu32 },
-{"bvcl",       one(0064377),   one(0177777), "BL", m68020up | cpu32 },
-{"bvsl",       one(0064777),   one(0177777), "BL", m68020up | cpu32 },
-{"bpll",       one(0065377),   one(0177777), "BL", m68020up | cpu32 },
-{"bmil",       one(0065777),   one(0177777), "BL", m68020up | cpu32 },
-{"bgel",       one(0066377),   one(0177777), "BL", m68020up | cpu32 },
-{"bltl",       one(0066777),   one(0177777), "BL", m68020up | cpu32 },
-{"bgtl",       one(0067377),   one(0177777), "BL", m68020up | cpu32 },
-{"blel",       one(0067777),   one(0177777), "BL", m68020up | cpu32 },
-
-{"bhis",       one(0061000),   one(0177400), "BB", m68000up | mcf5200 },
-{"blss",       one(0061400),   one(0177400), "BB", m68000up | mcf5200 },
-{"bccs",       one(0062000),   one(0177400), "BB", m68000up | mcf5200 },
-{"bcss",       one(0062400),   one(0177400), "BB", m68000up | mcf5200 },
-{"bnes",       one(0063000),   one(0177400), "BB", m68000up | mcf5200 },
-{"beqs",       one(0063400),   one(0177400), "BB", m68000up | mcf5200 },
-{"bvcs",       one(0064000),   one(0177400), "BB", m68000up | mcf5200 },
-{"bvss",       one(0064400),   one(0177400), "BB", m68000up | mcf5200 },
-{"bpls",       one(0065000),   one(0177400), "BB", m68000up | mcf5200 },
-{"bmis",       one(0065400),   one(0177400), "BB", m68000up | mcf5200 },
-{"bges",       one(0066000),   one(0177400), "BB", m68000up | mcf5200 },
-{"blts",       one(0066400),   one(0177400), "BB", m68000up | mcf5200 },
-{"bgts",       one(0067000),   one(0177400), "BB", m68000up | mcf5200 },
-{"bles",       one(0067400),   one(0177400), "BB", m68000up | mcf5200 },
-
-{"jhi",                one(0061000),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jls",                one(0061400),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jcc",                one(0062000),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jcs",                one(0062400),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jne",                one(0063000),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jeq",                one(0063400),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jvc",                one(0064000),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jvs",                one(0064400),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jpl",                one(0065000),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jmi",                one(0065400),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jge",                one(0066000),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jlt",                one(0066400),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jgt",                one(0067000),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jle",                one(0067400),   one(0177400), "Bg", m68000up | mcf5200 },
-
-{"bchg",       one(0000500),   one(0170700), "Dd$s", m68000up | mcf5200 },
-{"bchg",       one(0004100),   one(0177700), "#b$s", m68000up | mcf5200 },
-
-{"bclr",       one(0000600),   one(0170700), "Dd$s", m68000up | mcf5200 },
-{"bclr",       one(0004200),   one(0177700), "#b$s", m68000up | mcf5200 },
+{"asrl",       one(0160200),   one(0170770), "QdDs", m68000up | mcf },
+{"asrl",       one(0160240),   one(0170770), "DdDs", m68000up | mcf },
+
+{"bhiw",       one(0061000),   one(0177777), "BW", m68000up | mcf },
+{"blsw",       one(0061400),   one(0177777), "BW", m68000up | mcf },
+{"bccw",       one(0062000),   one(0177777), "BW", m68000up | mcf },
+{"bcsw",       one(0062400),   one(0177777), "BW", m68000up | mcf },
+{"bnew",       one(0063000),   one(0177777), "BW", m68000up | mcf },
+{"beqw",       one(0063400),   one(0177777), "BW", m68000up | mcf },
+{"bvcw",       one(0064000),   one(0177777), "BW", m68000up | mcf },
+{"bvsw",       one(0064400),   one(0177777), "BW", m68000up | mcf },
+{"bplw",       one(0065000),   one(0177777), "BW", m68000up | mcf },
+{"bmiw",       one(0065400),   one(0177777), "BW", m68000up | mcf },
+{"bgew",       one(0066000),   one(0177777), "BW", m68000up | mcf },
+{"bltw",       one(0066400),   one(0177777), "BW", m68000up | mcf },
+{"bgtw",       one(0067000),   one(0177777), "BW", m68000up | mcf },
+{"blew",       one(0067400),   one(0177777), "BW", m68000up | mcf },
+
+{"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 },
+{"bccs",       one(0062000),   one(0177400), "BB", m68000up | mcf },
+{"bcss",       one(0062400),   one(0177400), "BB", m68000up | mcf },
+{"bnes",       one(0063000),   one(0177400), "BB", m68000up | mcf },
+{"beqs",       one(0063400),   one(0177400), "BB", m68000up | mcf },
+{"bvcs",       one(0064000),   one(0177400), "BB", m68000up | mcf },
+{"bvss",       one(0064400),   one(0177400), "BB", m68000up | mcf },
+{"bpls",       one(0065000),   one(0177400), "BB", m68000up | mcf },
+{"bmis",       one(0065400),   one(0177400), "BB", m68000up | mcf },
+{"bges",       one(0066000),   one(0177400), "BB", m68000up | mcf },
+{"blts",       one(0066400),   one(0177400), "BB", m68000up | mcf },
+{"bgts",       one(0067000),   one(0177400), "BB", m68000up | mcf },
+{"bles",       one(0067400),   one(0177400), "BB", m68000up | mcf },
+
+{"jhi",                one(0061000),   one(0177400), "Bg", m68000up | mcf },
+{"jls",                one(0061400),   one(0177400), "Bg", m68000up | mcf },
+{"jcc",                one(0062000),   one(0177400), "Bg", m68000up | mcf },
+{"jcs",                one(0062400),   one(0177400), "Bg", m68000up | mcf },
+{"jne",                one(0063000),   one(0177400), "Bg", m68000up | mcf },
+{"jeq",                one(0063400),   one(0177400), "Bg", m68000up | mcf },
+{"jvc",                one(0064000),   one(0177400), "Bg", m68000up | mcf },
+{"jvs",                one(0064400),   one(0177400), "Bg", m68000up | mcf },
+{"jpl",                one(0065000),   one(0177400), "Bg", m68000up | mcf },
+{"jmi",                one(0065400),   one(0177400), "Bg", m68000up | mcf },
+{"jge",                one(0066000),   one(0177400), "Bg", m68000up | mcf },
+{"jlt",                one(0066400),   one(0177400), "Bg", m68000up | mcf },
+{"jgt",                one(0067000),   one(0177400), "Bg", m68000up | mcf },
+{"jle",                one(0067400),   one(0177400), "Bg", m68000up | mcf },
+
+{"bchg",       one(0000500),   one(0170700), "Dd$s", m68000up | mcf },
+{"bchg",       one(0004100),   one(0177700), "#b$s", m68000up },
+{"bchg",       one(0004100),   one(0177700), "#bqs", 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 },
 
 {"bfchg",      two(0165300, 0), two(0177700, 0170000), "?sO2O3",   m68020up },
 {"bfclr",      two(0166300, 0), two(0177700, 0170000), "?sO2O3",   m68020up },
@@ -189,25 +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},
 
-{"braw",       one(0060000),   one(0177777), "BW", m68000up | mcf5200 },
-{"bral",       one(0060377),   one(0177777), "BL", m68020up | cpu32 },
-{"bras",       one(0060000),   one(0177400), "BB", m68000up | mcf5200 },
+{"bkpt",       one(0044110),   one(0177770), "ts", m68010up },
 
-{"bset",       one(0000700),   one(0170700), "Dd$s", m68000up | mcf5200 },
-{"bset",       one(0004300),   one(0177700), "#b$s", m68000up | mcf5200 },
+{"braw",       one(0060000),   one(0177777), "BW", m68000up | mcf },
+{"bral",       one(0060377),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bras",       one(0060000),   one(0177400), "BB", m68000up | mcf },
 
-{"bsrw",       one(0060400),   one(0177777), "BW", m68000up | mcf5200 },
-{"bsrl",       one(0060777),   one(0177777), "BL", m68020up | cpu32 },
-{"bsrs",       one(0060400),   one(0177400), "BB", m68000up | mcf5200 },
+{"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 },
 
-{"btst",       one(0000400),   one(0170700), "Dd@s", m68000up | mcf5200 },
-{"btst",       one(0004000),   one(0177700), "#b@s", m68000up | mcf5200 },
+{"bsrw",       one(0060400),   one(0177777), "BW", m68000up | mcf },
+{"bsrl",       one(0060777),   one(0177777), "BL", m68020up | cpu32 | mcfv4up},
+{"bsrs",       one(0060400),   one(0177400), "BB", m68000up | mcf },
 
-{"callm",      one(0003300),           one(0177700), "#b!s", m68020 },
+{"btst",       one(0000400),   one(0170700), "Dd;b", m68000up | mcf },
+{"btst",       one(0004000),   one(0177700), "#b@s", m68000up },
+{"btst",       one(0004000),   one(0177700), "#bqs", mcf },
+
+{"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 },
@@ -234,47 +245,51 @@ const struct m68k_opcode m68k_opcodes[] =
 {"cinvp",      one(0xf400|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
 
 {"cpusha",     one(0xf420|SCOPE_ALL),  one(0xff38), "ce",   m68040up },
-{"cpushl",     one(0xf420|SCOPE_LINE), one(0xff38), "ceas", m68040up },
-{"cpushl",     one(0x04e8),            one(0xfff8), "as",   mcf5200  },
+{"cpushl",     one(0xf420|SCOPE_LINE), one(0xff38), "ceas", m68040up | mcf },
 {"cpushp",     one(0xf420|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
 
 #undef SCOPE_LINE
 #undef SCOPE_PAGE
 #undef SCOPE_ALL
 
-{"clrb",       one(0041000),   one(0177700), "$s", m68000up | mcf5200 },
-{"clrw",       one(0041100),   one(0177700), "$s", m68000up | mcf5200 },
-{"clrl",       one(0041200),   one(0177700), "$s", m68000up | mcf5200 },
+{"clrb",       one(0041000),   one(0177700), "$s", m68000up | mcf },
+{"clrw",       one(0041100),   one(0177700), "$s", m68000up | mcf },
+{"clrl",       one(0041200),   one(0177700), "$s", m68000up | mcf },
 
 {"cmp2b",      two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
 {"cmp2w",      two(0001300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
 {"cmp2l",      two(0002300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
 
 {"cmpaw",      one(0130300),   one(0170700), "*wAd", m68000up },
-{"cmpal",      one(0130700),   one(0170700), "*lAd", m68000up | mcf5200 },
+{"cmpal",      one(0130700),   one(0170700), "*lAd", m68000up | mcf },
 
-{"cmpib",      one(0006000),   one(0177700), "#b;s", m68000up },
-{"cmpiw",      one(0006100),   one(0177700), "#w;s", m68000up },
-{"cmpil",      one(0006200),   one(0177700), "#l;s", m68000up },
-{"cmpil",      one(0006200),   one(0177700), "#lDs", mcf5200 },
+{"cmpib",      one(0006000),   one(0177700), "#b@s", m68000up },
+{"cmpib",      one(0006000),   one(0177700), "#bDs", mcfv4up },
+{"cmpiw",      one(0006100),   one(0177700), "#w@s", m68000up },
+{"cmpiw",      one(0006100),   one(0177700), "#wDs", mcfv4up },
+{"cmpil",      one(0006200),   one(0177700), "#l@s", m68000up },
+{"cmpil",      one(0006200),   one(0177700), "#lDs", mcf },
 
 {"cmpmb",      one(0130410),   one(0170770), "+s+d", m68000up },
 {"cmpmw",      one(0130510),   one(0170770), "+s+d", m68000up },
 {"cmpml",      one(0130610),   one(0170770), "+s+d", m68000up },
 
 /* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions.  */
-{"cmpb",       one(0006000),   one(0177700), "#b;s", m68000up },
+{"cmpb",       one(0006000),   one(0177700), "#b@s", m68000up },
+{"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", mcfv4up },
 {"cmpw",       one(0130300),   one(0170700), "*wAd", m68000up },
-{"cmpw",       one(0006100),   one(0177700), "#w;s", m68000up },
+{"cmpw",       one(0006100),   one(0177700), "#w@s", m68000up },
+{"cmpw",       one(0006100),   one(0177700), "#wDs", mcfv4up },
 {"cmpw",       one(0130510),   one(0170770), "+s+d", m68000up },
-{"cmpw",       one(0130100),   one(0170700), "*wDd", m68000up },
-{"cmpl",       one(0130700),   one(0170700), "*lAd", m68000up | mcf5200 },
-{"cmpl",       one(0006200),   one(0177700), "#l;s", m68000up },
-{"cmpl",       one(0006200),   one(0177700), "#lDs", mcf5200 },
+{"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 },
 {"cmpl",       one(0130610),   one(0170770), "+s+d", m68000up },
-{"cmpl",       one(0130200),   one(0170700), "*lDd", m68000up | mcf5200 },
+{"cmpl",       one(0130200),   one(0170700), "*lDd", m68000up | mcf },
 
 {"dbcc",       one(0052310),   one(0177770), "DsBw", m68000up },
 {"dbcs",       one(0052710),   one(0177770), "DsBw", m68000up },
@@ -293,18 +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 },
+{"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",   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 },
+{"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",   mcf5206eup },
 
 {"divull", two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
 {"divull", two(0046100,0000000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
@@ -314,7 +331,7 @@ const struct m68k_opcode m68k_opcodes[] =
 {"eoriw",      one(0005100),   one(0177700), "#w$s", m68000up },
 {"eoriw",      one(0005174),   one(0177777), "#wSs", m68000up },
 {"eoril",      one(0005200),   one(0177700), "#l$s", m68000up },
-{"eoril",      one(0005200),   one(0177700), "#lDs", mcf5200 },
+{"eoril",      one(0005200),   one(0177700), "#lDs", mcf },
 {"eori",       one(0005074),   one(0177777), "#bCs", m68000up },
 {"eori",       one(0005174),   one(0177777), "#wSs", m68000up },
 {"eori",       one(0005100),   one(0177700), "#w$s", m68000up },
@@ -327,8 +344,8 @@ const struct m68k_opcode m68k_opcodes[] =
 {"eorw",       one(0005174),   one(0177777), "#wSs", m68000up },
 {"eorw",       one(0130500),   one(0170700), "Dd$s", m68000up },
 {"eorl",       one(0005200),   one(0177700), "#l$s", m68000up },
-{"eorl",       one(0005200),   one(0177700), "#lDs", mcf5200 },
-{"eorl",       one(0130600),   one(0170700), "Dd$s", m68000up | mcf5200 },
+{"eorl",       one(0005200),   one(0177700), "#lDs", mcf },
+{"eorl",       one(0130600),   one(0170700), "Dd$s", m68000up | mcf },
 {"eor",                one(0005074),   one(0177777), "#bCs", m68000up },
 {"eor",                one(0005174),   one(0177777), "#wSs", m68000up },
 {"eor",                one(0005100),   one(0177700), "#w$s", m68000up },
@@ -339,37 +356,60 @@ const struct m68k_opcode m68k_opcodes[] =
 {"exg",                one(0140610),   one(0170770), "DdAs", m68000up },
 {"exg",                one(0140610),   one(0170770), "AsDd", m68000up },
 
-{"extw",       one(0044200),   one(0177770), "Ds", m68000up|mcf5200 },
-{"extl",       one(0044300),   one(0177770), "Ds", m68000up|mcf5200 },
-{"extbl",      one(0044700),   one(0177770), "Ds", m68020up|cpu32|mcf5200 },
+{"extw",       one(0044200),   one(0177770), "Ds", m68000up|mcf },
+{"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},
@@ -386,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 },
@@ -442,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 },
 
@@ -604,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 },
 
@@ -671,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 },
@@ -739,47 +836,88 @@ 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 },
 /* 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 },
 {"fmovel",     two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", 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 },
 {"fmovep",     two(0xF000, 0x4C00), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
 {"fmovep",     two(0xF000, 0x6C00), two(0xF1C0, 0xFC00), "IiF7~pkC", mfloat },
 {"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 },
@@ -800,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 },
@@ -818,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 },
@@ -886,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 },
@@ -984,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 },
@@ -1105,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 },
@@ -1173,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 },
 
@@ -1191,27 +1419,28 @@ const struct m68k_opcode m68k_opcodes[] =
 {"ftwotoxx",   two(0xF000, 0x4811), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 {"ftwotoxx",   two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
 
-{"halt",       one(0045310),   one(0177777), "",     mcf5200 },
+{"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 | mcf5200 },
+{"jmp",                one(0047300),   one(0177700), "!s", m68000up | mcf },
 
-{"jra",                one(0060000),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jra",                one(0047300),   one(0177700), "!s", m68000up | mcf5200 },
+{"jra",                one(0060000),   one(0177400), "Bg", m68000up | mcf },
+{"jra",                one(0047300),   one(0177700), "!s", m68000up | mcf },
 
-{"jsr",                one(0047200),   one(0177700), "!s", m68000up | mcf5200 },
+{"jsr",                one(0047200),   one(0177700), "!s", m68000up | mcf },
 
-{"jbsr",       one(0060400),   one(0177400), "Bg", m68000up | mcf5200 },
-{"jbsr",       one(0047200),   one(0177700), "!s", m68000up | mcf5200 },
+{"jbsr",       one(0060400),   one(0177400), "Bg", m68000up | mcf },
+{"jbsr",       one(0047200),   one(0177700), "!s", m68000up | mcf },
 
-{"lea",                one(0040700),   one(0170700), "!sAd", m68000up | mcf5200 },
+{"lea",                one(0040700),   one(0170700), "!sAd", m68000up | mcf },
 
-{"lpstop",     two(0174000,0000700), two(0177777,0177777), "", cpu32|m68060 },
+{"lpstop",     two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 },
 
-{"linkw",      one(0047120),   one(0177770), "As#w", m68000up | mcf5200 },
+{"linkw",      one(0047120),   one(0177770), "As#w", m68000up | mcf },
 {"linkl",      one(0044010),   one(0177770), "As#l", m68020up | cpu32 },
-{"link",       one(0047120),   one(0177770), "As#W", m68000up | mcf5200 },
+{"link",       one(0047120),   one(0177770), "As#W", m68000up | mcf },
 {"link",       one(0044010),   one(0177770), "As#l", m68020up | cpu32 },
 
 {"lslb",       one(0160410),   one(0170770), "QdDs", m68000up },
@@ -1219,39 +1448,78 @@ const struct m68k_opcode m68k_opcodes[] =
 {"lslw",       one(0160510),   one(0170770), "QdDs", m68000up },
 {"lslw",       one(0160550),   one(0170770), "DdDs", m68000up },
 {"lslw",       one(0161700),   one(0177700), "~s",   m68000up },
-{"lsll",       one(0160610),   one(0170770), "QdDs", m68000up | mcf5200 },
-{"lsll",       one(0160650),   one(0170770), "DdDs", m68000up | mcf5200 },
+{"lsll",       one(0160610),   one(0170770), "QdDs", m68000up | mcf },
+{"lsll",       one(0160650),   one(0170770), "DdDs", m68000up | mcf },
 
 {"lsrb",       one(0160010),   one(0170770), "QdDs", m68000up },
 {"lsrb",       one(0160050),   one(0170770), "DdDs", m68000up },
 {"lsrw",       one(0160110),   one(0170770), "QdDs", m68000up },
 {"lsrw",       one(0160150),   one(0170770), "DdDs", m68000up },
 {"lsrw",       one(0161300),   one(0177700), "~s",   m68000up },
-{"lsrl",       one(0160210),   one(0170770), "QdDs", m68000up | mcf5200 },
-{"lsrl",       one(0160250),   one(0170770), "DdDs", m68000up | mcf5200 },
-
-/* NOTE: The mcf5200 family programmer's reference manual does not 
+{"lsrl",       one(0160210),   one(0170770), "QdDs", m68000up | mcf },
+{"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", 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
  */
 
-{"moveal",     one(0020100),   one(0170700), "*lAd", m68000up | mcf5200 },
-{"moveaw",     one(0030100),   one(0170700), "*wAd", m68000up | mcf5200 },
+{"moveal",     one(0020100),   one(0170700), "*lAd", m68000up | mcf },
+{"moveaw",     one(0030100),   one(0170700), "*wAd", m68000up | mcf },
 
-{"movec",      one(0047173),   one(0177777), "R1Jj", m68010up | mcf5200 },
-{"movec",      one(0047173),   one(0177777), "R1#j", m68010up | mcf5200 },
+{"movec",      one(0047173),   one(0177777), "R1Jj", m68010up | mcf },
+{"movec",      one(0047173),   one(0177777), "R1#j", m68010up | mcf },
 {"movec",      one(0047172),   one(0177777), "JjR1", m68010up },
 {"movec",      one(0047172),   one(0177777), "#jR1", m68010up },
 
@@ -1266,70 +1534,96 @@ const struct m68k_opcode m68k_opcodes[] =
 {"moveml",     one(0046300),   one(0177700), "<sLw", m68000up },
 {"moveml",     one(0046300),   one(0177700), "<s#w", m68000up },
 /* FIXME: need specifier for mode 2 and 5 to simplify below insn patterns */
-{"moveml",     one(0044320),   one(0177770), "Lwas", mcf5200 },
-{"moveml",     one(0044320),   one(0177770), "#was", mcf5200 },
-{"moveml",     one(0044350),   one(0177770), "Lwds", mcf5200 },
-{"moveml",     one(0044350),   one(0177770), "#wds", mcf5200 },
-{"moveml",     one(0046320),   one(0177770), "asLw", mcf5200 },
-{"moveml",     one(0046320),   one(0177770), "as#w", mcf5200 },
-{"moveml",     one(0046350),   one(0177770), "dsLw", mcf5200 },
-{"moveml",     one(0046350),   one(0177770), "ds#w", mcf5200 },
+{"moveml",     one(0044320),   one(0177770), "Lwas", mcf },
+{"moveml",     one(0044320),   one(0177770), "#was", mcf },
+{"moveml",     one(0044350),   one(0177770), "Lwds", mcf },
+{"moveml",     one(0044350),   one(0177770), "#wds", mcf },
+{"moveml",     one(0046320),   one(0177770), "asLw", mcf },
+{"moveml",     one(0046320),   one(0177770), "as#w", mcf },
+{"moveml",     one(0046350),   one(0177770), "dsLw", mcf },
+{"moveml",     one(0046350),   one(0177770), "ds#w", mcf },
 
 {"movepw",     one(0000410),   one(0170770), "dsDd", m68000up },
 {"movepw",     one(0000610),   one(0170770), "Ddds", m68000up },
 {"movepl",     one(0000510),   one(0170770), "dsDd", m68000up },
 {"movepl",     one(0000710),   one(0170770), "Ddds", m68000up },
 
-{"moveq",      one(0070000),   one(0170400), "MsDd", m68000up | mcf5200 },
-{"moveq",      one(0070000),   one(0170400), "#BDd", m68000up | mcf5200 },
+{"moveq",      one(0070000),   one(0170400), "MsDd", m68000up | mcf },
+{"moveq",      one(0070000),   one(0170400), "#BDd", m68000up | mcf },
 
 /* The move opcode can generate the movea and moveq instructions.  */
 {"moveb",      one(0010000),   one(0170000), ";b$d", m68000up },
-{"moveb",      one(0010000),   one(0170000), "ms$d", mcf5200 },
-{"moveb",      one(0010000),   one(0170000), "nspd", mcf5200 },
-{"moveb",      one(0010000),   one(0170000), "obmd", mcf5200 },
+{"moveb",      one(0010000),   one(0170070), "Ds$d", mcf },
+{"moveb",      one(0010020),   one(0170070), "as$d", mcf },
+{"moveb",      one(0010030),   one(0170070), "+s$d", mcf },
+{"moveb",      one(0010040),   one(0170070), "-s$d", mcf },
+{"moveb",      one(0010000),   one(0170000), "nsqd", mcf },
+{"moveb",      one(0010000),   one(0170700), "obDd", mcf },
+{"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", mcfv4up },
 
 {"movew",      one(0030000),   one(0170000), "*w%d", m68000up },
-{"movew",      one(0030000),   one(0170000), "ms%d", mcf5200 },
-{"movew",      one(0030000),   one(0170000), "nspd", mcf5200 },
-{"movew",      one(0030000),   one(0170000), "owmd", mcf5200 },
+{"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", mcfv4up },
 {"movew",      one(0040300),   one(0177700), "Ss$s", m68000up },
-{"movew",      one(0040300),   one(0177770), "SsDs", mcf5200 },
+{"movew",      one(0040300),   one(0177770), "SsDs", mcf },
 {"movew",      one(0041300),   one(0177700), "Cs$s", m68010up },
-{"movew",      one(0041300),   one(0177770), "CsDs", mcf5200 },
+{"movew",      one(0041300),   one(0177770), "CsDs", mcf },
 {"movew",      one(0042300),   one(0177700), ";wCd", m68000up },
-{"movew",      one(0042300),   one(0177700), "DsCd", mcf5200 },
-{"movew",      one(0042300),   one(0177700), "#wCd", mcf5200 },
+{"movew",      one(0042300),   one(0177700), "DsCd", mcf },
+{"movew",      one(0042374),   one(0177777), "#wCd", mcf },
 {"movew",      one(0043300),   one(0177700), ";wSd", m68000up },
-{"movew",      one(0043300),   one(0177700), "DsSd", mcf5200 },
-{"movew",      one(0043300),   one(0177700), "#wSd", mcf5200 },
+{"movew",      one(0043300),   one(0177700), "DsSd", mcf },
+{"movew",      one(0043374),   one(0177777), "#wSd", mcf },
 
-{"movel",      one(0070000),   one(0170400), "MsDd", m68000up | mcf5200 },
+{"movel",      one(0070000),   one(0170400), "MsDd", m68000up | mcf },
 {"movel",      one(0020000),   one(0170000), "*l%d", m68000up },
-{"movel",      one(0020000),   one(0170000), "ms%d", mcf5200 },
-{"movel",      one(0020000),   one(0170000), "nspd", mcf5200 },
-{"movel",      one(0020000),   one(0170000), "olmd", mcf5200 },
-{"movel",      one(0047140),   one(0177770), "AsUd", m68000up },
-{"movel",      one(0047150),   one(0177770), "UdAs", m68000up },
+{"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", 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", mcf5200 },
-{"move",       one(0030000),   one(0170000), "nspd", mcf5200 },
-{"move",       one(0030000),   one(0170000), "owmd", mcf5200 },
+{"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", mcfv4up },
 {"move",       one(0040300),   one(0177700), "Ss$s", m68000up },
-{"move",       one(0040300),   one(0177770), "SsDs", mcf5200 },
+{"move",       one(0040300),   one(0177770), "SsDs", mcf },
 {"move",       one(0041300),   one(0177700), "Cs$s", m68010up },
-{"move",       one(0041300),   one(0177770), "CsDs", mcf5200 },
+{"move",       one(0041300),   one(0177770), "CsDs", mcf },
 {"move",       one(0042300),   one(0177700), ";wCd", m68000up },
-{"move",       one(0042300),   one(0177700), "DsCd", mcf5200 },
-{"move",       one(0042300),   one(0177700), "#wCd", mcf5200 },
+{"move",       one(0042300),   one(0177700), "DsCd", mcf },
+{"move",       one(0042374),   one(0177777), "#wCd", mcf },
 {"move",       one(0043300),   one(0177700), ";wSd", m68000up },
-{"move",       one(0043300),   one(0177700), "DsSd", mcf5200 },
-{"move",       one(0043300),   one(0177700), "#wSd", mcf5200 },
+{"move",       one(0043300),   one(0177700), "DsSd", mcf },
+{"move",       one(0043374),   one(0177777), "#wSd", mcf },
 
 {"move",       one(0047140),   one(0177770), "AsUd", m68000up },
 {"move",       one(0047150),   one(0177770), "UdAs", m68000up },
 
+{"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 },
 {"movesw",     two(0007100, 0),     two(0177700, 07777), "~sR1", m68010up },
@@ -1343,12 +1637,53 @@ const struct m68k_opcode m68k_opcodes[] =
 {"move16",     one(0xf610),            one(0xfff8), "as_L", m68040up },
 {"move16",     one(0xf618),            one(0xfff8), "_Las", m68040up },
 
-{"mulsw",      one(0140700),           one(0170700), ";wDd", m68000up|mcf5200 },
-{"mulsl",      two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32|mcf5200 },
+  /* FIXME: add MAM mode (`&' after <ea> operand) / remove MSACM */
+{"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 },
+{"mulsl",      two(0046000,004000), two(0177700,0107770), "qsD1", mcf },
 {"mulsl",      two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
 
-{"muluw",      one(0140300),           one(0170700), ";wDd", m68000up|mcf5200 },
-{"mulul",      two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32|mcf5200 },
+{"muluw",      one(0140300),           one(0170700), ";wDd", m68000up|mcf },
+{"mulul",      two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
+{"mulul",      two(0046000,000000), two(0177700,0107770), "qsD1", mcf },
 {"mulul",      two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
 
 {"nbcd",       one(0044000),   one(0177700), "$s", m68000up },
@@ -1356,26 +1691,26 @@ const struct m68k_opcode m68k_opcodes[] =
 {"negb",       one(0042000),   one(0177700), "$s", m68000up },
 {"negw",       one(0042100),   one(0177700), "$s", m68000up },
 {"negl",       one(0042200),   one(0177700), "$s", m68000up },
-{"negl",       one(0042200),   one(0177700), "Ds", mcf5200},
+{"negl",       one(0042200),   one(0177700), "Ds", mcf},
 
 {"negxb",      one(0040000),   one(0177700), "$s", m68000up },
 {"negxw",      one(0040100),   one(0177700), "$s", m68000up },
 {"negxl",      one(0040200),   one(0177700), "$s", m68000up },
-{"negxl",      one(0040200),   one(0177700), "Ds", mcf5200},
+{"negxl",      one(0040200),   one(0177700), "Ds", mcf},
 
-{"nop",                one(0047161),   one(0177777), "", m68000up | mcf5200},
+{"nop",                one(0047161),   one(0177777), "", m68000up | mcf},
 
 {"notb",       one(0043000),   one(0177700), "$s", m68000up },
 {"notw",       one(0043100),   one(0177700), "$s", m68000up },
 {"notl",       one(0043200),   one(0177700), "$s", m68000up },
-{"notl",       one(0043200),   one(0177700), "Ds", mcf5200},
+{"notl",       one(0043200),   one(0177700), "Ds", mcf},
 
 {"orib",       one(0000000),   one(0177700), "#b$s", m68000up },
 {"orib",       one(0000074),   one(0177777), "#bCs", m68000up },
 {"oriw",       one(0000100),   one(0177700), "#w$s", m68000up },
 {"oriw",       one(0000174),   one(0177777), "#wSs", m68000up },
 {"oril",       one(0000200),   one(0177700), "#l$s", m68000up },
-{"oril",       one(0000200),   one(0177700), "#lDs", mcf5200 },
+{"oril",       one(0000200),   one(0177700), "#lDs", mcf },
 {"ori",                one(0000074),   one(0177777), "#bCs", m68000up },
 {"ori",                one(0000100),   one(0177700), "#w$s", m68000up },
 {"ori",                one(0000174),   one(0177777), "#wSs", m68000up },
@@ -1390,9 +1725,9 @@ const struct m68k_opcode m68k_opcodes[] =
 {"orw",                one(0100100),   one(0170700), ";wDd", m68000up },
 {"orw",                one(0100500),   one(0170700), "Dd~s", m68000up },
 {"orl",                one(0000200),   one(0177700), "#l$s", m68000up },
-{"orl",                one(0000200),   one(0177700), "#lDs", mcf5200 },
-{"orl",                one(0100200),   one(0170700), ";lDd", m68000up | mcf5200 },
-{"orl",                one(0100600),   one(0170700), "Dd~s", m68000up | mcf5200 },
+{"orl",                one(0000200),   one(0177700), "#lDs", mcf },
+{"orl",                one(0100200),   one(0170700), ";lDd", m68000up | mcf },
+{"orl",                one(0100600),   one(0170700), "Dd~s", m68000up | mcf },
 {"or",         one(0000074),   one(0177777), "#bCs", m68000up },
 {"or",         one(0000100),   one(0177700), "#w$s", m68000up },
 {"or",         one(0000174),   one(0177777), "#wSs", m68000up },
@@ -1452,7 +1787,7 @@ const struct m68k_opcode m68k_opcodes[] =
 {"pdbwc",      two(0xf048, 0x0009),    two(0xfff8, 0xffff), "DsBw", m68851 },
 {"pdbws",      two(0xf048, 0x0008),    two(0xfff8, 0xffff), "DsBw", m68851 },
 
-{"pea",                one(0044100),           one(0177700), "!s", m68000up|mcf5200 },
+{"pea",                one(0044100),           one(0177700), "!s", m68000up|mcf },
 
 {"pflusha",    one(0xf518),            one(0xfff8), "", m68040up },
 {"pflusha",    two(0xf000,0x2400), two(0xffff,0xffff), "", m68030 | m68851 },
@@ -1610,11 +1945,15 @@ const struct m68k_opcode m68k_opcodes[] =
 {"ptrapwsl",   two(0xf07b, 0x0008),    two(0xffff, 0xffff), "#l", m68851 },
 {"ptrapws",    two(0xf07c, 0x0008),    two(0xffff, 0xffff), "",   m68851 },
 
-{"pulse",      one(0045314),           one(0177777), "", mcf5200 },
+{"pulse",      one(0045314),           one(0177777), "", m68060 | mcf },
 
 {"pvalid",     two(0xf000, 0x2800),    two(0xffc0, 0xffff), "Vs&s", m68851 },
 {"pvalid",     two(0xf000, 0x2c00),    two(0xffc0, 0xfff8), "A3&s", m68851 },
 
+  /* FIXME: don't allow Dw==Dx. */
+{"remsl",       two(0x4c40, 0x0800),    two(0xffc0, 0x8ff8), "qsD3D1", mcf5206eup },
+{"remul",       two(0x4c40, 0x0000),    two(0xffc0, 0x8ff8), "qsD3D1", mcf5206eup },
+
 {"reset",      one(0047160),           one(0177777), "", m68000up },
 
 {"rolb",       one(0160430),           one(0170770), "QdDs", m68000up },
@@ -1651,64 +1990,67 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"rtd",                one(0047164),           one(0177777), "#w", m68010up },
 
-{"rte",                one(0047163),           one(0177777), "",   m68000up|mcf5200 },
+{"rte",                one(0047163),           one(0177777), "",   m68000up | mcf },
 
 {"rtm",                one(0003300),           one(0177760), "Rs", m68020 },
 
 {"rtr",                one(0047167),           one(0177777), "",   m68000up },
 
-{"rts",                one(0047165),           one(0177777), "",   m68000up|mcf5200 },
+{"rts",                one(0047165),           one(0177777), "",   m68000up | mcf },
+
+{"satsl",      one(0046200),           one(0177770), "Ds", mcfv4up },
 
 {"sbcd",       one(0100400),           one(0170770), "DsDd", m68000up },
 {"sbcd",       one(0100410),           one(0170770), "-s-d", m68000up },
 
-
 {"scc",                one(0052300),   one(0177700), "$s", m68000up },
-{"scc",                one(0052300),   one(0177700), "Ds", mcf5200 },
+{"scc",                one(0052300),   one(0177700), "Ds", mcf },
 {"scs",                one(0052700),   one(0177700), "$s", m68000up },
-{"scs",                one(0052700),   one(0177700), "Ds", mcf5200 },
+{"scs",                one(0052700),   one(0177700), "Ds", mcf },
 {"seq",                one(0053700),   one(0177700), "$s", m68000up },
-{"seq",                one(0053700),   one(0177700), "Ds", mcf5200 },
+{"seq",                one(0053700),   one(0177700), "Ds", mcf },
 {"sf",         one(0050700),   one(0177700), "$s", m68000up },
-{"sf",         one(0050700),   one(0177700), "Ds", mcf5200 },
+{"sf",         one(0050700),   one(0177700), "Ds", mcf },
 {"sge",                one(0056300),   one(0177700), "$s", m68000up },
-{"sge",                one(0056300),   one(0177700), "Ds", mcf5200 },
+{"sge",                one(0056300),   one(0177700), "Ds", mcf },
 {"sgt",                one(0057300),   one(0177700), "$s", m68000up },
-{"sgt",                one(0057300),   one(0177700), "Ds", mcf5200 },
+{"sgt",                one(0057300),   one(0177700), "Ds", mcf },
 {"shi",                one(0051300),   one(0177700), "$s", m68000up },
-{"shi",                one(0051300),   one(0177700), "Ds", mcf5200 },
+{"shi",                one(0051300),   one(0177700), "Ds", mcf },
 {"sle",                one(0057700),   one(0177700), "$s", m68000up },
-{"sle",                one(0057700),   one(0177700), "Ds", mcf5200 },
+{"sle",                one(0057700),   one(0177700), "Ds", mcf },
 {"sls",                one(0051700),   one(0177700), "$s", m68000up },
-{"sls",                one(0051700),   one(0177700), "Ds", mcf5200 },
+{"sls",                one(0051700),   one(0177700), "Ds", mcf },
 {"slt",                one(0056700),   one(0177700), "$s", m68000up },
-{"slt",                one(0056700),   one(0177700), "Ds", mcf5200 },
+{"slt",                one(0056700),   one(0177700), "Ds", mcf },
 {"smi",                one(0055700),   one(0177700), "$s", m68000up },
-{"smi",                one(0055700),   one(0177700), "Ds", mcf5200 },
+{"smi",                one(0055700),   one(0177700), "Ds", mcf },
 {"sne",                one(0053300),   one(0177700), "$s", m68000up },
-{"sne",                one(0053300),   one(0177700), "Ds", mcf5200 },
+{"sne",                one(0053300),   one(0177700), "Ds", mcf },
 {"spl",                one(0055300),   one(0177700), "$s", m68000up },
-{"spl",                one(0055300),   one(0177700), "Ds", mcf5200 },
+{"spl",                one(0055300),   one(0177700), "Ds", mcf },
 {"st",         one(0050300),   one(0177700), "$s", m68000up },
-{"st",         one(0050300),   one(0177700), "Ds", mcf5200 },
+{"st",         one(0050300),   one(0177700), "Ds", mcf },
 {"svc",                one(0054300),   one(0177700), "$s", m68000up },
-{"svc",                one(0054300),   one(0177700), "Ds", mcf5200 },
+{"svc",                one(0054300),   one(0177700), "Ds", mcf },
 {"svs",                one(0054700),   one(0177700), "$s", m68000up },
-{"svs",                one(0054700),   one(0177700), "Ds", mcf5200 },
+{"svs",                one(0054700),   one(0177700), "Ds", mcf },
 
-{"stop",       one(0047162),   one(0177777), "#w", m68000up | mcf5200 },
+{"stop",       one(0047162),   one(0177777), "#w", m68000up | mcf },
 
-{"subal",      one(0110700),   one(0170700), "*lAd", m68000up | mcf5200 },
+{"strldsr", two(0040347,0043374), two(0177777,0177777), "#w", mcf528x},
+
+{"subal",      one(0110700),   one(0170700), "*lAd", m68000up | mcf },
 {"subaw",      one(0110300),   one(0170700), "*wAd", m68000up },
 
 {"subib",      one(0002000),   one(0177700), "#b$s", m68000up },
 {"subiw",      one(0002100),   one(0177700), "#w$s", m68000up },
 {"subil",      one(0002200),   one(0177700), "#l$s", m68000up },
-{"subil",      one(0002200),   one(0177700), "#lDs", mcf5200 },
+{"subil",      one(0002200),   one(0177700), "#lDs", mcf },
 
 {"subqb",      one(0050400),   one(0170700), "Qd%s", m68000up },
 {"subqw",      one(0050500),   one(0170700), "Qd%s", m68000up },
-{"subql",      one(0050600),   one(0170700), "Qd%s", m68000up | mcf5200 },
+{"subql",      one(0050600),   one(0170700), "Qd%s", m68000up | mcf },
 
 /* The sub opcode can generate the suba, subi, and subq instructions.  */
 {"subb",       one(0050400),   one(0170700), "Qd%s", m68000up },
@@ -1720,21 +2062,21 @@ const struct m68k_opcode m68k_opcodes[] =
 {"subw",       one(0110300),   one(0170700), "*wAd", m68000up },
 {"subw",       one(0110100),   one(0170700), "*wDd", m68000up },
 {"subw",       one(0110500),   one(0170700), "Dd~s", m68000up },
-{"subl",       one(0050600),   one(0170700), "Qd%s", m68000up | mcf5200 },
+{"subl",       one(0050600),   one(0170700), "Qd%s", m68000up | mcf },
 {"subl",       one(0002200),   one(0177700), "#l$s", m68000up },
-{"subl",       one(0002200),   one(0177700), "#lDs", mcf5200 },
-{"subl",       one(0110700),   one(0170700), "*lAd", m68000up | mcf5200 },
-{"subl",       one(0110200),   one(0170700), "*lDd", m68000up | mcf5200 },
-{"subl",       one(0110600),   one(0170700), "Dd~s", m68000up | mcf5200 },
+{"subl",       one(0002200),   one(0177700), "#lDs", mcf },
+{"subl",       one(0110700),   one(0170700), "*lAd", m68000up | mcf },
+{"subl",       one(0110200),   one(0170700), "*lDd", m68000up | mcf },
+{"subl",       one(0110600),   one(0170700), "Dd~s", m68000up | mcf },
 
 {"subxb",      one(0110400),   one(0170770), "DsDd", m68000up },
 {"subxb",      one(0110410),   one(0170770), "-s-d", m68000up },
 {"subxw",      one(0110500),   one(0170770), "DsDd", m68000up },
 {"subxw",      one(0110510),   one(0170770), "-s-d", m68000up },
-{"subxl",      one(0110600),   one(0170770), "DsDd", m68000up | mcf5200 },
+{"subxl",      one(0110600),   one(0170770), "DsDd", m68000up | mcf },
 {"subxl",      one(0110610),   one(0170770), "-s-d", m68000up },
 
-{"swap",       one(0044100),   one(0177770), "Ds", m68000up | mcf5200 },
+{"swap",       one(0044100),   one(0177770), "Ds", m68000up | mcf },
 
 /* swbeg and swbegl are magic constants used on sysV68.  The compiler
    generates them before a switch table.  They tell the debugger and
@@ -1742,14 +2084,14 @@ const struct m68k_opcode m68k_opcodes[] =
    number of elements in the table.  swbeg means that the entries in
    the table are word (2 byte) sized, and swbegl means that the
    entries in the table are longword (4 byte) sized.  */
-{"swbeg",      one(0045374),   one(0177777), "#w",   m68000up | mcf5200 },
-{"swbegl",     one(0045375),   one(0177777), "#l",   m68000up | mcf5200 },
+{"swbeg",      one(0045374),   one(0177777), "#w",   m68000up | mcf },
+{"swbegl",     one(0045375),   one(0177777), "#l",   m68000up | mcf },
 
-{"tas",                one(0045300),           one(0177700), "$s", m68000up },
+{"tas",                one(0045300),   one(0177700), "$s", m68000up | mcfv4up},
 
 #define TBL1(name,signed,round,size)                                   \
   {name, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400),    \
-     two(0177700,0107777), "`sD1", cpu32 },                            \
+     two(0177700,0107777), "!sD1", cpu32 },                            \
   {name, two(0174000, (signed<<11)|(!round<<10)|(size<<6)),            \
      two(0177770,0107770), "DsD3D1", cpu32 }
 #define TBL(name1, name2, name3, s, r) \
@@ -1759,12 +2101,12 @@ TBL("tblsnb", "tblsnw", "tblsnl", 1, 0),
 TBL("tblub", "tbluw", "tblul", 0, 1),
 TBL("tblunb", "tblunw", "tblunl", 0, 0),
 
-{"trap",       one(0047100),   one(0177760), "Ts", m68000up | mcf5200 },
+{"trap",       one(0047100),   one(0177760), "Ts", m68000up | mcf },
 
 {"trapcc",     one(0052374),   one(0177777), "", m68020up | cpu32 },
 {"trapcs",     one(0052774),   one(0177777), "", m68020up | cpu32 },
 {"trapeq",     one(0053774),   one(0177777), "", m68020up | cpu32 },
-{"trapf",      one(0050774),   one(0177777), "", m68020up | cpu32 | mcf5200 },
+{"trapf",      one(0050774),   one(0177777), "", m68020up | cpu32 | mcf },
 {"trapge",     one(0056374),   one(0177777), "", m68020up | cpu32 },
 {"trapgt",     one(0057374),   one(0177777), "", m68020up | cpu32 },
 {"traphi",     one(0051374),   one(0177777), "", m68020up | cpu32 },
@@ -1781,7 +2123,7 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
 {"trapccw",    one(0052372),   one(0177777), "#w", m68020up|cpu32 },
 {"trapcsw",    one(0052772),   one(0177777), "#w", m68020up|cpu32 },
 {"trapeqw",    one(0053772),   one(0177777), "#w", m68020up|cpu32 },
-{"trapfw",     one(0050772),   one(0177777), "#w", m68020up|cpu32|mcf5200},
+{"trapfw",     one(0050772),   one(0177777), "#w", m68020up|cpu32|mcf},
 {"trapgew",    one(0056372),   one(0177777), "#w", m68020up|cpu32 },
 {"trapgtw",    one(0057372),   one(0177777), "#w", m68020up|cpu32 },
 {"traphiw",    one(0051372),   one(0177777), "#w", m68020up|cpu32 },
@@ -1798,7 +2140,7 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
 {"trapccl",    one(0052373),   one(0177777), "#l", m68020up|cpu32 },
 {"trapcsl",    one(0052773),   one(0177777), "#l", m68020up|cpu32 },
 {"trapeql",    one(0053773),   one(0177777), "#l", m68020up|cpu32 },
-{"trapfl",     one(0050773),   one(0177777), "#l", m68020up|cpu32|mcf5200},
+{"trapfl",     one(0050773),   one(0177777), "#l", m68020up|cpu32|mcf},
 {"trapgel",    one(0056373),   one(0177777), "#l", m68020up|cpu32 },
 {"trapgtl",    one(0057373),   one(0177777), "#l", m68020up|cpu32 },
 {"traphil",    one(0051373),   one(0177777), "#l", m68020up|cpu32 },
@@ -1814,19 +2156,24 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0),
 
 {"trapv",      one(0047166),   one(0177777), "", m68000up },
 
-{"tstb",       one(0045000),   one(0177700), ";b", m68000up | mcf5200 },
-{"tstw",       one(0045100),   one(0177700), "*w", m68000up | mcf5200 },
-{"tstl",       one(0045200),   one(0177700), "*l", m68000up | mcf5200 },
+{"tstb",       one(0045000),   one(0177700), ";b", m68020up|cpu32|mcf },
+{"tstb",       one(0045000),   one(0177700), "$b", m68000up },
+{"tstw",       one(0045100),   one(0177700), "*w", m68020up|cpu32|mcf },
+{"tstw",       one(0045100),   one(0177700), "$w", m68000up },
+{"tstl",       one(0045200),   one(0177700), "*l", m68020up|cpu32|mcf },
+{"tstl",       one(0045200),   one(0177700), "$l", m68000up },
 
-{"unlk",       one(0047130),   one(0177770), "As", m68000up | mcf5200 },
+{"unlk",       one(0047130),   one(0177770), "As", m68000up | mcf },
 
 {"unpk",       one(0100600),   one(0170770), "DsDd#w", m68020up },
 {"unpk",       one(0100610),   one(0170770), "-s-d#w", m68020up },
 
-{"wddatab",    one(0172000),   one(0177700), "~s", mcf5200 },
-{"wddataw",    one(0172100),   one(0177700), "~s", mcf5200 },
-{"wddatal",    one(0172200),   one(0177700), "~s", mcf5200 },
+{"wddatab",    one(0175400),   one(0177700), "~s", mcf },
+{"wddataw",    one(0175500),   one(0177700), "~s", mcf },
+{"wddatal",    one(0175600),   one(0177700), "~s", mcf },
 
+{"wdebug",     two(0175720, 03),       two(0177770, 0xffff), "as", mcf },
+{"wdebug",     two(0175750, 03),       two(0177770, 0xffff), "ds", mcf },
 };
 
 const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
@@ -1884,6 +2231,11 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =
   { "bhsb",    "bccs" },
   { "bhsw",    "bccw" },
   { "bhsl",    "bccl" },
+  { "blo",     "bcsw" },
+  { "blos",    "bcss" },
+  { "blob",    "bcss" },
+  { "blow",    "bcsw" },
+  { "blol",    "bcsl" },
   { "br",      "braw", },
   { "brs",     "bras", },
   { "brb",     "bras", },
@@ -1955,6 +2307,7 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =
   { "leal",    "lea", },
   { "lsl",     "lslw", },
   { "lsr",     "lsrw", },
+  { "mac",     "macw" },
   { "movea",   "moveaw", },
   { "movem",   "movemw", },
   { "movml",   "moveml", },
@@ -1965,6 +2318,7 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =
   { "moves",   "movesw" },
   { "muls",    "mulsw", },
   { "mulu",    "muluw", },
+  { "msac",    "msacw" },
   { "nbcdb",   "nbcd" },
   { "neg",     "negw", },
   { "negx",    "negxw", },
@@ -1974,6 +2328,7 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =
   { "ror",     "rorw", },
   { "roxl",    "roxlw", },
   { "roxr",    "roxrw", },
+  { "sats",    "satsl", },
   { "sbcdb",   "sbcd", },
   { "sccb",    "scc", },
   { "scsb",    "scs", },
@@ -2035,6 +2390,7 @@ const struct m68k_opcode_alias m68k_opcode_aliases[] =
   { "movsb",   "movesb", },
   { "movsl",   "movesl", },
   { "movsw",   "movesw", },
+  { "mov3q",   "mov3ql", },
 
   { "tdivul",  "divul", },     /* for m68k-svr4 */
   { "fmovb",   "fmoveb", },
@@ -2066,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 =
This page took 0.214766 seconds and 4 git commands to generate.