diff options
Diffstat (limited to 'opcodes/m68k-opc.c')
-rw-r--r-- | opcodes/m68k-opc.c | 291 |
1 files changed, 165 insertions, 126 deletions
diff --git a/opcodes/m68k-opc.c b/opcodes/m68k-opc.c index 867bbe16caa9..7f3b0d87c7fe 100644 --- a/opcodes/m68k-opc.c +++ b/opcodes/m68k-opc.c @@ -30,6 +30,10 @@ be consecutive. If they aren't, the assembler will bomb at runtime. */ +/* Format strings consist of pairs of characters. The first describes + the type of the operand and the second describes the encoding. + include/opcodes/m68k.h describes them in detail. */ + const struct m68k_opcode m68k_opcodes[] = { {"abcd", 2, one(0140400), one(0170770), "DsDd", m68000up }, @@ -131,20 +135,20 @@ const struct m68k_opcode m68k_opcodes[] = {"bgtw", 2, one(0067000), one(0177777), "BW", m68000up | mcfisa_a }, {"blew", 2, one(0067400), one(0177777), "BW", m68000up | mcfisa_a }, -{"bhil", 2, one(0061377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"blsl", 2, one(0061777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bccl", 2, one(0062377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bcsl", 2, one(0062777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bnel", 2, one(0063377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"beql", 2, one(0063777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bvcl", 2, one(0064377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bvsl", 2, one(0064777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bpll", 2, one(0065377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bmil", 2, one(0065777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bgel", 2, one(0066377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bltl", 2, one(0066777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"bgtl", 2, one(0067377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, -{"blel", 2, one(0067777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, +{"bhil", 2, one(0061377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"blsl", 2, one(0061777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bccl", 2, one(0062377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bcsl", 2, one(0062777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bnel", 2, one(0063377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"beql", 2, one(0063777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bvcl", 2, one(0064377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bvsl", 2, one(0064777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bpll", 2, one(0065377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bmil", 2, one(0065777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bgel", 2, one(0066377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bltl", 2, one(0066777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"bgtl", 2, one(0067377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, +{"blel", 2, one(0067777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, {"bhis", 2, one(0061000), one(0177400), "BB", m68000up | mcfisa_a }, {"blss", 2, one(0061400), one(0177400), "BB", m68000up | mcfisa_a }, @@ -193,14 +197,14 @@ const struct m68k_opcode m68k_opcodes[] = {"bfset", 4, two(0167300, 0), two(0177700, 0170000), "?sO2O3", m68020up }, {"bftst", 4, two(0164300, 0), two(0177700, 0170000), "/sO2O3", m68020up }, -{"bgnd", 2, one(0045372), one(0177777), "", cpu32 }, +{"bgnd", 2, one(0045372), one(0177777), "", cpu32 | fido_a }, -{"bitrev", 2, one(0000300), one(0177770), "Ds", mcfisa_aa}, +{"bitrev", 2, one(0000300), one(0177770), "Ds", mcfisa_aa | mcfisa_c}, {"bkpt", 2, one(0044110), one(0177770), "ts", m68010up }, {"braw", 2, one(0060000), one(0177777), "BW", m68000up | mcfisa_a }, -{"bral", 2, one(0060377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, +{"bral", 2, one(0060377), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b}, {"bras", 2, one(0060000), one(0177400), "BB", m68000up | mcfisa_a }, {"bset", 2, one(0000700), one(0170700), "Dd$s", m68000up | mcfisa_a }, @@ -209,14 +213,14 @@ const struct m68k_opcode m68k_opcodes[] = {"bset", 4, one(0004300), one(0177700), "#bqs", mcfisa_a }, {"bsrw", 2, one(0060400), one(0177777), "BW", m68000up | mcfisa_a }, -{"bsrl", 2, one(0060777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, +{"bsrl", 2, one(0060777), one(0177777), "BL", m68020up | cpu32 | fido_a | mcfisa_b | mcfisa_c}, {"bsrs", 2, one(0060400), one(0177400), "BB", m68000up | mcfisa_a }, {"btst", 2, one(0000400), one(0170700), "Dd;b", m68000up | mcfisa_a }, {"btst", 4, one(0004000), one(0177700), "#b@s", m68000up }, {"btst", 4, one(0004000), one(0177700), "#bqs", mcfisa_a }, -{"byterev", 2, one(0001300), one(0177770), "Ds", mcfisa_aa}, +{"byterev", 2, one(0001300), one(0177770), "Ds", mcfisa_aa | mcfisa_c}, {"callm", 4, one(0003300), one(0177700), "#b!s", m68020 }, @@ -229,9 +233,9 @@ const struct m68k_opcode m68k_opcodes[] = {"casw", 4, two(0006300, 0), two(0177700, 0177070), "D3D2~s", m68020up }, {"casl", 4, two(0007300, 0), two(0177700, 0177070), "D3D2~s", m68020up }, -{"chk2b", 4, two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 }, -{"chk2w", 4, two(0001300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 }, -{"chk2l", 4, two(0002300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 }, +{"chk2b", 4, two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a }, +{"chk2w", 4, two(0001300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a }, +{"chk2l", 4, two(0002300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a }, {"chkl", 2, one(0040400), one(0170700), ";lDd", m68000up }, {"chkw", 2, one(0040600), one(0170700), ";wDd", m68000up }, @@ -256,17 +260,17 @@ const struct m68k_opcode m68k_opcodes[] = {"clrw", 2, one(0041100), one(0177700), "$s", m68000up | mcfisa_a }, {"clrl", 2, one(0041200), one(0177700), "$s", m68000up | mcfisa_a }, -{"cmp2b", 4, two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 }, -{"cmp2w", 4, two(0001300,0), two(0177700,07777), "!sR1", m68020up | cpu32 }, -{"cmp2l", 4, two(0002300,0), two(0177700,07777), "!sR1", m68020up | cpu32 }, +{"cmp2b", 4, two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a }, +{"cmp2w", 4, two(0001300,0), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a }, +{"cmp2l", 4, two(0002300,0), two(0177700,07777), "!sR1", m68020up | cpu32 | fido_a }, {"cmpaw", 2, one(0130300), one(0170700), "*wAd", m68000up }, {"cmpal", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a }, {"cmpib", 4, one(0006000), one(0177700), "#b@s", m68000up }, -{"cmpib", 4, one(0006000), one(0177700), "#bDs", mcfisa_b }, +{"cmpib", 4, one(0006000), one(0177700), "#bDs", mcfisa_b | mcfisa_c }, {"cmpiw", 4, one(0006100), one(0177700), "#w@s", m68000up }, -{"cmpiw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b }, +{"cmpiw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b | mcfisa_c }, {"cmpil", 6, one(0006200), one(0177700), "#l@s", m68000up }, {"cmpil", 6, one(0006200), one(0177700), "#lDs", mcfisa_a }, @@ -276,21 +280,45 @@ const struct m68k_opcode m68k_opcodes[] = /* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions. */ {"cmpb", 4, one(0006000), one(0177700), "#b@s", m68000up }, -{"cmpb", 4, one(0006000), one(0177700), "#bDs", mcfisa_b }, +{"cmpb", 4, one(0006000), one(0177700), "#bDs", mcfisa_b | mcfisa_c }, {"cmpb", 2, one(0130410), one(0170770), "+s+d", m68000up }, {"cmpb", 2, one(0130000), one(0170700), ";bDd", m68000up }, -{"cmpb", 2, one(0130000), one(0170700), "*bDd", mcfisa_b }, +{"cmpb", 2, one(0130000), one(0170700), "*bDd", mcfisa_b | mcfisa_c }, {"cmpw", 2, one(0130300), one(0170700), "*wAd", m68000up }, {"cmpw", 4, one(0006100), one(0177700), "#w@s", m68000up }, -{"cmpw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b }, +{"cmpw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b | mcfisa_c }, {"cmpw", 2, one(0130510), one(0170770), "+s+d", m68000up }, -{"cmpw", 2, one(0130100), one(0170700), "*wDd", m68000up | mcfisa_b }, +{"cmpw", 2, one(0130100), one(0170700), "*wDd", m68000up | mcfisa_b | mcfisa_c }, {"cmpl", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a }, {"cmpl", 6, one(0006200), one(0177700), "#l@s", m68000up }, {"cmpl", 6, one(0006200), one(0177700), "#lDs", mcfisa_a }, {"cmpl", 2, one(0130610), one(0170770), "+s+d", m68000up }, {"cmpl", 2, one(0130200), one(0170700), "*lDd", m68000up | mcfisa_a }, - + +{"cp0bcbusy",2, one (0176300), one (01777770), "BW", mcfisa_a}, +{"cp1bcbusy",2, one (0177300), one (01777770), "BW", mcfisa_a}, +{"cp0nop", 4, two (0176000,0), two (01777477,0170777), "jE", mcfisa_a}, +{"cp1nop", 4, two (0177000,0), two (01777477,0170777), "jE", mcfisa_a}, +/* These all have 2 opcode words, but no fixed bits in the second + word. We use a leading ' ' in the args string to indicate the + extra opcode word. */ +{"cp0ldb", 6, one (0176000), one (01777700), ".pwR1jEK3", mcfisa_a}, +{"cp1ldb", 6, one (0177000), one (01777700), ".pwR1jEK3", mcfisa_a}, +{"cp0ldw", 6, one (0176100), one (01777700), ".pwR1jEK3", mcfisa_a}, +{"cp1ldw", 6, one (0177100), one (01777700), ".pwR1jEK3", mcfisa_a}, +{"cp0ldl", 6, one (0176200), one (01777700), ".pwR1jEK3", mcfisa_a}, +{"cp1ldl", 6, one (0177200), one (01777700), ".pwR1jEK3", mcfisa_a}, +{"cp0ld", 6, one (0176200), one (01777700), ".pwR1jEK3", mcfisa_a}, +{"cp1ld", 6, one (0177200), one (01777700), ".pwR1jEK3", mcfisa_a}, +{"cp0stb", 6, one (0176400), one (01777700), ".R1pwjEK3", mcfisa_a}, +{"cp1stb", 6, one (0177400), one (01777700), ".R1pwjEK3", mcfisa_a}, +{"cp0stw", 6, one (0176500), one (01777700), ".R1pwjEK3", mcfisa_a}, +{"cp1stw", 6, one (0177500), one (01777700), ".R1pwjEK3", mcfisa_a}, +{"cp0stl", 6, one (0176600), one (01777700), ".R1pwjEK3", mcfisa_a}, +{"cp1stl", 6, one (0177600), one (01777700), ".R1pwjEK3", mcfisa_a}, +{"cp0st", 6, one (0176600), one (01777700), ".R1pwjEK3", mcfisa_a}, +{"cp1st", 6, one (0177600), one (01777700), ".R1pwjEK3", mcfisa_a}, + {"dbcc", 2, one(0052310), one(0177770), "DsBw", m68000up }, {"dbcs", 2, one(0052710), one(0177770), "DsBw", m68000up }, {"dbeq", 2, one(0053710), one(0177770), "DsBw", m68000up }, @@ -310,21 +338,21 @@ const struct m68k_opcode m68k_opcodes[] = {"divsw", 2, one(0100700), one(0170700), ";wDd", m68000up | mcfhwdiv }, -{"divsl", 4, two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 }, -{"divsl", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up|cpu32 }, +{"divsl", 4, two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up | cpu32 | fido_a }, +{"divsl", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up | cpu32 | fido_a }, {"divsl", 4, two(0046100,0004000),two(0177700,0107770),"qsDD", mcfhwdiv }, -{"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 }, -{"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up|cpu32 }, +{"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up | cpu32 | fido_a }, +{"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up | cpu32 | fido_a }, {"divuw", 2, one(0100300), one(0170700), ";wDd", m68000up | mcfhwdiv }, -{"divul", 4, two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 }, -{"divul", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up|cpu32 }, +{"divul", 4, two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up | cpu32 | fido_a }, +{"divul", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up | cpu32 | fido_a }, {"divul", 4, two(0046100,0000000),two(0177700,0107770),"qsDD", mcfhwdiv }, -{"divull", 4, two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 }, -{"divull", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up|cpu32 }, +{"divull", 4, two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up | cpu32 | fido_a }, +{"divull", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up | cpu32 | fido_a }, {"eorib", 4, one(0005000), one(0177700), "#b$s", m68000up }, {"eorib", 4, one(0005074), one(0177777), "#bCs", m68000up }, @@ -358,9 +386,9 @@ const struct m68k_opcode m68k_opcodes[] = {"extw", 2, one(0044200), one(0177770), "Ds", m68000up|mcfisa_a }, {"extl", 2, one(0044300), one(0177770), "Ds", m68000up|mcfisa_a }, -{"extbl", 2, one(0044700), one(0177770), "Ds", m68020up|cpu32|mcfisa_a }, +{"extbl", 2, one(0044700), one(0177770), "Ds", m68020up | cpu32 | fido_a | mcfisa_a }, -{"ff1", 2, one(0002300), one(0177770), "Ds", mcfisa_aa}, +{"ff1", 2, one(0002300), one(0177770), "Ds", mcfisa_aa | mcfisa_c}, /* float stuff starts here */ @@ -461,7 +489,7 @@ const struct m68k_opcode m68k_opcodes[] = {"fdaddd", 4, two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, {"fdaddd", 4, two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, {"fdaddd", 4, two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, -{"fdaddl", 4, two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, +{"fdaddl", 4, two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, {"fdaddl", 4, two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, {"fdaddp", 4, two(0xF000, 0x4C66), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, {"fdadds", 4, two(0xF000, 0x4466), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, @@ -1423,26 +1451,26 @@ const struct m68k_opcode m68k_opcodes[] = {"halt", 2, one(0045310), one(0177777), "", m68060 | mcfisa_a }, {"illegal", 2, one(0045374), one(0177777), "", m68000up | mcfisa_a }, -{"intouch", 2, one(0xf428), one(0xfff8), "As", mcfisa_b }, +{"intouch", 2, one(0xf428), one(0xfff8), "As", mcfisa_b | mcfisa_c }, {"jmp", 2, one(0047300), one(0177700), "!s", m68000up | mcfisa_a }, -{"jra", 2, one(0060000), one(0177400), "Bg", m68000up | mcfisa_a }, +{"jra", 2, one(0060000), one(0177400), "Bb", m68000up | mcfisa_a }, {"jra", 2, one(0047300), one(0177700), "!s", m68000up | mcfisa_a }, {"jsr", 2, one(0047200), one(0177700), "!s", m68000up | mcfisa_a }, -{"jbsr", 2, one(0060400), one(0177400), "Bg", m68000up | mcfisa_a }, +{"jbsr", 2, one(0060400), one(0177400), "Bs", m68000up | mcfisa_a }, {"jbsr", 2, one(0047200), one(0177700), "!s", m68000up | mcfisa_a }, {"lea", 2, one(0040700), one(0170700), "!sAd", m68000up | mcfisa_a }, -{"lpstop", 6, two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 }, +{"lpstop", 6, two(0174000,0000700),two(0177777,0177777),"#w", cpu32 | fido_a | m68060 }, {"linkw", 4, one(0047120), one(0177770), "As#w", m68000up | mcfisa_a }, -{"linkl", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 }, +{"linkl", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 | fido_a }, {"link", 4, one(0047120), one(0177770), "As#W", m68000up | mcfisa_a }, -{"link", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 }, +{"link", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 | fido_a }, {"lslb", 2, one(0160410), one(0170770), "QdDs", m68000up }, {"lslb", 2, one(0160450), one(0170770), "DdDs", m68000up }, @@ -1553,13 +1581,13 @@ const struct m68k_opcode m68k_opcodes[] = {"moveb", 2, one(0010200), one(0170700), "obad", mcfisa_a }, {"moveb", 2, one(0010300), one(0170700), "ob+d", mcfisa_a }, {"moveb", 2, one(0010400), one(0170700), "ob-d", mcfisa_a }, -{"moveb", 2, one(0010000), one(0170000), "obnd", mcfisa_b }, +{"moveb", 2, one(0010000), one(0170000), "obnd", mcfisa_b | mcfisa_c }, {"movew", 2, one(0030000), one(0170000), "*w%d", m68000up }, {"movew", 2, one(0030000), one(0170000), "ms%d", mcfisa_a }, {"movew", 2, one(0030000), one(0170000), "nspd", mcfisa_a }, {"movew", 2, one(0030000), one(0170000), "owmd", mcfisa_a }, -{"movew", 2, one(0030000), one(0170000), "ownd", mcfisa_b }, +{"movew", 2, one(0030000), one(0170000), "ownd", mcfisa_b | mcfisa_c }, {"movew", 2, one(0040300), one(0177700), "Ss$s", m68000up }, {"movew", 2, one(0040300), one(0177770), "SsDs", mcfisa_a }, {"movew", 2, one(0041300), one(0177700), "Cs$s", m68010up }, @@ -1576,7 +1604,7 @@ const struct m68k_opcode m68k_opcodes[] = {"movel", 2, one(0020000), one(0170000), "ms%d", mcfisa_a }, {"movel", 2, one(0020000), one(0170000), "nspd", mcfisa_a }, {"movel", 2, one(0020000), one(0170000), "olmd", mcfisa_a }, -{"movel", 2, one(0020000), one(0170000), "olnd", mcfisa_b }, +{"movel", 2, one(0020000), one(0170000), "olnd", mcfisa_b | mcfisa_c }, {"movel", 2, one(0047140), one(0177770), "AsUd", m68000up | mcfusp }, {"movel", 2, one(0047150), one(0177770), "UdAs", m68000up | mcfusp }, {"movel", 2, one(0120600), one(0177760), "EsRs", mcfmac }, @@ -1609,7 +1637,7 @@ const struct m68k_opcode m68k_opcodes[] = {"move", 2, one(0030000), one(0170000), "ms%d", mcfisa_a }, {"move", 2, one(0030000), one(0170000), "nspd", mcfisa_a }, {"move", 2, one(0030000), one(0170000), "owmd", mcfisa_a }, -{"move", 2, one(0030000), one(0170000), "ownd", mcfisa_b }, +{"move", 2, one(0030000), one(0170000), "ownd", mcfisa_b | mcfisa_c }, {"move", 2, one(0040300), one(0177700), "Ss$s", m68000up }, {"move", 2, one(0040300), one(0177770), "SsDs", mcfisa_a }, {"move", 2, one(0041300), one(0177700), "Cs$s", m68010up }, @@ -1624,11 +1652,11 @@ const struct m68k_opcode m68k_opcodes[] = {"move", 2, one(0047140), one(0177770), "AsUd", m68000up }, {"move", 2, one(0047150), one(0177770), "UdAs", m68000up }, -{"mov3ql", 2, one(0120500), one(0170700), "xd%s", mcfisa_b }, -{"mvsb", 2, one(0070400), one(0170700), "*bDd", mcfisa_b }, -{"mvsw", 2, one(0070500), one(0170700), "*wDd", mcfisa_b }, -{"mvzb", 2, one(0070600), one(0170700), "*bDd", mcfisa_b }, -{"mvzw", 2, one(0070700), one(0170700), "*wDd", mcfisa_b }, +{"mov3ql", 2, one(0120500), one(0170700), "xd%s", mcfisa_b | mcfisa_c }, +{"mvsb", 2, one(0070400), one(0170700), "*bDd", mcfisa_b | mcfisa_c }, +{"mvsw", 2, one(0070500), one(0170700), "*wDd", mcfisa_b | mcfisa_c }, +{"mvzb", 2, one(0070600), one(0170700), "*bDd", mcfisa_b | mcfisa_c }, +{"mvzw", 2, one(0070700), one(0170700), "*wDd", mcfisa_b | mcfisa_c }, {"movesb", 4, two(0007000, 0), two(0177700, 07777), "~sR1", m68010up }, {"movesb", 4, two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up }, @@ -1672,14 +1700,14 @@ const struct m68k_opcode m68k_opcodes[] = {"msacl", 4, two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac }, {"mulsw", 2, one(0140700), one(0170700), ";wDd", m68000up|mcfisa_a }, -{"mulsl", 4, two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 }, +{"mulsl", 4, two(0046000,004000), two(0177700,0107770), ";lD1", m68020up | cpu32 | fido_a }, {"mulsl", 4, two(0046000,004000), two(0177700,0107770), "qsD1", mcfisa_a }, -{"mulsl", 4, two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 }, +{"mulsl", 4, two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up | cpu32 | fido_a }, {"muluw", 2, one(0140300), one(0170700), ";wDd", m68000up|mcfisa_a }, -{"mulul", 4, two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 }, +{"mulul", 4, two(0046000,000000), two(0177700,0107770), ";lD1", m68020up | cpu32 | fido_a }, {"mulul", 4, two(0046000,000000), two(0177700,0107770), "qsD1", mcfisa_a }, -{"mulul", 4, two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 }, +{"mulul", 4, two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up | cpu32 | fido_a }, {"nbcd", 2, one(0044000), one(0177700), "$s", m68000up }, @@ -1993,11 +2021,69 @@ const struct m68k_opcode m68k_opcodes[] = {"rts", 2, one(0047165), one(0177777), "", m68000up | mcfisa_a }, -{"satsl", 2, one(0046200), one(0177770), "Ds", mcfisa_b }, +{"satsl", 2, one(0046200), one(0177770), "Ds", mcfisa_b | mcfisa_c }, {"sbcd", 2, one(0100400), one(0170770), "DsDd", m68000up }, {"sbcd", 2, one(0100410), one(0170770), "-s-d", m68000up }, + /* Traps have to come before conditional sets, as they have a more + specific opcode. */ +{"trapcc", 2, one(0052374), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapcs", 2, one(0052774), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapeq", 2, one(0053774), one(0177777), "", m68020up | cpu32 | fido_a }, +{"tpf", 2, one(0050774), one(0177777), "", mcfisa_a }, +{"trapf", 2, one(0050774), one(0177777), "", m68020up | cpu32 | fido_a | mcfisa_a }, +{"trapge", 2, one(0056374), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapgt", 2, one(0057374), one(0177777), "", m68020up | cpu32 | fido_a }, +{"traphi", 2, one(0051374), one(0177777), "", m68020up | cpu32 | fido_a }, +{"traple", 2, one(0057774), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapls", 2, one(0051774), one(0177777), "", m68020up | cpu32 | fido_a }, +{"traplt", 2, one(0056774), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapmi", 2, one(0055774), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapne", 2, one(0053374), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trappl", 2, one(0055374), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapt", 2, one(0050374), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapvc", 2, one(0054374), one(0177777), "", m68020up | cpu32 | fido_a }, +{"trapvs", 2, one(0054774), one(0177777), "", m68020up | cpu32 | fido_a }, + +{"trapccw", 4, one(0052372), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapcsw", 4, one(0052772), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapeqw", 4, one(0053772), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"tpfw", 4, one(0050772), one(0177777), "#w", mcfisa_a}, +{"trapfw", 4, one(0050772), one(0177777), "#w", m68020up | cpu32 | fido_a | mcfisa_a}, +{"trapgew", 4, one(0056372), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapgtw", 4, one(0057372), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"traphiw", 4, one(0051372), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"traplew", 4, one(0057772), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"traplsw", 4, one(0051772), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapltw", 4, one(0056772), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapmiw", 4, one(0055772), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapnew", 4, one(0053372), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapplw", 4, one(0055372), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"traptw", 4, one(0050372), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapvcw", 4, one(0054372), one(0177777), "#w", m68020up | cpu32 | fido_a }, +{"trapvsw", 4, one(0054772), one(0177777), "#w", m68020up | cpu32 | fido_a }, + +{"trapccl", 6, one(0052373), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trapcsl", 6, one(0052773), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trapeql", 6, one(0053773), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"tpfl", 6, one(0050773), one(0177777), "#l", mcfisa_a}, +{"trapfl", 6, one(0050773), one(0177777), "#l", m68020up | cpu32 | fido_a | mcfisa_a}, +{"trapgel", 6, one(0056373), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trapgtl", 6, one(0057373), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"traphil", 6, one(0051373), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"traplel", 6, one(0057773), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"traplsl", 6, one(0051773), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trapltl", 6, one(0056773), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trapmil", 6, one(0055773), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trapnel", 6, one(0053373), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trappll", 6, one(0055373), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"traptl", 6, one(0050373), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trapvcl", 6, one(0054373), one(0177777), "#l", m68020up | cpu32 | fido_a }, +{"trapvsl", 6, one(0054773), one(0177777), "#l", m68020up | cpu32 | fido_a }, + +{"trapv", 2, one(0047166), one(0177777), "", m68000up }, + {"scc", 2, one(0052300), one(0177700), "$s", m68000up }, {"scc", 2, one(0052300), one(0177700), "Ds", mcfisa_a }, {"scs", 2, one(0052700), one(0177700), "$s", m68000up }, @@ -2021,15 +2107,17 @@ const struct m68k_opcode m68k_opcodes[] = {"smi", 2, one(0055700), one(0177700), "$s", m68000up }, {"smi", 2, one(0055700), one(0177700), "Ds", mcfisa_a }, {"sne", 2, one(0053300), one(0177700), "$s", m68000up }, -{"sne", 2, one(0053300), one(0177700), "Ds", mcfisa_a }, +{"sne", 2, one(0053300), one(0177770), "Ds", mcfisa_a }, {"spl", 2, one(0055300), one(0177700), "$s", m68000up }, -{"spl", 2, one(0055300), one(0177700), "Ds", mcfisa_a }, +{"spl", 2, one(0055300), one(0177770), "Ds", mcfisa_a }, {"st", 2, one(0050300), one(0177700), "$s", m68000up }, -{"st", 2, one(0050300), one(0177700), "Ds", mcfisa_a }, +{"st", 2, one(0050300), one(0177770), "Ds", mcfisa_a }, {"svc", 2, one(0054300), one(0177700), "$s", m68000up }, -{"svc", 2, one(0054300), one(0177700), "Ds", mcfisa_a }, +{"svc", 2, one(0054300), one(0177770), "Ds", mcfisa_a }, {"svs", 2, one(0054700), one(0177700), "$s", m68000up }, -{"svs", 2, one(0054700), one(0177700), "Ds", mcfisa_a }, +{"svs", 2, one(0054700), one(0177770), "Ds", mcfisa_a }, + +{"sleep", 2, one(0047170), one(0177777), "", fido_a }, {"stop", 4, one(0047162), one(0177777), "#w", m68000up | mcfisa_a }, @@ -2082,7 +2170,7 @@ const struct m68k_opcode m68k_opcodes[] = {"swbeg", 4, one(0045374), one(0177777), "#w", m68000up | mcfisa_a }, {"swbegl", 6, one(0045375), one(0177777), "#l", m68000up | mcfisa_a }, -{"tas", 2, one(0045300), one(0177700), "$s", m68000up | mcfisa_b}, +{"tas", 2, one(0045300), one(0177700), "$s", m68000up | mcfisa_b | mcfisa_c}, #define TBL1(name,insn_size,signed,round,size) \ {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400), \ @@ -2091,71 +2179,20 @@ const struct m68k_opcode m68k_opcodes[] = two(0177770,0107770), "DsD3D1", cpu32 } #define TBL(name1, name2, name3, s, r) \ TBL1(name1, 4, s, r, 0), TBL1(name2, 4, s, r, 1), TBL1(name3, 4, s, r, 2) -TBL("tblsb", "tblsw", "tblsl", 2, 1), -TBL("tblsnb", "tblsnw", "tblsnl", 2, 0), +TBL("tblsb", "tblsw", "tblsl", 1, 1), +TBL("tblsnb", "tblsnw", "tblsnl", 1, 0), TBL("tblub", "tbluw", "tblul", 0, 1), TBL("tblunb", "tblunw", "tblunl", 0, 0), {"trap", 2, one(0047100), one(0177760), "Ts", m68000up | mcfisa_a }, -{"trapcc", 2, one(0052374), one(0177777), "", m68020up | cpu32 }, -{"trapcs", 2, one(0052774), one(0177777), "", m68020up | cpu32 }, -{"trapeq", 2, one(0053774), one(0177777), "", m68020up | cpu32 }, -{"trapf", 2, one(0050774), one(0177777), "", m68020up | cpu32 | mcfisa_a }, -{"trapge", 2, one(0056374), one(0177777), "", m68020up | cpu32 }, -{"trapgt", 2, one(0057374), one(0177777), "", m68020up | cpu32 }, -{"traphi", 2, one(0051374), one(0177777), "", m68020up | cpu32 }, -{"traple", 2, one(0057774), one(0177777), "", m68020up | cpu32 }, -{"trapls", 2, one(0051774), one(0177777), "", m68020up | cpu32 }, -{"traplt", 2, one(0056774), one(0177777), "", m68020up | cpu32 }, -{"trapmi", 2, one(0055774), one(0177777), "", m68020up | cpu32 }, -{"trapne", 2, one(0053374), one(0177777), "", m68020up | cpu32 }, -{"trappl", 2, one(0055374), one(0177777), "", m68020up | cpu32 }, -{"trapt", 2, one(0050374), one(0177777), "", m68020up | cpu32 }, -{"trapvc", 2, one(0054374), one(0177777), "", m68020up | cpu32 }, -{"trapvs", 2, one(0054774), one(0177777), "", m68020up | cpu32 }, - -{"trapccw", 4, one(0052372), one(0177777), "#w", m68020up|cpu32 }, -{"trapcsw", 4, one(0052772), one(0177777), "#w", m68020up|cpu32 }, -{"trapeqw", 4, one(0053772), one(0177777), "#w", m68020up|cpu32 }, -{"trapfw", 4, one(0050772), one(0177777), "#w", m68020up|cpu32|mcfisa_a}, -{"trapgew", 4, one(0056372), one(0177777), "#w", m68020up|cpu32 }, -{"trapgtw", 4, one(0057372), one(0177777), "#w", m68020up|cpu32 }, -{"traphiw", 4, one(0051372), one(0177777), "#w", m68020up|cpu32 }, -{"traplew", 4, one(0057772), one(0177777), "#w", m68020up|cpu32 }, -{"traplsw", 4, one(0051772), one(0177777), "#w", m68020up|cpu32 }, -{"trapltw", 4, one(0056772), one(0177777), "#w", m68020up|cpu32 }, -{"trapmiw", 4, one(0055772), one(0177777), "#w", m68020up|cpu32 }, -{"trapnew", 4, one(0053372), one(0177777), "#w", m68020up|cpu32 }, -{"trapplw", 4, one(0055372), one(0177777), "#w", m68020up|cpu32 }, -{"traptw", 4, one(0050372), one(0177777), "#w", m68020up|cpu32 }, -{"trapvcw", 4, one(0054372), one(0177777), "#w", m68020up|cpu32 }, -{"trapvsw", 4, one(0054772), one(0177777), "#w", m68020up|cpu32 }, - -{"trapccl", 6, one(0052373), one(0177777), "#l", m68020up|cpu32 }, -{"trapcsl", 6, one(0052773), one(0177777), "#l", m68020up|cpu32 }, -{"trapeql", 6, one(0053773), one(0177777), "#l", m68020up|cpu32 }, -{"trapfl", 6, one(0050773), one(0177777), "#l", m68020up|cpu32|mcfisa_a}, -{"trapgel", 6, one(0056373), one(0177777), "#l", m68020up|cpu32 }, -{"trapgtl", 6, one(0057373), one(0177777), "#l", m68020up|cpu32 }, -{"traphil", 6, one(0051373), one(0177777), "#l", m68020up|cpu32 }, -{"traplel", 6, one(0057773), one(0177777), "#l", m68020up|cpu32 }, -{"traplsl", 6, one(0051773), one(0177777), "#l", m68020up|cpu32 }, -{"trapltl", 6, one(0056773), one(0177777), "#l", m68020up|cpu32 }, -{"trapmil", 6, one(0055773), one(0177777), "#l", m68020up|cpu32 }, -{"trapnel", 6, one(0053373), one(0177777), "#l", m68020up|cpu32 }, -{"trappll", 6, one(0055373), one(0177777), "#l", m68020up|cpu32 }, -{"traptl", 6, one(0050373), one(0177777), "#l", m68020up|cpu32 }, -{"trapvcl", 6, one(0054373), one(0177777), "#l", m68020up|cpu32 }, -{"trapvsl", 6, one(0054773), one(0177777), "#l", m68020up|cpu32 }, - -{"trapv", 2, one(0047166), one(0177777), "", m68000up }, +{"trapx", 2, one(0047060), one(0177760), "Ts", fido_a }, -{"tstb", 2, one(0045000), one(0177700), ";b", m68020up|cpu32|mcfisa_a }, +{"tstb", 2, one(0045000), one(0177700), ";b", m68020up | cpu32 | fido_a | mcfisa_a }, {"tstb", 2, one(0045000), one(0177700), "$b", m68000up }, -{"tstw", 2, one(0045100), one(0177700), "*w", m68020up|cpu32|mcfisa_a }, +{"tstw", 2, one(0045100), one(0177700), "*w", m68020up | cpu32 | fido_a | mcfisa_a }, {"tstw", 2, one(0045100), one(0177700), "$w", m68000up }, -{"tstl", 2, one(0045200), one(0177700), "*l", m68020up|cpu32|mcfisa_a }, +{"tstl", 2, one(0045200), one(0177700), "*l", m68020up | cpu32 | fido_a | mcfisa_a }, {"tstl", 2, one(0045200), one(0177700), "$l", m68000up }, {"unlk", 2, one(0047130), one(0177770), "As", m68000up | mcfisa_a }, @@ -2167,6 +2204,8 @@ TBL("tblunb", "tblunw", "tblunl", 0, 0), {"wddataw", 2, one(0175500), one(0177700), "~s", mcfisa_a }, {"wddatal", 2, one(0175600), one(0177700), "~s", mcfisa_a }, +{"wdebugl", 4, two(0175720, 03), two(0177770, 0xffff), "as", mcfisa_a }, +{"wdebugl", 4, two(0175750, 03), two(0177770, 0xffff), "ds", mcfisa_a }, {"wdebug", 4, two(0175720, 03), two(0177770, 0xffff), "as", mcfisa_a }, {"wdebug", 4, two(0175750, 03), two(0177770, 0xffff), "ds", mcfisa_a }, }; |