[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 05/43] tcg: Move tcg prologue pointer out of TCGContext
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH v4 05/43] tcg: Move tcg prologue pointer out of TCGContext |
Date: |
Mon, 14 Dec 2020 23:01:59 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 |
On 12/14/20 3:02 PM, Richard Henderson wrote:
> This value is constant across all thread-local copies of TCGContext,
> so we might as well move it out of thread-local storage.
>
> Use the correct function pointer type, and name the variable
> tcg_qemu_tb_exec, which means that we are able to remove the
> macro that does the casting.
>
> Replace HAVE_TCG_QEMU_TB_EXEC with CONFIG_TCG_INTERPRETER,
> as this is somewhat clearer in intent.
>
> Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> include/tcg/tcg.h | 9 ++++-----
> tcg/tcg.c | 9 ++++++++-
> tcg/tci.c | 3 ++-
> 3 files changed, 14 insertions(+), 7 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>
> diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
> index 8ff9dad4ef..9cc412f90c 100644
> --- a/include/tcg/tcg.h
> +++ b/include/tcg/tcg.h
> @@ -621,7 +621,6 @@ struct TCGContext {
> here, because there's too much arithmetic throughout that relies
> on addition and subtraction working on bytes. Rely on the GCC
> extension that allows arithmetic on void*. */
> - void *code_gen_prologue;
> void *code_gen_epilogue;
> void *code_gen_buffer;
> size_t code_gen_buffer_size;
> @@ -1222,11 +1221,11 @@ static inline unsigned get_mmuidx(TCGMemOpIdx oi)
> #define TB_EXIT_IDXMAX 1
> #define TB_EXIT_REQUESTED 3
>
> -#ifdef HAVE_TCG_QEMU_TB_EXEC
> -uintptr_t tcg_qemu_tb_exec(CPUArchState *env, uint8_t *tb_ptr);
> +#ifdef CONFIG_TCG_INTERPRETER
> +uintptr_t tcg_qemu_tb_exec(CPUArchState *env, void *tb_ptr);
> #else
> -# define tcg_qemu_tb_exec(env, tb_ptr) \
> - ((uintptr_t (*)(void *, void *))tcg_ctx->code_gen_prologue)(env, tb_ptr)
> +typedef uintptr_t tcg_prologue_fn(CPUArchState *env, void *tb_ptr);
> +extern tcg_prologue_fn *tcg_qemu_tb_exec;
> #endif
>
> void tcg_register_jit(void *buf, size_t buf_size);
> diff --git a/tcg/tcg.c b/tcg/tcg.c
> index 675334e844..67065c2ede 100644
> --- a/tcg/tcg.c
> +++ b/tcg/tcg.c
> @@ -162,6 +162,10 @@ static TCGContext **tcg_ctxs;
> static unsigned int n_tcg_ctxs;
> TCGv_env cpu_env = 0;
>
> +#ifndef CONFIG_TCG_INTERPRETER
> +tcg_prologue_fn *tcg_qemu_tb_exec;
> +#endif
> +
> struct tcg_region_tree {
> QemuMutex lock;
> GTree *tree;
> @@ -1055,7 +1059,10 @@ void tcg_prologue_init(TCGContext *s)
> s->code_ptr = buf0;
> s->code_buf = buf0;
> s->data_gen_ptr = NULL;
> - s->code_gen_prologue = buf0;
> +
> +#ifndef CONFIG_TCG_INTERPRETER
> + tcg_qemu_tb_exec = (tcg_prologue_fn *)buf0;
> +#endif
>
> /* Compute a high-water mark, at which we voluntarily flush the buffer
> and start over. The size here is arbitrary, significantly larger
> diff --git a/tcg/tci.c b/tcg/tci.c
> index 82039fd163..d996eb7cf8 100644
> --- a/tcg/tci.c
> +++ b/tcg/tci.c
> @@ -475,8 +475,9 @@ static bool tci_compare64(uint64_t u0, uint64_t u1,
> TCGCond condition)
> #endif
>
> /* Interpret pseudo code in tb. */
> -uintptr_t tcg_qemu_tb_exec(CPUArchState *env, uint8_t *tb_ptr)
> +uintptr_t tcg_qemu_tb_exec(CPUArchState *env, void *v_tb_ptr)
> {
> + uint8_t *tb_ptr = v_tb_ptr;
> tcg_target_ulong regs[TCG_TARGET_NB_REGS];
> long tcg_temps[CPU_TEMP_BUF_NLONGS];
> uintptr_t sp_value = (uintptr_t)(tcg_temps + CPU_TEMP_BUF_NLONGS);
>
- [PATCH v4 02/43] util: Extract flush_icache_range to cacheflush.c, (continued)
- [PATCH v4 02/43] util: Extract flush_icache_range to cacheflush.c, Richard Henderson, 2020/12/14
- [PATCH v4 03/43] util: Enhance flush_icache_range with separate data pointer, Richard Henderson, 2020/12/14
- [PATCH v4 04/43] util: Specialize flush_idcache_range for aarch64, Richard Henderson, 2020/12/14
- [PATCH v4 01/43] tcg: Do not flush icache for interpreter, Richard Henderson, 2020/12/14
- [PATCH v4 05/43] tcg: Move tcg prologue pointer out of TCGContext, Richard Henderson, 2020/12/14
- [PATCH v4 06/43] tcg: Move tcg epilogue pointer out of TCGContext, Richard Henderson, 2020/12/14
- [PATCH v4 07/43] tcg: Add in_code_gen_buffer, Richard Henderson, 2020/12/14
- [PATCH v4 08/43] tcg: Introduce tcg_splitwx_to_{rx,rw}, Richard Henderson, 2020/12/14
- [PATCH v4 11/43] tcg: Adjust tcg_out_label for const, Richard Henderson, 2020/12/14