[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 09/18] target/arm: use vector opcode to handle vadd.
From: |
Kirill Batuzov |
Subject: |
[Qemu-devel] [PATCH 09/18] target/arm: use vector opcode to handle vadd.<size> instruction |
Date: |
Tue, 17 Jan 2017 12:07:49 +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 2b81b5d..4378d44 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -5666,6 +5666,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
- Re: [Qemu-devel] [PATCH 01/18] tcg: add support for 128bit vector type, (continued)
[Qemu-devel] [PATCH 03/18] tcg: add ld_v128, ld_v64, st_v128 and st_v64 opcodes, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 04/18] tcg: add simple alias analysis, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 05/18] tcg: use results of alias analysis in liveness analysis, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 02/18] tcg: add support for 64bit vector type, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 06/18] tcg: allow globals to overlap, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 08/18] target/arm: support access to vector guest registers as globals, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 09/18] target/arm: use vector opcode to handle vadd.<size> instruction,
Kirill Batuzov <=
[Qemu-devel] [PATCH 13/18] tcg: do not relay on exact values of MO_BSWAP or MO_SIGN in backend, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 11/18] tcg/i386: support 64-bit vector operations, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 10/18] tcg/i386: add support for vector opcodes, Kirill Batuzov, 2017/01/17
Re: [Qemu-devel] [PATCH 10/18] tcg/i386: add support for vector opcodes, Alex Bennée, 2017/01/27
[Qemu-devel] [PATCH 12/18] tcg/i386: support remaining vector addition operations, Kirill Batuzov, 2017/01/17
[Qemu-devel] [PATCH 14/18] tcg: introduce new TCGMemOp - MO_128, Kirill Batuzov, 2017/01/17