diff options
author | Stephane Carrez <stcarrez@nerim.fr> | 2002-10-13 09:01:54 +0000 |
---|---|---|
committer | Stephane Carrez <stcarrez@nerim.fr> | 2002-10-13 09:01:54 +0000 |
commit | ac8c616a590d0d4b4309f77ef53e6770d5af0ed7 (patch) | |
tree | ec51d290815af7799aef3a8e7d5e6c55e9b12976 /opcodes/m68hc11-dis.c | |
parent | 98db497e713513fa3ed20fdc411c204adfa6ae01 (diff) | |
download | gdb-ac8c616a590d0d4b4309f77ef53e6770d5af0ed7.zip gdb-ac8c616a590d0d4b4309f77ef53e6770d5af0ed7.tar.gz gdb-ac8c616a590d0d4b4309f77ef53e6770d5af0ed7.tar.bz2 |
* m68hc11-dis.c (print_insn): Treat bitmask and branch operands
at the end.
Diffstat (limited to 'opcodes/m68hc11-dis.c')
-rw-r--r-- | opcodes/m68hc11-dis.c | 99 |
1 files changed, 50 insertions, 49 deletions
diff --git a/opcodes/m68hc11-dis.c b/opcodes/m68hc11-dis.c index c721d16..bcd3ee5 100644 --- a/opcodes/m68hc11-dis.c +++ b/opcodes/m68hc11-dis.c @@ -495,55 +495,6 @@ print_insn (memaddr, info, arch) reg_dst_table[(buffer[0] & 7)]); } - /* M6811_OP_BITMASK and M6811_OP_JUMP_REL must be treated separately - and in that order. The brset/brclr insn have a bitmask and then - a relative branch offset. */ - if (format & M6811_OP_BITMASK) - { - status = read_memory (memaddr + pos, &buffer[0], 1, info); - if (status != 0) - { - return status; - } - pos++; - (*info->fprintf_func) (info->stream, " #$%02x%s", - buffer[0] & 0x0FF, - (format & M6811_OP_JUMP_REL ? " " : "")); - format &= ~M6811_OP_BITMASK; - } - if (format & M6811_OP_JUMP_REL) - { - int val; - - status = read_memory (memaddr + pos, &buffer[0], 1, info); - if (status != 0) - { - return status; - } - - pos++; - val = (buffer[0] & 0x80) ? buffer[0] | 0xFFFFFF00 : buffer[0]; - (*info->print_address_func) (memaddr + pos + val, info); - format &= ~M6811_OP_JUMP_REL; - } - else if (format & M6812_OP_JUMP_REL16) - { - int val; - - status = read_memory (memaddr + pos, &buffer[0], 2, info); - if (status != 0) - { - return status; - } - - pos += 2; - val = ((buffer[0] << 8) | (buffer[1] & 0x0FF)); - if (val & 0x8000) - val |= 0xffff0000; - - (*info->print_address_func) (memaddr + pos + val, info); - format &= ~M6812_OP_JUMP_REL16; - } if (format & (M6811_OP_IMM16 | M6811_OP_IND16)) { int val; @@ -641,6 +592,56 @@ print_insn (memaddr, info, arch) (*info->print_address_func) (val, info); } + /* M6811_OP_BITMASK and M6811_OP_JUMP_REL must be treated separately + and in that order. The brset/brclr insn have a bitmask and then + a relative branch offset. */ + if (format & M6811_OP_BITMASK) + { + status = read_memory (memaddr + pos, &buffer[0], 1, info); + if (status != 0) + { + return status; + } + pos++; + (*info->fprintf_func) (info->stream, " #$%02x%s", + buffer[0] & 0x0FF, + (format & M6811_OP_JUMP_REL ? " " : "")); + format &= ~M6811_OP_BITMASK; + } + if (format & M6811_OP_JUMP_REL) + { + int val; + + status = read_memory (memaddr + pos, &buffer[0], 1, info); + if (status != 0) + { + return status; + } + + pos++; + val = (buffer[0] & 0x80) ? buffer[0] | 0xFFFFFF00 : buffer[0]; + (*info->print_address_func) (memaddr + pos + val, info); + format &= ~M6811_OP_JUMP_REL; + } + else if (format & M6812_OP_JUMP_REL16) + { + int val; + + status = read_memory (memaddr + pos, &buffer[0], 2, info); + if (status != 0) + { + return status; + } + + pos += 2; + val = ((buffer[0] << 8) | (buffer[1] & 0x0FF)); + if (val & 0x8000) + val |= 0xffff0000; + + (*info->print_address_func) (memaddr + pos + val, info); + format &= ~M6812_OP_JUMP_REL16; + } + if (format & M6812_OP_PAGE) { int val; |