On 30/9/26 09:20, Yonggang Luo wrote:
Pass the wait-instruction resume PC as vaddr through the helper
interface and implementation.
Signed-off-by: Yonggang Luo <[email protected]>
---
target/hexagon/gen_tcg_sys.h | 2 +-
target/hexagon/helper.h | 2 +-
target/hexagon/op_helper.c | 8 ++++----
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/target/hexagon/gen_tcg_sys.h b/target/hexagon/gen_tcg_sys.h
index af5032214c..de66b85b49 100644
--- a/target/hexagon/gen_tcg_sys.h
+++ b/target/hexagon/gen_tcg_sys.h
@@ -80,7 +80,7 @@
#define fGEN_TCG_Y2_wait(SHORTCODE) \
do { \
RsV = RsV; \
- gen_helper_wait(tcg_env, tcg_constant_tl(ctx->pkt.pc)); \
+ gen_helper_wait(tcg_env, tcg_constant_vaddr(ctx->pkt.pc)); \
Just curious, why tcg_constant_vaddr over tcg_constant_i32?
} while (0)
#define fGEN_TCG_Y2_resume(SHORTCODE) \
diff --git a/target/hexagon/helper.h b/target/hexagon/helper.h
index 71c8da4c46..18cff7f4d2 100644
--- a/target/hexagon/helper.h
+++ b/target/hexagon/helper.h
@@ -136,7 +136,7 @@ DEF_HELPER_3(sreg_write_masked, void, env, i32, i32)
DEF_HELPER_3(setprio, void, env, i32, i32)
DEF_HELPER_2(start, void, env, i32)
DEF_HELPER_1(stop, void, env)
-DEF_HELPER_2(wait, void, env, i32)
+DEF_HELPER_2(wait, void, env, vaddr)
DEF_HELPER_2(resume, void, env, i32)
DEF_HELPER_1(resched, void, env)
DEF_HELPER_3(modify_ssr, void, env, i32, i32)
diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c
index 4f00ca773f..0785f1a127 100644
--- a/target/hexagon/op_helper.c
+++ b/target/hexagon/op_helper.c
@@ -1741,7 +1741,7 @@ static void set_wait_mode(CPUHexagonState *env)
SET_SYSTEM_FIELD(env, HEX_SREG_MODECTL, MODECTL_W, thread_wait_mask);
}
-static void hexagon_wait_thread(CPUHexagonState *env, uint32_t PC)
+static void hexagon_wait_thread(CPUHexagonState *env, vaddr pc)
{
CPUState *cs;
@@ -1768,7 +1768,7 @@ static void hexagon_wait_thread(CPUHexagonState *env, uint32_t PC)
return;
}
set_wait_mode(env);
- env->wait_next_pc = PC + 4;
+ env->wait_next_pc = pc + 4;
cpu_interrupt(cs, CPU_INTERRUPT_HALT);
}
@@ -1836,12 +1836,12 @@ void HELPER(resched)(CPUHexagonState *env)
resched(env);
}
-void HELPER(wait)(CPUHexagonState *env, uint32_t PC)
+void HELPER(wait)(CPUHexagonState *env, vaddr pc)
{
BQL_LOCK_GUARD();
if (!fIN_DEBUG_MODE(env->threadId)) {
- hexagon_wait_thread(env, PC);
+ hexagon_wait_thread(env, pc);
}
}