[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 21/29] target/arm: Convert TBZ, TBNZ to decodetree
From: |
Peter Maydell |
Subject: |
[PULL 21/29] target/arm: Convert TBZ, TBNZ to decodetree |
Date: |
Thu, 18 May 2023 13:50:59 +0100 |
Convert the test-and-branch-immediate insns TBZ and TBNZ
to decodetree.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20230512144106.3608981-16-peter.maydell@linaro.org
---
target/arm/tcg/a64.decode | 6 ++++++
target/arm/tcg/translate-a64.c | 25 +++++--------------------
2 files changed, 11 insertions(+), 20 deletions(-)
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
index f5759a66e7f..09def15863f 100644
--- a/target/arm/tcg/a64.decode
+++ b/target/arm/tcg/a64.decode
@@ -118,3 +118,9 @@ BL 1 00101 .......................... @branch
&cbz rt imm sf nz
CBZ sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19
+
+%imm14 5:s14 !function=times_4
+%imm31_19 31:1 19:5
+&tbz rt imm nz bitpos
+
+TBZ . 011011 nz:1 ..... .............. rt:5 &tbz imm=%imm14
bitpos=%imm31_19
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 06619f8a05d..1e5977423a6 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -1352,35 +1352,23 @@ static bool trans_CBZ(DisasContext *s, arg_cbz *a)
return true;
}
-/* Test and branch (immediate)
- * 31 30 25 24 23 19 18 5 4 0
- * +----+-------------+----+-------+-------------+------+
- * | b5 | 0 1 1 0 1 1 | op | b40 | imm14 | Rt |
- * +----+-------------+----+-------+-------------+------+
- */
-static void disas_test_b_imm(DisasContext *s, uint32_t insn)
+static bool trans_TBZ(DisasContext *s, arg_tbz *a)
{
- unsigned int bit_pos, op, rt;
- int64_t diff;
DisasLabel match;
TCGv_i64 tcg_cmp;
- bit_pos = (extract32(insn, 31, 1) << 5) | extract32(insn, 19, 5);
- op = extract32(insn, 24, 1); /* 0: TBZ; 1: TBNZ */
- diff = sextract32(insn, 5, 14) * 4;
- rt = extract32(insn, 0, 5);
-
tcg_cmp = tcg_temp_new_i64();
- tcg_gen_andi_i64(tcg_cmp, cpu_reg(s, rt), (1ULL << bit_pos));
+ tcg_gen_andi_i64(tcg_cmp, cpu_reg(s, a->rt), 1ULL << a->bitpos);
reset_btype(s);
match = gen_disas_label(s);
- tcg_gen_brcondi_i64(op ? TCG_COND_NE : TCG_COND_EQ,
+ tcg_gen_brcondi_i64(a->nz ? TCG_COND_NE : TCG_COND_EQ,
tcg_cmp, 0, match.label);
gen_goto_tb(s, 0, 4);
set_disas_label(s, match);
- gen_goto_tb(s, 1, diff);
+ gen_goto_tb(s, 1, a->imm);
+ return true;
}
/* Conditional branch (immediate)
@@ -2397,9 +2385,6 @@ static void disas_uncond_b_reg(DisasContext *s, uint32_t
insn)
static void disas_b_exc_sys(DisasContext *s, uint32_t insn)
{
switch (extract32(insn, 25, 7)) {
- case 0x1b: case 0x5b: /* Test & branch (immediate) */
- disas_test_b_imm(s, insn);
- break;
case 0x2a: /* Conditional branch (immediate) */
disas_cond_b_imm(s, insn);
break;
--
2.34.1
- [PULL 20/29] target/arm: Convert CBZ, CBNZ to decodetree, (continued)
- [PULL 20/29] target/arm: Convert CBZ, CBNZ to decodetree, Peter Maydell, 2023/05/18
- [PULL 17/29] target/arm: Convert Bitfield to decodetree, Peter Maydell, 2023/05/18
- [PULL 12/29] target/arm: Convert Add/subtract (immediate) to decodetree, Peter Maydell, 2023/05/18
- [PULL 25/29] target/arm: Convert BRAA, BRAB, BLRAA, BLRAB to decodetree, Peter Maydell, 2023/05/18
- [PULL 22/29] target/arm: Convert conditional branch insns to decodetree, Peter Maydell, 2023/05/18
- [PULL 19/29] target/arm: Convert unconditional branch immediate to decodetree, Peter Maydell, 2023/05/18
- [PULL 14/29] target/arm: Replace bitmask64 with MAKE_64BIT_MASK, Peter Maydell, 2023/05/18
- [PULL 18/29] target/arm: Convert Extract instructions to decodetree, Peter Maydell, 2023/05/18
- [PULL 29/29] docs: Convert u2f.txt to rST, Peter Maydell, 2023/05/18
- [PULL 13/29] target/arm: Convert Add/subtract (immediate with tags) to decodetree, Peter Maydell, 2023/05/18
- [PULL 21/29] target/arm: Convert TBZ, TBNZ to decodetree,
Peter Maydell <=
- [PULL 24/29] target/arm: Convert BRA[AB]Z, BLR[AB]Z, RETA[AB] to decodetree, Peter Maydell, 2023/05/18
- [PULL 23/29] target/arm: Convert BR, BLR, RET to decodetree, Peter Maydell, 2023/05/18
- [PULL 16/29] target/arm: Convert Move wide (immediate) to decodetree, Peter Maydell, 2023/05/18
- [PULL 27/29] target/arm: Saturate L2CTLR_EL1 core count field rather than overflowing, Peter Maydell, 2023/05/18
- Re: [PULL 00/29] target-arm queue, Richard Henderson, 2023/05/18