@samitouri / QOSamiQemu / commits / 814fb7aac0

target/hexagon: Add cpu modes, mmu indices, next_PC to state

Add cpu execution mode (user/supervisor/guest), MMU index, and next_PC to DisasContext and translation state. Declare the MMU_INDEX bit field in TB_FLAGS and use it to propagate the mmu index into translations. Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>

Brian Cain committed Jun 22, 2026 at 15:28 UTC 814fb7aac0ed3f3dd3b660187398f7751608107a
3 files changed +23 -2
target/hexagon/cpu.c
+1
@@ -307,6 +307,7 @@ static void hexagon_cpu_reset_hold(Object *obj, ResetType type)
307 memset(env->t_sreg, 0, sizeof(uint32_t) * NUM_SREGS);
308 memset(env->greg, 0, sizeof(uint32_t) * NUM_GREGS);
309 env->wait_next_pc = 0;
310 + env->next_PC = 0;
311 #endif
312 env->cause_code = HEX_EVENT_NONE;
313 }
target/hexagon/cpu.h
+21 -1
@@ -49,8 +49,26 @@
49 #define VSTORES_MAX 2
50
51 #define CPU_RESOLVING_TYPE TYPE_HEXAGON_CPU
52 +#ifndef CONFIG_USER_ONLY
53 +#define CPU_INTERRUPT_SWI CPU_INTERRUPT_TGT_INT_0
54 +
55 +#define HEX_CPU_MODE_USER 1
56 +#define HEX_CPU_MODE_GUEST 2
57 +#define HEX_CPU_MODE_MONITOR 3
58 +
59 +#define HEX_EXE_MODE_OFF 1
60 +#define HEX_EXE_MODE_RUN 2
61 +#define HEX_EXE_MODE_WAIT 3
62 +#define HEX_EXE_MODE_DEBUG 4
63 +#endif
64 +
65 +#define MMU_USER_IDX 0
66 +#ifndef CONFIG_USER_ONLY
67 +#define MMU_GUEST_IDX 1
68 +#define MMU_KERNEL_IDX 2
69 +
70 +#endif
71
53 -#define MMU_USER_IDX 0
72
73 #define HEXAGON_CPU_IRQ_0 0
74 #define HEXAGON_CPU_IRQ_1 1
@@ -112,6 +130,7 @@ typedef struct CPUArchState {
130 uint32_t threadId;
131 uint64_t t_cycle_count;
132 #endif
133 + uint32_t next_PC;
134 target_ulong new_value_usr;
135
136 MemLog mem_log_stores[STORES_MAX];
@@ -164,6 +183,7 @@ struct ArchCPU {
183 #include "cpu_bits.h"
184
185 FIELD(TB_FLAGS, IS_TIGHT_LOOP, 0, 1)
186 +FIELD(TB_FLAGS, MMU_INDEX, 1, 3)
187 FIELD(TB_FLAGS, PCYCLE_ENABLED, 4, 1)
188
189 G_NORETURN void hexagon_raise_exception_err(CPUHexagonState *env,
target/hexagon/translate.c
+1 -1
@@ -988,7 +988,7 @@ static void hexagon_tr_init_disas_context(DisasContextBase *dcbase,
988 HexagonCPU *hex_cpu = env_archcpu(cpu_env(cs));
989 uint32_t hex_flags = dcbase->tb->flags;
990
991 - ctx->mem_idx = MMU_USER_IDX;
991 + ctx->mem_idx = FIELD_EX32(hex_flags, TB_FLAGS, MMU_INDEX);
992 ctx->num_packets = 0;
993 ctx->num_insns = 0;
994 ctx->num_hvx_insns = 0;