[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 21/48] tcg: Move temp_idx and tcgv_i32_temp debug out of line
|
From: |
Richard Henderson |
|
Subject: |
[PATCH v3 21/48] tcg: Move temp_idx and tcgv_i32_temp debug out of line |
|
Date: |
Tue, 30 May 2023 21:03:03 -0700 |
Removes a multiplicty of calls to __assert_fail, saving up
to 360kiB of .text space as measured on an x86_64 host.
Old New Less %Change
9257272 8888680 368592 3.98% qemu-system-aarch64
6100968 5911832 189136 3.10% qemu-system-riscv64
5839112 5707032 132080 2.26% qemu-system-mips
4447608 4341752 105856 2.38% qemu-system-s390x
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/tcg/tcg.h | 30 ++++++++++++++++--------------
tcg/tcg.c | 19 +++++++++++++++++++
2 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
index 34035dab81..64c10a63f3 100644
--- a/include/tcg/tcg.h
+++ b/include/tcg/tcg.h
@@ -630,13 +630,6 @@ static inline void *tcg_splitwx_to_rw(const void *rx)
}
#endif
-static inline size_t temp_idx(TCGTemp *ts)
-{
- ptrdiff_t n = ts - tcg_ctx->temps;
- tcg_debug_assert(n >= 0 && n < tcg_ctx->nb_temps);
- return n;
-}
-
static inline TCGArg temp_arg(TCGTemp *ts)
{
return (uintptr_t)ts;
@@ -647,16 +640,25 @@ static inline TCGTemp *arg_temp(TCGArg a)
return (TCGTemp *)(uintptr_t)a;
}
-/* Using the offset of a temporary, relative to TCGContext, rather than
- its index means that we don't use 0. That leaves offset 0 free for
- a NULL representation without having to leave index 0 unused. */
+#ifdef CONFIG_DEBUG_TCG
+size_t temp_idx(TCGTemp *ts);
+TCGTemp *tcgv_i32_temp(TCGv_i32 v);
+#else
+static inline size_t temp_idx(TCGTemp *ts)
+{
+ return ts - tcg_ctx->temps;
+}
+
+/*
+ * Using the offset of a temporary, relative to TCGContext, rather than
+ * its index means that we don't use 0. That leaves offset 0 free for
+ * a NULL representation without having to leave index 0 unused.
+ */
static inline TCGTemp *tcgv_i32_temp(TCGv_i32 v)
{
- uintptr_t o = (uintptr_t)v;
- TCGTemp *t = (void *)tcg_ctx + o;
- tcg_debug_assert(offsetof(TCGContext, temps[temp_idx(t)]) == o);
- return t;
+ return (void *)tcg_ctx + (uintptr_t)v;
}
+#endif
static inline TCGTemp *tcgv_i64_temp(TCGv_i64 v)
{
diff --git a/tcg/tcg.c b/tcg/tcg.c
index ffd3ccaff7..59624fceec 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -1800,6 +1800,25 @@ TCGv_vec tcg_constant_vec_matching(TCGv_vec match,
unsigned vece, int64_t val)
return tcg_constant_vec(t->base_type, vece, val);
}
+#ifdef CONFIG_DEBUG_TCG
+size_t temp_idx(TCGTemp *ts)
+{
+ ptrdiff_t n = ts - tcg_ctx->temps;
+ assert(n >= 0 && n < tcg_ctx->nb_temps);
+ return n;
+}
+
+TCGTemp *tcgv_i32_temp(TCGv_i32 v)
+{
+ uintptr_t o = (uintptr_t)v - offsetof(TCGContext, temps);
+
+ assert(o < sizeof(TCGTemp) * tcg_ctx->nb_temps);
+ assert(o % sizeof(TCGTemp) == 0);
+
+ return (void *)tcg_ctx + (uintptr_t)v;
+}
+#endif /* CONFIG_DEBUG_TCG */
+
/* Return true if OP may appear in the opcode stream.
Test the runtime variable that controls each opcode. */
bool tcg_op_supported(TCGOpcode op)
--
2.34.1
- [PATCH v3 17/48] target/hexagon: Include helper-gen.h where needed, (continued)
- [PATCH v3 17/48] target/hexagon: Include helper-gen.h where needed, Richard Henderson, 2023/05/31
- [PATCH v3 08/48] *: Add missing includes of qemu/error-report.h, Richard Henderson, 2023/05/31
- [PATCH v3 12/48] target/arm: Fix test of TCG_OVERSIZED_GUEST, Richard Henderson, 2023/05/31
- [PATCH v3 13/48] tcg: Split out tcg/oversized-guest.h, Richard Henderson, 2023/05/31
- [PATCH v3 14/48] tcg: Move TCGv, dup_const_tl definitions to tcg-op.h, Richard Henderson, 2023/05/31
- [PATCH v3 07/48] tcg: Add tlb_fast_offset to TCGContext, Richard Henderson, 2023/05/31
- [PATCH v3 16/48] target/arm: Include helper-gen.h in translator.h, Richard Henderson, 2023/05/31
- [PATCH v3 15/48] tcg: Split tcg/tcg-op-common.h from tcg/tcg-op.h, Richard Henderson, 2023/05/31
- [PATCH v3 21/48] tcg: Move temp_idx and tcgv_i32_temp debug out of line,
Richard Henderson <=
- [PATCH v3 22/48] tcg: Split tcg_gen_callN, Richard Henderson, 2023/05/31
- [PATCH v3 10/48] *: Add missing includes of tcg/tcg.h, Richard Henderson, 2023/05/31
- [PATCH v3 09/48] *: Add missing includes of tcg/debug-assert.h, Richard Henderson, 2023/05/31
- [PATCH v3 18/48] tcg: Remove outdated comments in helper-head.h, Richard Henderson, 2023/05/31
- [PATCH v3 19/48] tcg: Move TCGHelperInfo and dependencies to tcg/helper-info.h, Richard Henderson, 2023/05/31
- [PATCH v3 20/48] tcg: Pass TCGHelperInfo to tcg_gen_callN, Richard Henderson, 2023/05/31
- [PATCH v3 23/48] tcg: Split helper-gen.h, Richard Henderson, 2023/05/31
- [PATCH v3 26/48] tcg: Add guest_mo to TCGContext, Richard Henderson, 2023/05/31
- [PATCH v3 32/48] tcg: Spit out exec/translation-block.h, Richard Henderson, 2023/05/31