[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 29/41] tcg/sparc: Support split-wx code generation
From: |
Richard Henderson |
Subject: |
[PATCH v3 29/41] tcg/sparc: Support split-wx code generation |
Date: |
Thu, 5 Nov 2020 19:29:09 -0800 |
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
tcg/sparc/tcg-target.h | 2 +-
tcg/sparc/tcg-target.c.inc | 24 +++++++++++++-----------
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/tcg/sparc/tcg-target.h b/tcg/sparc/tcg-target.h
index 517840705f..bb2505bfc7 100644
--- a/tcg/sparc/tcg-target.h
+++ b/tcg/sparc/tcg-target.h
@@ -181,6 +181,6 @@ static inline void flush_idcache_range(uintptr_t rx,
uintptr_t rw, size_t len)
void tb_target_set_jmp_target(uintptr_t, uintptr_t, uintptr_t, uintptr_t);
#define TCG_TARGET_NEED_POOL_LABELS
-#define TCG_TARGET_SUPPORT_MIRROR 0
+#define TCG_TARGET_SUPPORT_MIRROR 1
#endif
diff --git a/tcg/sparc/tcg-target.c.inc b/tcg/sparc/tcg-target.c.inc
index 8f04fdf981..182124b96c 100644
--- a/tcg/sparc/tcg-target.c.inc
+++ b/tcg/sparc/tcg-target.c.inc
@@ -291,14 +291,15 @@ static inline int check_fit_i32(int32_t val, unsigned int
bits)
# define check_fit_ptr check_fit_i32
#endif
-static bool patch_reloc(tcg_insn_unit *code_ptr, int type,
+static bool patch_reloc(tcg_insn_unit *src_rw, int type,
intptr_t value, intptr_t addend)
{
- uint32_t insn = *code_ptr;
+ const tcg_insn_unit *src_rx = tcg_splitwx_to_rx(src_rw);
+ uint32_t insn = *src_rw;
intptr_t pcrel;
value += addend;
- pcrel = tcg_ptr_byte_diff((tcg_insn_unit *)value, code_ptr);
+ pcrel = tcg_ptr_byte_diff((tcg_insn_unit *)value, src_rx);
switch (type) {
case R_SPARC_WDISP16:
@@ -315,7 +316,7 @@ static bool patch_reloc(tcg_insn_unit *code_ptr, int type,
g_assert_not_reached();
}
- *code_ptr = insn;
+ *src_rw = insn;
return true;
}
@@ -868,8 +869,8 @@ static void tcg_out_mb(TCGContext *s, TCGArg a0)
}
#ifdef CONFIG_SOFTMMU
-static tcg_insn_unit *qemu_ld_trampoline[16];
-static tcg_insn_unit *qemu_st_trampoline[16];
+static const tcg_insn_unit *qemu_ld_trampoline[16];
+static const tcg_insn_unit *qemu_st_trampoline[16];
static void emit_extend(TCGContext *s, TCGReg r, int op)
{
@@ -930,7 +931,7 @@ static void build_trampolines(TCGContext *s)
while ((uintptr_t)s->code_ptr & 15) {
tcg_out_nop(s);
}
- qemu_ld_trampoline[i] = s->code_ptr;
+ qemu_ld_trampoline[i] = tcg_splitwx_to_rx(s->code_ptr);
if (SPARC64 || TARGET_LONG_BITS == 32) {
ra = TCG_REG_O3;
@@ -958,7 +959,7 @@ static void build_trampolines(TCGContext *s)
while ((uintptr_t)s->code_ptr & 15) {
tcg_out_nop(s);
}
- qemu_st_trampoline[i] = s->code_ptr;
+ qemu_st_trampoline[i] = tcg_splitwx_to_rx(s->code_ptr);
if (SPARC64) {
emit_extend(s, TCG_REG_O2, i);
@@ -1038,7 +1039,8 @@ static void tcg_target_qemu_prologue(TCGContext *s)
tcg_out_nop(s);
/* Epilogue for goto_ptr. */
- tcg_code_gen_epilogue = s->code_ptr;
+ /* TODO: Cast goes away when all hosts converted */
+ tcg_code_gen_epilogue = (void *)tcg_splitwx_to_rx(s->code_ptr);
tcg_out_arithi(s, TCG_REG_G0, TCG_REG_I7, 8, RETURN);
/* delay slot */
tcg_out_movi_imm13(s, TCG_REG_O0, 0);
@@ -1163,7 +1165,7 @@ static void tcg_out_qemu_ld(TCGContext *s, TCGReg data,
TCGReg addr,
#ifdef CONFIG_SOFTMMU
unsigned memi = get_mmuidx(oi);
TCGReg addrz, param;
- tcg_insn_unit *func;
+ const tcg_insn_unit *func;
tcg_insn_unit *label_ptr;
addrz = tcg_out_tlb_load(s, addr, memi, memop,
@@ -1245,7 +1247,7 @@ static void tcg_out_qemu_st(TCGContext *s, TCGReg data,
TCGReg addr,
#ifdef CONFIG_SOFTMMU
unsigned memi = get_mmuidx(oi);
TCGReg addrz, param;
- tcg_insn_unit *func;
+ const tcg_insn_unit *func;
tcg_insn_unit *label_ptr;
addrz = tcg_out_tlb_load(s, addr, memi, memop,
--
2.25.1
- [PATCH v3 19/41] tcg/aarch64: Use B not BL for tcg_out_goto_long, (continued)
- [PATCH v3 19/41] tcg/aarch64: Use B not BL for tcg_out_goto_long, Richard Henderson, 2020/11/05
- [PATCH v3 17/41] tcg: Return the TB pointer from the rx region from exit_tb, Richard Henderson, 2020/11/05
- [PATCH v3 20/41] tcg/aarch64: Implement flush_idcache_range manually, Richard Henderson, 2020/11/05
- [PATCH v3 21/41] tcg/aarch64: Support split-wx code generation, Richard Henderson, 2020/11/05
- [PATCH v3 22/41] disas: Push const down through host disasassembly, Richard Henderson, 2020/11/05
- [PATCH v3 23/41] tcg/tci: Push const down through bytecode reading, Richard Henderson, 2020/11/05
- [PATCH v3 24/41] tcg: Introduce tcg_tbrel_diff, Richard Henderson, 2020/11/05
- [PATCH v3 25/41] tcg/ppc: Use tcg_tbrel_diff, Richard Henderson, 2020/11/05
- [PATCH v3 26/41] tcg/ppc: Use tcg_out_mem_long to reset TCG_REG_TB, Richard Henderson, 2020/11/05
- [PATCH v3 27/41] tcg/ppc: Support split-wx code generation, Richard Henderson, 2020/11/05
- [PATCH v3 29/41] tcg/sparc: Support split-wx code generation,
Richard Henderson <=
- [PATCH v3 35/41] accel/tcg: Add mips support to alloc_code_gen_buffer_splitwx_memfd, Richard Henderson, 2020/11/05
- [PATCH v3 32/41] tcg/riscv: Fix branch range checks, Richard Henderson, 2020/11/05
- [PATCH v3 31/41] tcg/s390: Support split-wx code generation, Richard Henderson, 2020/11/05
- [PATCH v3 36/41] tcg/mips: Do not assert on relocation overflow, Richard Henderson, 2020/11/05
- [PATCH v3 37/41] tcg/mips: Support split-wx code generation, Richard Henderson, 2020/11/05
- [PATCH v3 33/41] tcg/riscv: Remove branch-over-branch fallback, Richard Henderson, 2020/11/05
- [PATCH v3 28/41] tcg/sparc: Use tcg_tbrel_diff, Richard Henderson, 2020/11/05
- [PATCH v3 30/41] tcg/s390: Use tcg_tbrel_diff, Richard Henderson, 2020/11/05
- [PATCH v3 40/41] tcg: Constify tcg_code_gen_epilogue, Richard Henderson, 2020/11/05
- [PATCH v3 41/41] tcg: Constify TCGLabelQemuLdst.raddr, Richard Henderson, 2020/11/05