[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 43/68] target/arm: Simplify disas_arm_insn
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v2 43/68] target/arm: Simplify disas_arm_insn |
Date: |
Mon, 19 Aug 2019 14:37:30 -0700 |
Fold away all of the cases that now just goto illegal_op,
because all of their internal bits are now in decodetree.
Signed-off-by: Richard Henderson <address@hidden>
---
target/arm/translate.c | 69 ++++++++++--------------------------------
1 file changed, 16 insertions(+), 53 deletions(-)
diff --git a/target/arm/translate.c b/target/arm/translate.c
index 25c74206c2..49bab7d863 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -10245,7 +10245,7 @@ static bool trans_PLI(DisasContext *s, arg_PLD *a)
static void disas_arm_insn(DisasContext *s, unsigned int insn)
{
- unsigned int cond, op1;
+ unsigned int cond = insn >> 28;
/* M variants do not implement ARM mode; this must raise the INVSTATE
* UsageFault exception.
@@ -10255,7 +10255,6 @@ static void disas_arm_insn(DisasContext *s, unsigned
int insn)
default_exception_el(s));
return;
}
- cond = insn >> 28;
if (cond == 0xf) {
/* In ARMv3 and v4 the NV condition is UNPREDICTABLE; we
@@ -10320,11 +10319,6 @@ static void disas_arm_insn(DisasContext *s, unsigned
int insn)
goto illegal_op;
}
return;
- } else if ((insn & 0x0fe00000) == 0x0c400000) {
- /* Coprocessor double register transfer. */
- ARCH(5TE);
- } else if ((insn & 0x0f000010) == 0x0e000010) {
- /* Additional coprocessor register transfer. */
}
goto illegal_op;
}
@@ -10339,55 +10333,24 @@ static void disas_arm_insn(DisasContext *s, unsigned
int insn)
}
/* fall back to legacy decoder */
- if ((insn & 0x0f900000) == 0x03000000) {
- /* All done in decodetree. Illegal ops reach here. */
- goto illegal_op;
- } else if ((insn & 0x0f900000) == 0x01000000
- && (insn & 0x00000090) != 0x00000090) {
- /* miscellaneous instructions */
- /* All done in decodetree. Illegal ops reach here. */
- goto illegal_op;
- } else if (((insn & 0x0e000000) == 0 &&
- (insn & 0x00000090) != 0x90) ||
- ((insn & 0x0e000000) == (1 << 25))) {
- /* Data-processing (reg, reg-shift-reg, imm). */
- /* All done in decodetree. Reach here for illegal ops. */
- goto illegal_op;
- } else {
- /* other instructions */
- op1 = (insn >> 24) & 0xf;
- switch(op1) {
- case 0x0:
- case 0x1:
- case 0x4:
- case 0x5:
- case 0x6:
- case 0x7:
- case 0x08:
- case 0x09:
- case 0xa:
- case 0xb:
- case 0xf:
- /* All done in decodetree. Reach here for illegal ops. */
- goto illegal_op;
- case 0xc:
- case 0xd:
- case 0xe:
- if (((insn >> 8) & 0xe) == 10) {
- /* VFP. */
- if (disas_vfp_insn(s, insn)) {
- goto illegal_op;
- }
- } else if (disas_coproc_insn(s, insn)) {
- /* Coprocessor. */
+ switch ((insn >> 24) & 0xf) {
+ case 0xc:
+ case 0xd:
+ case 0xe:
+ if (((insn >> 8) & 0xe) == 10) {
+ /* VFP. */
+ if (disas_vfp_insn(s, insn)) {
goto illegal_op;
}
- break;
- default:
- illegal_op:
- unallocated_encoding(s);
- break;
+ } else if (disas_coproc_insn(s, insn)) {
+ /* Coprocessor. */
+ goto illegal_op;
}
+ break;
+ default:
+ illegal_op:
+ unallocated_encoding(s);
+ break;
}
}
--
2.17.1
- [Qemu-devel] [PATCH v2 40/68] target/arm: Convert SG, (continued)
- [Qemu-devel] [PATCH v2 40/68] target/arm: Convert SG, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 44/68] target/arm: Add skeleton for T16 decodetree, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 42/68] target/arm: Simplify disas_thumb2_insn, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 45/68] target/arm: Convert T16 data-processing (two low regs), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 46/68] target/arm: Convert T16 load/store (register offset), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 43/68] target/arm: Simplify disas_arm_insn,
Richard Henderson <=
- [Qemu-devel] [PATCH v2 51/68] target/arm: Convert T16 one low register and immediate, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 52/68] target/arm: Convert T16 branch and exchange, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 49/68] target/arm: Convert T16 load/store multiple, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 47/68] target/arm: Convert T16 load/store (immediate offset), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 48/68] target/arm: Convert T16 add pc/sp (immediate), Richard Henderson, 2019/08/19