[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/31] tcg: Add tcg_out_dupm_vec to the backend inter
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PULL 11/31] tcg: Add tcg_out_dupm_vec to the backend interface |
Date: |
Mon, 13 May 2019 17:05:20 -0700 |
Currently stubbed out in all backends that support vectors.
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/aarch64/tcg-target.inc.c | 6 ++++++
tcg/i386/tcg-target.inc.c | 7 +++++++
tcg/tcg.c | 19 ++++++++++++++++++-
3 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c
index 3cefdd1e43..4a3cfa778a 100644
--- a/tcg/aarch64/tcg-target.inc.c
+++ b/tcg/aarch64/tcg-target.inc.c
@@ -822,6 +822,12 @@ static bool tcg_out_dup_vec(TCGContext *s, TCGType type,
unsigned vece,
return true;
}
+static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece,
+ TCGReg r, TCGReg base, intptr_t offset)
+{
+ return false;
+}
+
static void tcg_out_movi(TCGContext *s, TCGType type, TCGReg rd,
tcg_target_long value)
{
diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
index 3c8229d413..f04933bc19 100644
--- a/tcg/i386/tcg-target.inc.c
+++ b/tcg/i386/tcg-target.inc.c
@@ -891,6 +891,13 @@ static bool tcg_out_dup_vec(TCGContext *s, TCGType type,
unsigned vece,
return true;
}
+static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece,
+ TCGReg r, TCGReg base, intptr_t offset)
+{
+ return false;
+}
+
+
static void tcg_out_dupi_vec(TCGContext *s, TCGType type,
TCGReg ret, tcg_target_long arg)
{
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 2b715bf099..b9945794c4 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -111,6 +111,8 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const
TCGArg *args,
#if TCG_TARGET_MAYBE_vec
static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
TCGReg dst, TCGReg src);
+static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece,
+ TCGReg dst, TCGReg base, intptr_t offset);
static void tcg_out_dupi_vec(TCGContext *s, TCGType type,
TCGReg dst, tcg_target_long arg);
static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, unsigned vecl,
@@ -122,6 +124,11 @@ static inline bool tcg_out_dup_vec(TCGContext *s, TCGType
type, unsigned vece,
{
g_assert_not_reached();
}
+static inline bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece,
+ TCGReg dst, TCGReg base, intptr_t offset)
+{
+ g_assert_not_reached();
+}
static inline void tcg_out_dupi_vec(TCGContext *s, TCGType type,
TCGReg dst, tcg_target_long arg)
{
@@ -3422,6 +3429,7 @@ static void tcg_reg_alloc_dup(TCGContext *s, const TCGOp
*op)
TCGRegSet dup_out_regs, dup_in_regs;
TCGTemp *its, *ots;
TCGType itype, vtype;
+ intptr_t endian_fixup;
unsigned vece;
bool ok;
@@ -3491,7 +3499,16 @@ static void tcg_reg_alloc_dup(TCGContext *s, const TCGOp
*op)
/* fall through */
case TEMP_VAL_MEM:
- /* TODO: dup from memory */
+#ifdef HOST_WORDS_BIGENDIAN
+ endian_fixup = itype == TCG_TYPE_I32 ? 4 : 8;
+ endian_fixup -= 1 << vece;
+#else
+ endian_fixup = 0;
+#endif
+ if (tcg_out_dupm_vec(s, vtype, vece, ots->reg, its->mem_base->reg,
+ its->mem_offset + endian_fixup)) {
+ goto done;
+ }
tcg_out_ld(s, itype, ots->reg, its->mem_base->reg, its->mem_offset);
break;
--
2.17.1
- [Qemu-devel] [PULL 27/31] target/ppc: Use tcg_gen_abs_tl, (continued)
- [Qemu-devel] [PULL 27/31] target/ppc: Use tcg_gen_abs_tl, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 24/31] target/arm: Use tcg_gen_abs_i64 and tcg_gen_gvec_abs, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 15/31] tcg: Add gvec expanders for variable shift, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 05/31] tcg: Assert fixed_reg is read-only, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 25/31] target/cris: Use tcg_gen_abs_tl, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 14/31] tcg: Add INDEX_op_dupm_vec, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 01/31] tcg: Implement tcg_gen_gvec_3i(), Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 28/31] target/s390x: Use tcg_gen_abs_i64, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 30/31] target/xtensa: Use tcg_gen_abs_i32, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 23/31] tcg/aarch64: Support vector absolute value, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 11/31] tcg: Add tcg_out_dupm_vec to the backend interface,
Richard Henderson <=
- [Qemu-devel] [PULL 26/31] target/ppc: Use tcg_gen_abs_i32, Richard Henderson, 2019/05/13
- [Qemu-devel] [PULL 18/31] tcg: Add gvec expanders for vector shift by scalar, Richard Henderson, 2019/05/14
- [Qemu-devel] [PULL 17/31] tcg/aarch64: Support vector variable shift opcodes, Richard Henderson, 2019/05/14
- [Qemu-devel] [PULL 20/31] tcg: Add support for integer absolute value, Richard Henderson, 2019/05/14
- [Qemu-devel] [PULL 06/31] tcg/arm: Use tcg_out_mov_reg in tcg_out_mov, Richard Henderson, 2019/05/14
- [Qemu-devel] [PULL 03/31] tcg: Allow add_vec, sub_vec, neg_vec, not_vec to be expanded, Richard Henderson, 2019/05/14
- [Qemu-devel] [PULL 08/31] tcg: Support cross-class moves without instruction support, Richard Henderson, 2019/05/14
- [Qemu-devel] [PULL 16/31] tcg/i386: Support vector variable shift opcodes, Richard Henderson, 2019/05/14
- [Qemu-devel] [PULL 04/31] tcg: Specify optional vector requirements with a list, Richard Henderson, 2019/05/14
- Re: [Qemu-devel] [PULL 00/31] tcg: gvec improvments, Peter Maydell, 2019/05/14