[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 2/9] plugins: extract generate ptr for qemu_plugin_u64
From: |
Pierrick Bouvier |
Subject: |
[PATCH v4 2/9] plugins: extract generate ptr for qemu_plugin_u64 |
Date: |
Tue, 26 Mar 2024 16:34:19 +0400 |
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
---
accel/tcg/plugin-gen.c | 27 ++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)
diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c
index 41d4d83f547..d3667203546 100644
--- a/accel/tcg/plugin-gen.c
+++ b/accel/tcg/plugin-gen.c
@@ -120,24 +120,33 @@ static void gen_udata_cb(struct qemu_plugin_dyn_cb *cb)
tcg_temp_free_i32(cpu_index);
}
-static void gen_inline_add_u64_cb(struct qemu_plugin_dyn_cb *cb)
+static TCGv_ptr gen_plugin_u64_ptr(qemu_plugin_u64 entry)
{
- GArray *arr = cb->inline_insn.entry.score->data;
- size_t offset = cb->inline_insn.entry.offset;
- TCGv_i32 cpu_index = tcg_temp_ebb_new_i32();
- TCGv_i64 val = tcg_temp_ebb_new_i64();
TCGv_ptr ptr = tcg_temp_ebb_new_ptr();
+ GArray *arr = entry.score->data;
+ char *base_ptr = arr->data + entry.offset;
+ size_t entry_size = g_array_get_element_size(arr);
+
+ TCGv_i32 cpu_index = tcg_temp_ebb_new_i32();
tcg_gen_ld_i32(cpu_index, tcg_env,
-offsetof(ArchCPU, env) + offsetof(CPUState, cpu_index));
- tcg_gen_muli_i32(cpu_index, cpu_index, g_array_get_element_size(arr));
+ tcg_gen_muli_i32(cpu_index, cpu_index, entry_size);
tcg_gen_ext_i32_ptr(ptr, cpu_index);
tcg_temp_free_i32(cpu_index);
+ tcg_gen_addi_ptr(ptr, ptr, (intptr_t) base_ptr);
- tcg_gen_addi_ptr(ptr, ptr, (intptr_t)arr->data);
- tcg_gen_ld_i64(val, ptr, offset);
+ return ptr;
+}
+
+static void gen_inline_add_u64_cb(struct qemu_plugin_dyn_cb *cb)
+{
+ TCGv_ptr ptr = gen_plugin_u64_ptr(cb->inline_insn.entry);
+ TCGv_i64 val = tcg_temp_ebb_new_i64();
+
+ tcg_gen_ld_i64(val, ptr, 0);
tcg_gen_addi_i64(val, val, cb->inline_insn.imm);
- tcg_gen_st_i64(val, ptr, offset);
+ tcg_gen_st_i64(val, ptr, 0);
tcg_temp_free_i64(val);
tcg_temp_free_ptr(ptr);
--
2.39.2
- [PATCH v4 0/9] TCG plugins new inline operations, Pierrick Bouvier, 2024/03/26
- [PATCH v4 1/9] plugins: prepare introduction of new inline ops, Pierrick Bouvier, 2024/03/26
- [PATCH v4 2/9] plugins: extract generate ptr for qemu_plugin_u64,
Pierrick Bouvier <=
- [PATCH v4 3/9] plugins: add new inline op STORE_U64, Pierrick Bouvier, 2024/03/26
- [PATCH v4 4/9] tests/plugin/inline: add test for STORE_U64 inline op, Pierrick Bouvier, 2024/03/26
- [PATCH v4 5/9] plugins: conditional callbacks, Pierrick Bouvier, 2024/03/26
- [PATCH v4 6/9] tests/plugin/inline: add test for conditional callback, Pierrick Bouvier, 2024/03/26
- [PATCH v4 7/9] plugins: distinct types for callbacks, Pierrick Bouvier, 2024/03/26
- [PATCH v4 8/9] plugins: extract cpu_index generate, Pierrick Bouvier, 2024/03/26
- [PATCH v4 9/9] plugins: remove op from qemu_plugin_inline_cb, Pierrick Bouvier, 2024/03/26