* mn10300-dis.c (disassemble): Handle register lists.
authorJeff Law <law@redhat.com>
Wed, 20 Nov 1996 18:39:48 +0000 (18:39 +0000)
committerJeff Law <law@redhat.com>
Wed, 20 Nov 1996 18:39:48 +0000 (18:39 +0000)
More disassembler stuff.

opcodes/ChangeLog
opcodes/mn10300-dis.c

index 03a28d6af0f39793850c836672160b2c4d196dd9..b942b5b52676a4493f733b71b64a6315e4667248 100644 (file)
@@ -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.
 
index 39864187040eda459169b7134269d4e10d6fbf0a..1d449dd58f0c4fa8b40fe1cecfa847861ea93132 100644 (file)
@@ -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);
            }