[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 05/38] target/arm: Use tcg_gen_extract2_i64 for EXT
From: |
Peter Maydell |
Subject: |
[PULL 05/38] target/arm: Use tcg_gen_extract2_i64 for EXT |
Date: |
Thu, 19 Sep 2024 14:10:33 +0100 |
From: Richard Henderson <richard.henderson@linaro.org>
The extract2 tcg op performs the same operation
as the do_ext64 function.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20240912024114.1097832-6-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/tcg/translate-a64.c | 23 +++--------------------
1 file changed, 3 insertions(+), 20 deletions(-)
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 6d5f12e8f55..1a0b2bb33b6 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -8890,23 +8890,6 @@ static void disas_data_proc_fp(DisasContext *s, uint32_t
insn)
}
}
-static void do_ext64(DisasContext *s, TCGv_i64 tcg_left, TCGv_i64 tcg_right,
- int pos)
-{
- /* Extract 64 bits from the middle of two concatenated 64 bit
- * vector register slices left:right. The extracted bits start
- * at 'pos' bits into the right (least significant) side.
- * We return the result in tcg_right, and guarantee not to
- * trash tcg_left.
- */
- TCGv_i64 tcg_tmp = tcg_temp_new_i64();
- assert(pos > 0 && pos < 64);
-
- tcg_gen_shri_i64(tcg_right, tcg_right, pos);
- tcg_gen_shli_i64(tcg_tmp, tcg_left, 64 - pos);
- tcg_gen_or_i64(tcg_right, tcg_right, tcg_tmp);
-}
-
/* EXT
* 31 30 29 24 23 22 21 20 16 15 14 11 10 9 5 4 0
* +---+---+-------------+-----+---+------+---+------+---+------+------+
@@ -8944,7 +8927,7 @@ static void disas_simd_ext(DisasContext *s, uint32_t insn)
read_vec_element(s, tcg_resl, rn, 0, MO_64);
if (pos != 0) {
read_vec_element(s, tcg_resh, rm, 0, MO_64);
- do_ext64(s, tcg_resh, tcg_resl, pos);
+ tcg_gen_extract2_i64(tcg_resl, tcg_resl, tcg_resh, pos);
}
} else {
TCGv_i64 tcg_hh;
@@ -8965,10 +8948,10 @@ static void disas_simd_ext(DisasContext *s, uint32_t
insn)
read_vec_element(s, tcg_resh, elt->reg, elt->elt, MO_64);
elt++;
if (pos != 0) {
- do_ext64(s, tcg_resh, tcg_resl, pos);
+ tcg_gen_extract2_i64(tcg_resl, tcg_resl, tcg_resh, pos);
tcg_hh = tcg_temp_new_i64();
read_vec_element(s, tcg_hh, elt->reg, elt->elt, MO_64);
- do_ext64(s, tcg_hh, tcg_resh, pos);
+ tcg_gen_extract2_i64(tcg_resh, tcg_resh, tcg_hh, pos);
}
}
--
2.34.1
- [PULL 00/38] target-arm queue, Peter Maydell, 2024/09/19
- [PULL 03/38] target/arm: Use cmpsel in gen_ushl_vec, Peter Maydell, 2024/09/19
- [PULL 05/38] target/arm: Use tcg_gen_extract2_i64 for EXT,
Peter Maydell <=
- [PULL 04/38] target/arm: Use cmpsel in gen_sshl_vec, Peter Maydell, 2024/09/19
- [PULL 01/38] target/arm: Replace tcg_gen_dupi_vec with constants in gengvec.c, Peter Maydell, 2024/09/19
- [PULL 02/38] target/arm: Replace tcg_gen_dupi_vec with constants in translate-sve.c, Peter Maydell, 2024/09/19
- [PULL 12/38] target/arm: Convert FMOVI (scalar, immediate) to decodetree, Peter Maydell, 2024/09/19
- [PULL 11/38] target/arm: Convert FMAXNMV, FMINNMV, FMAXV, FMINV to decodetree, Peter Maydell, 2024/09/19
- [PULL 14/38] target/arm: Introduce gen_gvec_sshr, gen_gvec_ushr, Peter Maydell, 2024/09/19
- [PULL 13/38] target/arm: Convert MOVI, FMOV, ORR, BIC (vector immediate) to decodetree, Peter Maydell, 2024/09/19
- [PULL 16/38] target/arm: Convert handle_vec_simd_shri to decodetree, Peter Maydell, 2024/09/19
- [PULL 17/38] target/arm: Convert handle_vec_simd_shli to decodetree, Peter Maydell, 2024/09/19
- [PULL 21/38] target/arm: Split out subroutines of handle_shri_with_rndacc, Peter Maydell, 2024/09/19