mirror of
https://github.com/qemu/qemu.git
synced 2024-12-28 06:33:36 +08:00
target/arm: Split out disas_a64_legacy
Split out all of the decode stuff from aarch64_tr_translate_insn. Call it disas_a64_legacy to indicate it will be replaced. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20230512144106.3608981-2-peter.maydell@linaro.org [PMM: Rebased] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
9162ac6b9e
commit
8ed24ba17a
@ -14200,6 +14200,49 @@ static bool btype_destination_ok(uint32_t insn, bool bt, int btype)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* C3.1 A64 instruction index by encoding */
|
||||
static void disas_a64_legacy(DisasContext *s, uint32_t insn)
|
||||
{
|
||||
switch (extract32(insn, 25, 4)) {
|
||||
case 0x0:
|
||||
if (!extract32(insn, 31, 1) || !disas_sme(s, insn)) {
|
||||
unallocated_encoding(s);
|
||||
}
|
||||
break;
|
||||
case 0x1: case 0x3: /* UNALLOCATED */
|
||||
unallocated_encoding(s);
|
||||
break;
|
||||
case 0x2:
|
||||
if (!disas_sve(s, insn)) {
|
||||
unallocated_encoding(s);
|
||||
}
|
||||
break;
|
||||
case 0x8: case 0x9: /* Data processing - immediate */
|
||||
disas_data_proc_imm(s, insn);
|
||||
break;
|
||||
case 0xa: case 0xb: /* Branch, exception generation and system insns */
|
||||
disas_b_exc_sys(s, insn);
|
||||
break;
|
||||
case 0x4:
|
||||
case 0x6:
|
||||
case 0xc:
|
||||
case 0xe: /* Loads and stores */
|
||||
disas_ldst(s, insn);
|
||||
break;
|
||||
case 0x5:
|
||||
case 0xd: /* Data processing - register */
|
||||
disas_data_proc_reg(s, insn);
|
||||
break;
|
||||
case 0x7:
|
||||
case 0xf: /* Data processing - SIMD and floating point */
|
||||
disas_data_proc_simd_fp(s, insn);
|
||||
break;
|
||||
default:
|
||||
assert(FALSE); /* all 15 cases should be handled above */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void aarch64_tr_init_disas_context(DisasContextBase *dcbase,
|
||||
CPUState *cpu)
|
||||
{
|
||||
@ -14401,44 +14444,7 @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
|
||||
disas_sme_fa64(s, insn);
|
||||
}
|
||||
|
||||
switch (extract32(insn, 25, 4)) {
|
||||
case 0x0:
|
||||
if (!extract32(insn, 31, 1) || !disas_sme(s, insn)) {
|
||||
unallocated_encoding(s);
|
||||
}
|
||||
break;
|
||||
case 0x1: case 0x3: /* UNALLOCATED */
|
||||
unallocated_encoding(s);
|
||||
break;
|
||||
case 0x2:
|
||||
if (!disas_sve(s, insn)) {
|
||||
unallocated_encoding(s);
|
||||
}
|
||||
break;
|
||||
case 0x8: case 0x9: /* Data processing - immediate */
|
||||
disas_data_proc_imm(s, insn);
|
||||
break;
|
||||
case 0xa: case 0xb: /* Branch, exception generation and system insns */
|
||||
disas_b_exc_sys(s, insn);
|
||||
break;
|
||||
case 0x4:
|
||||
case 0x6:
|
||||
case 0xc:
|
||||
case 0xe: /* Loads and stores */
|
||||
disas_ldst(s, insn);
|
||||
break;
|
||||
case 0x5:
|
||||
case 0xd: /* Data processing - register */
|
||||
disas_data_proc_reg(s, insn);
|
||||
break;
|
||||
case 0x7:
|
||||
case 0xf: /* Data processing - SIMD and floating point */
|
||||
disas_data_proc_simd_fp(s, insn);
|
||||
break;
|
||||
default:
|
||||
assert(FALSE); /* all 15 cases should be handled above */
|
||||
break;
|
||||
}
|
||||
disas_a64_legacy(s, insn);
|
||||
|
||||
/*
|
||||
* After execution of most insns, btype is reset to 0.
|
||||
|
Loading…
Reference in New Issue
Block a user