[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 63/68] target/arm: Convert T16, shift immediate
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v2 63/68] target/arm: Convert T16, shift immediate |
Date: |
Mon, 19 Aug 2019 14:37:50 -0700 |
Signed-off-by: Richard Henderson <address@hidden>
---
target/arm/translate.c | 26 ++------------------------
target/arm/t16.decode | 8 ++++++++
2 files changed, 10 insertions(+), 24 deletions(-)
diff --git a/target/arm/translate.c b/target/arm/translate.c
index dc670c9724..dc3c9049cd 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -10630,7 +10630,7 @@ static void disas_thumb2_insn(DisasContext *s, uint32_t
insn)
static void disas_thumb_insn(DisasContext *s, uint32_t insn)
{
- uint32_t val, op, rm, rd, shift;
+ uint32_t val, rd;
int32_t offset;
TCGv_i32 tmp;
TCGv_i32 tmp2;
@@ -10642,29 +10642,7 @@ static void disas_thumb_insn(DisasContext *s, uint32_t
insn)
/* fall back to legacy decoder */
switch (insn >> 12) {
- case 0: case 1:
-
- rd = insn & 7;
- op = (insn >> 11) & 3;
- if (op == 3) {
- /*
- * 0b0001_1xxx_xxxx_xxxx
- * - Add, subtract (three low registers)
- * - Add, subtract (two low registers and immediate)
- * In decodetree.
- */
- goto illegal_op;
- } else {
- /* shift immediate */
- rm = (insn >> 3) & 7;
- shift = (insn >> 6) & 0x1f;
- tmp = load_reg(s, rm);
- gen_arm_shift_im(tmp, op, shift, s->condexec_mask == 0);
- if (!s->condexec_mask)
- gen_logic_CC(tmp);
- store_reg(s, rd, tmp);
- }
- break;
+ case 0: case 1: /* add/sub (3reg, 2reg imm), shift imm; in decodetree */
case 2: case 3: /* add, sub, cmp, mov (reg, imm), in decodetree */
goto illegal_op;
case 4:
diff --git a/target/arm/t16.decode b/target/arm/t16.decode
index 4ecbabd364..1adad20804 100644
--- a/target/arm/t16.decode
+++ b/target/arm/t16.decode
@@ -126,6 +126,14 @@ ADD_rri 10101 rd:3 ........ \
STM 11000 ... ........ @ldstm
LDM_t16 11001 ... ........ @ldstm
+# Shift (immediate)
+
+@shift_i ..... shim:5 rm:3 rd:3 &s_rrr_shi %s rn=%reg_0
+
+MOV_rxri 000 00 ..... ... ... @shift_i shty=0 # LSL
+MOV_rxri 000 01 ..... ... ... @shift_i shty=1 # LSR
+MOV_rxri 000 10 ..... ... ... @shift_i shty=2 # ASR
+
# Add/subtract (three low registers)
@addsub_3 ....... rm:3 rn:3 rd:3 \
--
2.17.1
- Re: [Qemu-devel] [PATCH v2 60/68] target/arm: Convert T16, push and pop, (continued)
- [Qemu-devel] [PATCH v2 62/68] target/arm: Convert T16, Miscellaneous 16-bit instructions, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 64/68] target/arm: Convert T16, load (literal), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 66/68] target/arm: Convert T16, long branches, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 67/68] target/arm: Clean up disas_thumb_insn, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 63/68] target/arm: Convert T16, shift immediate,
Richard Henderson <=
- [Qemu-devel] [PATCH v2 65/68] target/arm: Convert T16, Unconditional branch, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 68/68] target/arm: Inline gen_bx_im into callers, Richard Henderson, 2019/08/19
- Re: [Qemu-devel] [PATCH v2 00/68] target/arm: Convert aa32 base isa to decodetree, no-reply, 2019/08/19
- Re: [Qemu-devel] [PATCH v2 00/68] target/arm: Convert aa32 base isa to decodetree, Peter Maydell, 2019/08/27