* rs6000-pinsn.c (print_operand): Deal with no operand instructions.
authorJim Kingdon <jkingdon@engr.sgi.com>
Fri, 9 Apr 1993 20:54:02 +0000 (20:54 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Fri, 9 Apr 1993 20:54:02 +0000 (20:54 +0000)
* rs6000-pinsn.c (print_operand, case LI): Print condition register
operand in decimal rather than wrong textual versions.

gdb/ChangeLog
gdb/rs6000-pinsn.c

index a4414734d6430d3b25fa2e953a366668973cc09b..46251b705c5e086e672bed43eec42e7f72b98517 100644 (file)
@@ -1,5 +1,10 @@
 Fri Apr  9 10:20:55 1993  Jim Kingdon  (kingdon@cygnus.com)
 
+       * rs6000-pinsn.c (print_operand): Deal with no operand instructions.
+
+       * rs6000-pinsn.c (print_operand, case LI): Print condition register
+       operand in decimal rather than wrong textual versions.
+
        * printcmd.c (_initialize_printcmd): Clean up docstring for "x"
        (mention 't', remove false thing about 'g' only good with 'f').
 
index 03261e59421c59047131b2e2b7afbf60b0b5864a..08e9125eccf8fcdc35fac978662c3dc3e87570ba 100644 (file)
@@ -189,7 +189,7 @@ int insn_no;
   /* parse the operand now. */
   pp = rs6k_ops[insn_no].oprnd_format;
 
-  while (1) {
+  while (*pp != 0) {
     switch (*pp) {
       case TO  :
        fprintf (stream, "%d", (insn_word >> 21) & 0x1f);
@@ -202,11 +202,27 @@ int       insn_no;
 
       case LI  :
        tmp  = (insn_word >> 16) & 0x1f;
+#if 0
+       /* This is wrong, wrong, wrong.  The condition code only goes
+          from 0 to 3 (for the instructions which can use extended
+          mnemonics of this type), and the XX (lt, gt, eq etc.) goes
+          into the mnemonic, not as an operand.
+
+          Probably the best way to get this right in both assembler
+          and disassembler is to switch to a match/lose style opcode
+          table like the sparc.  */
        if (tmp > 11) {
          fprintf (stream, "{unknown cond code: 0x%x}", insn_word);
          tmp = 0;
        }
        fprintf (stream, "%s", cond_code [tmp]);
+#else
+       /* So for just always use the "bbf/bbt" form.  This is perfectly
+          correct, just not necessarily as legible.
+
+          If tmp is not in the range 0-3, we can't use an XX form anyway.  */
+       fprintf (stream, "%d", tmp);
+#endif
        break;
 
       case A2  :
@@ -372,9 +388,7 @@ int insn_no;
     }
     ++pp;
 
-    if (*pp == '\0')
-      break;
-    else if (!nocomma)
+    if (*pp != '\0' && !nocomma)
       fputc(',', stream);
   }
 }