mirror of https://github.com/xemu-project/xemu.git
target/hppa: Move diag argument handling to decodetree
Split trans_diag into per-operation functions. Reviewed-by: Helge Deller <deller@gmx.de> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
558c09bef8
commit
381931275a
|
@ -634,4 +634,10 @@ fdiv_d 001110 ..... ..... 011 ..... ... ..... @f0e_d_3
|
||||||
xmpyu 001110 ..... ..... 010 .0111 .00 t:5 r1=%ra64 r2=%rb64
|
xmpyu 001110 ..... ..... 010 .0111 .00 t:5 r1=%ra64 r2=%rb64
|
||||||
|
|
||||||
# diag
|
# diag
|
||||||
diag 000101 i:26
|
{
|
||||||
|
[
|
||||||
|
diag_btlb 000101 00 0000 0000 0000 0001 0000 0000
|
||||||
|
diag_cout 000101 00 0000 0000 0000 0001 0000 0001
|
||||||
|
]
|
||||||
|
diag_unimp 000101 i:26
|
||||||
|
}
|
||||||
|
|
|
@ -4572,23 +4572,31 @@ static bool trans_fmpyfadd_d(DisasContext *ctx, arg_fmpyfadd_d *a)
|
||||||
return nullify_end(ctx);
|
return nullify_end(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool trans_diag(DisasContext *ctx, arg_diag *a)
|
/* Emulate PDC BTLB, called by SeaBIOS-hppa */
|
||||||
|
static bool trans_diag_btlb(DisasContext *ctx, arg_diag_btlb *a)
|
||||||
{
|
{
|
||||||
CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
|
CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
if (a->i == 0x100) {
|
nullify_over(ctx);
|
||||||
/* emulate PDC BTLB, called by SeaBIOS-hppa */
|
gen_helper_diag_btlb(tcg_env);
|
||||||
nullify_over(ctx);
|
return nullify_end(ctx);
|
||||||
gen_helper_diag_btlb(tcg_env);
|
|
||||||
return nullify_end(ctx);
|
|
||||||
}
|
|
||||||
if (a->i == 0x101) {
|
|
||||||
/* print char in %r26 to first serial console, used by SeaBIOS-hppa */
|
|
||||||
nullify_over(ctx);
|
|
||||||
gen_helper_diag_console_output(tcg_env);
|
|
||||||
return nullify_end(ctx);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print char in %r26 to first serial console, used by SeaBIOS-hppa */
|
||||||
|
static bool trans_diag_cout(DisasContext *ctx, arg_diag_cout *a)
|
||||||
|
{
|
||||||
|
CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
|
||||||
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
nullify_over(ctx);
|
||||||
|
gen_helper_diag_console_output(tcg_env);
|
||||||
|
return nullify_end(ctx);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool trans_diag_unimp(DisasContext *ctx, arg_diag_unimp *a)
|
||||||
|
{
|
||||||
|
CHECK_MOST_PRIVILEGED(EXCP_PRIV_OPR);
|
||||||
qemu_log_mask(LOG_UNIMP, "DIAG opcode 0x%04x ignored\n", a->i);
|
qemu_log_mask(LOG_UNIMP, "DIAG opcode 0x%04x ignored\n", a->i);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue