* v850-dis.c (disassemble): Handle insertion of ',', '[' and

']' characters into the output stream.
        * v850-opc.c (v850_opcodes: Remove size field from all opcodes.
        Add "memop" field to all opcodes (for the disassembler).
        Reorder opcodes so that "nop" comes before "mov" and "jr"
        comes before "jarl".
Should give us a functional disassembler.
This commit is contained in:
Jeff Law 1996-08-31 22:00:45 +00:00
parent e05cae190b
commit 09478dc331
2 changed files with 88 additions and 79 deletions

View file

@ -1,6 +1,15 @@
start-sanitize-v850 start-sanitize-v850
Sat Aug 31 01:27:26 1996 Jeffrey A Law (law@cygnus.com) Sat Aug 31 01:27:26 1996 Jeffrey A Law (law@cygnus.com)
* v850-dis.c (disassemble): Handle insertion of ',', '[' and
']' characters into the output stream.
* v850-opc.c (v850_opcodes: Remove size field from all opcodes.
Add "memop" field to all opcodes (for the disassembler).
Reorder opcodes so that "nop" comes before "mov" and "jr"
comes before "jarl".
* v850-dis.c (print_insn_v850): Fix typo in last change.
* v850-dis.c (print_insn_v850): Properly handle disassembling * v850-dis.c (print_insn_v850): Properly handle disassembling
a two byte insn at the end of a memory region when the memory a two byte insn at the end of a memory region when the memory
region's size is only two byte aligned. region's size is only two byte aligned.

View file

@ -165,106 +165,106 @@ const struct v850_operand v850_operands[] = {
const struct v850_opcode v850_opcodes[] = { const struct v850_opcode v850_opcodes[] = {
/* load/store instructions */ /* load/store instructions */
{ "sld.b", one(0x0300), one(0x0780), IF4A, 2 }, { "sld.b", one(0x0300), one(0x0780), IF4A, 1 },
{ "sld.h", one(0x0400), one(0x0780), IF4C, 2 }, { "sld.h", one(0x0400), one(0x0780), IF4C, 1 },
{ "sld.w", one(0x0500), one(0x0781), IF4E, 2 }, { "sld.w", one(0x0500), one(0x0781), IF4E, 1 },
{ "sst.b", one(0x0380), one(0x0780), IF4B, 2 }, { "sst.b", one(0x0380), one(0x0780), IF4B, 2 },
{ "sst.h", one(0x0480), one(0x0780), IF4D, 2 }, { "sst.h", one(0x0480), one(0x0780), IF4D, 2 },
{ "sst.w", one(0x0501), one(0x0781), IF4F, 2 }, { "sst.w", one(0x0501), one(0x0781), IF4F, 2 },
{ "ld.b", two(0x0700,0x0000), two (0x07e0,0x0000), IF7C, 4 }, { "ld.b", two(0x0700,0x0000), two (0x07e0,0x0000), IF7C, 1 },
{ "ld.h", two(0x0720,0x0000), two (0x07e0,0x0001), IF7A, 4 }, { "ld.h", two(0x0720,0x0000), two (0x07e0,0x0001), IF7A, 1 },
{ "ld.w", two(0x0720,0x0001), two (0x07e0,0x0001), IF7A, 4 }, { "ld.w", two(0x0720,0x0001), two (0x07e0,0x0001), IF7A, 1 },
{ "st.b", two(0x0740,0x0000), two (0x07e0,0x0000), IF7D, 4 }, { "st.b", two(0x0740,0x0000), two (0x07e0,0x0000), IF7D, 2 },
{ "st.h", two(0x0760,0x0000), two (0x07e0,0x0001), IF7B, 4 }, { "st.h", two(0x0760,0x0000), two (0x07e0,0x0001), IF7B, 2 },
{ "st.w", two(0x0760,0x0001), two (0x07e0,0x0001), IF7B, 4 }, { "st.w", two(0x0760,0x0001), two (0x07e0,0x0001), IF7B, 2 },
/* arithmetic operation instructions */ /* arithmetic operation instructions */
{ "mov", OP(0x00), OP_MASK, IF1, 2 }, { "nop", one(0x00), one(0xffff), {0}, 0 },
{ "mov", OP(0x10), OP_MASK, IF2, 2 }, { "mov", OP(0x00), OP_MASK, IF1, 0 },
{ "movea", OP(0x31), OP_MASK, IF6, 4 }, { "mov", OP(0x10), OP_MASK, IF2, 0 },
{ "movhi", OP(0x32), OP_MASK, IF6, 4 }, { "movea", OP(0x31), OP_MASK, IF6, 0 },
{ "add", OP(0x0e), OP_MASK, IF1, 2 }, { "movhi", OP(0x32), OP_MASK, IF6, 0 },
{ "add", OP(0x12), OP_MASK, IF2, 2 }, { "add", OP(0x0e), OP_MASK, IF1, 0 },
{ "addi", OP(0x30), OP_MASK, IF6, 4 }, { "add", OP(0x12), OP_MASK, IF2, 0 },
{ "sub", OP(0x0d), OP_MASK, IF1, 2 }, { "addi", OP(0x30), OP_MASK, IF6, 0 },
{ "subr", OP(0x0c), OP_MASK, IF1, 2 }, { "sub", OP(0x0d), OP_MASK, IF1, 0 },
{ "mulh", OP(0x07), OP_MASK, IF1, 2 }, { "subr", OP(0x0c), OP_MASK, IF1, 0 },
{ "mulh", OP(0x17), OP_MASK, IF2, 2 }, { "mulh", OP(0x07), OP_MASK, IF1, 0 },
{ "mulhi", OP(0x37), OP_MASK, IF6, 4 }, { "mulh", OP(0x17), OP_MASK, IF2, 0 },
{ "divh", OP(0x02), OP_MASK, IF1, 2 }, { "mulhi", OP(0x37), OP_MASK, IF6, 0 },
{ "cmp", OP(0x0f), OP_MASK, IF1, 2 }, { "divh", OP(0x02), OP_MASK, IF1, 0 },
{ "cmp", OP(0x13), OP_MASK, IF2, 2 }, { "cmp", OP(0x0f), OP_MASK, IF1, 0 },
{ "setf", two(0x07e0,0x0000), two(0x07f0,0xffff), {CCCC,R2}, 4 }, { "cmp", OP(0x13), OP_MASK, IF2, 0 },
{ "setf", two(0x07e0,0x0000), two(0x07f0,0xffff), {CCCC,R2}, 0 },
/* saturated operation instructions */ /* saturated operation instructions */
{ "satadd", OP(0x06), OP_MASK, IF1, 2 }, { "satadd", OP(0x06), OP_MASK, IF1, 0 },
{ "satadd", OP(0x11), OP_MASK, IF2, 2 }, { "satadd", OP(0x11), OP_MASK, IF2, 0 },
{ "satsub", OP(0x05), OP_MASK, IF1, 2 }, { "satsub", OP(0x05), OP_MASK, IF1, 0 },
{ "satsubi", OP(0x33), OP_MASK, IF6, 4 }, { "satsubi", OP(0x33), OP_MASK, IF6, 0 },
{ "satsubr", OP(0x04), OP_MASK, IF1, 2 }, { "satsubr", OP(0x04), OP_MASK, IF1, 0 },
/* logical operation instructions */ /* logical operation instructions */
{ "tst", OP(0x0b), OP_MASK, IF1, 2 }, { "tst", OP(0x0b), OP_MASK, IF1, 0 },
{ "or", OP(0x08), OP_MASK, IF1, 2 }, { "or", OP(0x08), OP_MASK, IF1, 0 },
{ "ori", OP(0x34), OP_MASK, IF6U, 4 }, { "ori", OP(0x34), OP_MASK, IF6U, 0 },
{ "and", OP(0x0a), OP_MASK, IF1, 2 }, { "and", OP(0x0a), OP_MASK, IF1, 0 },
{ "andi", OP(0x36), OP_MASK, IF6U, 4 }, { "andi", OP(0x36), OP_MASK, IF6U, 0 },
{ "xor", OP(0x09), OP_MASK, IF1, 2 }, { "xor", OP(0x09), OP_MASK, IF1, 0 },
{ "xori", OP(0x35), OP_MASK, IF6U, 4 }, { "xori", OP(0x35), OP_MASK, IF6U, 0 },
{ "not", OP(0x01), OP_MASK, IF1, 2 }, { "not", OP(0x01), OP_MASK, IF1, 0 },
{ "sar", OP(0x15), OP_MASK, {I5U, R2}, 2 }, { "sar", OP(0x15), OP_MASK, {I5U, R2}, 0 },
{ "sar", two(0x07e0,0x00a0), two(0x07e0,0xffff), {R1,R2}, 4 }, { "sar", two(0x07e0,0x00a0), two(0x07e0,0xffff), {R1,R2}, 0 },
{ "shl", OP(0x16), OP_MASK, {I5U, R2}, 2 }, { "shl", OP(0x16), OP_MASK, {I5U, R2}, 0 },
{ "shl", two(0x07e0,0x00c0), two(0x07e0,0xffff), {R1,R2}, 4 }, { "shl", two(0x07e0,0x00c0), two(0x07e0,0xffff), {R1,R2}, 0 },
{ "shr", OP(0x14), OP_MASK, {I5U, R2}, 2 }, { "shr", OP(0x14), OP_MASK, {I5U, R2}, 0 },
{ "shr", two(0x07e0,0x0080), two(0x07e0,0xffff), {R1,R2}, 4 }, { "shr", two(0x07e0,0x0080), two(0x07e0,0xffff), {R1,R2}, 0 },
/* branch instructions */ /* branch instructions */
/* signed integer */ /* signed integer */
{ "bgt", BOP(0xf), BOP_MASK, IF3, 2 }, { "bgt", BOP(0xf), BOP_MASK, IF3, 0 },
{ "bge", BOP(0xe), BOP_MASK, IF3, 2 }, { "bge", BOP(0xe), BOP_MASK, IF3, 0 },
{ "blt", BOP(0x6), BOP_MASK, IF3, 2 }, { "blt", BOP(0x6), BOP_MASK, IF3, 0 },
{ "ble", BOP(0x7), BOP_MASK, IF3, 2 }, { "ble", BOP(0x7), BOP_MASK, IF3, 0 },
/* unsigned integer */ /* unsigned integer */
{ "bh", BOP(0xb), BOP_MASK, IF3, 2 }, { "bh", BOP(0xb), BOP_MASK, IF3, 0 },
{ "bnh", BOP(0x3), BOP_MASK, IF3, 2 }, { "bnh", BOP(0x3), BOP_MASK, IF3, 0 },
{ "bl", BOP(0x1), BOP_MASK, IF3, 2 }, { "bl", BOP(0x1), BOP_MASK, IF3, 0 },
{ "bnl", BOP(0x9), BOP_MASK, IF3, 2 }, { "bnl", BOP(0x9), BOP_MASK, IF3, 0 },
/* common */ /* common */
{ "be", BOP(0x2), BOP_MASK, IF3, 2 }, { "be", BOP(0x2), BOP_MASK, IF3, 0 },
{ "bne", BOP(0xa), BOP_MASK, IF3, 2 }, { "bne", BOP(0xa), BOP_MASK, IF3, 0 },
/* others */ /* others */
{ "bv", BOP(0x0), BOP_MASK, IF3, 2 }, { "bv", BOP(0x0), BOP_MASK, IF3, 0 },
{ "bnv", BOP(0x8), BOP_MASK, IF3, 2 }, { "bnv", BOP(0x8), BOP_MASK, IF3, 0 },
{ "bn", BOP(0x4), BOP_MASK, IF3, 2 }, { "bn", BOP(0x4), BOP_MASK, IF3, 0 },
{ "bp", BOP(0xc), BOP_MASK, IF3, 2 }, { "bp", BOP(0xc), BOP_MASK, IF3, 0 },
{ "bc", BOP(0x1), BOP_MASK, IF3, 2 }, { "bc", BOP(0x1), BOP_MASK, IF3, 0 },
{ "bnc", BOP(0x9), BOP_MASK, IF3, 2 }, { "bnc", BOP(0x9), BOP_MASK, IF3, 0 },
{ "bz", BOP(0x2), BOP_MASK, IF3, 2 }, { "bz", BOP(0x2), BOP_MASK, IF3, 0 },
{ "bnz", BOP(0xa), BOP_MASK, IF3, 2 }, { "bnz", BOP(0xa), BOP_MASK, IF3, 0 },
{ "br", BOP(0x5), BOP_MASK, IF3, 2 }, { "br", BOP(0x5), BOP_MASK, IF3, 0 },
{ "bsa", BOP(0xd), BOP_MASK, IF3, 2 }, { "bsa", BOP(0xd), BOP_MASK, IF3, 0 },
{ "jmp", one(0x0060), one(0xffe0), { R1}, 2 }, { "jmp", one(0x0060), one(0xffe0), { R1}, 1 },
{ "jarl", one(0x0780), two(0x07c0,0x0001),{ D22, R2 }, 4 }, { "jr", one(0x0780), two(0xffc0,0x0001),{ D22 }, 0 },
{ "jr", one(0x0780), two(0xffc0,0x0001),{ D22 }, 4 }, { "jarl", one(0x0780), two(0x07c0,0x0001),{ D22, R2 }, 0 },
/* bit manipulation instructions */ /* bit manipulation instructions */
{ "set1", two(0x07c0,0x0000), two(0xc7e0,0x0000), {B3, D16, R1}, 4 }, { "set1", two(0x07c0,0x0000), two(0xc7e0,0x0000), {B3, D16, R1}, 2 },
{ "not1", two(0x47c0,0x0000), two(0xc7e0,0x0000), {B3, D16, R1}, 4 }, { "not1", two(0x47c0,0x0000), two(0xc7e0,0x0000), {B3, D16, R1}, 2 },
{ "clr1", two(0x87c0,0x0000), two(0xc7e0,0x0000), {B3, D16, R1}, 4 }, { "clr1", two(0x87c0,0x0000), two(0xc7e0,0x0000), {B3, D16, R1}, 2 },
{ "tst1", two(0xc7c0,0x0000), two(0xc7e0,0x0000), {B3, D16, R1}, 4 }, { "tst1", two(0xc7c0,0x0000), two(0xc7e0,0x0000), {B3, D16, R1}, 2 },
/* special instructions */ /* special instructions */
{ "di", two(0x07e0,0x0160), two(0xffff,0xffff), {0}, 4 }, { "di", two(0x07e0,0x0160), two(0xffff,0xffff), {0}, 0 },
{ "ei", two(0x87e0,0x0160), two(0xffff,0xffff), {0}, 4 }, { "ei", two(0x87e0,0x0160), two(0xffff,0xffff), {0}, 0 },
{ "halt", two(0x07e0,0x0120), two(0xffff,0xffff), {0}, 4 }, { "halt", two(0x07e0,0x0120), two(0xffff,0xffff), {0}, 0 },
{ "reti", two(0x07e0,0x0140), two(0xffff,0xffff), {0}, 4 }, { "reti", two(0x07e0,0x0140), two(0xffff,0xffff), {0}, 0 },
{ "trap", two(0x07e0,0x0100), two(0xffe0,0xffff), {I5U}, 4 }, { "trap", two(0x07e0,0x0100), two(0xffe0,0xffff), {I5U}, 0 },
{ "ldsr", two(0x07e0,0x0020), two(0x07e0,0xffff), {R1,SR2}, 4 }, { "ldsr", two(0x07e0,0x0020), two(0x07e0,0xffff), {R1,SR2}, 0 },
{ "stsr", two(0x07e0,0x0040), two(0x07e0,0xffff), {SR1,R2}, 4 }, { "stsr", two(0x07e0,0x0040), two(0x07e0,0xffff), {SR1,R2}, 0 },
{ "nop", one(0x00), one(0xffff), {0}, 2 },
{ 0, 0, 0, {0}, 0 }, { 0, 0, 0, {0}, 0 },
} ; } ;