target/arm: Tidy up disas_arm_insn()

The only thing left in the "legacy decoder" is the handling
of disas_xscale_insn(), and we can simplify the code.

Backports commit 8198c071bc55bee55ef4f104a5b125f541b51096
This commit is contained in:
Peter Maydell 2021-02-26 10:59:08 -05:00 committed by Lioncash
parent fc4cc9d95f
commit c675b73b1f

View file

@ -8601,26 +8601,18 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn)
}
/* fall back to legacy decoder */
switch ((insn >> 24) & 0xf) {
case 0xc:
case 0xd:
case 0xe:
{
/* First check for coprocessor space used for XScale/iwMMXt insns */
int cpnum = (insn >> 8) & 0xf;
if (arm_dc_feature(s, ARM_FEATURE_XSCALE) && (cpnum < 2)) {
/* TODO: convert xscale/iwmmxt decoder to decodetree ?? */
if (arm_dc_feature(s, ARM_FEATURE_XSCALE)) {
if (((insn & 0x0c000e00) == 0x0c000000)
&& ((insn & 0x03000000) != 0x03000000)) {
/* Coprocessor insn, coprocessor 0 or 1 */
disas_xscale_insn(s, insn);
break;
return;
}
}
/* fall through */
}
default:
illegal_op:
unallocated_encoding(s);
break;
}
illegal_op:
unallocated_encoding(s);
}
static bool thumb_insn_is_16bit(DisasContext *s, uint32_t pc, uint32_t insn)