[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 22/54] translator: add translator_ld{ub,sw,uw,l,q}
From: |
Alex Bennée |
Subject: |
[PATCH v6 22/54] translator: add translator_ld{ub,sw,uw,l,q} |
Date: |
Thu, 17 Oct 2019 14:15:43 +0100 |
From: "Emilio G. Cota" <address@hidden>
We don't bother with replicating the fast path (tlb_hit) of the old
cpu_ldst helpers as it has no measurable effect on performance. This
probably indicates we should consider flattening the whole set of
helpers but that is out of scope for this change.
Suggested-by: Richard Henderson <address@hidden>
Signed-off-by: Emilio G. Cota <address@hidden>
[AJB: directly plumb into softmmu/user helpers]
Signed-off-by: Alex Bennée <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
---
v4
- don't use the cpu_ldst helpers, plumb directly into the lower
level
- mark the CODE_ACCESS/SOFTMMU_CODE_ACCESS as deprecated
v5
- expand commit message w.r.t. fast path.
v6
- add do {} while (0)
- expand name/uname instead of adding aliases to cmmu/ldp
- use signed helper for user-mode
---
include/exec/cpu_ldst.h | 11 +++++++
include/exec/translator.h | 62 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 72 insertions(+), 1 deletion(-)
diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h
index 9151fdb042..fd499f7e2f 100644
--- a/include/exec/cpu_ldst.h
+++ b/include/exec/cpu_ldst.h
@@ -129,6 +129,11 @@ static inline void clear_helper_retaddr(void)
#include "exec/cpu_ldst_useronly_template.h"
#undef MEMSUFFIX
+/*
+ * Code access is deprecated in favour of translator_ld* functions
+ * (see translator.h). However there are still users that need to
+ * converted so for now these stay.
+ */
#define MEMSUFFIX _code
#define CODE_ACCESS
#define DATA_SIZE 1
@@ -427,6 +432,12 @@ static inline CPUTLBEntry *tlb_entry(CPUArchState *env,
uintptr_t mmu_idx,
#undef CPU_MMU_INDEX
#undef MEMSUFFIX
+/*
+ * Code access is deprecated in favour of translator_ld* functions
+ * (see translator.h). However there are still users that need to
+ * converted so for now these stay.
+ */
+
#define CPU_MMU_INDEX (cpu_mmu_index(env, true))
#define MEMSUFFIX _code
#define SOFTMMU_CODE_ACCESS
diff --git a/include/exec/translator.h b/include/exec/translator.h
index 180c51d509..f65d6b1a95 100644
--- a/include/exec/translator.h
+++ b/include/exec/translator.h
@@ -19,7 +19,10 @@
*/
+#include "qemu/bswap.h"
#include "exec/exec-all.h"
+#include "exec/cpu_ldst.h"
+#include "exec/plugin-gen.h"
#include "tcg/tcg.h"
@@ -142,4 +145,61 @@ void translator_loop(const TranslatorOps *ops,
DisasContextBase *db,
void translator_loop_temp_check(DisasContextBase *db);
-#endif /* EXEC__TRANSLATOR_H */
+/*
+ * Translator Load Functions
+ *
+ * These are intended to replace the old cpu_ld*_code functions and
+ * are mandatory for front-ends that have been migrated to the common
+ * translator_loop. These functions are only intended to be called
+ * from the translation stage and should not be called from helper
+ * functions. Those functions should be converted to encode the
+ * relevant information at translation time.
+ */
+
+#ifdef CONFIG_USER_ONLY
+
+#define DO_LOAD(type, name, uname, shift) \
+ do { \
+ set_helper_retaddr(1); \
+ ret = uname ## _p(g2h(pc)); \
+ clear_helper_retaddr(); \
+ } while (0)
+
+#else
+
+#define DO_LOAD(type, name, uname, shift) \
+ do { \
+ int mmu_idx = cpu_mmu_index(env, true); \
+ TCGMemOpIdx oi = make_memop_idx(shift, mmu_idx); \
+ ret = helper_ret_ ## name ## _cmmu(env, pc, oi, 0); \
+ } while (0)
+
+#endif
+
+#define GEN_TRANSLATOR_LD(fullname, name, uname, type, shift, swap_fn) \
+ static inline type \
+ fullname ## _swap(CPUArchState *env, abi_ptr pc, bool do_swap) \
+ { \
+ type ret; \
+ DO_LOAD(type, name, uname, shift); \
+ \
+ if (do_swap) { \
+ ret = swap_fn(ret); \
+ } \
+ plugin_insn_append(&ret, sizeof(ret)); \
+ return ret; \
+ } \
+ \
+ static inline type fullname(CPUArchState *env, abi_ptr pc) \
+ { \
+ return fullname ## _swap(env, pc, false); \
+ }
+
+GEN_TRANSLATOR_LD(translator_ldub, ldb, ldub, uint8_t, 0, /* no swap */ )
+GEN_TRANSLATOR_LD(translator_ldsw, ldw, ldsw, int16_t, 1, bswap16)
+GEN_TRANSLATOR_LD(translator_lduw, ldw, lduw, uint16_t, 1, bswap16)
+GEN_TRANSLATOR_LD(translator_ldl, ldl, ldl, uint32_t, 2, bswap32)
+GEN_TRANSLATOR_LD(translator_ldq, ldq, ldq, uint64_t, 3, bswap64)
+#undef GEN_TRANSLATOR_LD
+
+#endif /* EXEC__TRANSLATOR_H */
--
2.20.1
- [PATCH v6 26/54] target/i386: fetch code with translator_ld, (continued)
- [PATCH v6 26/54] target/i386: fetch code with translator_ld, Alex Bennée, 2019/10/17
- [PATCH v6 15/54] tcg: let plugins instrument virtual memory accesses, Alex Bennée, 2019/10/17
- [PATCH v6 14/54] atomic_template: add inline trace/plugin helpers, Alex Bennée, 2019/10/17
- [PATCH v6 18/54] *-user: notify plugin of exit, Alex Bennée, 2019/10/17
- [PATCH v6 36/54] plugin: add API symbols to qemu-plugins.symbols, Alex Bennée, 2019/10/17
- [PATCH v6 25/54] target/sh4: fetch code with translator_ld, Alex Bennée, 2019/10/17
- [PATCH v6 33/54] target/openrisc: fetch code with translator_ld, Alex Bennée, 2019/10/17
- [PATCH v6 54/54] scripts/checkpatch.pl: don't complain about (foo, /* empty */), Alex Bennée, 2019/10/17
- [PATCH v6 20/54] cpu: hook plugin vcpu events, Alex Bennée, 2019/10/17
- [PATCH v6 44/54] tests/tcg: set QEMU_OPTS for all cris runs, Alex Bennée, 2019/10/17
- [PATCH v6 22/54] translator: add translator_ld{ub,sw,uw,l,q},
Alex Bennée <=
- [PATCH v6 32/54] target/xtensa: fetch code with translator_ld, Alex Bennée, 2019/10/17
- [PATCH v6 30/54] target/riscv: fetch code with translator_ld, Alex Bennée, 2019/10/17
- [PATCH v6 40/54] vl: support -plugin option, Alex Bennée, 2019/10/17
- [PATCH v6 51/54] accel/stubs: reduce headers from tcg-stub, Alex Bennée, 2019/10/17
- [PATCH v6 52/54] include/exec: wrap cpu_ldst.h in CONFIG_TCG, Alex Bennée, 2019/10/17
- [PATCH v6 31/54] target/sparc: fetch code with translator_ld, Alex Bennée, 2019/10/17
- [PATCH v6 53/54] .travis.yml: add --enable-plugins tests, Alex Bennée, 2019/10/17
- [PATCH v6 41/54] linux-user: support -plugin option, Alex Bennée, 2019/10/17
- [PATCH v6 43/54] tests/tcg/Makefile.target: fix path to config-host.mak, Alex Bennée, 2019/10/17
- [PATCH v6 16/54] plugins: implement helpers for resolving hwaddr, Alex Bennée, 2019/10/17