mirror of https://github.com/proxmox/mirror_qemu
tcg: Add tcg_out_dupm_vec to the backend interface
Currently stubbed out in all backends that support vectors. Signed-off-by: Richard Henderson <richard.henderson@linaro.org>master
parent
bab1671f0f
commit
d6ecb4a978
|
@ -822,6 +822,12 @@ static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
|
||||||
return true;
|
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,
|
static void tcg_out_movi(TCGContext *s, TCGType type, TCGReg rd,
|
||||||
tcg_target_long value)
|
tcg_target_long value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -891,6 +891,13 @@ static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
|
||||||
return true;
|
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,
|
static void tcg_out_dupi_vec(TCGContext *s, TCGType type,
|
||||||
TCGReg ret, tcg_target_long arg)
|
TCGReg ret, tcg_target_long arg)
|
||||||
{
|
{
|
||||||
|
|
19
tcg/tcg.c
19
tcg/tcg.c
|
@ -111,6 +111,8 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args,
|
||||||
#if TCG_TARGET_MAYBE_vec
|
#if TCG_TARGET_MAYBE_vec
|
||||||
static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
|
static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece,
|
||||||
TCGReg dst, TCGReg src);
|
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,
|
static void tcg_out_dupi_vec(TCGContext *s, TCGType type,
|
||||||
TCGReg dst, tcg_target_long arg);
|
TCGReg dst, tcg_target_long arg);
|
||||||
static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, unsigned vecl,
|
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();
|
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,
|
static inline void tcg_out_dupi_vec(TCGContext *s, TCGType type,
|
||||||
TCGReg dst, tcg_target_long arg)
|
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;
|
TCGRegSet dup_out_regs, dup_in_regs;
|
||||||
TCGTemp *its, *ots;
|
TCGTemp *its, *ots;
|
||||||
TCGType itype, vtype;
|
TCGType itype, vtype;
|
||||||
|
intptr_t endian_fixup;
|
||||||
unsigned vece;
|
unsigned vece;
|
||||||
bool ok;
|
bool ok;
|
||||||
|
|
||||||
|
@ -3491,7 +3499,16 @@ static void tcg_reg_alloc_dup(TCGContext *s, const TCGOp *op)
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
case TEMP_VAL_MEM:
|
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);
|
tcg_out_ld(s, itype, ots->reg, its->mem_base->reg, its->mem_offset);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue