From: Brian Cain <bcain@quicinc.com>
Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
---
target/hexagon/cpu_helper.h | 15 ++++++++-------
target/hexagon/cpu_helper.c | 16 ++++++++++++++++
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/target/hexagon/cpu_helper.h b/target/hexagon/cpu_helper.h
index e8d89d8526..f7400031ef 100644
--- a/target/hexagon/cpu_helper.h
+++ b/target/hexagon/cpu_helper.h
@@ -26,20 +26,21 @@ static inline void arch_set_thread_reg(CPUHexagonState *env, uint32_t reg,
uint32_t val)
{
g_assert(reg < TOTAL_PER_THREAD_REGS);
- g_assert_not_reached();
+ env->gpr[reg] = val;
}
static inline uint32_t arch_get_thread_reg(CPUHexagonState *env, uint32_t reg)
{
g_assert(reg < TOTAL_PER_THREAD_REGS);
- g_assert_not_reached();
+ return env->gpr[reg];
}
-static inline void arch_set_system_reg(CPUHexagonState *env, uint32_t reg,
- uint32_t val)
-{
- g_assert_not_reached();
-}
+#ifndef CONFIG_USER_ONLY
+void arch_set_system_reg(CPUHexagonState *env, uint32_t reg,
+ uint32_t val);
+void arch_set_system_reg_masked(CPUHexagonState *env, uint32_t reg,
+ uint32_t val);
+#endif
uint32_t arch_get_system_reg(CPUHexagonState *env, uint32_t reg);
diff --git a/target/hexagon/cpu_helper.c b/target/hexagon/cpu_helper.c
index 4732a698b4..fc49fe7883 100644
--- a/target/hexagon/cpu_helper.c
+++ b/target/hexagon/cpu_helper.c
@@ -73,6 +73,22 @@ void arch_set_system_reg(CPUHexagonState *env, uint32_t reg, uint32_t val)
}
}
+void arch_set_system_reg_masked(CPUHexagonState *env, uint32_t reg,
+ uint32_t val)
+{
+ g_assert(reg < NUM_SREGS);
+ if (reg < HEX_SREG_GLB_START) {
+ env->t_sreg[reg] = val;
+ } else {
+#ifndef CONFIG_USER_ONLY
+ HexagonCPU *cpu = env_archcpu(env);
+ if (cpu->globalregs) {
+ hexagon_globalreg_write_masked(cpu, reg, val);
+ }
+#endif
+ }
+}
+
uint64_t hexagon_get_sys_pcycle_count(CPUHexagonState *env)
{
g_assert_not_reached();
--
2.34.1