mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
tcg: Reset free_temps before tcg_optimize
tcg/riscv: Fix StoreStore barrier generation include/exec: Introduce fpst alias in helper-head.h.inc target/sparc: Use memcpy() and remove memcpy32() -----BEGIN PGP SIGNATURE----- iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmdbS7YdHHJpY2hhcmQu aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV9pFgf/RB1zSPYiID5psp+S yL4raw8um4a3AbgI5g0wOY8PgIeN0anQxG0Yupo3Ka5rvhy9p7S36OOCJMFEJRbP Sf2o4DG9Bqt6ycLh/mjQ8OqvL31T6f02GrkbUrevYVR7mYKjj+aJSbkIGKQqUOy3 eptf9bbgtEe87oTXFZPxh24eEGE01WpHqDx3KQCCLlnsAR5ad9E8StWswu+8MiA/ HttTGj8zqGu1N+wMtYfUuHtv8JdDK5H25gVbX/f+mLwNdWMXntsTw08Td3eY3EB0 u44sEE+NSO04UiIu8U7NRrBNbUJsKautG90q4ZTOk5l8qVGIFWOP9kl0K1JjJZdd jIR27g== =+5lt -----END PGP SIGNATURE----- Merge tag 'pull-tcg-20241212' of https://gitlab.com/rth7680/qemu into staging tcg: Reset free_temps before tcg_optimize tcg/riscv: Fix StoreStore barrier generation include/exec: Introduce fpst alias in helper-head.h.inc target/sparc: Use memcpy() and remove memcpy32() # -----BEGIN PGP SIGNATURE----- # # iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmdbS7YdHHJpY2hhcmQu # aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV9pFgf/RB1zSPYiID5psp+S # yL4raw8um4a3AbgI5g0wOY8PgIeN0anQxG0Yupo3Ka5rvhy9p7S36OOCJMFEJRbP # Sf2o4DG9Bqt6ycLh/mjQ8OqvL31T6f02GrkbUrevYVR7mYKjj+aJSbkIGKQqUOy3 # eptf9bbgtEe87oTXFZPxh24eEGE01WpHqDx3KQCCLlnsAR5ad9E8StWswu+8MiA/ # HttTGj8zqGu1N+wMtYfUuHtv8JdDK5H25gVbX/f+mLwNdWMXntsTw08Td3eY3EB0 # u44sEE+NSO04UiIu8U7NRrBNbUJsKautG90q4ZTOk5l8qVGIFWOP9kl0K1JjJZdd # jIR27g== # =+5lt # -----END PGP SIGNATURE----- # gpg: Signature made Thu 12 Dec 2024 15:46:46 EST # gpg: using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F # gpg: issuer "richard.henderson@linaro.org" # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [full] # Primary key fingerprint: 7A48 1E78 868B 4DB6 A85A 05C0 64DF 38E8 AF7E 215F * tag 'pull-tcg-20241212' of https://gitlab.com/rth7680/qemu: target/sparc: Use memcpy() and remove memcpy32() include/exec: Introduce fpst alias in helper-head.h.inc tcg/riscv: Fix StoreStore barrier generation tcg: Reset free_temps before tcg_optimize Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
83aaec1d5a
6 changed files with 23 additions and 21 deletions
|
@ -275,7 +275,7 @@ static void plugin_gen_inject(struct qemu_plugin_tb *plugin_tb)
|
|||
* that might be live within the existing opcode stream.
|
||||
* The simplest solution is to release them all and create new.
|
||||
*/
|
||||
memset(tcg_ctx->free_temps, 0, sizeof(tcg_ctx->free_temps));
|
||||
tcg_temp_ebb_reset_freed(tcg_ctx);
|
||||
|
||||
QTAILQ_FOREACH_SAFE(op, &tcg_ctx->ops, link, next) {
|
||||
switch (op->opc) {
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#define dh_alias_ptr ptr
|
||||
#define dh_alias_cptr ptr
|
||||
#define dh_alias_env ptr
|
||||
#define dh_alias_fpst ptr
|
||||
#define dh_alias_void void
|
||||
#define dh_alias_noreturn noreturn
|
||||
#define dh_alias(t) glue(dh_alias_, t)
|
||||
|
@ -39,6 +40,7 @@
|
|||
#define dh_ctype_ptr void *
|
||||
#define dh_ctype_cptr const void *
|
||||
#define dh_ctype_env CPUArchState *
|
||||
#define dh_ctype_fpst float_status *
|
||||
#define dh_ctype_void void
|
||||
#define dh_ctype_noreturn G_NORETURN void
|
||||
#define dh_ctype(t) dh_ctype_##t
|
||||
|
@ -96,6 +98,7 @@
|
|||
#define dh_typecode_f64 dh_typecode_i64
|
||||
#define dh_typecode_cptr dh_typecode_ptr
|
||||
#define dh_typecode_env dh_typecode_ptr
|
||||
#define dh_typecode_fpst dh_typecode_ptr
|
||||
#define dh_typecode(t) dh_typecode_##t
|
||||
|
||||
#define dh_callflag_i32 0
|
||||
|
|
|
@ -42,4 +42,10 @@ TCGv_i64 tcg_temp_ebb_new_i64(void);
|
|||
TCGv_ptr tcg_temp_ebb_new_ptr(void);
|
||||
TCGv_i128 tcg_temp_ebb_new_i128(void);
|
||||
|
||||
/* Forget all freed EBB temps, so that new allocations produce new temps. */
|
||||
static inline void tcg_temp_ebb_reset_freed(TCGContext *s)
|
||||
{
|
||||
memset(s->free_temps, 0, sizeof(s->free_temps));
|
||||
}
|
||||
|
||||
#endif /* TCG_TEMP_FREE_H */
|
||||
|
|
|
@ -24,29 +24,19 @@
|
|||
#include "exec/helper-proto.h"
|
||||
#include "trace.h"
|
||||
|
||||
static inline void memcpy32(target_ulong *dst, const target_ulong *src)
|
||||
{
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[2];
|
||||
dst[3] = src[3];
|
||||
dst[4] = src[4];
|
||||
dst[5] = src[5];
|
||||
dst[6] = src[6];
|
||||
dst[7] = src[7];
|
||||
}
|
||||
|
||||
void cpu_set_cwp(CPUSPARCState *env, int new_cwp)
|
||||
{
|
||||
/* put the modified wrap registers at their proper location */
|
||||
if (env->cwp == env->nwindows - 1) {
|
||||
memcpy32(env->regbase, env->regbase + env->nwindows * 16);
|
||||
memcpy(env->regbase, env->regbase + env->nwindows * 16,
|
||||
sizeof(env->gregs));
|
||||
}
|
||||
env->cwp = new_cwp;
|
||||
|
||||
/* put the wrap registers at their temporary location */
|
||||
if (new_cwp == env->nwindows - 1) {
|
||||
memcpy32(env->regbase + env->nwindows * 16, env->regbase);
|
||||
memcpy(env->regbase + env->nwindows * 16, env->regbase,
|
||||
sizeof(env->gregs));
|
||||
}
|
||||
env->regwptr = env->regbase + (new_cwp * 16);
|
||||
}
|
||||
|
@ -361,8 +351,8 @@ void cpu_gl_switch_gregs(CPUSPARCState *env, uint32_t new_gl)
|
|||
dst = get_gl_gregset(env, env->gl);
|
||||
|
||||
if (src != dst) {
|
||||
memcpy32(dst, env->gregs);
|
||||
memcpy32(env->gregs, src);
|
||||
memcpy(dst, env->gregs, sizeof(env->gregs));
|
||||
memcpy(env->gregs, src, sizeof(env->gregs));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -393,8 +383,8 @@ void cpu_change_pstate(CPUSPARCState *env, uint32_t new_pstate)
|
|||
/* Switch global register bank */
|
||||
src = get_gregset(env, new_pstate_regs);
|
||||
dst = get_gregset(env, pstate_regs);
|
||||
memcpy32(dst, env->gregs);
|
||||
memcpy32(env->gregs, src);
|
||||
memcpy(dst, env->gregs, sizeof(env->gregs));
|
||||
memcpy(env->gregs, src, sizeof(env->gregs));
|
||||
} else {
|
||||
trace_win_helper_no_switch_pstate(new_pstate_regs);
|
||||
}
|
||||
|
|
|
@ -1624,7 +1624,7 @@ static void tcg_out_mb(TCGContext *s, TCGArg a0)
|
|||
insn |= 0x02100000;
|
||||
}
|
||||
if (a0 & TCG_MO_ST_ST) {
|
||||
insn |= 0x02200000;
|
||||
insn |= 0x01100000;
|
||||
}
|
||||
tcg_out32(s, insn);
|
||||
}
|
||||
|
|
|
@ -1489,7 +1489,7 @@ void tcg_func_start(TCGContext *s)
|
|||
s->nb_temps = s->nb_globals;
|
||||
|
||||
/* No temps have been previously allocated for size or locality. */
|
||||
memset(s->free_temps, 0, sizeof(s->free_temps));
|
||||
tcg_temp_ebb_reset_freed(s);
|
||||
|
||||
/* No constant temps have been previously allocated. */
|
||||
for (int i = 0; i < TCG_TYPE_COUNT; ++i) {
|
||||
|
@ -6120,6 +6120,9 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb, uint64_t pc_start)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Do not reuse any EBB that may be allocated within the TB. */
|
||||
tcg_temp_ebb_reset_freed(s);
|
||||
|
||||
tcg_optimize(s);
|
||||
|
||||
reachable_code_pass(s);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue