From 9c1faa822937bd4bc031d0dc9e5404c8f6b23c8f Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sun, 19 Sep 1999 20:17:48 +0000 Subject: [PATCH] * hppa-dis.c: (print_insn_hppa): Correct 'cJ', 'cc'. --- opcodes/ChangeLog | 2 ++ opcodes/hppa-dis.c | 68 ++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 29e0915c94..839c4e66d7 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -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'. diff --git a/opcodes/hppa-dis.c b/opcodes/hppa-dis.c index e21815e298..35f32ecd7f 100644 --- a/opcodes/hppa-dis.c +++ b/opcodes/hppa-dis.c @@ -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;