From: Brian Cain <bc...@quicinc.com> Signed-off-by: Brian Cain <brian.c...@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