From c675b73b1f3f6c4d52c9c46b3966bb948e9b54d6 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Fri, 26 Feb 2021 10:59:08 -0500 Subject: [PATCH] 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 --- qemu/target/arm/translate.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/qemu/target/arm/translate.c b/qemu/target/arm/translate.c index 20bdc6f5..a33e0dca 100644 --- a/qemu/target/arm/translate.c +++ b/qemu/target/arm/translate.c @@ -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)