[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 05/93] tcg/tci: Make tci_tb_ptr thread-local
From: |
Richard Henderson |
Subject: |
[PATCH v2 05/93] tcg/tci: Make tci_tb_ptr thread-local |
Date: |
Wed, 3 Feb 2021 15:43:41 -1000 |
Each thread must have its own pc, even under TCI.
Remove the GETPC ifdef, because GETPC is always available for
helpers, and thus is always required. Move the assignment
under INDEX_op_call, because the value is only visible when
we make a call to a helper function.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/exec/exec-all.h | 2 +-
tcg/tcg-common.c | 4 ----
tcg/tci.c | 7 +++----
3 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
index 125000bcf7..f933c74c44 100644
--- a/include/exec/exec-all.h
+++ b/include/exec/exec-all.h
@@ -544,7 +544,7 @@ void tb_set_jmp_target(TranslationBlock *tb, int n,
uintptr_t addr);
/* GETPC is the true target of the return instruction that we'll execute. */
#if defined(CONFIG_TCG_INTERPRETER)
-extern uintptr_t tci_tb_ptr;
+extern __thread uintptr_t tci_tb_ptr;
# define GETPC() tci_tb_ptr
#else
# define GETPC() \
diff --git a/tcg/tcg-common.c b/tcg/tcg-common.c
index 7e1992e79e..aa0c4f60c9 100644
--- a/tcg/tcg-common.c
+++ b/tcg/tcg-common.c
@@ -25,10 +25,6 @@
#include "qemu/osdep.h"
#include "tcg/tcg.h"
-#if defined(CONFIG_TCG_INTERPRETER)
-uintptr_t tci_tb_ptr;
-#endif
-
TCGOpDef tcg_op_defs[] = {
#define DEF(s, oargs, iargs, cargs, flags) \
{ #s, oargs, iargs, cargs, iargs + oargs + cargs, flags },
diff --git a/tcg/tci.c b/tcg/tci.c
index 3fc82d3c79..b3f9531a73 100644
--- a/tcg/tci.c
+++ b/tcg/tci.c
@@ -57,6 +57,8 @@ typedef uint64_t (*helper_function)(tcg_target_ulong,
tcg_target_ulong,
tcg_target_ulong, tcg_target_ulong);
#endif
+__thread uintptr_t tci_tb_ptr;
+
static tcg_target_ulong tci_read_reg(const tcg_target_ulong *regs, TCGReg
index)
{
tci_assert(index < TCG_TARGET_NB_REGS);
@@ -526,16 +528,13 @@ uintptr_t QEMU_DISABLE_CFI tcg_qemu_tb_exec(CPUArchState
*env,
#endif
TCGMemOpIdx oi;
-#if defined(GETPC)
- tci_tb_ptr = (uintptr_t)tb_ptr;
-#endif
-
/* Skip opcode and size entry. */
tb_ptr += 2;
switch (opc) {
case INDEX_op_call:
t0 = tci_read_ri(regs, &tb_ptr);
+ tci_tb_ptr = (uintptr_t)tb_ptr;
#if TCG_TARGET_REG_BITS == 32
tmp64 = ((helper_function)t0)(tci_read_reg(regs, TCG_REG_R0),
tci_read_reg(regs, TCG_REG_R1),
--
2.25.1
- [PATCH v2 01/93] gdbstub: Fix handle_query_xfer_auxv, (continued)
[PATCH v2 08/93] tcg/tci: Inline tci_write_reg32s into the only caller, Richard Henderson, 2021/02/03
[PATCH v2 09/93] tcg/tci: Inline tci_write_reg8 into its callers, Richard Henderson, 2021/02/03
[PATCH v2 05/93] tcg/tci: Make tci_tb_ptr thread-local,
Richard Henderson <=
[PATCH v2 10/93] tcg/tci: Inline tci_write_reg16 into the only caller, Richard Henderson, 2021/02/03
[PATCH v2 06/93] tcg/tci: Implement INDEX_op_ld16s_i32, Richard Henderson, 2021/02/03
[PATCH v2 07/93] tcg/tci: Implement INDEX_op_ld8s_i64, Richard Henderson, 2021/02/03
[PATCH v2 11/93] tcg/tci: Inline tci_write_reg32 into all callers, Richard Henderson, 2021/02/03
[PATCH v2 13/93] tcg/tci: Merge INDEX_op_ld8u_{i32,i64}, Richard Henderson, 2021/02/03
[PATCH v2 17/93] tcg/tci: Merge INDEX_op_{ld_i32,ld32u_i64}, Richard Henderson, 2021/02/03
[PATCH v2 12/93] tcg/tci: Inline tci_write_reg64 into 64-bit callers, Richard Henderson, 2021/02/03
[PATCH v2 15/93] tcg/tci: Merge INDEX_op_ld16u_{i32,i64}, Richard Henderson, 2021/02/03
[PATCH v2 16/93] tcg/tci: Merge INDEX_op_ld16s_{i32,i64}, Richard Henderson, 2021/02/03