[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 10/20] target/arm: use vector opcode to handle va
From: |
Kirill Batuzov |
Subject: |
[Qemu-devel] [PATCH v2 10/20] target/arm: use vector opcode to handle vadd.<size> instruction |
Date: |
Wed, 1 Feb 2017 15:18:12 +0300 |
Signed-off-by: Kirill Batuzov <address@hidden>
---
target/arm/translate.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/target/arm/translate.c b/target/arm/translate.c
index d7578e2..90e14df 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -5628,6 +5628,37 @@ static int disas_neon_data_insn(DisasContext *s,
uint32_t insn)
return 1;
}
+ /* Use vector ops to handle what we can */
+ switch (op) {
+ case NEON_3R_VADD_VSUB:
+ if (!u) {
+ void (* const gen_add_v128[])(TCGv_v128, TCGv_v128,
+ TCGv_v128) = {
+ tcg_gen_add_i8x16,
+ tcg_gen_add_i16x8,
+ tcg_gen_add_i32x4,
+ tcg_gen_add_i64x2
+ };
+ void (* const gen_add_v64[])(TCGv_v64, TCGv_v64,
+ TCGv_v64) = {
+ tcg_gen_add_i8x8,
+ tcg_gen_add_i16x4,
+ tcg_gen_add_i32x2,
+ tcg_gen_add_i64x1
+ };
+ if (q) {
+ gen_add_v128[size](cpu_Q[rd >> 1], cpu_Q[rn >> 1],
+ cpu_Q[rm >> 1]);
+ } else {
+ gen_add_v64[size](cpu_D[rd], cpu_D[rn], cpu_D[rm]);
+ }
+ return 0;
+ }
+ break;
+ default:
+ break;
+ }
+
for (pass = 0; pass < (q ? 4 : 2); pass++) {
if (pairwise) {
--
2.1.4
- [Qemu-devel] [PATCH v2 00/20] Emulate guest vector operations with host vector operations, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 15/20] tcg: introduce new TCGMemOp - MO_128, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 07/20] tcg: allow globals to overlap, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 20/20] tcg/README: update README to include information about vector opcodes, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 08/20] tcg: add vector addition operations, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 17/20] softmmu: create helpers for vector loads, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 06/20] tcg: use results of alias analysis in liveness analysis, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 10/20] target/arm: use vector opcode to handle vadd.<size> instruction,
Kirill Batuzov <=
- [Qemu-devel] [PATCH v2 11/20] tcg/i386: add support for vector opcodes, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 03/20] tcg: support representing vector type with smaller vector or scalar types, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 09/20] target/arm: support access to vector guest registers as globals, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 01/20] tcg: add support for 128bit vector type, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 04/20] tcg: add ld_v128, ld_v64, st_v128 and st_v64 opcodes, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 02/20] tcg: add support for 64bit vector type, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 05/20] tcg: add simple alias analysis, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 12/20] tcg/i386: support 64-bit vector operations, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 19/20] target/arm: load two consecutive 64-bits vector regs as a 128-bit vector reg, Kirill Batuzov, 2017/02/01
- [Qemu-devel] [PATCH v2 16/20] tcg: introduce qemu_ld_v128 and qemu_st_v128 opcodes, Kirill Batuzov, 2017/02/01