[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v11 18/20] target/arm: Use vector infrastructure for
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v11 18/20] target/arm: Use vector infrastructure for aa64 orr/bic immediate |
Date: |
Thu, 25 Jan 2018 20:57:40 -0800 |
Reviewed-by: Peter Maydell <address@hidden>
Signed-off-by: Richard Henderson <address@hidden>
---
target/arm/translate-a64.c | 28 +++++-----------------------
1 file changed, 5 insertions(+), 23 deletions(-)
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index 64a2c2df59..d688a699be 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -6180,7 +6180,6 @@ static void disas_simd_mod_imm(DisasContext *s, uint32_t
insn)
bool is_neg = extract32(insn, 29, 1);
bool is_q = extract32(insn, 30, 1);
uint64_t imm = 0;
- int i;
if (o2 != 0 || ((cmode == 0xf) && is_neg && !is_q)) {
unallocated_encoding(s);
@@ -6266,29 +6265,12 @@ static void disas_simd_mod_imm(DisasContext *s,
uint32_t insn)
tcg_gen_gvec_dup64i(vec_full_reg_offset(s, rd), is_q ? 16 : 8,
vec_full_reg_size(s), imm);
} else {
- TCGv_i64 tcg_imm = tcg_const_i64(imm);
- TCGv_i64 tcg_rd = new_tmp_a64(s);
-
- for (i = 0; i < 2; i++) {
- int foffs = vec_reg_offset(s, rd, i, MO_64);
-
- if (i == 1 && !is_q) {
- /* non-quad ops clear high half of vector */
- tcg_gen_movi_i64(tcg_rd, 0);
- } else {
- tcg_gen_ld_i64(tcg_rd, cpu_env, foffs);
- if (is_neg) {
- /* AND (BIC) */
- tcg_gen_and_i64(tcg_rd, tcg_rd, tcg_imm);
- } else {
- /* ORR */
- tcg_gen_or_i64(tcg_rd, tcg_rd, tcg_imm);
- }
- }
- tcg_gen_st_i64(tcg_rd, cpu_env, foffs);
+ /* ORR or BIC, with BIC negation to AND handled above. */
+ if (is_neg) {
+ gen_gvec_fn2i(s, is_q, rd, rd, imm, tcg_gen_gvec_andi, MO_64);
+ } else {
+ gen_gvec_fn2i(s, is_q, rd, rd, imm, tcg_gen_gvec_ori, MO_64);
}
-
- tcg_temp_free_i64(tcg_imm);
}
}
--
2.14.3
- [Qemu-devel] [PATCH v11 00/20] tcg: generic vector operations, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 07/20] tcg: Add generic vector ops for multiplication, Richard Henderson, 2018/01/25
- [Qemu-devel] [PATCH v11 10/20] tcg/optimize: Handle vector opcodes during optimize, Richard Henderson, 2018/01/25
- [Qemu-devel] [PATCH v11 12/20] target/arm: Use vector infrastructure for aa64 add/sub/logic, Richard Henderson, 2018/01/25
- [Qemu-devel] [PATCH v11 19/20] tcg/i386: Add vector operations, Richard Henderson, 2018/01/25
- [Qemu-devel] [PATCH v11 06/20] tcg: Add generic vector ops for comparisons, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 03/20] tcg: Standardize integral arguments to expanders, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 11/20] target/arm: Align vector registers, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 17/20] target/arm: Use vector infrastructure for aa64 multiplies, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 09/20] tcg: Add generic vector helpers with a scalar operand, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 18/20] target/arm: Use vector infrastructure for aa64 orr/bic immediate,
Richard Henderson <=
- [Qemu-devel] [PATCH v11 14/20] target/arm: Use vector infrastructure for aa64 dup/movi, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 15/20] target/arm: Use vector infrastructure for aa64 constant shifts, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 05/20] tcg: Add generic vector ops for constant shifts, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 16/20] target/arm: Use vector infrastructure for aa64 compares, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 02/20] tcg: Add types and basic operations for host vectors, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 20/20] tcg/aarch64: Add vector operations, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 08/20] tcg: Add generic helpers for saturating arithmetic, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 04/20] tcg: Add generic vector expanders, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 13/20] target/arm: Use vector infrastructure for aa64 mov/not/neg, Richard Henderson, 2018/01/26
- [Qemu-devel] [PATCH v11 01/20] tcg: Allow multiple word entries into the constant pool, Richard Henderson, 2018/01/26