qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 09/22] translate-all: introduce iterator macros for


From: Emilio G. Cota
Subject: [Qemu-devel] [PATCH 09/22] translate-all: introduce iterator macros for tagged TB lists
Date: Mon, 7 Aug 2017 19:52:25 -0400

These will soon gain a couple of users.

Signed-off-by: Emilio G. Cota <address@hidden>
---
 accel/tcg/translate-all.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index 8f6f8f1..396c10c 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -115,6 +115,25 @@ typedef struct PageDesc {
 #endif
 } PageDesc;
 
+/* list iterators for lists of tagged pointers in TranslationBlock */
+#define tb_for_each_tagged(head, tb, n, field)                  \
+    for (n = (head) & 1,                                        \
+             tb = (TranslationBlock *)((head) & ~1);            \
+         tb;                                                    \
+         tb = (TranslationBlock *)tb->field[n],                 \
+             n = (uintptr_t)tb & 1,                             \
+             tb = (TranslationBlock *)((uintptr_t)tb & ~1))
+
+/* prev is a *uintptr_t. It allows us to safely remove tb */
+#define tb_for_each_tagged_safe(head, tb, n, field, prev)       \
+    for (prev = &(head),                                        \
+             n = *prev & 1,                                     \
+             tb = (TranslationBlock *)(*prev & ~1);             \
+         tb;                                                    \
+         prev = &tb->field[n],                                  \
+             n = (uintptr_t)*prev & 1,                          \
+             tb = (TranslationBlock *)(*prev & ~1))
+
 /* In system mode we want L1_MAP to be based on ram offsets,
    while in user mode we want it to be based on virtual addresses.  */
 #if !defined(CONFIG_USER_ONLY)
-- 
2.7.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]