[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 04/11] plugins: extract generate ptr for qemu_plugin_u64
From: |
Alex Bennée |
Subject: |
[PULL 04/11] plugins: extract generate ptr for qemu_plugin_u64 |
Date: |
Wed, 15 May 2024 21:23:27 +0100 |
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Plugin operations can access a scoreboard. This function factorizes code
generation for accessing entry associated to a given vcpu.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-Id: <20240502211522.346467-3-pierrick.bouvier@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240514174253.694591-5-alex.bennee@linaro.org>
diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c
index 4069d51daf..97868781fe 100644
--- a/accel/tcg/plugin-gen.c
+++ b/accel/tcg/plugin-gen.c
@@ -113,24 +113,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);
+
+ 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_addi_ptr(ptr, ptr, (intptr_t)arr->data);
- tcg_gen_ld_i64(val, ptr, offset);
+ 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
- [PULL 00/11] testing and plugin updates, Alex Bennée, 2024/05/15
- [PULL 11/11] plugins: remove op from qemu_plugin_inline_cb, Alex Bennée, 2024/05/15
- [PULL 02/11] scripts/update-linux-header.sh: be more src tree friendly, Alex Bennée, 2024/05/15
- [PULL 04/11] plugins: extract generate ptr for qemu_plugin_u64,
Alex Bennée <=
- [PULL 06/11] tests/plugin/inline: add test for STORE_U64 inline op, Alex Bennée, 2024/05/15
- [PULL 09/11] plugins: distinct types for callbacks, Alex Bennée, 2024/05/15
- [PULL 07/11] plugins: conditional callbacks, Alex Bennée, 2024/05/15
- [PULL 10/11] plugins: extract cpu_index generate, Alex Bennée, 2024/05/15
- [PULL 08/11] tests/plugin/inline: add test for conditional callback, Alex Bennée, 2024/05/15
- [PULL 03/11] plugins: prepare introduction of new inline ops, Alex Bennée, 2024/05/15
- [PULL 05/11] plugins: add new inline op STORE_U64, Alex Bennée, 2024/05/15
- [PULL 01/11] tests/tcg: don't append QEMU_OPTS for armv6m-undef test, Alex Bennée, 2024/05/15