[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v2 1/7] tcg: add headers for non-target helpers
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [RFC PATCH v2 1/7] tcg: add headers for non-target helpers |
Date: |
Tue, 05 Jun 2018 13:39:21 +0300 |
User-agent: |
StGit/0.17.1-dirty |
From: Pavel Dovgalyuk <address@hidden>
This patch adds functions and headers for adding the helpers from
the modules other than the target translators.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
include/exec/helper-register.h | 53 ++++++++++++++++++++++++++++++++++++++++
tcg/tcg.c | 12 +++++++++
tcg/tcg.h | 3 ++
3 files changed, 68 insertions(+)
create mode 100644 include/exec/helper-register.h
diff --git a/include/exec/helper-register.h b/include/exec/helper-register.h
new file mode 100644
index 0000000..aeface9
--- /dev/null
+++ b/include/exec/helper-register.h
@@ -0,0 +1,53 @@
+#ifndef HELPER_REGISTER_H
+#define HELPER_REGISTER_H
+
+#include "exec/helper-head.h"
+
+/* Need one more level of indirection before stringification
+ to get all the macros expanded first. */
+#define str(s) #s
+
+#define DEF_HELPER_FLAGS_0(NAME, FLAGS, ret) \
+ tcg_register_helper(HELPER(NAME), str(NAME), FLAGS, dh_sizemask(ret, 0));
+
+#define DEF_HELPER_FLAGS_1(NAME, FLAGS, ret, t1) \
+ tcg_register_helper(HELPER(NAME), str(NAME), FLAGS, \
+ dh_sizemask(ret, 0) | dh_sizemask(t1, 1));
+
+#define DEF_HELPER_FLAGS_2(NAME, FLAGS, ret, t1, t2) \
+ tcg_register_helper(HELPER(NAME), str(NAME), FLAGS, \
+ dh_sizemask(ret, 0) | dh_sizemask(t1, 1) | dh_sizemask(t2, 2));
+
+#define DEF_HELPER_FLAGS_3(NAME, FLAGS, ret, t1, t2, t3) \
+ tcg_register_helper(HELPER(NAME), str(NAME), FLAGS, \
+ dh_sizemask(ret, 0) | dh_sizemask(t1, 1) | dh_sizemask(t2, 2) \
+ | dh_sizemask(t3, 3));
+
+#define DEF_HELPER_FLAGS_4(NAME, FLAGS, ret, t1, t2, t3, t4) \
+ tcg_register_helper(HELPER(NAME), str(NAME), FLAGS, \
+ dh_sizemask(ret, 0) | dh_sizemask(t1, 1) | dh_sizemask(t2, 2) \
+ | dh_sizemask(t3, 3) | dh_sizemask(t4, 4));
+
+#define DEF_HELPER_FLAGS_5(NAME, FLAGS, ret, t1, t2, t3, t4, t5) \
+ tcg_register_helper(HELPER(NAME), str(NAME), FLAGS, \
+ dh_sizemask(ret, 0) | dh_sizemask(t1, 1) | dh_sizemask(t2, 2) \
+ | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) | dh_sizemask(t5, 5));
+
+#define DEF_HELPER_FLAGS_6(NAME, FLAGS, ret, t1, t2, t3, t4, t5, t6) \
+ tcg_register_helper(HELPER(NAME), str(NAME), FLAGS, \
+ dh_sizemask(ret, 0) | dh_sizemask(t1, 1) | dh_sizemask(t2, 2) \
+ | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) | dh_sizemask(t5, 5) \
+ | dh_sizemask(t6, 6));
+
+#include "helper.h"
+
+#undef str
+#undef DEF_HELPER_FLAGS_0
+#undef DEF_HELPER_FLAGS_1
+#undef DEF_HELPER_FLAGS_2
+#undef DEF_HELPER_FLAGS_3
+#undef DEF_HELPER_FLAGS_4
+#undef DEF_HELPER_FLAGS_5
+#undef DEF_HELPER_FLAGS_6
+
+#endif /* HELPER_REGISTER_H */
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 6eeebe0..8191381 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -1623,6 +1623,18 @@ static inline const char *tcg_find_helper(TCGContext *s,
uintptr_t val)
return ret;
}
+void tcg_register_helper(void *func, const char *name,
+ unsigned flags, unsigned sizemask)
+{
+ TCGHelperInfo *info = g_new0(TCGHelperInfo, 1);
+ info->func = func;
+ info->name = name;
+ info->flags = flags;
+ info->sizemask = sizemask;
+
+ g_hash_table_insert(helper_table, func, info);
+}
+
static const char * const cond_name[] =
{
[TCG_COND_NEVER] = "never",
diff --git a/tcg/tcg.h b/tcg/tcg.h
index 08f8bbf..7a4b750 100644
--- a/tcg/tcg.h
+++ b/tcg/tcg.h
@@ -890,6 +890,9 @@ void tcg_register_thread(void);
void tcg_prologue_init(TCGContext *s);
void tcg_func_start(TCGContext *s);
+void tcg_register_helper(void *func, const char *name,
+ unsigned flags, unsigned sizemask);
+
int tcg_gen_code(TCGContext *s, TranslationBlock *tb);
void tcg_set_frame(TCGContext *s, TCGReg reg, intptr_t start, intptr_t size);
- [Qemu-devel] [RFC PATCH v2 0/7] QEMU binary instrumentation prototype, Pavel Dovgalyuk, 2018/06/05
- [Qemu-devel] [RFC PATCH v2 1/7] tcg: add headers for non-target helpers,
Pavel Dovgalyuk <=
- [Qemu-devel] [RFC PATCH v2 2/7] Add plugin support, Pavel Dovgalyuk, 2018/06/05
- [Qemu-devel] [RFC PATCH v2 3/7] plugins: provide helper functions for plugins, Pavel Dovgalyuk, 2018/06/05
- [Qemu-devel] [RFC PATCH v2 4/7] tcg: add instrumenting module, Pavel Dovgalyuk, 2018/06/05
- [Qemu-devel] [RFC PATCH v2 5/7] plugins: add plugin template, Pavel Dovgalyuk, 2018/06/05
- [Qemu-devel] [RFC PATCH v2 6/7] plugin: add instruction execution logger, Pavel Dovgalyuk, 2018/06/05
- [Qemu-devel] [RFC PATCH v2 7/7] plugins: add syscall logging plugin sample, Pavel Dovgalyuk, 2018/06/05
- Re: [Qemu-devel] [RFC PATCH v2 0/7] QEMU binary instrumentation prototype, Peter Maydell, 2018/06/05