mirror of https://github.com/xemu-project/xemu.git
tcg: Widen helper_{ld,st}_i128 addresses to uint64_t
Always pass the target address as uint64_t. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
24e46e6c9d
commit
e570597a8a
|
@ -2551,7 +2551,7 @@ Int128 helper_ld16_mmu(CPUArchState *env, uint64_t addr,
|
|||
return do_ld16_mmu(env, addr, oi, retaddr);
|
||||
}
|
||||
|
||||
Int128 helper_ld_i128(CPUArchState *env, target_ulong addr, uint32_t oi)
|
||||
Int128 helper_ld_i128(CPUArchState *env, uint64_t addr, uint32_t oi)
|
||||
{
|
||||
return helper_ld16_mmu(env, addr, oi, GETPC());
|
||||
}
|
||||
|
@ -3024,8 +3024,7 @@ void helper_st16_mmu(CPUArchState *env, uint64_t addr, Int128 val,
|
|||
do_st16_mmu(env, addr, val, oi, retaddr);
|
||||
}
|
||||
|
||||
void helper_st_i128(CPUArchState *env, target_ulong addr, Int128 val,
|
||||
MemOpIdx oi)
|
||||
void helper_st_i128(CPUArchState *env, uint64_t addr, Int128 val, MemOpIdx oi)
|
||||
{
|
||||
helper_st16_mmu(env, addr, val, oi, GETPC());
|
||||
}
|
||||
|
|
|
@ -39,8 +39,8 @@ DEF_HELPER_FLAGS_1(exit_atomic, TCG_CALL_NO_WG, noreturn, env)
|
|||
DEF_HELPER_FLAGS_3(memset, TCG_CALL_NO_RWG, ptr, ptr, int, ptr)
|
||||
#endif /* IN_HELPER_PROTO */
|
||||
|
||||
DEF_HELPER_FLAGS_3(ld_i128, TCG_CALL_NO_WG, i128, env, tl, i32)
|
||||
DEF_HELPER_FLAGS_4(st_i128, TCG_CALL_NO_WG, void, env, tl, i128, i32)
|
||||
DEF_HELPER_FLAGS_3(ld_i128, TCG_CALL_NO_WG, i128, env, i64, i32)
|
||||
DEF_HELPER_FLAGS_4(st_i128, TCG_CALL_NO_WG, void, env, i64, i128, i32)
|
||||
|
||||
DEF_HELPER_FLAGS_5(atomic_cmpxchgb, TCG_CALL_NO_WG,
|
||||
i32, env, tl, i32, i32, i32)
|
||||
|
|
|
@ -1136,7 +1136,7 @@ Int128 helper_ld16_mmu(CPUArchState *env, uint64_t addr,
|
|||
return ret;
|
||||
}
|
||||
|
||||
Int128 helper_ld_i128(CPUArchState *env, target_ulong addr, MemOpIdx oi)
|
||||
Int128 helper_ld_i128(CPUArchState *env, uint64_t addr, MemOpIdx oi)
|
||||
{
|
||||
return helper_ld16_mmu(env, addr, oi, GETPC());
|
||||
}
|
||||
|
@ -1343,8 +1343,7 @@ void helper_st16_mmu(CPUArchState *env, uint64_t addr, Int128 val,
|
|||
do_st16_he_mmu(env, addr, val, mop, ra);
|
||||
}
|
||||
|
||||
void helper_st_i128(CPUArchState *env, target_ulong addr,
|
||||
Int128 val, MemOpIdx oi)
|
||||
void helper_st_i128(CPUArchState *env, uint64_t addr, Int128 val, MemOpIdx oi)
|
||||
{
|
||||
helper_st16_mmu(env, addr, val, oi, GETPC());
|
||||
}
|
||||
|
|
|
@ -393,6 +393,24 @@ static void canonicalize_memop_i128_as_i64(MemOp ret[2], MemOp orig)
|
|||
#define tcg_temp_ebb_new tcg_temp_ebb_new_i32
|
||||
#endif
|
||||
|
||||
static TCGv_i64 maybe_extend_addr64(TCGv addr)
|
||||
{
|
||||
#if TARGET_LONG_BITS == 32
|
||||
TCGv_i64 a64 = tcg_temp_ebb_new_i64();
|
||||
tcg_gen_extu_i32_i64(a64, addr);
|
||||
return a64;
|
||||
#else
|
||||
return addr;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void maybe_free_addr64(TCGv_i64 a64)
|
||||
{
|
||||
#if TARGET_LONG_BITS == 32
|
||||
tcg_temp_free_i64(a64);
|
||||
#endif
|
||||
}
|
||||
|
||||
void tcg_gen_qemu_ld_i128(TCGv_i128 val, TCGv addr, TCGArg idx, MemOp memop)
|
||||
{
|
||||
const MemOpIdx oi = make_memop_idx(memop, idx);
|
||||
|
@ -467,7 +485,9 @@ void tcg_gen_qemu_ld_i128(TCGv_i128 val, TCGv addr, TCGArg idx, MemOp memop)
|
|||
tcg_gen_bswap64_i64(y, y);
|
||||
}
|
||||
} else {
|
||||
gen_helper_ld_i128(val, cpu_env, addr, tcg_constant_i32(oi));
|
||||
TCGv_i64 a64 = maybe_extend_addr64(addr);
|
||||
gen_helper_ld_i128(val, cpu_env, a64, tcg_constant_i32(oi));
|
||||
maybe_free_addr64(a64);
|
||||
}
|
||||
|
||||
plugin_gen_mem_callbacks(addr, oi, QEMU_PLUGIN_MEM_R);
|
||||
|
@ -547,7 +567,9 @@ void tcg_gen_qemu_st_i128(TCGv_i128 val, TCGv addr, TCGArg idx, MemOp memop)
|
|||
}
|
||||
tcg_temp_free(addr_p8);
|
||||
} else {
|
||||
gen_helper_st_i128(cpu_env, addr, val, tcg_constant_i32(oi));
|
||||
TCGv_i64 a64 = maybe_extend_addr64(addr);
|
||||
gen_helper_st_i128(cpu_env, a64, val, tcg_constant_i32(oi));
|
||||
maybe_free_addr64(a64);
|
||||
}
|
||||
|
||||
plugin_gen_mem_callbacks(addr, oi, QEMU_PLUGIN_MEM_W);
|
||||
|
|
Loading…
Reference in New Issue