From 07f622e57d373aee6f4e284625b85ec2214f6667 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 7 May 2020 09:54:37 -0400 Subject: [PATCH] tcg: Add tcg_gen_gvec_dup_imm Add a version of tcg_gen_dup_* that takes both immediate and a vector element size operand. This will replace the set of tcg_gen_gvec_dup{8,16,32,64}i functions that encode the element size within the function name. Backports commit 44c94677febd15488f9190b11eaa4a08e8ac696b from qemu --- qemu/aarch64.h | 1 + qemu/aarch64eb.h | 1 + qemu/arm.h | 1 + qemu/armeb.h | 1 + qemu/header_gen.py | 1 + qemu/m68k.h | 1 + qemu/mips.h | 1 + qemu/mips64.h | 1 + qemu/mips64el.h | 1 + qemu/mipsel.h | 1 + qemu/powerpc.h | 1 + qemu/riscv32.h | 1 + qemu/riscv64.h | 1 + qemu/sparc.h | 1 + qemu/sparc64.h | 1 + qemu/tcg/tcg-op-gvec.c | 7 +++++++ qemu/tcg/tcg-op-gvec.h | 2 ++ qemu/x86_64.h | 1 + 18 files changed, 25 insertions(+) diff --git a/qemu/aarch64.h b/qemu/aarch64.h index 4cee6fd5..5a69f7c9 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_aarch64 #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_aarch64 #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_aarch64 +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_aarch64 #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_aarch64 #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_aarch64 #define tcg_gen_gvec_mov tcg_gen_gvec_mov_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index 9b7aed51..9eda1cfa 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_aarch64eb #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_aarch64eb #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_aarch64eb +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_aarch64eb #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_aarch64eb #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_aarch64eb #define tcg_gen_gvec_mov tcg_gen_gvec_mov_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index e99e5897..5f6dbf06 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_arm #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_arm #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_arm +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_arm #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_arm #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_arm #define tcg_gen_gvec_mov tcg_gen_gvec_mov_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index f9e4da1b..03ebce39 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_armeb #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_armeb #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_armeb +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_armeb #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_armeb #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_armeb #define tcg_gen_gvec_mov tcg_gen_gvec_mov_armeb diff --git a/qemu/header_gen.py b/qemu/header_gen.py index 230bc35f..4ae2d89c 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -2901,6 +2901,7 @@ symbols = ( 'tcg_gen_gvec_dup64i', 'tcg_gen_gvec_dup_i32', 'tcg_gen_gvec_dup_i64', + 'tcg_gen_gvec_dup_imm', 'tcg_gen_gvec_dup_mem', 'tcg_gen_gvec_eqv', 'tcg_gen_gvec_mov', diff --git a/qemu/m68k.h b/qemu/m68k.h index adeb75d4..c8a89774 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_m68k #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_m68k #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_m68k +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_m68k #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_m68k #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_m68k #define tcg_gen_gvec_mov tcg_gen_gvec_mov_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 68e92672..cbf77c0d 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_mips #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_mips #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_mips +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_mips #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_mips #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_mips #define tcg_gen_gvec_mov tcg_gen_gvec_mov_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index 37da5b41..835d7dc1 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_mips64 #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_mips64 #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_mips64 +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_mips64 #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_mips64 #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_mips64 #define tcg_gen_gvec_mov tcg_gen_gvec_mov_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index dcd30481..42f846ff 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_mips64el #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_mips64el #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_mips64el +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_mips64el #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_mips64el #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_mips64el #define tcg_gen_gvec_mov tcg_gen_gvec_mov_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index c7776f0d..a7e607e4 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_mipsel #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_mipsel #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_mipsel +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_mipsel #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_mipsel #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_mipsel #define tcg_gen_gvec_mov tcg_gen_gvec_mov_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index 38fa7983..ed779cea 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_powerpc #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_powerpc #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_powerpc +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_powerpc #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_powerpc #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_powerpc #define tcg_gen_gvec_mov tcg_gen_gvec_mov_powerpc diff --git a/qemu/riscv32.h b/qemu/riscv32.h index c60daebb..b5a4e938 100644 --- a/qemu/riscv32.h +++ b/qemu/riscv32.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_riscv32 #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_riscv32 #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_riscv32 +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_riscv32 #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_riscv32 #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_riscv32 #define tcg_gen_gvec_mov tcg_gen_gvec_mov_riscv32 diff --git a/qemu/riscv64.h b/qemu/riscv64.h index 2b39e017..6b993392 100644 --- a/qemu/riscv64.h +++ b/qemu/riscv64.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_riscv64 #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_riscv64 #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_riscv64 +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_riscv64 #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_riscv64 #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_riscv64 #define tcg_gen_gvec_mov tcg_gen_gvec_mov_riscv64 diff --git a/qemu/sparc.h b/qemu/sparc.h index b0888a8f..02bcda10 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_sparc #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_sparc #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_sparc +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_sparc #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_sparc #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_sparc #define tcg_gen_gvec_mov tcg_gen_gvec_mov_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index e561891d..d39c4723 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_sparc64 #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_sparc64 #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_sparc64 +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_sparc64 #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_sparc64 #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_sparc64 #define tcg_gen_gvec_mov tcg_gen_gvec_mov_sparc64 diff --git a/qemu/tcg/tcg-op-gvec.c b/qemu/tcg/tcg-op-gvec.c index 95e48620..7550c1a3 100644 --- a/qemu/tcg/tcg-op-gvec.c +++ b/qemu/tcg/tcg-op-gvec.c @@ -1570,6 +1570,13 @@ void tcg_gen_gvec_dup8i(TCGContext *s, uint32_t dofs, uint32_t oprsz, do_dup(s, MO_8, dofs, oprsz, maxsz, NULL, NULL, x); } +void tcg_gen_gvec_dup_imm(TCGContext *s, unsigned vece, uint32_t dofs, uint32_t oprsz, + uint32_t maxsz, uint64_t x) +{ + check_size_align(oprsz, maxsz, dofs); + do_dup(s, vece, dofs, oprsz, maxsz, NULL, NULL, x); +} + void tcg_gen_gvec_not(TCGContext *s, unsigned vece, uint32_t dofs, uint32_t aofs, uint32_t oprsz, uint32_t maxsz) { diff --git a/qemu/tcg/tcg-op-gvec.h b/qemu/tcg/tcg-op-gvec.h index a628c08d..7871e041 100644 --- a/qemu/tcg/tcg-op-gvec.h +++ b/qemu/tcg/tcg-op-gvec.h @@ -313,6 +313,8 @@ void tcg_gen_gvec_ors(TCGContext *s, unsigned vece, uint32_t dofs, uint32_t aofs void tcg_gen_gvec_dup_mem(TCGContext *, unsigned vece, uint32_t dofs, uint32_t aofs, uint32_t s, uint32_t m); +void tcg_gen_gvec_dup_imm(TCGContext *, unsigned vece, uint32_t dofs, uint32_t s, + uint32_t m, uint64_t imm); void tcg_gen_gvec_dup_i32(TCGContext *, unsigned vece, uint32_t dofs, uint32_t s, uint32_t m, TCGv_i32); void tcg_gen_gvec_dup_i64(TCGContext *, unsigned vece, uint32_t dofs, uint32_t s, diff --git a/qemu/x86_64.h b/qemu/x86_64.h index a94e246e..ede200f6 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -2895,6 +2895,7 @@ #define tcg_gen_gvec_dup64i tcg_gen_gvec_dup64i_x86_64 #define tcg_gen_gvec_dup_i32 tcg_gen_gvec_dup_i32_x86_64 #define tcg_gen_gvec_dup_i64 tcg_gen_gvec_dup_i64_x86_64 +#define tcg_gen_gvec_dup_imm tcg_gen_gvec_dup_imm_x86_64 #define tcg_gen_gvec_dup_mem tcg_gen_gvec_dup_mem_x86_64 #define tcg_gen_gvec_eqv tcg_gen_gvec_eqv_x86_64 #define tcg_gen_gvec_mov tcg_gen_gvec_mov_x86_64