[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 14/20] target/arm: Convert CBZ, CBNZ to decodetree
|
From: |
Peter Maydell |
|
Subject: |
[PATCH 14/20] target/arm: Convert CBZ, CBNZ to decodetree |
|
Date: |
Fri, 12 May 2023 15:41:00 +0100 |
Convert the compare-and-branch-immediate insns CBZ and CBNZ
to decodetree.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/a64.decode | 6 ++++++
target/arm/tcg/translate-a64.c | 26 ++++++--------------------
2 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
index d54c6522028..86220569e13 100644
--- a/target/arm/tcg/a64.decode
+++ b/target/arm/tcg/a64.decode
@@ -115,3 +115,9 @@ EXTR . 00 100111 . 0 ..... ...... ..... .....
@extract_32
B 0 00101 .......................... @branch
BL 1 00101 .......................... @branch
+
+%imm19 5:s19 !function=times_4
+&cbz rt imm sf nz
+@cbz sf:1 ...... nz:1 ................... rt:5 &cbz imm=%imm19
+
+CBZ . 011010 . ................... ..... @cbz
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index fe6b4a68288..5da551385bd 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -1334,33 +1334,22 @@ static bool trans_BL(DisasContext *s, arg_i *a)
return true;
}
-/* Compare and branch (immediate)
- * 31 30 25 24 23 5 4 0
- * +----+-------------+----+---------------------+--------+
- * | sf | 0 1 1 0 1 0 | op | imm19 | Rt |
- * +----+-------------+----+---------------------+--------+
- */
-static void disas_comp_b_imm(DisasContext *s, uint32_t insn)
+
+static bool trans_CBZ(DisasContext *s, arg_cbz *a)
{
- unsigned int sf, op, rt;
- int64_t diff;
DisasLabel match;
TCGv_i64 tcg_cmp;
- sf = extract32(insn, 31, 1);
- op = extract32(insn, 24, 1); /* 0: CBZ; 1: CBNZ */
- rt = extract32(insn, 0, 5);
- diff = sextract32(insn, 5, 19) * 4;
-
- tcg_cmp = read_cpu_reg(s, rt, sf);
+ tcg_cmp = read_cpu_reg(s, a->rt, a->sf);
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;
}
/* Test and branch (immediate)
@@ -2408,9 +2397,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 0x1a: case 0x5a: /* Compare & branch (immediate) */
- disas_comp_b_imm(s, insn);
- break;
case 0x1b: case 0x5b: /* Test & branch (immediate) */
disas_test_b_imm(s, insn);
break;
--
2.34.1
- [PATCH 07/20] target/arm: Convert Add/subtract (immediate with tags) to decodetree, (continued)
- [PATCH 07/20] target/arm: Convert Add/subtract (immediate with tags) to decodetree, Peter Maydell, 2023/05/12
- [PATCH 06/20] target/arm: Convert Add/subtract (immediate) to decodetree, Peter Maydell, 2023/05/12
- [PATCH 08/20] target/arm: Replace bitmask64 with MAKE_64BIT_MASK, Peter Maydell, 2023/05/12
- [PATCH 09/20] target/arm: Convert Logical (immediate) to decodetree, Peter Maydell, 2023/05/12
- [PATCH 10/20] target/arm: Convert Move wide (immediate) to decodetree, Peter Maydell, 2023/05/12
- [PATCH 11/20] target/arm: Convert Bitfield to decodetree, Peter Maydell, 2023/05/12
- [PATCH 12/20] target/arm: Convert Extract instructions to decodetree, Peter Maydell, 2023/05/12
- [PATCH 13/20] target/arm: Convert unconditional branch immediate to decodetree, Peter Maydell, 2023/05/12
- [PATCH 14/20] target/arm: Convert CBZ, CBNZ to decodetree,
Peter Maydell <=
- [PATCH 16/20] target/arm: Convert conditional branch insns to decodetree, Peter Maydell, 2023/05/12
- [PATCH 15/20] target/arm: Convert TBZ, TBNZ to decodetree, Peter Maydell, 2023/05/12
- [PATCH 17/20] target/arm: Convert BR, BLR, RET to decodetree, Peter Maydell, 2023/05/12
- [PATCH 18/20] target/arm: Convert BRA[AB]Z, BLR[AB]Z, RETA[AB] to decodetree, Peter Maydell, 2023/05/12
- [PATCH 20/20] target/arm: Convert ERET, ERETAA, ERETAB to decodetree, Peter Maydell, 2023/05/12