diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 03a28d6af0f..b942b5b5267 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,5 +1,7 @@ Wed Nov 20 10:37:13 1996 Jeffrey A Law (law@cygnus.com) + * mn10300-dis.c (disassemble): Handle register lists. + * mn10300-opc.c: Fix handling of register list operand for "call", "ret", and "rets" instructions. diff --git a/opcodes/mn10300-dis.c b/opcodes/mn10300-dis.c index 39864187040..1d449dd58f0 100644 --- a/opcodes/mn10300-dis.c +++ b/opcodes/mn10300-dis.c @@ -370,6 +370,51 @@ disassemble (memaddr, info, insn, extension, size) else if ((operand->flags & MN10300_OPERAND_MEMADDR) != 0) (*info->print_address_func) (value, info); + else if ((operand->flags & MN10300_OPERAND_REG_LIST) != 0) + { + int comma = 0; + + (*info->fprintf_func) (info->stream, "["); + if (value & 0x80) + { + (*info->fprintf_func) (info->stream, "d2"); + comma = 1; + } + + if (value & 0x40) + { + if (comma) + (*info->fprintf_func) (info->stream, ","); + (*info->fprintf_func) (info->stream, "d3"); + comma = 1; + } + + if (value & 0x20) + { + if (comma) + (*info->fprintf_func) (info->stream, ","); + (*info->fprintf_func) (info->stream, "a2"); + comma = 1; + } + + if (value & 0x10) + { + if (comma) + (*info->fprintf_func) (info->stream, ","); + (*info->fprintf_func) (info->stream, "a3"); + comma = 1; + } + + if (value & 0x08) + { + if (comma) + (*info->fprintf_func) (info->stream, ","); + (*info->fprintf_func) (info->stream, "other"); + comma = 1; + } + (*info->fprintf_func) (info->stream, "]"); + } + else (*info->fprintf_func) (info->stream, "%d", value); }