From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: qemu-arm@nongnu.org, "Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Pierrick Bouvier" <pierrick.bouvier@linaro.org>
Subject: [PATCH v5 15/76] include/hw/core/cpu: Invert the indexing into CPUTLBDescFast
Date: Mon, 22 Sep 2025 11:48:23 -0700 [thread overview]
Message-ID: <20250922184924.2754205-16-richard.henderson@linaro.org> (raw)
In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org>
This array is within CPUNegativeOffsetState, which means the
last element of the array has an offset from env with the
smallest magnitude. This can be encoded into fewer bits
when generating TCG fast path memory references.
When we changed the NB_MMU_MODES to be a global constant,
rather than a per-target value, we pessimized the code
generated for targets which use only a few mmu indexes.
By inverting the array index, we counteract that.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/hw/core/cpu.h | 11 ++++++++++-
tcg/tcg.c | 3 ++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 30e335d7d0..89fe937a6f 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -595,9 +595,18 @@ static inline CPUArchState *cpu_env(CPUState *cpu)
}
#ifdef CONFIG_TCG
+/*
+ * Invert the index order of the CPUTLBDescFast array so that lower
+ * mmu_idx have offsets from env with smaller magnitude.
+ */
+static inline int mmuidx_to_fast_index(int mmu_idx)
+{
+ return NB_MMU_MODES - 1 - mmu_idx;
+}
+
static inline CPUTLBDescFast *cpu_tlb_fast(CPUState *cpu, int mmu_idx)
{
- return &cpu->neg.tlb.f[mmu_idx];
+ return &cpu->neg.tlb.f[mmuidx_to_fast_index(mmu_idx)];
}
#endif
diff --git a/tcg/tcg.c b/tcg/tcg.c
index afac55a203..294762c283 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -425,7 +425,8 @@ static uintptr_t G_GNUC_UNUSED get_jmp_target_addr(TCGContext *s, int which)
static int __attribute__((unused))
tlb_mask_table_ofs(TCGContext *s, int which)
{
- return (offsetof(CPUNegativeOffsetState, tlb.f[which]) -
+ int fi = mmuidx_to_fast_index(which);
+ return (offsetof(CPUNegativeOffsetState, tlb.f[fi]) -
sizeof(CPUNegativeOffsetState));
}
--
2.43.0
next prev parent reply other threads:[~2025-09-22 19:10 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-22 18:48 [PATCH v5 00/76] target/arm: Implement FEAT_GCS Richard Henderson
2025-09-22 18:48 ` [PATCH v5 01/76] target/arm: Add isar feature test for FEAT_S1PIE, FEAT_S2PIE Richard Henderson
2025-09-22 18:48 ` [PATCH v5 02/76] target/arm: Enable TCR2_ELx.PIE Richard Henderson
2025-09-22 18:48 ` [PATCH v5 03/76] target/arm: Implement PIR_ELx, PIRE0_ELx, S2PIR_EL2 registers Richard Henderson
2025-09-22 18:48 ` [PATCH v5 04/76] target/arm: Force HPD for stage2 translations Richard Henderson
2025-09-22 18:48 ` [PATCH v5 05/76] target/arm: Cache NV1 early in get_phys_addr_lpae Richard Henderson
2025-09-22 18:48 ` [PATCH v5 06/76] target/arm: Populate PIE in aa64_va_parameters Richard Henderson
2025-09-22 18:48 ` [PATCH v5 07/76] target/arm: Implement get_S1prot_indirect Richard Henderson
2025-09-22 18:48 ` [PATCH v5 08/76] target/arm: Implement get_S2prot_indirect Richard Henderson
2025-09-22 18:48 ` [PATCH v5 09/76] target/arm: Expand CPUARMState.exception.syndrome to 64 bits Richard Henderson
2025-09-22 18:48 ` [PATCH v5 10/76] target/arm: Expand syndrome parameter to raise_exception* Richard Henderson
2025-09-22 18:48 ` [PATCH v5 11/76] target/arm: Implement dirtybit check for PIE Richard Henderson
2025-09-22 18:48 ` [PATCH v5 12/76] target/arm: Enable FEAT_S1PIE and FEAT_S2PIE on -cpu max Richard Henderson
2025-09-22 18:48 ` [PATCH v5 13/76] include/hw/core/cpu: Introduce MMUIdxMap Richard Henderson
2025-09-22 18:48 ` [PATCH v5 14/76] include/hw/core/cpu: Introduce cpu_tlb_fast Richard Henderson
2025-09-22 18:48 ` Richard Henderson [this message]
2025-09-22 18:48 ` [PATCH v5 16/76] target/hppa: Adjust mmu indexes to begin with 0 Richard Henderson
2025-09-22 18:48 ` [PATCH v5 17/76] include/exec/memopidx: Adjust for 32 mmu indexes Richard Henderson
2025-09-22 18:48 ` [PATCH v5 18/76] include/hw/core/cpu: Widen MMUIdxMap Richard Henderson
2025-09-22 18:48 ` [PATCH v5 19/76] target/arm: Split out mmuidx.h from cpu.h Richard Henderson
2025-09-22 18:48 ` [PATCH v5 20/76] target/arm: Convert arm_mmu_idx_to_el from switch to table Richard Henderson
2025-09-22 18:48 ` [PATCH v5 21/76] target/arm: Remove unused env argument from regime_el Richard Henderson
2025-09-22 18:48 ` [PATCH v5 22/76] target/arm: Convert regime_el from switch to table Richard Henderson
2025-09-22 18:48 ` [PATCH v5 23/76] target/arm: Convert regime_has_2_ranges " Richard Henderson
2025-09-22 18:48 ` [PATCH v5 24/76] target/arm: Remove unused env argument from regime_is_pan Richard Henderson
2025-09-22 18:48 ` [PATCH v5 25/76] target/arm: Convert regime_is_pan from switch to table Richard Henderson
2025-09-22 18:48 ` [PATCH v5 26/76] target/arm: Remove unused env argument from regime_is_user Richard Henderson
2025-09-22 18:48 ` [PATCH v5 27/76] target/arm: Convert regime_is_user from switch to table Richard Henderson
2025-09-22 18:48 ` [PATCH v5 28/76] target/arm: Convert arm_mmu_idx_is_stage1_of_2 " Richard Henderson
2025-09-22 18:48 ` [PATCH v5 29/76] target/arm: Convert regime_is_stage2 " Richard Henderson
2025-09-22 18:48 ` [PATCH v5 30/76] target/arm: Introduce mmu indexes for GCS Richard Henderson
2025-09-22 18:48 ` [PATCH v5 31/76] target/arm: Introduce regime_to_gcs Richard Henderson
2025-09-22 18:48 ` [PATCH v5 32/76] target/arm: Support page protections for GCS mmu indexes Richard Henderson
2025-09-22 18:48 ` [PATCH v5 33/76] target/arm: Implement gcs bit for data abort Richard Henderson
2025-09-22 18:48 ` [PATCH v5 34/76] target/arm: Add GCS cpregs Richard Henderson
2025-09-22 18:48 ` [PATCH v5 35/76] target/arm: Add GCS enable and trap levels to DisasContext Richard Henderson
2025-09-22 18:48 ` [PATCH v5 36/76] target/arm: Implement FEAT_CHK Richard Henderson
2025-09-22 18:48 ` [PATCH v5 37/76] target/arm: Make helper_exception_return system-only Richard Henderson
2025-09-22 18:48 ` [PATCH v5 38/76] target/arm: Export cpsr_{read_for, write_from}_spsr_elx Richard Henderson
2025-09-22 18:48 ` [PATCH v5 39/76] target/arm: Expand pstate to 64 bits Richard Henderson
2025-09-22 18:48 ` [PATCH v5 40/76] target/arm: Add syndrome data for EC_GCS Richard Henderson
2025-09-22 18:48 ` [PATCH v5 41/76] target/arm: Add arm_hcr_el2_nvx_eff Richard Henderson
2025-09-22 18:48 ` [PATCH v5 42/76] target/arm: Use arm_hcr_el2_nvx_eff in access_nv1 Richard Henderson
2025-09-22 18:48 ` [PATCH v5 43/76] target/arm: Split out access_nv1_with_nvx Richard Henderson
2025-09-22 18:48 ` [PATCH v5 44/76] target/arm: Implement EXLOCKException for ELR_ELx and SPSR_ELx Richard Henderson
2025-09-22 18:48 ` [PATCH v5 45/76] target/arm: Split {full,core}_a64_user_mem_index Richard Henderson
2025-09-22 18:48 ` [PATCH v5 46/76] target/arm: Introduce delay_exception{_el} Richard Henderson
2025-09-22 18:48 ` [PATCH v5 47/76] target/arm: Emit HSTR trap exception out of line Richard Henderson
2025-09-22 18:48 ` [PATCH v5 48/76] target/arm: Emit v7m LTPSIZE " Richard Henderson
2025-09-22 18:48 ` [PATCH v5 49/76] target/arm: Implement GCSSTR, GCSSTTR Richard Henderson
2025-09-22 18:48 ` [PATCH v5 50/76] target/arm: Implement GCSB Richard Henderson
2025-09-22 18:48 ` [PATCH v5 51/76] target/arm: Implement GCSPUSHM Richard Henderson
2025-09-22 18:49 ` [PATCH v5 52/76] target/arm: Implement GCSPOPM Richard Henderson
2025-09-22 18:49 ` [PATCH v5 53/76] target/arm: Implement GCSPUSHX Richard Henderson
2025-09-22 18:49 ` [PATCH v5 54/76] target/arm: Implement GCSPOPX Richard Henderson
2025-09-22 18:49 ` [PATCH v5 55/76] target/arm: Implement GCSPOPCX Richard Henderson
2025-09-22 18:49 ` [PATCH v5 56/76] target/arm: Implement GCSSS1 Richard Henderson
2025-09-22 18:49 ` [PATCH v5 57/76] target/arm: Implement GCSSS2 Richard Henderson
2025-09-22 18:49 ` [PATCH v5 58/76] target/arm: Add gcs record for BL Richard Henderson
2025-09-22 18:49 ` [PATCH v5 59/76] target/arm: Add gcs record for BLR Richard Henderson
2025-09-22 18:49 ` [PATCH v5 60/76] target/arm: Add gcs record for BLR with PAuth Richard Henderson
2025-09-22 18:49 ` [PATCH v5 61/76] target/arm: Load gcs record for RET Richard Henderson
2025-09-22 18:49 ` [PATCH v5 62/76] target/arm: Load gcs record for RET with PAuth Richard Henderson
2025-09-22 18:49 ` [PATCH v5 63/76] target/arm: Copy EXLOCKEn to EXLOCK on exception to the same EL Richard Henderson
2025-09-22 18:49 ` [PATCH v5 64/76] target/arm: Implement EXLOCK check during exception return Richard Henderson
2025-09-22 18:49 ` [PATCH v5 65/76] target/arm: Enable FEAT_GCS with -cpu max Richard Henderson
2025-09-22 18:49 ` [PATCH v5 66/76] linux-user/aarch64: Implement prctls for GCS Richard Henderson
2025-09-22 18:49 ` [PATCH v5 67/76] linux-user/aarch64: Allocate new gcs stack on clone Richard Henderson
2025-09-22 18:49 ` [PATCH v5 68/76] linux-user/aarch64: Release gcs stack on thread exit Richard Henderson
2025-09-22 18:49 ` [PATCH v5 69/76] linux-user/aarch64: Implement map_shadow_stack syscall Richard Henderson
2025-09-22 18:49 ` [PATCH v5 70/76] target/arm: Enable GCSPR_EL0 for read in user-mode Richard Henderson
2025-09-22 18:49 ` [PATCH v5 71/76] linux-user/aarch64: Inject SIGSEGV for GCS faults Richard Henderson
2025-09-22 18:49 ` [PATCH v5 72/76] linux-user/aarch64: Generate GCS signal records Richard Henderson
2025-09-22 18:49 ` [PATCH v5 73/76] linux-user/aarch64: Enable GCS in HWCAP Richard Henderson
2025-09-22 18:49 ` [PATCH v5 74/76] tests/tcg/aarch64: Add gcsstr Richard Henderson
2025-09-22 18:49 ` [PATCH v5 75/76] tests/tcg/aarch64: Add gcspushm Richard Henderson
2025-09-22 18:49 ` [PATCH v5 76/76] tests/tcg/aarch64: Add gcsss Richard Henderson
2025-09-23 23:58 ` [PATCH v5 00/76] target/arm: Implement FEAT_GCS 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=20250922184924.2754205-16-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=philmd@linaro.org \
--cc=pierrick.bouvier@linaro.org \
--cc=qemu-arm@nongnu.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).