[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 24/26] tcg: Introduce tcg_temp_ebb_new_*
From: |
Richard Henderson |
Subject: |
[PATCH 24/26] tcg: Introduce tcg_temp_ebb_new_* |
Date: |
Wed, 5 Oct 2022 20:44:19 -0700 |
Allow targets to allocate extended-basic-block temps.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/tcg/tcg-op.h | 2 ++
include/tcg/tcg.h | 20 +++++++++++++++++++-
tcg/tcg.c | 16 ++++------------
3 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/include/tcg/tcg-op.h b/include/tcg/tcg-op.h
index 209e168305..0ebbee6e24 100644
--- a/include/tcg/tcg-op.h
+++ b/include/tcg/tcg-op.h
@@ -848,6 +848,7 @@ static inline void tcg_gen_plugin_cb_end(void)
#define tcg_temp_new() tcg_temp_new_i32()
#define tcg_global_mem_new tcg_global_mem_new_i32
#define tcg_temp_local_new() tcg_temp_local_new_i32()
+#define tcg_temp_ebb_new() tcg_temp_ebb_new_i32()
#define tcg_temp_free tcg_temp_free_i32
#define tcg_gen_qemu_ld_tl tcg_gen_qemu_ld_i32
#define tcg_gen_qemu_st_tl tcg_gen_qemu_st_i32
@@ -855,6 +856,7 @@ static inline void tcg_gen_plugin_cb_end(void)
#define tcg_temp_new() tcg_temp_new_i64()
#define tcg_global_mem_new tcg_global_mem_new_i64
#define tcg_temp_local_new() tcg_temp_local_new_i64()
+#define tcg_temp_ebb_new() tcg_temp_ebb_new_i64()
#define tcg_temp_free tcg_temp_free_i64
#define tcg_gen_qemu_ld_tl tcg_gen_qemu_ld_i64
#define tcg_gen_qemu_st_tl tcg_gen_qemu_st_i64
diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
index e01a47ec20..3835711d52 100644
--- a/include/tcg/tcg.h
+++ b/include/tcg/tcg.h
@@ -609,7 +609,7 @@ struct TCGContext {
#endif
GHashTable *const_table[TCG_TYPE_COUNT];
- TCGTempSet free_temps[TCG_TYPE_COUNT * 2];
+ TCGTempSet free_temps[TCG_TYPE_COUNT * 3];
TCGTemp temps[TCG_MAX_TEMPS]; /* globals first, temps after */
QTAILQ_HEAD(, TCGOp) ops, free_ops;
@@ -890,6 +890,12 @@ static inline TCGv_i32 tcg_temp_local_new_i32(void)
return temp_tcgv_i32(t);
}
+static inline TCGv_i32 tcg_temp_ebb_new_i32(void)
+{
+ TCGTemp *t = tcg_temp_new_internal(TCG_TYPE_I32, TEMP_EBB);
+ return temp_tcgv_i32(t);
+}
+
static inline TCGv_i64 tcg_global_mem_new_i64(TCGv_ptr reg, intptr_t offset,
const char *name)
{
@@ -909,6 +915,12 @@ static inline TCGv_i64 tcg_temp_local_new_i64(void)
return temp_tcgv_i64(t);
}
+static inline TCGv_i64 tcg_temp_ebb_new_i64(void)
+{
+ TCGTemp *t = tcg_temp_new_internal(TCG_TYPE_I64, TEMP_EBB);
+ return temp_tcgv_i64(t);
+}
+
static inline TCGv_ptr tcg_global_mem_new_ptr(TCGv_ptr reg, intptr_t offset,
const char *name)
{
@@ -928,6 +940,12 @@ static inline TCGv_ptr tcg_temp_local_new_ptr(void)
return temp_tcgv_ptr(t);
}
+static inline TCGv_ptr tcg_temp_ebb_new_ptr(void)
+{
+ TCGTemp *t = tcg_temp_new_internal(TCG_TYPE_PTR, TEMP_EBB);
+ return temp_tcgv_ptr(t);
+}
+
#if defined(CONFIG_DEBUG_TCG)
/* If you call tcg_clear_temp_count() at the start of a section of
* code which is not supposed to leak any TCG temporaries, then
diff --git a/tcg/tcg.c b/tcg/tcg.c
index acdbd5a9a2..7aa6cc3451 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -948,17 +948,8 @@ TCGTemp *tcg_temp_new_internal(TCGType type, TCGTempKind
kind)
TCGTemp *ts;
int idx, k;
- switch (kind) {
- case TEMP_NORMAL:
- k = 0;
- break;
- case TEMP_LOCAL:
- k = TCG_TYPE_COUNT;
- break;
- default:
- g_assert_not_reached();
- }
- k += type;
+ assert(kind >= TEMP_NORMAL && kind <= TEMP_LOCAL);
+ k = TCG_TYPE_COUNT * kind + type;
idx = find_first_bit(s->free_temps[k].l, TCG_MAX_TEMPS);
if (idx < TCG_MAX_TEMPS) {
@@ -1046,6 +1037,7 @@ void tcg_temp_free_internal(TCGTemp *ts)
*/
return;
case TEMP_NORMAL:
+ case TEMP_EBB:
case TEMP_LOCAL:
break;
default:
@@ -1063,7 +1055,7 @@ void tcg_temp_free_internal(TCGTemp *ts)
ts->temp_allocated = 0;
idx = temp_idx(ts);
- k = ts->base_type + (ts->kind == TEMP_NORMAL ? 0 : TCG_TYPE_COUNT);
+ k = ts->base_type + ts->kind * TCG_TYPE_COUNT;
set_bit(idx, s->free_temps[k].l);
}
--
2.34.1
- [PATCH 10/26] target/s390x: Use gen_psw_addr_disp in op_sam, (continued)
- [PATCH 10/26] target/s390x: Use gen_psw_addr_disp in op_sam, Richard Henderson, 2022/10/05
- [PATCH 11/26] target/s390x: Use ilen instead in branches, Richard Henderson, 2022/10/05
- [PATCH 12/26] target/s390x: Move masking of psw.addr to cpu_get_tb_cpu_state, Richard Henderson, 2022/10/05
- [PATCH 14/26] target/s390x: Don't set gbea for user-only, Richard Henderson, 2022/10/05
- [PATCH 21/26] target/s390x: Remove PER check from use_goto_tb, Richard Henderson, 2022/10/05
- [PATCH 16/26] target/s390x: Disable conditional branch-to-next for PER, Richard Henderson, 2022/10/05
- [PATCH 26/26] target/s390x: Enable TARGET_TB_PCREL, Richard Henderson, 2022/10/05
- [PATCH 13/26] target/s390x: Add disp argument to update_psw_addr, Richard Henderson, 2022/10/05
- [PATCH 15/26] target/s390x: Introduce per_enabled, Richard Henderson, 2022/10/05
- [PATCH 19/26] target/s390x: Simplify help_branch, Richard Henderson, 2022/10/05
- [PATCH 24/26] tcg: Introduce tcg_temp_ebb_new_*,
Richard Henderson <=
- Re: [PATCH 00/26] target/s390x: pc-relative translation blocks, Richard Henderson, 2022/10/24