[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v3 30/46] target/i386: introduce code generators
From: |
Jan Bobek |
Subject: |
[Qemu-devel] [RFC PATCH v3 30/46] target/i386: introduce code generators |
Date: |
Wed, 14 Aug 2019 22:09:12 -0400 |
In this context, "code generators" are functions that receive decoded
instruction operands and emit TCG ops implementing the correct
instruction functionality. Introduce the naming macros first, actual
generator macros will be added later.
Signed-off-by: Jan Bobek <address@hidden>
---
target/i386/translate.c | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/target/i386/translate.c b/target/i386/translate.c
index 69233fd0f8..b5f609e147 100644
--- a/target/i386/translate.c
+++ b/target/i386/translate.c
@@ -5207,6 +5207,44 @@ INSNOP_LDST(xmm_t0, Mhq)
}
}
+/*
+ * Code generators
+ */
+#define gen_insn(mnem, argc, ...) \
+ glue(gen_insn, argc)(mnem, ## __VA_ARGS__)
+#define gen_insn0(mnem) \
+ gen_ ## mnem ## _0
+#define gen_insn1(mnem, opT1) \
+ gen_ ## mnem ## _1 ## opT1
+#define gen_insn2(mnem, opT1, opT2) \
+ gen_ ## mnem ## _2 ## opT1 ## opT2
+#define gen_insn3(mnem, opT1, opT2, opT3) \
+ gen_ ## mnem ## _3 ## opT1 ## opT2 ## opT3
+#define gen_insn4(mnem, opT1, opT2, opT3, opT4) \
+ gen_ ## mnem ## _4 ## opT1 ## opT2 ## opT3 ## opT4
+
+#define GEN_INSN0(mnem) \
+ static void gen_insn0(mnem)( \
+ CPUX86State *env, DisasContext *s)
+#define GEN_INSN1(mnem, opT1) \
+ static void gen_insn1(mnem, opT1)( \
+ CPUX86State *env, DisasContext *s, \
+ insnop_arg_t(opT1) arg1)
+#define GEN_INSN2(mnem, opT1, opT2) \
+ static void gen_insn2(mnem, opT1, opT2)( \
+ CPUX86State *env, DisasContext *s, \
+ insnop_arg_t(opT1) arg1, insnop_arg_t(opT2) arg2)
+#define GEN_INSN3(mnem, opT1, opT2, opT3) \
+ static void gen_insn3(mnem, opT1, opT2, opT3)( \
+ CPUX86State *env, DisasContext *s, \
+ insnop_arg_t(opT1) arg1, insnop_arg_t(opT2) arg2, \
+ insnop_arg_t(opT3) arg3)
+#define GEN_INSN4(mnem, opT1, opT2, opT3, opT4) \
+ static void gen_insn4(mnem, opT1, opT2, opT3, opT4)( \
+ CPUX86State *env, DisasContext *s, \
+ insnop_arg_t(opT1) arg1, insnop_arg_t(opT2) arg2, \
+ insnop_arg_t(opT3) arg3, insnop_arg_t(opT4) arg4)
+
static void gen_sse_ng(CPUX86State *env, DisasContext *s, int b)
{
enum {
--
2.20.1
- [Qemu-devel] [RFC PATCH v3 21/46] target/i386: introduce modrm operand, (continued)
- [Qemu-devel] [RFC PATCH v3 21/46] target/i386: introduce modrm operand, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 18/46] target/i386: introduce generic either-or operand, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 19/46] target/i386: introduce generic load-store operand, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 20/46] target/i386: introduce tcg_temp operands, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 22/46] target/i386: introduce operands for decoding modrm fields, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 23/46] target/i386: introduce operand for direct-only r/m field, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 25/46] target/i386: introduce Ib (immediate) operand, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 29/46] target/i386: introduce H*, V*, U*, W* (SSE/AVX) operands, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 28/46] target/i386: introduce P*, N*, Q* (MMX) operands, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 27/46] target/i386: introduce G*, R*, E* (general register) operands, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 30/46] target/i386: introduce code generators,
Jan Bobek <=
- [Qemu-devel] [RFC PATCH v3 33/46] target/i386: introduce sse-opcode.inc.h, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 32/46] target/i386: introduce gvec-based code generator macros, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 34/46] target/i386: introduce instruction translator macros, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 24/46] target/i386: introduce operand vex_v, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 26/46] target/i386: introduce M* (memptr) operands, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 31/46] target/i386: introduce helper-based code generator macros, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 35/46] target/i386: introduce MMX translators, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 38/46] target/i386: introduce SSE translators, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 37/46] target/i386: introduce MMX instructions to sse-opcode.inc.h, Jan Bobek, 2019/08/14
- [Qemu-devel] [RFC PATCH v3 39/46] target/i386: introduce SSE code generators, Jan Bobek, 2019/08/14