* m68k-opc.c: Add argument for lpstop. From Olivier Carmona
[deliverable/binutils-gdb.git] / opcodes / m68k-opc.c
index dec6b3fffa327505934d60362b00df7410d50ca8..33fcb16fa405c6434dc18818a779bfde26fc589d 100644 (file)
@@ -1,5 +1,5 @@
-/* Opcode table for m680[01234]0/m6888[12]/m68851.
-   Copyright 1989, 91, 92, 93, 94, 95, 1996 Free Software Foundation.
+/* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
+   Copyright 1989, 91, 92, 93, 94, 95, 96, 1997 Free Software Foundation.
 
 This file is part of GDB, GAS, and the GNU binutils.
 
@@ -36,9 +36,10 @@ const struct m68k_opcode m68k_opcodes[] =
 {"addaw",      one(0150300),   one(0170700), "*wAd", m68000up },
 {"addal",      one(0150700),   one(0170700), "*lAd", m68000up | mcf5200 },
 
-{"addib",      one(0003000),   one(0177700), "#b$b", m68000up },
-{"addiw",      one(0003100),   one(0177700), "#w$w", m68000up },
-{"addil",      one(0003200),   one(0177700), "#l$l", m68000up | mcf5200 },
+{"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 },
 
 {"addqb",      one(0050000),   one(0170700), "Qd$b", m68000up },
 {"addqw",      one(0050100),   one(0170700), "Qd%w", m68000up },
@@ -46,16 +47,17 @@ const struct m68k_opcode m68k_opcodes[] =
 
 /* The add opcode can generate the adda, addi, and addq instructions.  */
 {"addb",       one(0050000),   one(0170700), "Qd$b", m68000up },
-{"addb",       one(0003000),   one(0177700), "#b$b", m68000up },
+{"addb",       one(0003000),   one(0177700), "#b$s", m68000up },
 {"addb",       one(0150000),   one(0170700), ";bDd", m68000up },
 {"addb",       one(0150400),   one(0170700), "Dd~b", m68000up },
 {"addw",       one(0050100),   one(0170700), "Qd%w", m68000up },
 {"addw",       one(0150300),   one(0170700), "*wAd", m68000up },
-{"addw",       one(0003100),   one(0177700), "#w$w", m68000up },
+{"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(0003200),   one(0177700), "#l$l", m68000up | mcf5200 },
+{"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 },
@@ -67,30 +69,32 @@ const struct m68k_opcode m68k_opcodes[] =
 {"addxl",      one(0150600),   one(0170770), "DsDd", m68000up | mcf5200 },
 {"addxl",      one(0150610),   one(0170770), "-s-d", m68000up },
 
-{"andib",      one(0001000),   one(0177700), "#b$b", m68000up },
-{"andib",      one(0001074),   one(0177777), "#bCb", m68000up },
-{"andiw",      one(0001100),   one(0177700), "#w$w", m68000up },
-{"andiw",      one(0001174),   one(0177777), "#wSw", m68000up },
-{"andil",      one(0001200),   one(0177700), "#l$l", m68000up | mcf5200 },
-{"andi",       one(0001100),   one(0177700), "#w$w", m68000up },
-{"andi",       one(0001074),   one(0177777), "#bCb", m68000up },
-{"andi",       one(0001174),   one(0177777), "#wSw", m68000up },
+{"andib",      one(0001000),   one(0177700), "#b$s", m68000up },
+{"andib",      one(0001074),   one(0177777), "#bCs", m68000up },
+{"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 },
+{"andi",       one(0001100),   one(0177700), "#w$s", m68000up },
+{"andi",       one(0001074),   one(0177777), "#bCs", m68000up },
+{"andi",       one(0001174),   one(0177777), "#wSs", m68000up },
 
 /* The and opcode can generate the andi instruction.  */
-{"andb",       one(0001000),   one(0177700), "#b$b", m68000up },
-{"andb",       one(0001074),   one(0177777), "#bCb", m68000up },
+{"andb",       one(0001000),   one(0177700), "#b$s", m68000up },
+{"andb",       one(0001074),   one(0177777), "#bCs", m68000up },
 {"andb",       one(0140000),   one(0170700), ";bDd", m68000up },
 {"andb",       one(0140400),   one(0170700), "Dd~b", m68000up },
-{"andw",       one(0001100),   one(0177700), "#w$w", m68000up },
-{"andw",       one(0001174),   one(0177777), "#wSw", m68000up },
+{"andw",       one(0001100),   one(0177700), "#w$s", m68000up },
+{"andw",       one(0001174),   one(0177777), "#wSs", m68000up },
 {"andw",       one(0140100),   one(0170700), ";wDd", m68000up },
 {"andw",       one(0140500),   one(0170700), "Dd~w", m68000up },
-{"andl",       one(0001200),   one(0177700), "#l$l", m68000up | mcf5200 },
+{"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 },
 {"and",                one(0001100),   one(0177700), "#w$w", m68000up },
-{"and",                one(0001074),   one(0177777), "#bCb", m68000up },
-{"and",                one(0001174),   one(0177777), "#wSw", m68000up },
+{"and",                one(0001074),   one(0177777), "#bCs", m68000up },
+{"and",                one(0001174),   one(0177777), "#wSs", m68000up },
 {"and",                one(0140100),   one(0170700), ";wDd", m68000up },
 {"and",                one(0140500),   one(0170700), "Dd~w", m68000up },
 
@@ -171,10 +175,13 @@ const struct m68k_opcode m68k_opcodes[] =
 {"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 },
+{"bchg",       one(0004100),   one(0177700), "#b$s", m68000up },
+{"bchg",       one(0004100),   one(0177700), "#bqs", mcf5200 },
 
-{"bclr",       one(0000600),   one(0170700), "Dd$s", m68000up | mcf5200 },
-{"bclr",       one(0004200),   one(0177700), "#b$s", m68000up | mcf5200 },
+{"bclr",       one(0000600),   one(0170700), "Dd$s", m68000up },
+{"bclr",       one(0000600),   one(0170700), "Ddvs", mcf5200 },
+{"bclr",       one(0004200),   one(0177700), "#b$s", m68000up },
+{"bclr",       one(0004200),   one(0177700), "#bqs", mcf5200 },
 
 {"bfchg",      two(0165300, 0), two(0177700, 0170000), "?sO2O3",   m68020up },
 {"bfclr",      two(0166300, 0), two(0177700, 0170000), "?sO2O3",   m68020up },
@@ -193,15 +200,18 @@ const struct m68k_opcode m68k_opcodes[] =
 {"bral",       one(0060377),   one(0177777), "BL", m68020up | cpu32 },
 {"bras",       one(0060000),   one(0177400), "BB", m68000up | mcf5200 },
 
-{"bset",       one(0000700),   one(0170700), "Dd$s", m68000up | mcf5200 },
-{"bset",       one(0004300),   one(0177700), "#b$s", m68000up | mcf5200 },
+{"bset",       one(0000700),   one(0170700), "Dd$s", m68000up },
+{"bset",       one(0000700),   one(0170700), "Ddvs", mcf5200 },
+{"bset",       one(0004300),   one(0177700), "#b$s", m68000up },
+{"bset",       one(0004300),   one(0177700), "#bqs", mcf5200 },
 
 {"bsrw",       one(0060400),   one(0177777), "BW", m68000up | mcf5200 },
 {"bsrl",       one(0060777),   one(0177777), "BL", m68020up | cpu32 },
 {"bsrs",       one(0060400),   one(0177400), "BB", m68000up | mcf5200 },
 
 {"btst",       one(0000400),   one(0170700), "Dd@s", m68000up | mcf5200 },
-{"btst",       one(0004000),   one(0177700), "#b@s", m68000up | mcf5200 },
+{"btst",       one(0004000),   one(0177700), "#b@s", m68000up },
+{"btst",       one(0004000),   one(0177700), "#bqs", mcf5200 },
 
 {"callm",      one(0003300),           one(0177700), "#b!s", m68020 },
 
@@ -231,6 +241,7 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"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  },
 {"cpushp",     one(0xf420|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
 
 #undef SCOPE_LINE
@@ -248,25 +259,27 @@ const struct m68k_opcode m68k_opcodes[] =
 {"cmpaw",      one(0130300),   one(0170700), "*wAd", m68000up },
 {"cmpal",      one(0130700),   one(0170700), "*lAd", m68000up | mcf5200 },
 
-{"cmpib",      one(0006000),   one(0177700), "#b;b", m68000up },
-{"cmpiw",      one(0006100),   one(0177700), "#w;w", m68000up },
-{"cmpil",      one(0006200),   one(0177700), "#l;l", m68000up | mcf5200 },
+{"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 },
 
 {"cmpmb",      one(0130410),   one(0170770), "+s+d", m68000up },
 {"cmpmw",      one(0130510),   one(0170770), "+s+d", m68000up },
-{"cmpml",      one(0130610),   one(0170770), "+s+d", m68000up | mcf5200 },
+{"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;b", m68000up },
+{"cmpb",       one(0006000),   one(0177700), "#b;s", m68000up },
 {"cmpb",       one(0130410),   one(0170770), "+s+d", m68000up },
 {"cmpb",       one(0130000),   one(0170700), ";bDd", m68000up },
 {"cmpw",       one(0130300),   one(0170700), "*wAd", m68000up },
-{"cmpw",       one(0006100),   one(0177700), "#w;w", m68000up },
+{"cmpw",       one(0006100),   one(0177700), "#w;s", m68000up },
 {"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;l", m68000up | mcf5200 },
-{"cmpl",       one(0130610),   one(0170770), "+s+d", m68000up | mcf5200 },
+{"cmpl",       one(0006200),   one(0177700), "#l;s", m68000up },
+{"cmpl",       one(0006200),   one(0177700), "#lDs", mcf5200 },
+{"cmpl",       one(0130610),   one(0170770), "+s+d", m68000up },
 {"cmpl",       one(0130200),   one(0170700), "*lDd", m68000up | mcf5200 },
 
 {"dbcc",       one(0052310),   one(0177770), "DsBw", m68000up },
@@ -287,17 +300,37 @@ const struct m68k_opcode m68k_opcodes[] =
 {"dbvs",       one(0054710),   one(0177770), "DsBw", m68000up },
 
 {"divsw",      one(0100700),           one(0170700), ";wDd", m68000up },
+/* start-sanitize-coldfire */
+{"divsw",      one(0100700),           one(0170700), ";wDd", m68000up|mcfdiv },
+/* end-sanitize-coldfire */
 
 {"divsl", two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
 {"divsl", two(0046100,0004000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
+/* start-sanitize-coldfire */
+{"divsl", two(0046100,0004000),two(0177700,0107770),"DsDD",   mcfdiv },
+{"divsl", two(0046100,0004000),two(0177700,0107770),"asDD",   mcfdiv },
+{"divsl", two(0046100,0004000),two(0177700,0107770),"+sDD",   mcfdiv },
+{"divsl", two(0046100,0004000),two(0177700,0107770),"-sDD",   mcfdiv },
+{"divsl", two(0046100,0004000),two(0177700,0107770),"dsDD",   mcfdiv },
+/* end-sanitize-coldfire */
 
 {"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 },
+/* start-sanitize-coldfire */
+{"divuw",      one(0100300),           one(0170700), ";wDd", m68000up|mcfdiv },
+/* end-sanitize-coldfire */
 
 {"divul", two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
 {"divul", two(0046100,0000000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
+/* start-sanitize-coldfire */
+{"divul", two(0046100,0000000),two(0177700,0107770),"DsDD",   mcfdiv },
+{"divul", two(0046100,0000000),two(0177700,0107770),"asDD",   mcfdiv },
+{"divul", two(0046100,0000000),two(0177700,0107770),"+sDD",   mcfdiv },
+{"divul", two(0046100,0000000),two(0177700,0107770),"-sDD",   mcfdiv },
+{"divul", two(0046100,0000000),two(0177700,0107770),"dsDD",   mcfdiv },
+/* end-sanitize-coldfire */
 
 {"divull", two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
 {"divull", two(0046100,0000000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
@@ -306,7 +339,8 @@ const struct m68k_opcode m68k_opcodes[] =
 {"eorib",      one(0005074),   one(0177777), "#bCs", m68000up },
 {"eoriw",      one(0005100),   one(0177700), "#w$s", m68000up },
 {"eoriw",      one(0005174),   one(0177777), "#wSs", m68000up },
-{"eoril",      one(0005200),   one(0177700), "#l$s", m68000up | mcf5200 },
+{"eoril",      one(0005200),   one(0177700), "#l$s", m68000up },
+{"eoril",      one(0005200),   one(0177700), "#lDs", mcf5200 },
 {"eori",       one(0005074),   one(0177777), "#bCs", m68000up },
 {"eori",       one(0005174),   one(0177777), "#wSs", m68000up },
 {"eori",       one(0005100),   one(0177700), "#w$s", m68000up },
@@ -318,7 +352,8 @@ const struct m68k_opcode m68k_opcodes[] =
 {"eorw",       one(0005100),   one(0177700), "#w$s", m68000up },
 {"eorw",       one(0005174),   one(0177777), "#wSs", m68000up },
 {"eorw",       one(0130500),   one(0170700), "Dd$s", m68000up },
-{"eorl",       one(0005200),   one(0177700), "#l$s", m68000up | mcf5200 },
+{"eorl",       one(0005200),   one(0177700), "#l$s", m68000up },
+{"eorl",       one(0005200),   one(0177700), "#lDs", mcf5200 },
 {"eorl",       one(0130600),   one(0170700), "Dd$s", m68000up | mcf5200 },
 {"eor",                one(0005074),   one(0177777), "#bCs", m68000up },
 {"eor",                one(0005174),   one(0177777), "#wSs", m68000up },
@@ -772,15 +807,15 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fmovecrx",   two(0xF000, 0x5C00), two(0xF1FF, 0xFC00), "Ii#CF7", mfloat },
 
 {"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 },
+{"fmovemx",    two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
 {"fmovemx",    two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
 {"fmovemx",    two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
 {"fmovemx",    two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
 {"fmovemx",    two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
-{"fmovemx",    two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
 {"fmovemx",    two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
 {"fmovemx",    two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
-{"fmovemx",    two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
 {"fmovemx",    two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
 {"fmovemx",    two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
 
@@ -876,11 +911,9 @@ const struct m68k_opcode m68k_opcodes[] =
 {"fremx",      two(0xF000, 0x0025), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
 {"fremx",      two(0xF000, 0x4825), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
 
-{"frestore",   one(0xF140),            one(0xF1C0), "Id&s", mfloat },
-{"frestore",   one(0xF158),            one(0xF1F8), "Id+s", mfloat },
+{"frestore",   one(0xF140),            one(0xF1C0), "Id<s", mfloat },
 
-{"fsave",      one(0xF100),            one(0xF1C0), "Id&s", mfloat },
-{"fsave",      one(0xF120),            one(0xF1F8), "Id-s", mfloat },
+{"fsave",      one(0xF100),            one(0xF1C0), "Id>s", mfloat },
 
 {"fscaleb",    two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
 {"fscaled",    two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
@@ -1200,7 +1233,7 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"lea",                one(0040700),   one(0170700), "!sAd", m68000up | mcf5200 },
 
-{"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 },
 {"linkl",      one(0044010),   one(0177770), "As#l", m68020up | cpu32 },
@@ -1223,6 +1256,23 @@ const struct m68k_opcode m68k_opcodes[] =
 {"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 
+   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 
+   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.   
+
+   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 },
 
@@ -1233,20 +1283,23 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"movemw",     one(0044200),   one(0177700), "Lw&s", m68000up },
 {"movemw",     one(0044240),   one(0177770), "lw-s", m68000up },
-{"movemw",     one(0046200),   one(0177700), "!sLw", m68000up },
-{"movemw",     one(0046230),   one(0177770), "+sLw", m68000up },
-{"movemw",     one(0044200),   one(0177700), "#w&s", m68000up },
-{"movemw",     one(0044240),   one(0177770), "#w-s", m68000up },
-{"movemw",     one(0046200),   one(0177700), "!s#w", m68000up },
-{"movemw",     one(0046230),   one(0177770), "+s#w", m68000up },
-{"moveml",     one(0044300),   one(0177700), "Lw&s", m68000up | mcf5200 },
-{"moveml",     one(0044340),   one(0177770), "lw-s", m68000up | mcf5200 },
-{"moveml",     one(0046300),   one(0177700), "!sLw", m68000up | mcf5200 },
-{"moveml",     one(0046330),   one(0177770), "+sLw", m68000up | mcf5200 },
-{"moveml",     one(0044300),   one(0177700), "#w&s", m68000up | mcf5200 },
-{"moveml",     one(0044340),   one(0177770), "#w-s", m68000up | mcf5200 },
-{"moveml",     one(0046300),   one(0177700), "!s#w", m68000up | mcf5200 },
-{"moveml",     one(0046330),   one(0177770), "+s#w", m68000up | mcf5200 },
+{"movemw",     one(0044200),   one(0177700), "#w>s", m68000up },
+{"movemw",     one(0046200),   one(0177700), "<sLw", m68000up },
+{"movemw",     one(0046200),   one(0177700), "<s#w", m68000up },
+{"moveml",     one(0044300),   one(0177700), "Lw&s", m68000up },
+{"moveml",     one(0044340),   one(0177770), "lw-s", m68000up },
+{"moveml",     one(0044300),   one(0177700), "#w>s", m68000up },
+{"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 },
 
 {"movepw",     one(0000410),   one(0170770), "dsDd", m68000up },
 {"movepw",     one(0000610),   one(0170770), "Ddds", m68000up },
@@ -1254,36 +1307,54 @@ const struct m68k_opcode m68k_opcodes[] =
 {"movepl",     one(0000710),   one(0170770), "Ddds", m68000up },
 
 {"moveq",      one(0070000),   one(0170400), "MsDd", m68000up | mcf5200 },
+{"moveq",      one(0070000),   one(0170400), "#BDd", m68000up | mcf5200 },
 
 /* The move opcode can generate the movea and moveq instructions.  */
-{"moveb",      one(0010000),   one(0170000), ";b$d", m68000up | mcf5200 },
-{"movew",      one(0030000),   one(0170000), "*w$d", m68000up | mcf5200 },
-{"movew",      one(0030100),   one(0170700), "*wAd", m68000up | mcf5200 },
-
-{"movew",      one(0040300),   one(0177700), "SsDs", mcf5200 },
-{"movew",      one(0041300),   one(0177700), "CsDs", mcf5200 },
+{"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 },
+
+{"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(0040300),   one(0177700), "Ss$s", m68000up },
+{"movew",      one(0040300),   one(0177770), "SsDs", mcf5200 },
 {"movew",      one(0041300),   one(0177700), "Cs$s", m68010up },
-{"movew",      one(0042300),   one(0177700), ";wCd", m68000up | mcf5200 },
-{"movew",      one(0043300),   one(0177700), ";wSd", m68000up | mcf5200 },
+{"movew",      one(0041300),   one(0177770), "CsDs", mcf5200 },
+{"movew",      one(0042300),   one(0177700), ";wCd", m68000up },
+{"movew",      one(0042300),   one(0177700), "DsCd", mcf5200 },
+{"movew",      one(0042374),   one(0177700), "#wCd", mcf5200 },
+{"movew",      one(0043300),   one(0177700), ";wSd", m68000up },
+{"movew",      one(0043300),   one(0177700), "DsSd", mcf5200 },
+{"movew",      one(0043374),   one(0177700), "#wSd", mcf5200 },
 
 {"movel",      one(0070000),   one(0170400), "MsDd", m68000up | mcf5200 },
-{"movel",      one(0020000),   one(0170000), "*l$d", m68000up | mcf5200 },
-{"movel",      one(0020100),   one(0170700), "*lAd", m68000up | mcf5200 },
-{"movel",      one(0047140),   one(0177770), "AsUd", m68000up | mcf5200 },
-{"movel",      one(0047150),   one(0177770), "UdAs", m68000up | mcf5200 },
-{"move",       one(0030000),   one(0170000), "*w$d", m68000up | mcf5200 },
-{"move",       one(0030100),   one(0170700), "*wAd", m68000up | mcf5200 },
-
-{"move",       one(0040300),   one(0177700), "SsDs", mcf5200 },
-{"move",       one(0041300),   one(0177700), "CsDs", mcf5200 },
+{"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 },
+
+{"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(0040300),   one(0177700), "Ss$s", m68000up },
+{"move",       one(0040300),   one(0177770), "SsDs", mcf5200 },
 {"move",       one(0041300),   one(0177700), "Cs$s", m68010up },
-{"move",       one(0042300),   one(0177700), ";wCd", m68000up | mcf5200 },
-{"move",       one(0043300),   one(0177700), ";wSd", m68000up | mcf5200 },
+{"move",       one(0041300),   one(0177770), "CsDs", mcf5200 },
+{"move",       one(0042300),   one(0177700), ";wCd", m68000up },
+{"move",       one(0042300),   one(0177700), "DsCd", mcf5200 },
+{"move",       one(0042300),   one(0177700), "#wCd", mcf5200 },
+{"move",       one(0043300),   one(0177700), ";wSd", m68000up },
+{"move",       one(0043300),   one(0177700), "DsSd", mcf5200 },
+{"move",       one(0043300),   one(0177700), "#wSd", mcf5200 },
 
-{"move",       one(0047140),   one(0177770), "AsUd", m68000up | mcf5200 },
-{"move",       one(0047150),   one(0177770), "UdAs", m68000up | mcf5200 },
+{"move",       one(0047140),   one(0177770), "AsUd", m68000up },
+{"move",       one(0047150),   one(0177770), "UdAs", m68000up },
 
 {"movesb",     two(0007000, 0),     two(0177700, 07777), "~sR1", m68010up },
 {"movesb",     two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up },
@@ -1299,34 +1370,48 @@ const struct m68k_opcode m68k_opcodes[] =
 {"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 },
+{"mulsl",      two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
+{"mulsl",      two(0046000,004000), two(0177700,0107770), "DsD1", mcf5200 },
+{"mulsl",      two(0046000,004000), two(0177700,0107770), "asD1", mcf5200 },
+{"mulsl",      two(0046000,004000), two(0177700,0107770), "+sD1", mcf5200 },
+{"mulsl",      two(0046000,004000), two(0177700,0107770), "-sD1", mcf5200 },
+{"mulsl",      two(0046000,004000), two(0177700,0107770), "dsD1", mcf5200 },
 {"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 },
+{"mulul",      two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
+{"mulul",      two(0046000,000000), two(0177700,0107770), "DsD1", mcf5200 },
+{"mulul",      two(0046000,000000), two(0177700,0107770), "asD1", mcf5200 },
+{"mulul",      two(0046000,000000), two(0177700,0107770), "+sD1", mcf5200 },
+{"mulul",      two(0046000,000000), two(0177700,0107770), "-sD1", mcf5200 },
+{"mulul",      two(0046000,000000), two(0177700,0107770), "dsD1", mcf5200 },
 {"mulul",      two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
 
 {"nbcd",       one(0044000),   one(0177700), "$s", m68000up },
 
 {"negb",       one(0042000),   one(0177700), "$s", m68000up },
 {"negw",       one(0042100),   one(0177700), "$s", m68000up },
-{"negl",       one(0042200),   one(0177700), "$s", m68000up | mcf5200},
+{"negl",       one(0042200),   one(0177700), "$s", m68000up },
+{"negl",       one(0042200),   one(0177700), "Ds", mcf5200},
 
 {"negxb",      one(0040000),   one(0177700), "$s", m68000up },
 {"negxw",      one(0040100),   one(0177700), "$s", m68000up },
-{"negxl",      one(0040200),   one(0177700), "$s", m68000up | mcf5200},
+{"negxl",      one(0040200),   one(0177700), "$s", m68000up },
+{"negxl",      one(0040200),   one(0177700), "Ds", mcf5200},
 
 {"nop",                one(0047161),   one(0177777), "", m68000up | mcf5200},
 
 {"notb",       one(0043000),   one(0177700), "$s", m68000up },
 {"notw",       one(0043100),   one(0177700), "$s", m68000up },
-{"notl",       one(0043200),   one(0177700), "$s", m68000up | mcf5200},
+{"notl",       one(0043200),   one(0177700), "$s", m68000up },
+{"notl",       one(0043200),   one(0177700), "Ds", mcf5200},
 
 {"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 | mcf5200 },
+{"oril",       one(0000200),   one(0177700), "#l$s", m68000up },
+{"oril",       one(0000200),   one(0177700), "#lDs", mcf5200 },
 {"ori",                one(0000074),   one(0177777), "#bCs", m68000up },
 {"ori",                one(0000100),   one(0177700), "#w$s", m68000up },
 {"ori",                one(0000174),   one(0177777), "#wSs", m68000up },
@@ -1340,7 +1425,8 @@ const struct m68k_opcode m68k_opcodes[] =
 {"orw",                one(0000174),   one(0177777), "#wSs", m68000up },
 {"orw",                one(0100100),   one(0170700), ";wDd", m68000up },
 {"orw",                one(0100500),   one(0170700), "Dd~s", m68000up },
-{"orl",                one(0000200),   one(0177700), "#l$s", m68000up | mcf5200 },
+{"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 },
 {"or",         one(0000074),   one(0177777), "#bCs", m68000up },
@@ -1404,8 +1490,8 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"pea",                one(0044100),           one(0177700), "!s", m68000up|mcf5200 },
 
-{"pflusha",    two(0xf000,0x2400), two(0xffff,0xffff), "", m68030 | m68851 },
 {"pflusha",    one(0xf518),            one(0xfff8), "", m68040up },
+{"pflusha",    two(0xf000,0x2400), two(0xffff,0xffff), "", m68030 | m68851 },
 
 {"pflush",   two(0xf000,0x3010), two(0xffc0,0xfe10), "T3T9", m68030|m68851 },
 {"pflush",   two(0xf000,0x3810), two(0xffc0,0xfe10), "T3T9&s", m68030|m68851 },
@@ -1459,11 +1545,9 @@ const struct m68k_opcode m68k_opcodes[] =
 {"pmovefd",    two(0xf000, 0x4100),    two(0xffc0, 0xe3ff), "|sW8", m68030 },
 {"pmovefd",    two(0xf000, 0x0900),    two(0xffc0, 0xfbff), "*l38", m68030 },
 
-{"prestore",   one(0xf140),            one(0xffc0), "&s", m68851 },
-{"prestore",   one(0xf158),            one(0xfff8), "+s", m68851 },
+{"prestore",   one(0xf140),            one(0xffc0), "<s", m68851 },
 
-{"psave",      one(0xf100),            one(0xffc0), "&s", m68851 },
-{"psave",      one(0xf120),            one(0xfff8), "-s", m68851 },
+{"psave",      one(0xf100),            one(0xffc0), ">s", m68851 },
 
 {"psac",       two(0xf040, 0x0007),    two(0xffc0, 0xffff), "$s", m68851 },
 {"psas",       two(0xf040, 0x0006),    two(0xffc0, 0xffff), "$s", m68851 },
@@ -1567,6 +1651,20 @@ const struct m68k_opcode m68k_opcodes[] =
 {"pvalid",     two(0xf000, 0x2800),    two(0xffc0, 0xffff), "Vs&s", m68851 },
 {"pvalid",     two(0xf000, 0x2c00),    two(0xffc0, 0xfff8), "A3&s", m68851 },
 
+/* start-sanitize-coldfire */
+{"remsl", two(0046100,0006000),two(0177700,0107770),"DsD3D1", mcfdiv },
+{"remsl", two(0046100,0006000),two(0177700,0107770),"asD3D1", mcfdiv },
+{"remsl", two(0046100,0006000),two(0177700,0107770),"+sD3D1", mcfdiv },
+{"remsl", two(0046100,0006000),two(0177700,0107770),"-sD3D1", mcfdiv },
+{"remsl", two(0046100,0006000),two(0177700,0107770),"dsD3D1", mcfdiv },
+
+{"remul", two(0046100,0002000),two(0177700,0107770),"DsD3D1", mcfdiv },
+{"remul", two(0046100,0002000),two(0177700,0107770),"asD3D1", mcfdiv },
+{"remul", two(0046100,0002000),two(0177700,0107770),"+sD3D1", mcfdiv },
+{"remul", two(0046100,0002000),two(0177700,0107770),"-sD3D1", mcfdiv },
+{"remul", two(0046100,0002000),two(0177700,0107770),"dsD3D1", mcfdiv },
+/* end-sanitize-coldfire */
+
 {"reset",      one(0047160),           one(0177777), "", m68000up },
 
 {"rolb",       one(0160430),           one(0170770), "QdDs", m68000up },
@@ -1595,9 +1693,9 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"roxrb",      one(0160020),           one(0170770), "QdDs", m68000up },
 {"roxrb",      one(0160060),           one(0170770), "DdDs", m68000up },
-{"roxrw",      one(0160120),           one(0170770),"QdDs", m68000up },
+{"roxrw",      one(0160120),           one(0170770), "QdDs", m68000up },
 {"roxrw",      one(0160160),           one(0170770), "DdDs", m68000up },
-{"roxrw",      one(0162300),           one(0177700),"~s",   m68000up },
+{"roxrw",      one(0162300),           one(0177700), "~s",   m68000up },
 {"roxrl",      one(0160220),           one(0170770), "QdDs", m68000up },
 {"roxrl",      one(0160260),           one(0170770), "DdDs", m68000up },
 
@@ -1614,22 +1712,39 @@ const struct m68k_opcode m68k_opcodes[] =
 {"sbcd",       one(0100400),           one(0170770), "DsDd", m68000up },
 {"sbcd",       one(0100410),           one(0170770), "-s-d", m68000up },
 
-{"scc",                one(0052300),   one(0177700), "$s", m68000up | mcf5200 },
-{"scs",                one(0052700),   one(0177700), "$s", m68000up | mcf5200 },
-{"seq",                one(0053700),   one(0177700), "$s", m68000up | mcf5200 },
-{"sf",         one(0050700),   one(0177700), "$s", m68000up | mcf5200 },
-{"sge",                one(0056300),   one(0177700), "$s", m68000up | mcf5200 },
-{"sgt",                one(0057300),   one(0177700), "$s", m68000up | mcf5200 },
-{"shi",                one(0051300),   one(0177700), "$s", m68000up | mcf5200 },
-{"sle",                one(0057700),   one(0177700), "$s", m68000up | mcf5200 },
-{"sls",                one(0051700),   one(0177700), "$s", m68000up | mcf5200 },
-{"slt",                one(0056700),   one(0177700), "$s", m68000up | mcf5200 },
-{"smi",                one(0055700),   one(0177700), "$s", m68000up | mcf5200 },
-{"sne",                one(0053300),   one(0177700), "$s", m68000up | mcf5200 },
-{"spl",                one(0055300),   one(0177700), "$s", m68000up | mcf5200 },
-{"st",         one(0050300),   one(0177700), "$s", m68000up | mcf5200 },
-{"svc",                one(0054300),   one(0177700), "$s", m68000up | mcf5200 },
-{"svs",                one(0054700),   one(0177700), "$s", m68000up | mcf5200 },
+
+{"scc",                one(0052300),   one(0177700), "$s", m68000up },
+{"scc",                one(0052300),   one(0177700), "Ds", mcf5200 },
+{"scs",                one(0052700),   one(0177700), "$s", m68000up },
+{"scs",                one(0052700),   one(0177700), "Ds", mcf5200 },
+{"seq",                one(0053700),   one(0177700), "$s", m68000up },
+{"seq",                one(0053700),   one(0177700), "Ds", mcf5200 },
+{"sf",         one(0050700),   one(0177700), "$s", m68000up },
+{"sf",         one(0050700),   one(0177700), "Ds", mcf5200 },
+{"sge",                one(0056300),   one(0177700), "$s", m68000up },
+{"sge",                one(0056300),   one(0177700), "Ds", mcf5200 },
+{"sgt",                one(0057300),   one(0177700), "$s", m68000up },
+{"sgt",                one(0057300),   one(0177700), "Ds", mcf5200 },
+{"shi",                one(0051300),   one(0177700), "$s", m68000up },
+{"shi",                one(0051300),   one(0177700), "Ds", mcf5200 },
+{"sle",                one(0057700),   one(0177700), "$s", m68000up },
+{"sle",                one(0057700),   one(0177700), "Ds", mcf5200 },
+{"sls",                one(0051700),   one(0177700), "$s", m68000up },
+{"sls",                one(0051700),   one(0177700), "Ds", mcf5200 },
+{"slt",                one(0056700),   one(0177700), "$s", m68000up },
+{"slt",                one(0056700),   one(0177700), "Ds", mcf5200 },
+{"smi",                one(0055700),   one(0177700), "$s", m68000up },
+{"smi",                one(0055700),   one(0177700), "Ds", mcf5200 },
+{"sne",                one(0053300),   one(0177700), "$s", m68000up },
+{"sne",                one(0053300),   one(0177700), "Ds", mcf5200 },
+{"spl",                one(0055300),   one(0177700), "$s", m68000up },
+{"spl",                one(0055300),   one(0177700), "Ds", mcf5200 },
+{"st",         one(0050300),   one(0177700), "$s", m68000up },
+{"st",         one(0050300),   one(0177700), "Ds", mcf5200 },
+{"svc",                one(0054300),   one(0177700), "$s", m68000up },
+{"svc",                one(0054300),   one(0177700), "Ds", mcf5200 },
+{"svs",                one(0054700),   one(0177700), "$s", m68000up },
+{"svs",                one(0054700),   one(0177700), "Ds", mcf5200 },
 
 {"stop",       one(0047162),   one(0177777), "#w", m68000up | mcf5200 },
 
@@ -1638,7 +1753,8 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"subib",      one(0002000),   one(0177700), "#b$s", m68000up },
 {"subiw",      one(0002100),   one(0177700), "#w$s", m68000up },
-{"subil",      one(0002200),   one(0177700), "#l$s", m68000up | mcf5200 },
+{"subil",      one(0002200),   one(0177700), "#l$s", m68000up },
+{"subil",      one(0002200),   one(0177700), "#lDs", mcf5200 },
 
 {"subqb",      one(0050400),   one(0170700), "Qd%s", m68000up },
 {"subqw",      one(0050500),   one(0170700), "Qd%s", m68000up },
@@ -1655,7 +1771,8 @@ const struct m68k_opcode m68k_opcodes[] =
 {"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(0002200),   one(0177700), "#l$s", m68000up | mcf5200 },
+{"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 },
@@ -1669,11 +1786,20 @@ const struct m68k_opcode m68k_opcodes[] =
 
 {"swap",       one(0044100),   one(0177770), "Ds", m68000up | mcf5200 },
 
+/* swbeg and swbegl are magic constants used on sysV68.  The compiler
+   generates them before a switch table.  They tell the debugger and
+   disassembler that a switch table follows.  The parameter is the
+   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 },
+
 {"tas",                one(0045300),           one(0177700), "$s", m68000up },
 
 #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) \
@@ -1738,9 +1864,12 @@ 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|mcf5200 },
+{"tstb",       one(0045000),   one(0177700), "@b", m68000up },
+{"tstw",       one(0045100),   one(0177700), "*w", m68020up|cpu32|mcf5200 },
+{"tstw",       one(0045100),   one(0177700), "@w", m68000up },
+{"tstl",       one(0045200),   one(0177700), "*l", m68020up|cpu32|mcf5200 },
+{"tstl",       one(0045200),   one(0177700), "@l", m68000up },
 
 {"unlk",       one(0047130),   one(0177770), "As", m68000up | mcf5200 },
 
@@ -1808,6 +1937,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", },
This page took 0.031976 seconds and 4 git commands to generate.