@samitouri / QOSamiQemu / commits / 5995de98c4

hexagon: group cpu configurations in their own struct

This will be used in a follow up commit. Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com> Signed-off-by: Matheus Tavares Bernardino <matheus.bernardino@oss.qualcomm.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Brian Cain <brian.cain@oss.qualcomm.com> Link: https://lore.kernel.org/qemu-devel/8f9a2e2ccfd2eeda73a63d1a6abbfd6e5458b44c.1776339451.git.matheus.bernardino@oss.qualcomm.com Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>

Matheus Tavares Bernardino committed Apr 16, 2026 at 04:38 UTC 5995de98c4699b3246f1dffa86b90f677b6e7684
4 files changed +20 -17
target/hexagon/cpu.c
+7 -7
@@ -71,11 +71,11 @@ static const Property hexagon_cpu_properties[] = {
71 TYPE_HEXAGON_GLOBALREG, HexagonGlobalRegState *),
72 DEFINE_PROP_UINT32("htid", HexagonCPU, htid, 0),
73 #endif
74 - DEFINE_PROP_BOOL("lldb-compat", HexagonCPU, lldb_compat, false),
75 - DEFINE_PROP_UNSIGNED("lldb-stack-adjust", HexagonCPU, lldb_stack_adjust, 0,
76 - qdev_prop_uint32, target_ulong),
77 - DEFINE_PROP_BOOL("short-circuit", HexagonCPU, short_circuit, true),
78 - DEFINE_PROP_BOOL("ieee-fp", HexagonCPU, ieee_fp_extension, true),
74 + DEFINE_PROP_BOOL("lldb-compat", HexagonCPU, cfg.lldb_compat, false),
75 + DEFINE_PROP_UNSIGNED("lldb-stack-adjust", HexagonCPU, cfg.lldb_stack_adjust,
76 + 0, qdev_prop_uint32, target_ulong),
77 + DEFINE_PROP_BOOL("short-circuit", HexagonCPU, cfg.short_circuit, true),
78 + DEFINE_PROP_BOOL("ieee-fp", HexagonCPU, cfg.ieee_fp_extension, true),
79 };
80
81 const char * const hexagon_regnames[TOTAL_PER_THREAD_REGS] = {
@@ -127,7 +127,7 @@ const char * const hexagon_gregnames[] = {
127 static target_ulong adjust_stack_ptrs(CPUHexagonState *env, target_ulong addr)
128 {
129 HexagonCPU *cpu = env_archcpu(env);
130 - target_ulong stack_adjust = cpu->lldb_stack_adjust;
130 + target_ulong stack_adjust = cpu->cfg.lldb_stack_adjust;
131 target_ulong stack_start = env->stack_start;
132 target_ulong stack_size = 0x10000;
133
@@ -239,7 +239,7 @@ static void hexagon_dump(CPUHexagonState *env, FILE *f, int flags)
239 {
240 HexagonCPU *cpu = env_archcpu(env);
241
242 - if (cpu->lldb_compat) {
242 + if (cpu->cfg.lldb_compat) {
243 /*
244 * When comparing with LLDB, it doesn't step through single-cycle
245 * hardware loops the same way. So, we just skip them here
target/hexagon/cpu.h
+3 -7
@@ -186,15 +186,13 @@ typedef struct HexagonCPUClass {
186 const HexagonCPUDef *hex_def;
187 } HexagonCPUClass;
188
189 +#include "cpu_bits.h"
190 +
191 struct ArchCPU {
192 CPUState parent_obj;
193
194 CPUHexagonState env;
193 -
194 - bool lldb_compat;
195 - target_ulong lldb_stack_adjust;
196 - bool short_circuit;
197 - bool ieee_fp_extension;
195 + HexagonCPUConfig cfg;
196 #ifndef CONFIG_USER_ONLY
197 HexagonTLBState *tlb;
198 uint32_t boot_addr;
@@ -204,8 +202,6 @@ struct ArchCPU {
202 #endif
203 };
204
207 -#include "cpu_bits.h"
208 -
205 FIELD(TB_FLAGS, IS_TIGHT_LOOP, 0, 1)
206 FIELD(TB_FLAGS, MMU_INDEX, 1, 3)
207 FIELD(TB_FLAGS, PCYCLE_ENABLED, 4, 1)
target/hexagon/cpu_bits.h
+7
@@ -21,6 +21,13 @@
21 #include "qemu/bitops.h"
22 #include "cpu-qom.h"
23
24 +typedef struct HexagonCPUConfig {
25 + bool lldb_compat;
26 + uint32_t lldb_stack_adjust;
27 + bool short_circuit;
28 + bool ieee_fp_extension;
29 +} HexagonCPUConfig;
30 +
31 #define PCALIGN 4
32 #define PCALIGN_MASK (PCALIGN - 1)
33
target/hexagon/translate.c
+3 -3
@@ -1209,9 +1209,9 @@ static void hexagon_tr_init_disas_context(DisasContextBase *dcbase,
1209 ctx->num_hvx_insns = 0;
1210 ctx->branch_cond = TCG_COND_NEVER;
1211 ctx->is_tight_loop = FIELD_EX32(hex_flags, TB_FLAGS, IS_TIGHT_LOOP);
1212 - ctx->short_circuit = hex_cpu->short_circuit;
1212 + ctx->short_circuit = hex_cpu->cfg.short_circuit;
1213 ctx->hex_def = HEXAGON_CPU_GET_CLASS(hex_cpu)->hex_def;
1214 - ctx->ieee_fp_extension = hex_cpu->ieee_fp_extension;
1214 + ctx->ieee_fp_extension = hex_cpu->cfg.ieee_fp_extension;
1215 #ifndef CONFIG_USER_ONLY
1216 ctx->num_cycles = 0;
1217 ctx->pcycle_enabled = FIELD_EX32(hex_flags, TB_FLAGS, PCYCLE_ENABLED);
@@ -1268,7 +1268,7 @@ static void hexagon_tr_translate_packet(DisasContextBase *dcbase, CPUState *cpu)
1268 * so end the TLB after every packet.
1269 */
1270 HexagonCPU *hex_cpu = env_archcpu(env);
1271 - if (hex_cpu->lldb_compat && qemu_loglevel_mask(CPU_LOG_TB_CPU)) {
1271 + if (hex_cpu->cfg.lldb_compat && qemu_loglevel_mask(CPU_LOG_TB_CPU)) {
1272 ctx->base.is_jmp = DISAS_TOO_MANY;
1273 }
1274 }