diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2020-08-03 12:18:46 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2020-08-24 10:02:07 +0100 |
commit | 8198c071bc55bee55ef4f104a5b125f541b51096 (patch) | |
tree | a06630ced6c358a8d9e69bd47cdd7881d82a95c6 /target/arm | |
parent | cd8be50e58f63413c033531d3273c0e44851684f (diff) |
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.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20200803111849.13368-5-peter.maydell@linaro.org
Diffstat (limited to 'target/arm')
-rw-r--r-- | target/arm/translate.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/target/arm/translate.c b/target/arm/translate.c index 6ee920eec5..362d1cc50f 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -8342,26 +8342,18 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn) return; } /* 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) |