From ac8c616a590d0d4b4309f77ef53e6770d5af0ed7 Mon Sep 17 00:00:00 2001 From: Stephane Carrez Date: Sun, 13 Oct 2002 09:01:54 +0000 Subject: [PATCH] * m68hc11-dis.c (print_insn): Treat bitmask and branch operands at the end. --- opcodes/ChangeLog | 5 +++ opcodes/m68hc11-dis.c | 99 ++++++++++++++++++++++--------------------- 2 files changed, 55 insertions(+), 49 deletions(-) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 6128a7d1cf..0e31186d9b 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2002-10-13 Stephane Carrez + + * m68hc11-dis.c (print_insn): Treat bitmask and branch operands + at the end. + 2002-09-30 Gavin Romig-Koch Ken Raeburn Aldy Hernandez diff --git a/opcodes/m68hc11-dis.c b/opcodes/m68hc11-dis.c index c721d16e0c..bcd3ee5103 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;