mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
Hexagon (target/hexagon) move store size tracking to translation
The store width is needed for packet commit, so it is stored in ctx->store_width. Currently, it is set when a store has a TCG override instead of a QEMU helper. In the QEMU helper case, the ctx->store_width is not set, we invoke a helper during packet commit that uses the runtime store width. This patch ensures ctx->store_width is set for all store instructions, so performance is improved because packet commit can generate the proper TCG store rather than the generic helper. We do this by - Use the attributes from the instructions during translation to set ctx->store_width - Remove setting of ctx->store_width from genptr.c Signed-off-by: Taylor Simpson <tsimpson@quicinc.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220920080746.26791-3-tsimpson@quicinc.com>
This commit is contained in:
parent
e2be9a5c5f
commit
661ad999c5
3 changed files with 41 additions and 28 deletions
|
@ -401,62 +401,50 @@ static inline void gen_store32(TCGv vaddr, TCGv src, int width, int slot)
|
|||
tcg_gen_mov_tl(hex_store_val32[slot], src);
|
||||
}
|
||||
|
||||
static inline void gen_store1(TCGv_env cpu_env, TCGv vaddr, TCGv src,
|
||||
DisasContext *ctx, int slot)
|
||||
static inline void gen_store1(TCGv_env cpu_env, TCGv vaddr, TCGv src, int slot)
|
||||
{
|
||||
gen_store32(vaddr, src, 1, slot);
|
||||
ctx->store_width[slot] = 1;
|
||||
}
|
||||
|
||||
static inline void gen_store1i(TCGv_env cpu_env, TCGv vaddr, int32_t src,
|
||||
DisasContext *ctx, int slot)
|
||||
static inline void gen_store1i(TCGv_env cpu_env, TCGv vaddr, int32_t src, int slot)
|
||||
{
|
||||
TCGv tmp = tcg_constant_tl(src);
|
||||
gen_store1(cpu_env, vaddr, tmp, ctx, slot);
|
||||
gen_store1(cpu_env, vaddr, tmp, slot);
|
||||
}
|
||||
|
||||
static inline void gen_store2(TCGv_env cpu_env, TCGv vaddr, TCGv src,
|
||||
DisasContext *ctx, int slot)
|
||||
static inline void gen_store2(TCGv_env cpu_env, TCGv vaddr, TCGv src, int slot)
|
||||
{
|
||||
gen_store32(vaddr, src, 2, slot);
|
||||
ctx->store_width[slot] = 2;
|
||||
}
|
||||
|
||||
static inline void gen_store2i(TCGv_env cpu_env, TCGv vaddr, int32_t src,
|
||||
DisasContext *ctx, int slot)
|
||||
static inline void gen_store2i(TCGv_env cpu_env, TCGv vaddr, int32_t src, int slot)
|
||||
{
|
||||
TCGv tmp = tcg_constant_tl(src);
|
||||
gen_store2(cpu_env, vaddr, tmp, ctx, slot);
|
||||
gen_store2(cpu_env, vaddr, tmp, slot);
|
||||
}
|
||||
|
||||
static inline void gen_store4(TCGv_env cpu_env, TCGv vaddr, TCGv src,
|
||||
DisasContext *ctx, int slot)
|
||||
static inline void gen_store4(TCGv_env cpu_env, TCGv vaddr, TCGv src, int slot)
|
||||
{
|
||||
gen_store32(vaddr, src, 4, slot);
|
||||
ctx->store_width[slot] = 4;
|
||||
}
|
||||
|
||||
static inline void gen_store4i(TCGv_env cpu_env, TCGv vaddr, int32_t src,
|
||||
DisasContext *ctx, int slot)
|
||||
static inline void gen_store4i(TCGv_env cpu_env, TCGv vaddr, int32_t src, int slot)
|
||||
{
|
||||
TCGv tmp = tcg_constant_tl(src);
|
||||
gen_store4(cpu_env, vaddr, tmp, ctx, slot);
|
||||
gen_store4(cpu_env, vaddr, tmp, slot);
|
||||
}
|
||||
|
||||
static inline void gen_store8(TCGv_env cpu_env, TCGv vaddr, TCGv_i64 src,
|
||||
DisasContext *ctx, int slot)
|
||||
static inline void gen_store8(TCGv_env cpu_env, TCGv vaddr, TCGv_i64 src, int slot)
|
||||
{
|
||||
tcg_gen_mov_tl(hex_store_addr[slot], vaddr);
|
||||
tcg_gen_movi_tl(hex_store_width[slot], 8);
|
||||
tcg_gen_mov_i64(hex_store_val64[slot], src);
|
||||
ctx->store_width[slot] = 8;
|
||||
}
|
||||
|
||||
static inline void gen_store8i(TCGv_env cpu_env, TCGv vaddr, int64_t src,
|
||||
DisasContext *ctx, int slot)
|
||||
static inline void gen_store8i(TCGv_env cpu_env, TCGv vaddr, int64_t src, int slot)
|
||||
{
|
||||
TCGv_i64 tmp = tcg_constant_i64(src);
|
||||
gen_store8(cpu_env, vaddr, tmp, ctx, slot);
|
||||
gen_store8(cpu_env, vaddr, tmp, slot);
|
||||
}
|
||||
|
||||
static TCGv gen_8bitsof(TCGv result, TCGv value)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue