mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
disas/hppa: implement mfdiag/mtdiag disassembly
The various PA-RISC CPUs implement different CPU-specific diag instructions (mfdiag, mtdiag, mfcpu, mtcpu, ...) to access CPU-internal diagnose/configuration registers, e.g. for cache control, managing space register hashing, control front panel LEDs and read status of the hardware reset button. Those instructions are mostly undocumented, but are used by ODE, HP-UX and Linux. This patch adds some neccessary instructions for PCXL and PCXU CPUs. Signed-off-by: Helge Deller <deller@gmx.de> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
3f8c3d7bf6
commit
bf60e2a72a
1 changed files with 21 additions and 2 deletions
23
disas/hppa.c
23
disas/hppa.c
|
@ -606,7 +606,7 @@ struct pa_opcode
|
|||
|
||||
In the args field, the following characters are unused:
|
||||
|
||||
' " - / 34 6789:; '
|
||||
' " - / 34 678 :; '
|
||||
'@ C M [\] '
|
||||
'` e g } '
|
||||
|
||||
|
@ -650,6 +650,7 @@ Also these:
|
|||
| 6 bit field length at 19,27:31 (fixed extract/deposit)
|
||||
A 13 bit immediate at 18 (to support the BREAK instruction)
|
||||
^ like b, but describes a control register
|
||||
9 like b, but describes a diagnose register
|
||||
! sar (cr11) register
|
||||
D 26 bit immediate at 31 (to support the DIAG instruction)
|
||||
$ 9 bit immediate at 28 (to support POPBTS)
|
||||
|
@ -1322,13 +1323,19 @@ static const struct pa_opcode pa_opcodes[] =
|
|||
{ "fdce", 0x040012c0, 0xfc00ffdf, "cZx(b)", pa10, 0},
|
||||
{ "fdce", 0x040012c0, 0xfc003fdf, "cZx(s,b)", pa10, 0},
|
||||
{ "fice", 0x040002c0, 0xfc001fdf, "cZx(S,b)", pa10, 0},
|
||||
{ "diag", 0x14000000, 0xfc000000, "D", pa10, 0},
|
||||
{ "idtlbt", 0x04001800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
|
||||
{ "iitlbt", 0x04000800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
|
||||
|
||||
/* completely undocumented, but used by ODE, HP-UX and Linux: */
|
||||
{ "mfcpu_pcxu", 0x140008a0, 0xfc9fffe0, "9,t", pa20, 0}, /* PCXU: mfdiag */
|
||||
{ "mtcpu_pcxu", 0x14001840, 0xfc00ffff, "x,9", pa20, 0},
|
||||
|
||||
/* These may be specific to certain versions of the PA. Joel claimed
|
||||
they were 72000 (7200?) specific. However, I'm almost certain the
|
||||
mtcpu/mfcpu were undocumented, but available in the older 700 machines. */
|
||||
{ "mfcpu_c", 0x14000600, 0xfc00ffff, "9,x", pa10, 0}, /* PCXL: for dr0 and dr8 only */
|
||||
{ "mfcpu_t", 0x14001400, 0xfc9fffe0, "9,t", pa10, 0}, /* PCXL: all dr except dr0 and dr8 */
|
||||
{ "mtcpu_pcxl", 0x14000240, 0xfc00ffff, "x,9", pa11, 0}, /* PCXL: mtcpu for dr0 and dr8 */
|
||||
{ "mtcpu", 0x14001600, 0xfc00ffff, "x,^", pa10, 0},
|
||||
{ "mfcpu", 0x14001A00, 0xfc00ffff, "^,x", pa10, 0},
|
||||
{ "tocen", 0x14403600, 0xffffffff, "", pa10, 0},
|
||||
|
@ -1336,6 +1343,9 @@ static const struct pa_opcode pa_opcodes[] =
|
|||
{ "shdwgr", 0x14402600, 0xffffffff, "", pa10, 0},
|
||||
{ "grshdw", 0x14400620, 0xffffffff, "", pa10, 0},
|
||||
|
||||
/* instead of showing D only, show all other registers too */
|
||||
{ "diag", 0x14000000, 0xfc000000, "D x,9,t", pa10, 0},
|
||||
|
||||
/* gfw and gfr are not in the HP PA 1.1 manual, but they are in either
|
||||
the Timex FPU or the Mustang ERS (not sure which) manual. */
|
||||
{ "gfw", 0x04001680, 0xfc00ffdf, "cZx(b)", pa11, 0},
|
||||
|
@ -1801,6 +1811,12 @@ fput_creg (unsigned reg, disassemble_info *info)
|
|||
(*info->fprintf_func) (info->stream, "%s", control_reg[reg]);
|
||||
}
|
||||
|
||||
static void
|
||||
fput_dreg (unsigned reg, disassemble_info *info)
|
||||
{
|
||||
(*info->fprintf_func) (info->stream, "dr%d", reg);
|
||||
}
|
||||
|
||||
/* Print constants with sign. */
|
||||
|
||||
static void
|
||||
|
@ -2007,6 +2023,9 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
|
|||
case '^':
|
||||
fput_creg (GET_FIELD (insn, 6, 10), info);
|
||||
break;
|
||||
case '9':
|
||||
fput_dreg (GET_FIELD (insn, 6, 10), info);
|
||||
break;
|
||||
case 't':
|
||||
fput_reg (GET_FIELD (insn, 27, 31), info);
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue