X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fh8300-dis.c;h=b3a9496d5c10767c4f15d82446748371eca42294;hb=088d5b730997bf1dfe1f5c3278d3951b58172b1f;hp=975aba114d4b598b7925f5670ea26ce387aad96f;hpb=81fc72a71afcfb73878803f5f27402c0f96155a5;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/h8300-dis.c b/opcodes/h8300-dis.c index 975aba114d..b3a9496d5c 100644 --- a/opcodes/h8300-dis.c +++ b/opcodes/h8300-dis.c @@ -268,6 +268,30 @@ bfd_h8_disassemble (addr, info, mode) } } fprintf (stream, "%s\t", q->name); + + /* Gross. Disgusting. */ + if (strcmp (q->name, "ldm.l") == 0) + { + int count, high; + + count = (data[1] >> 4) & 0x3; + high = data[3] & 0x7; + + fprintf (stream, "@sp+,er%d-er%d", high - count, high); + return q->length; + } + + if (strcmp (q->name, "stm.l") == 0) + { + int count, low; + + count = (data[1] >> 4) & 0x3; + low = data[3] & 0x7; + + fprintf (stream, "er%d-er%d,@-sp", low, low + count); + return q->length; + } + /* Fill in the args */ { op_type *args = q->args.nib; @@ -287,6 +311,10 @@ bfd_h8_disassemble (addr, info, mode) } else if (x & (IMM|KBIT|DBIT)) { + /* Bletch. For shal #2,er0 and friends. */ + if (*(args+1) & SRC_IN_DST) + abs = 2; + fprintf (stream, "#0x%x", (unsigned) abs); } else if (x & REG) @@ -358,9 +386,12 @@ bfd_h8_disassemble (addr, info, mode) else if (x & CCR) { - fprintf (stream, "ccr"); } + else if (x & EXR) + { + fprintf (stream, "exr"); + } else fprintf (stream, "Hmmmm %x", x);