* hppa-dis.c: (print_insn_hppa): Correct 'cJ', 'cc'.
authorJeff Law <law@redhat.com>
Sun, 19 Sep 1999 20:17:48 +0000 (20:17 +0000)
committerJeff Law <law@redhat.com>
Sun, 19 Sep 1999 20:17:48 +0000 (20:17 +0000)
opcodes/ChangeLog
opcodes/hppa-dis.c

index 29e0915c94787eabbdb7c412eac69d949c3c5c0c..839c4e66d792439d2e1097de28af640818669e7c 100644 (file)
@@ -1,5 +1,7 @@
 Sun Sep 19 10:41:27 1999  Jeffrey A Law  (law@cygnus.com)
 
+       * hppa-dis.c: (print_insn_hppa): Correct 'cJ', 'cc'.
+
        * hppa-dis.c (extract_22): New function.
 
        * hppa-dis.c (print_insn_hppa): Handle 'J', 'K', and 'cc'.
index e21815e298bd804fed5718aeee04df3c87d5e069..35f32ecd7fdc9350c1facc2f6494d83df476bc0c 100644 (file)
@@ -508,18 +508,6 @@ print_insn_hppa (memaddr, info)
                      (*info->fprintf_func) (info->stream, "%s ",
                                             short_ldst_compl_names[GET_COMPL (insn)]);
                      break;
-                   case 'q':
-                     (*info->fprintf_func)
-                       (info->stream, "%s ",
-                        short_ldst_compl_names[(GET_FIELD (insn, 28, 28)
-                                                | GET_FIELD (insn, 29, 29))]);
-                     break;
-                   case 'J':
-                     if (insn & 0x4)
-                       (*info->fprintf_func) (info->stream, ",mb ");
-                     else
-                       (*info->fprintf_func) (info->stream, ",ma ");
-                     break;
                    case 's':
                      (*info->fprintf_func) (info->stream, "%s ",
                                             short_bytes_compl_names[GET_COMPL (insn)]);
@@ -617,6 +605,62 @@ print_insn_hppa (memaddr, info)
                           GET_FIELD (insn, 17, 18), GET_FIELD (insn, 20, 21),
                           GET_FIELD (insn, 22, 23), GET_FIELD (insn, 24, 25));
                      break;
+
+                   case 'q':
+                     {
+                       int m, a;
+
+                       m = GET_FIELD (insn, 28, 28);
+                       a = GET_FIELD (insn, 29, 29);
+
+                       if (m && !a)
+                         fputs_filtered (",ma ", info);
+                       else if (m && a)
+                         fputs_filtered (",mb ", info);
+                       else
+                         fputs_filtered (" ", info);
+                       break;
+                     }
+
+                   case 'J':
+                     {
+                       int opcode = GET_FIELD (insn, 0, 5);
+
+                       if (opcode == 0x16 || opcode == 0x1e)
+                         {
+                           if (GET_FIELD (insn, 29, 29) == 0)
+                             fputs_filtered (",ma ", info);
+                           else
+                             fputs_filtered (",mb ", info);
+                         }
+                       else
+                         fputs_filtered (" ", info);
+                       break;
+                     }
+
+                   case 'c':
+                     {
+                       int opcode = GET_FIELD (insn, 0, 5);
+
+                       if (opcode == 0x13 || opcode == 0x1b)
+                         {
+                           if (GET_FIELD (insn, 18, 18) == 1)
+                             fputs_filtered (",mb ", info);
+                           else
+                             fputs_filtered (",ma ", info);
+                         }
+                       else if (opcode == 0x17 || opcode == 0x1f)
+                         {
+                           if (GET_FIELD (insn, 31, 31) == 1)
+                             fputs_filtered (",ma ", info);
+                           else
+                             fputs_filtered (",mb ", info);
+                         }
+                       else
+                         fputs_filtered (" ", info);
+
+                       break;
+                     }
                    }
                  break;