qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PATCH v3 06/48] tcg: Widen CPUTLBEntry comparators to 64-bits
Date: Tue, 30 May 2023 21:02:48 -0700	[thread overview]
Message-ID: <20230531040330.8950-7-richard.henderson@linaro.org> (raw)
In-Reply-To: <20230531040330.8950-1-richard.henderson@linaro.org>

This makes CPUTLBEntry agnostic to the address size of the guest.
When 32-bit addresses are in effect, we can simply read the low
32 bits of the 64-bit field.  Similarly when we need to update
the field for setting TLB_NOTDIRTY.

For TCG backends that could in theory be big-endian, but in
practice are not (arm, loongarch, riscv), use QEMU_BUILD_BUG_ON
to document and ensure this is not accidentally missed.

For s390x, which is always big-endian, use HOST_BIG_ENDIAN anyway,
to document the reason for the adjustment.

For sparc64 and ppc64, always perform a 64-bit load, and rely on
the following 32-bit comparison to ignore the high bits.

Rearrange mips and ppc if ladders for clarity.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/exec/cpu-defs.h          | 37 +++++++++++---------------------
 include/exec/cpu_ldst.h          | 19 ++++++++++------
 accel/tcg/cputlb.c               |  8 +++++--
 tcg/aarch64/tcg-target.c.inc     |  1 +
 tcg/arm/tcg-target.c.inc         |  1 +
 tcg/loongarch64/tcg-target.c.inc |  1 +
 tcg/mips/tcg-target.c.inc        | 13 ++++++-----
 tcg/ppc/tcg-target.c.inc         | 28 +++++++++++++-----------
 tcg/riscv/tcg-target.c.inc       |  1 +
 tcg/s390x/tcg-target.c.inc       |  1 +
 tcg/sparc64/tcg-target.c.inc     |  8 +++++--
 11 files changed, 67 insertions(+), 51 deletions(-)

diff --git a/include/exec/cpu-defs.h b/include/exec/cpu-defs.h
index a6e0cf1812..b757d37966 100644
--- a/include/exec/cpu-defs.h
+++ b/include/exec/cpu-defs.h
@@ -65,11 +65,7 @@
 /* use a fully associative victim tlb of 8 entries */
 #define CPU_VTLB_SIZE 8
 
-#if HOST_LONG_BITS == 32 && TARGET_LONG_BITS == 32
-#define CPU_TLB_ENTRY_BITS 4
-#else
 #define CPU_TLB_ENTRY_BITS 5
-#endif
 
 #define CPU_TLB_DYN_MIN_BITS 6
 #define CPU_TLB_DYN_DEFAULT_BITS 8
@@ -95,33 +91,26 @@
 # endif
 
 /* Minimalized TLB entry for use by TCG fast path. */
-typedef struct CPUTLBEntry {
-    /* bit TARGET_LONG_BITS to TARGET_PAGE_BITS : virtual address
-       bit TARGET_PAGE_BITS-1..4  : Nonzero for accesses that should not
-                                    go directly to ram.
-       bit 3                      : indicates that the entry is invalid
-       bit 2..0                   : zero
-    */
-    union {
-        struct {
-            target_ulong addr_read;
-            target_ulong addr_write;
-            target_ulong addr_code;
-            /* Addend to virtual address to get host address.  IO accesses
-               use the corresponding iotlb value.  */
-            uintptr_t addend;
-        };
+typedef union CPUTLBEntry {
+    struct {
+        uint64_t addr_read;
+        uint64_t addr_write;
+        uint64_t addr_code;
         /*
-         * Padding to get a power of two size, as well as index
-         * access to addr_{read,write,code}.
+         * Addend to virtual address to get host address.  IO accesses
+         * use the corresponding iotlb value.
          */
-        target_ulong addr_idx[(1 << CPU_TLB_ENTRY_BITS) / TARGET_LONG_SIZE];
+        uintptr_t addend;
     };
+    /*
+     * Padding to get a power of two size, as well as index
+     * access to addr_{read,write,code}.
+     */
+    uint64_t addr_idx[(1 << CPU_TLB_ENTRY_BITS) / sizeof(uint64_t)];
 } CPUTLBEntry;
 
 QEMU_BUILD_BUG_ON(sizeof(CPUTLBEntry) != (1 << CPU_TLB_ENTRY_BITS));
 
-
 #endif  /* !CONFIG_USER_ONLY && CONFIG_TCG */
 
 #if !defined(CONFIG_USER_ONLY)
diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h
index 5939688f69..a43b34e46b 100644
--- a/include/exec/cpu_ldst.h
+++ b/include/exec/cpu_ldst.h
@@ -334,18 +334,25 @@ static inline target_ulong tlb_read_idx(const CPUTLBEntry *entry,
 {
     /* Do not rearrange the CPUTLBEntry structure members. */
     QEMU_BUILD_BUG_ON(offsetof(CPUTLBEntry, addr_read) !=
-                      MMU_DATA_LOAD * TARGET_LONG_SIZE);
+                      MMU_DATA_LOAD * sizeof(uint64_t));
     QEMU_BUILD_BUG_ON(offsetof(CPUTLBEntry, addr_write) !=
-                      MMU_DATA_STORE * TARGET_LONG_SIZE);
+                      MMU_DATA_STORE * sizeof(uint64_t));
     QEMU_BUILD_BUG_ON(offsetof(CPUTLBEntry, addr_code) !=
-                      MMU_INST_FETCH * TARGET_LONG_SIZE);
+                      MMU_INST_FETCH * sizeof(uint64_t));
 
-    const target_ulong *ptr = &entry->addr_idx[access_type];
-#if TCG_OVERSIZED_GUEST
-    return *ptr;
+#if TARGET_LONG_BITS == 32
+    /* Use qatomic_read, in case of addr_write; only care about low bits. */
+    const uint32_t *ptr = (uint32_t *)&entry->addr_idx[access_type];
+    ptr += HOST_BIG_ENDIAN;
+    return qatomic_read(ptr);
 #else
+    const uint64_t *ptr = &entry->addr_idx[access_type];
+# if TCG_OVERSIZED_GUEST
+    return *ptr;
+# else
     /* ofs might correspond to .addr_write, so use qatomic_read */
     return qatomic_read(ptr);
+# endif
 #endif
 }
 
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index 90c72c9940..6beaeb0a81 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -1000,11 +1000,15 @@ static void tlb_reset_dirty_range_locked(CPUTLBEntry *tlb_entry,
         addr &= TARGET_PAGE_MASK;
         addr += tlb_entry->addend;
         if ((addr - start) < length) {
-#if TCG_OVERSIZED_GUEST
+#if TARGET_LONG_BITS == 32
+            uint32_t *ptr_write = (uint32_t *)&tlb_entry->addr_write;
+            ptr_write += HOST_BIG_ENDIAN;
+            qatomic_set(ptr_write, *ptr_write | TLB_NOTDIRTY);
+#elif TCG_OVERSIZED_GUEST
             tlb_entry->addr_write |= TLB_NOTDIRTY;
 #else
             qatomic_set(&tlb_entry->addr_write,
-                       tlb_entry->addr_write | TLB_NOTDIRTY);
+                        tlb_entry->addr_write | TLB_NOTDIRTY);
 #endif
         }
     }
diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc
index 261ad25210..e23c57e2cd 100644
--- a/tcg/aarch64/tcg-target.c.inc
+++ b/tcg/aarch64/tcg-target.c.inc
@@ -1690,6 +1690,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
     tcg_out_insn(s, 3502, ADD, 1, TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_TMP0);
 
     /* Load the tlb comparator into TMP0, and the fast path addend into TMP1. */
+    QEMU_BUILD_BUG_ON(HOST_BIG_ENDIAN);
     tcg_out_ld(s, addr_type, TCG_REG_TMP0, TCG_REG_TMP1,
                is_ld ? offsetof(CPUTLBEntry, addr_read)
                      : offsetof(CPUTLBEntry, addr_write));
diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc
index 20cc1cc477..64eb0cb5dc 100644
--- a/tcg/arm/tcg-target.c.inc
+++ b/tcg/arm/tcg-target.c.inc
@@ -1430,6 +1430,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
      * Add the tlb_table pointer, creating the CPUTLBEntry address in R1.
      * Load the tlb comparator into R2/R3 and the fast path addend into R1.
      */
+    QEMU_BUILD_BUG_ON(HOST_BIG_ENDIAN);
     if (cmp_off == 0) {
         if (s->addr_type == TCG_TYPE_I32) {
             tcg_out_ld32_rwb(s, COND_AL, TCG_REG_R2, TCG_REG_R1, TCG_REG_R0);
diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.c.inc
index 0bae922982..e89f3b848b 100644
--- a/tcg/loongarch64/tcg-target.c.inc
+++ b/tcg/loongarch64/tcg-target.c.inc
@@ -875,6 +875,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
     tcg_out_opc_add_d(s, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP1);
 
     /* Load the tlb comparator and the addend.  */
+    QEMU_BUILD_BUG_ON(HOST_BIG_ENDIAN);
     tcg_out_ld(s, addr_type, TCG_REG_TMP0, TCG_REG_TMP2,
                is_ld ? offsetof(CPUTLBEntry, addr_read)
                      : offsetof(CPUTLBEntry, addr_write));
diff --git a/tcg/mips/tcg-target.c.inc b/tcg/mips/tcg-target.c.inc
index 3274d9aace..4c0de0a380 100644
--- a/tcg/mips/tcg-target.c.inc
+++ b/tcg/mips/tcg-target.c.inc
@@ -1311,14 +1311,17 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
     /* Add the tlb_table pointer, creating the CPUTLBEntry address in TMP3.  */
     tcg_out_opc_reg(s, ALIAS_PADD, TCG_TMP3, TCG_TMP3, TCG_TMP1);
 
+    if (TCG_TARGET_REG_BITS == 32 || addr_type == TCG_TYPE_I32) {
+        /* Load the (low half) tlb comparator.  */
+        tcg_out_ld(s, TCG_TYPE_I32, TCG_TMP0, TCG_TMP3,
+                   cmp_off + HOST_BIG_ENDIAN * 4);
+    } else {
+        tcg_out_ld(s, TCG_TYPE_I64, TCG_TMP0, TCG_TMP3, cmp_off);
+    }
+
     if (TCG_TARGET_REG_BITS == 64 || addr_type == TCG_TYPE_I32) {
-        /* Load the tlb comparator.  */
-        tcg_out_ld(s, addr_type, TCG_TMP0, TCG_TMP3, cmp_off);
         /* Load the tlb addend for the fast path.  */
         tcg_out_ld(s, TCG_TYPE_PTR, TCG_TMP3, TCG_TMP3, add_off);
-    } else {
-        /* Load the low half of the tlb comparator.  */
-        tcg_out_ldst(s, OPC_LW, TCG_TMP0, TCG_TMP3, cmp_off + LO_OFF);
     }
 
     /*
diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
index 11955a6cc2..73f6ea0393 100644
--- a/tcg/ppc/tcg-target.c.inc
+++ b/tcg/ppc/tcg-target.c.inc
@@ -2098,20 +2098,24 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
     }
     tcg_out32(s, AND | SAB(TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_R0));
 
-    /* Load the (low part) TLB comparator into TMP2.  */
-    if (cmp_off == 0
-        && (TCG_TARGET_REG_BITS == 64 || addr_type == TCG_TYPE_I32)) {
-        uint32_t lxu = (TCG_TARGET_REG_BITS == 32 || addr_type == TCG_TYPE_I32
-                        ? LWZUX : LDUX);
-        tcg_out32(s, lxu | TAB(TCG_REG_TMP2, TCG_REG_TMP1, TCG_REG_TMP2));
+    /*
+     * Load the (low part) TLB comparator into TMP2.
+     * For 64-bit host, always load the entire 64-bit slot for simplicity.
+     * We will ignore the high bits with tcg_out_cmp(..., addr_type).
+     */
+    if (TCG_TARGET_REG_BITS == 64) {
+        if (cmp_off == 0) {
+            tcg_out32(s, LDUX | TAB(TCG_REG_TMP2, TCG_REG_TMP1, TCG_REG_TMP2));
+        } else {
+            tcg_out32(s, ADD | TAB(TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_TMP2));
+            tcg_out_ld(s, TCG_TYPE_I64, TCG_REG_TMP2, TCG_REG_TMP1, cmp_off);
+        }
+    } else if (cmp_off == 0 && !HOST_BIG_ENDIAN) {
+        tcg_out32(s, LWZUX | TAB(TCG_REG_TMP2, TCG_REG_TMP1, TCG_REG_TMP2));
     } else {
         tcg_out32(s, ADD | TAB(TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_TMP2));
-        if (TCG_TARGET_REG_BITS == 32 && addr_type != TCG_TYPE_I32) {
-            tcg_out_ld(s, TCG_TYPE_I32, TCG_REG_TMP2,
-                       TCG_REG_TMP1, cmp_off + 4 * HOST_BIG_ENDIAN);
-        } else {
-            tcg_out_ld(s, addr_type, TCG_REG_TMP2, TCG_REG_TMP1, cmp_off);
-        }
+        tcg_out_ld(s, TCG_TYPE_I32, TCG_REG_TMP2, TCG_REG_TMP1,
+                   cmp_off + 4 * HOST_BIG_ENDIAN);
     }
 
     /*
diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc
index a8f99f7e77..a6d56e2d0e 100644
--- a/tcg/riscv/tcg-target.c.inc
+++ b/tcg/riscv/tcg-target.c.inc
@@ -1249,6 +1249,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, TCGReg *pbase,
     }
 
     /* Load the tlb comparator and the addend.  */
+    QEMU_BUILD_BUG_ON(HOST_BIG_ENDIAN);
     tcg_out_ld(s, addr_type, TCG_REG_TMP0, TCG_REG_TMP2,
                is_ld ? offsetof(CPUTLBEntry, addr_read)
                      : offsetof(CPUTLBEntry, addr_write));
diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc
index 2795242b60..03be800c3b 100644
--- a/tcg/s390x/tcg-target.c.inc
+++ b/tcg/s390x/tcg-target.c.inc
@@ -1796,6 +1796,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
         ofs = offsetof(CPUTLBEntry, addr_write);
     }
     if (addr_type == TCG_TYPE_I32) {
+        ofs += HOST_BIG_ENDIAN * 4;
         tcg_out_insn(s, RX, C, TCG_REG_R0, TCG_TMP0, TCG_REG_NONE, ofs);
     } else {
         tcg_out_insn(s, RXY, CG, TCG_REG_R0, TCG_TMP0, TCG_REG_NONE, ofs);
diff --git a/tcg/sparc64/tcg-target.c.inc b/tcg/sparc64/tcg-target.c.inc
index 48efd83817..6c60657c36 100644
--- a/tcg/sparc64/tcg-target.c.inc
+++ b/tcg/sparc64/tcg-target.c.inc
@@ -1063,8 +1063,12 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
     /* Add the tlb_table pointer, creating the CPUTLBEntry address into R2.  */
     tcg_out_arith(s, TCG_REG_T1, TCG_REG_T1, TCG_REG_T3, ARITH_ADD);
 
-    /* Load the tlb comparator and the addend. */
-    tcg_out_ld(s, addr_type, TCG_REG_T2, TCG_REG_T1, cmp_off);
+    /*
+     * Load the tlb comparator and the addend.
+     * Always load the entire 64-bit comparator for simplicity.
+     * We will ignore the high bits via BPCC_ICC below.
+     */
+    tcg_out_ld(s, TCG_TYPE_I64, TCG_REG_T2, TCG_REG_T1, cmp_off);
     tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_T1, TCG_REG_T1, add_off);
     h->base = TCG_REG_T1;
 
-- 
2.34.1



  parent reply	other threads:[~2023-05-31  4:12 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-31  4:02 [PATCH v3 00/48] tcg: Build once for system, once for user Richard Henderson
2023-05-31  4:02 ` [PATCH v3 01/48] tcg/ppc: Remove TARGET_LONG_BITS, TCG_TYPE_TL Richard Henderson
2023-06-04 10:32   ` Anton Johansson via
2023-05-31  4:02 ` [PATCH v3 02/48] tcg/riscv: " Richard Henderson
2023-05-31 14:11   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 03/48] tcg/s390x: " Richard Henderson
2023-05-31 14:11   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 04/48] tcg/sparc64: " Richard Henderson
2023-05-31 14:12   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 05/48] tcg: Move TCG_TYPE_TL from tcg.h to tcg-op.h Richard Henderson
2023-05-31  4:02 ` Richard Henderson [this message]
2023-06-02 11:33   ` [PATCH v3 06/48] tcg: Widen CPUTLBEntry comparators to 64-bits Anton Johansson via
2023-05-31  4:02 ` [PATCH v3 07/48] tcg: Add tlb_fast_offset to TCGContext Richard Henderson
2023-06-01 11:11   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 08/48] *: Add missing includes of qemu/error-report.h Richard Henderson
2023-06-01 11:12   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 09/48] *: Add missing includes of tcg/debug-assert.h Richard Henderson
2023-06-01 11:19   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 10/48] *: Add missing includes of tcg/tcg.h Richard Henderson
2023-05-31  4:02 ` [PATCH v3 11/48] tcg: Split out tcg-target-reg-bits.h Richard Henderson
2023-05-31 14:04   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 12/48] target/arm: Fix test of TCG_OVERSIZED_GUEST Richard Henderson
2023-06-01 20:13   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 13/48] tcg: Split out tcg/oversized-guest.h Richard Henderson
2023-05-31  4:02 ` [PATCH v3 14/48] tcg: Move TCGv, dup_const_tl definitions to tcg-op.h Richard Henderson
2023-06-01 11:13   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 15/48] tcg: Split tcg/tcg-op-common.h from tcg/tcg-op.h Richard Henderson
2023-06-02 21:29   ` Philippe Mathieu-Daudé
2023-06-03  4:04     ` Richard Henderson
2023-06-03 13:33       ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 16/48] target/arm: Include helper-gen.h in translator.h Richard Henderson
2023-05-31 14:13   ` Philippe Mathieu-Daudé
2023-05-31  4:02 ` [PATCH v3 17/48] target/hexagon: Include helper-gen.h where needed Richard Henderson
2023-05-31 14:13   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 18/48] tcg: Remove outdated comments in helper-head.h Richard Henderson
2023-06-01 20:14   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 19/48] tcg: Move TCGHelperInfo and dependencies to tcg/helper-info.h Richard Henderson
2023-05-31 14:14   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 20/48] tcg: Pass TCGHelperInfo to tcg_gen_callN Richard Henderson
2023-06-04 11:19   ` Anton Johansson via
2023-05-31  4:03 ` [PATCH v3 21/48] tcg: Move temp_idx and tcgv_i32_temp debug out of line Richard Henderson
2023-06-01 20:18   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 22/48] tcg: Split tcg_gen_callN Richard Henderson
2023-06-02 21:19   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 23/48] tcg: Split helper-gen.h Richard Henderson
2023-06-02 21:17   ` Philippe Mathieu-Daudé
2023-06-03  4:09     ` Richard Henderson
2023-06-03 13:34       ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 24/48] tcg: Split helper-proto.h Richard Henderson
2023-06-02 21:14   ` Philippe Mathieu-Daudé
2023-06-03  4:10     ` Richard Henderson
2023-05-31  4:03 ` [PATCH v3 25/48] tcg: Add insn_start_words to TCGContext Richard Henderson
2023-06-04 11:43   ` Anton Johansson via
2023-05-31  4:03 ` [PATCH v3 26/48] tcg: Add guest_mo " Richard Henderson
2023-06-01 11:14   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 27/48] tcg: Move TLB_FLAGS_MASK check out of get_alignment_bits Richard Henderson
2023-06-04 11:57   ` Anton Johansson via
2023-05-31  4:03 ` [PATCH v3 28/48] tcg: Split tcg/tcg-op-gvec.h Richard Henderson
2023-06-01 20:21   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 29/48] tcg: Remove NO_CPU_IO_DEFS Richard Henderson
2023-05-31  5:19   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 30/48] exec-all: Widen tb_page_addr_t for user-only Richard Henderson
2023-06-02 10:02   ` Philippe Mathieu-Daudé
2023-06-03  4:14     ` Richard Henderson
2023-05-31  4:03 ` [PATCH v3 31/48] exec-all: Widen TranslationBlock pc and cs_base to 64-bits Richard Henderson
2023-05-31  4:03 ` [PATCH v3 32/48] tcg: Spit out exec/translation-block.h Richard Henderson
2023-06-01 20:23   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 33/48] include/exec: Remove CODE_GEN_AVG_BLOCK_SIZE Richard Henderson
2023-06-02  9:34   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 34/48] accel/tcg: Move most of gen-icount.h into translator.c Richard Henderson
2023-05-31  5:21   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 35/48] accel/tcg: Introduce translator_io_start Richard Henderson
2023-06-02  9:45   ` Philippe Mathieu-Daudé
2023-06-02  9:54   ` [PATCH 35.5] target/pcc: Inline gen_icount_io_start() Philippe Mathieu-Daudé
2023-06-03  4:30     ` Richard Henderson
2023-05-31  4:03 ` [PATCH v3 36/48] accel/tcg: Move translator_fake_ldb out of line Richard Henderson
2023-06-02 10:06   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 37/48] target/arm: Tidy helpers for translation Richard Henderson
2023-05-31  5:23   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 38/48] target/mips: " Richard Henderson
2023-05-31  5:24   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 39/48] *: Add missing includes of exec/translation-block.h Richard Henderson
2023-06-02 21:02   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 40/48] *: Add missing includes of exec/exec-all.h Richard Henderson
2023-06-02 21:02   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 41/48] accel/tcg: Tidy includes for translator.[ch] Richard Henderson
2023-06-02 20:59   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 42/48] tcg: Fix PAGE/PROT confusion Richard Henderson
2023-06-02 20:59   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 43/48] tcg: Move env defines out of NEED_CPU_H in helper-head.h Richard Henderson
2023-05-31  5:26   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 44/48] tcg: Remove target-specific headers from tcg.[ch] Richard Henderson
2023-05-31  5:27   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 45/48] plugins: Move plugin_insn_append to translator.c Richard Henderson
2023-06-02 21:00   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 46/48] plugins: Drop unused headers from exec/plugin-gen.h Richard Henderson
2023-06-02 21:01   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 47/48] exec/poison: Do not poison CONFIG_SOFTMMU Richard Henderson
2023-06-02 23:15   ` Philippe Mathieu-Daudé
2023-05-31  4:03 ` [PATCH v3 48/48] tcg: Build once for system and once for user-only Richard Henderson
2023-05-31  5:30   ` Philippe Mathieu-Daudé
2023-06-02 21:25 ` [PATCH v3 00/48] tcg: Build once for system, once for user Philippe Mathieu-Daudé
2023-06-03  4:34   ` Richard Henderson
2023-06-03 13:38     ` Philippe Mathieu-Daudé
2023-06-04  1:40 ` Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230531040330.8950-7-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).