[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v2 PATCH 01/13] Introduce TCGOpcode for memory barrier
From: |
Pranith Kumar |
Subject: |
[Qemu-devel] [RFC v2 PATCH 01/13] Introduce TCGOpcode for memory barrier |
Date: |
Tue, 31 May 2016 14:39:16 -0400 |
This commit introduces the TCGOpcode for memory barrier instruction.
This opcode takes an argument which is the type of memory barrier
which should be generated.
Signed-off-by: Pranith Kumar <address@hidden>
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/README | 17 +++++++++++++++++
tcg/tcg-op.c | 6 ++++++
tcg/tcg-op.h | 2 ++
tcg/tcg-opc.h | 2 ++
tcg/tcg.h | 8 ++++++++
5 files changed, 35 insertions(+)
diff --git a/tcg/README b/tcg/README
index f4a8ac1..cfe79d7 100644
--- a/tcg/README
+++ b/tcg/README
@@ -402,6 +402,23 @@ double-word product T0. The later is returned in two
single-word outputs.
Similar to mulu2, except the two inputs T1 and T2 are signed.
+********* Memory Barrier support
+
+* mb <$arg>
+
+Generate a target memory barrier instruction to ensure memory ordering as being
+enforced by a corresponding guest memory barrier instruction. The ordering
+enforced by the backend may be stricter than the ordering required by the
guest.
+It cannot be weaker. This opcode takes an optional constant argument if
required
+to generate the appropriate barrier instruction. The backend should take care
to
+emit the target barrier instruction only when necessary i.e., for SMP guests
and
+when MTTCG is enabled.
+
+The guest translators should generate this opcode for all guest instructions
+which have ordering side effects.
+
+Please see docs/atomics.txt for more information on memory barriers.
+
********* 64-bit guest on 32-bit host support
The following opcodes are internal to TCG. Thus they are to be implemented by
diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
index f554b86..a6f01a7 100644
--- a/tcg/tcg-op.c
+++ b/tcg/tcg-op.c
@@ -143,6 +143,12 @@ void tcg_gen_op6(TCGContext *ctx, TCGOpcode opc, TCGArg
a1, TCGArg a2,
tcg_emit_op(ctx, opc, pi);
}
+void tcg_gen_mb(TCGArg a)
+{
+ /* ??? Enable only when MTTCG is enabled. */
+ tcg_gen_op1(&tcg_ctx, INDEX_op_mb, 0);
+}
+
/* 32 bit ops */
void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
diff --git a/tcg/tcg-op.h b/tcg/tcg-op.h
index c446d3d..40920fb 100644
--- a/tcg/tcg-op.h
+++ b/tcg/tcg-op.h
@@ -261,6 +261,8 @@ static inline void tcg_gen_br(TCGLabel *l)
tcg_gen_op1(&tcg_ctx, INDEX_op_br, label_arg(l));
}
+void tcg_gen_mb(TCGArg a);
+
/* Helper calls. */
/* 32 bit ops */
diff --git a/tcg/tcg-opc.h b/tcg/tcg-opc.h
index 6d0410c..c0f3e83 100644
--- a/tcg/tcg-opc.h
+++ b/tcg/tcg-opc.h
@@ -42,6 +42,8 @@ DEF(br, 0, 0, 1, TCG_OPF_BB_END)
# define IMPL64 TCG_OPF_64BIT
#endif
+DEF(mb, 0, 1, 0, 0)
+
DEF(mov_i32, 1, 1, 0, TCG_OPF_NOT_PRESENT)
DEF(movi_i32, 1, 0, 1, TCG_OPF_NOT_PRESENT)
DEF(setcond_i32, 1, 2, 1, 0)
diff --git a/tcg/tcg.h b/tcg/tcg.h
index a46d17c..a1d59f7 100644
--- a/tcg/tcg.h
+++ b/tcg/tcg.h
@@ -385,6 +385,14 @@ static inline intptr_t QEMU_ARTIFICIAL
GET_TCGV_PTR(TCGv_ptr t)
#define TCG_CALL_DUMMY_TCGV MAKE_TCGV_I32(-1)
#define TCG_CALL_DUMMY_ARG ((TCGArg)(-1))
+/* TCGOpmb args */
+#define TCG_MB_FULL ((TCGArg)(0))
+#define TCG_MB_READ ((TCGArg)(1))
+#define TCG_MB_WRITE ((TCGArg)(2))
+#define TCG_MB_ACQUIRE ((TCGArg)(3))
+#define TCG_MB_RELEASE ((TCGArg)(4))
+
+
/* Conditions. Note that these are laid out for easy manipulation by
the functions below:
bit 0 is used for inverting;
--
2.8.3
- [Qemu-devel] [RFC v2 PATCH 00/13] tcg: Add fence gen support, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 05/13] tcg/ia64: Add support for fence, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 06/13] tcg/mips: Add support for fence, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 07/13] tcg/ppc: Add support for fence, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 04/13] tcg/arm: Add support for fence, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 01/13] Introduce TCGOpcode for memory barrier,
Pranith Kumar <=
- [Qemu-devel] [RFC v2 PATCH 08/13] tcg/s390: Add support for fence, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 10/13] tcg/tci: Add support for fence, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 13/13] tcg: Generate fences only for SMP MTTCG guests, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 02/13] tcg/i386: Add support for fence, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 09/13] tcg/sparc: Add support for fence, Pranith Kumar, 2016/05/31
- [Qemu-devel] [RFC v2 PATCH 03/13] tcg/aarch64: Add support for fence, Pranith Kumar, 2016/05/31