S12Z: Fix disassembly of indexed OPR operands with zero index.
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 31 Dec 2018 07:48:10 +0000 (07:48 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Wed, 9 Jan 2019 18:44:27 +0000 (19:44 +0100)
gas/
* testsuite/gas/s12z/jsr.s: New case.
* testsuite/gas/s12z/jsr.d: New case.
opcodes/
* s12z-dis.c (opr_emit_disassembly): Do not omit an index if it is
zero.

gas/ChangeLog
gas/testsuite/gas/s12z/jsr.d
gas/testsuite/gas/s12z/jsr.s
opcodes/ChangeLog
opcodes/s12z-dis.c

index 99672d62f54342d9824e80b7f50da5592452e8aa..86e550d3d3405c84794878c97013cd54c84b74bb 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-09  John Darrington <john@darrington.wattle.id.au>
+
+        * testsuite/gas/s12z/jsr.s: New case.
+       * testsuite/gas/s12z/jsr.d: New case.
+
 2019-01-09  Andrew Paprocki  <andrew@ishiboo.com>
 
        * configure: Regenerate.
index c23f684176aa80b91da5ca91f7c88718d87fb01f..cf37e6ea13536e25343d2dde51785981d57ed9dd 100644 (file)
@@ -31,3 +31,4 @@ Disassembly of section .text:
   2a:  ab f9 be 91     jsr 114321
   2e:  ab fe 07 82     jsr \[492134\]
   32:  66 
+  33:  ab 40           jsr \(0,x\)
index 80f0ff1422ba18238a9132afc2575a6a0932b84d..fa761d33f70b4fa89624092d45e62c5cbb9499bb 100644 (file)
@@ -1,5 +1,5 @@
        jsr d2
-       jsr (2, y)
+       jsr (2,y)
        jsr (+y)
        jsr (-y)
        jsr (y+)
@@ -18,3 +18,4 @@
        jsr 4021
        jsr 114321
        jsr [492134]
+       jsr (0,x)
index 437590e8056bf75e703cc901483de0e36314edd8..d17ee102202344ec0da6d69cf7d8eded5dd5e8ec 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-09  John Darrington <john@darrington.wattle.id.au>
+
+        * s12z-dis.c (opr_emit_disassembly): Do not omit an index if it is
+       zero.
+
 2019-01-09  Andrew Paprocki  <andrew@ishiboo.com>
 
        * configure: Regenerate.
index 14176fb6d9e47f83280ec0c8eacfcfea4d1a113e..5db0b4356246bbdec00e2e6be1de7922597b979e 100644 (file)
@@ -282,36 +282,33 @@ opr_emit_disassembly (const struct operand *opr,
         struct memory_operand *mo = (struct memory_operand *) opr;
        (*info->fprintf_func) (info->stream, "%c", mo->indirect ? '[' : '(');
 
-        if (mo->base_offset != 0)
-          {
-            (*info->fprintf_func) (info->stream, "%d", mo->base_offset);
-          }
-        else if (mo->n_regs > 0)
-          {
-           const char *fmt;
-           switch (mo->mutation)
-             {
-             case OPND_RM_PRE_DEC:
-               fmt = "-%s";
-               break;
-             case OPND_RM_PRE_INC:
-               fmt = "+%s";
-               break;
-             case OPND_RM_POST_DEC:
-               fmt = "%s-";
-               break;
-             case OPND_RM_POST_INC:
-               fmt = "%s+";
-               break;
-             case OPND_RM_NONE:
-             default:
-               fmt = "%s";
-               break;
-             }
-            (*info->fprintf_func) (info->stream, fmt,
-                                  registers[mo->regs[0]].name);
-            used_reg = 1;
-          }
+       const char *fmt;
+       assert (mo->mutation == OPND_RM_NONE || mo->n_regs == 1);
+       switch (mo->mutation)
+         {
+         case OPND_RM_PRE_DEC:
+           fmt = "-%s";
+           break;
+         case OPND_RM_PRE_INC:
+           fmt = "+%s";
+           break;
+         case OPND_RM_POST_DEC:
+           fmt = "%s-";
+           break;
+         case OPND_RM_POST_INC:
+           fmt = "%s+";
+           break;
+         case OPND_RM_NONE:
+         default:
+           if (mo->n_regs < 2)
+             (*info->fprintf_func) (info->stream, (mo->n_regs == 0) ? "%d" : "%d,", mo->base_offset);
+           fmt = "%s";
+           break;
+         }
+       if (mo->n_regs > 0)
+         (*info->fprintf_func) (info->stream, fmt,
+                                registers[mo->regs[0]].name);
+       used_reg = 1;
 
         if (mo->n_regs > used_reg)
           {
This page took 0.027861 seconds and 4 git commands to generate.