On Sun, Dec 21, 2025 at 8:19 AM Anton Johansson <[email protected]> wrote:
> MemLog::width is a uint8_t value mapped to a TCGv (32 bit), the only > reason this currently works is because MemLog::width is padded to 32 > bits. Widen the field to uint32_t and fix the size of the TCGv > operations as well. Use uint8_t when passing around the > field as an immediate to retain previous truncation behaviour. > > Signed-off-by: Anton Johansson <[email protected]> > --- > Reviewed-by: Brian Cain <[email protected]> target/hexagon/cpu.h | 2 +- > target/hexagon/op_helper.h | 4 ++-- > target/hexagon/translate.h | 2 +- > target/hexagon/genptr.c | 6 +++--- > target/hexagon/op_helper.c | 4 ++-- > target/hexagon/translate.c | 4 ++-- > 6 files changed, 11 insertions(+), 11 deletions(-) > > diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h > index 43a854f517..9d3df84ee6 100644 > --- a/target/hexagon/cpu.h > +++ b/target/hexagon/cpu.h > @@ -46,7 +46,7 @@ > > typedef struct { > target_ulong va; > - uint8_t width; > + uint32_t width; > uint32_t data32; > uint64_t data64; > } MemLog; > diff --git a/target/hexagon/op_helper.h b/target/hexagon/op_helper.h > index 66119cf3d4..ff65a94d57 100644 > --- a/target/hexagon/op_helper.h > +++ b/target/hexagon/op_helper.h > @@ -20,8 +20,8 @@ > > /* Misc functions */ > void log_store64(CPUHexagonState *env, target_ulong addr, > - int64_t val, int width, int slot); > + int64_t val, uint8_t width, int slot); > void log_store32(CPUHexagonState *env, target_ulong addr, > - target_ulong val, int width, int slot); > + target_ulong val, uint8_t width, int slot); > > #endif > diff --git a/target/hexagon/translate.h b/target/hexagon/translate.h > index d251e2233f..9e8f54edb5 100644 > --- a/target/hexagon/translate.h > +++ b/target/hexagon/translate.h > @@ -271,7 +271,7 @@ extern TCGv hex_pred[NUM_PREGS]; > extern TCGv hex_slot_cancelled; > extern TCGv hex_new_value_usr; > extern TCGv hex_store_addr[STORES_MAX]; > -extern TCGv hex_store_width[STORES_MAX]; > +extern TCGv_i32 hex_store_width[STORES_MAX]; > extern TCGv hex_store_val32[STORES_MAX]; > extern TCGv_i64 hex_store_val64[STORES_MAX]; > extern TCGv hex_llsc_addr; > diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c > index cecaece4ae..9c66ca181a 100644 > --- a/target/hexagon/genptr.c > +++ b/target/hexagon/genptr.c > @@ -401,10 +401,10 @@ static TCGv gen_slotval(DisasContext *ctx) > } > #endif > > -void gen_store32(TCGv vaddr, TCGv src, int width, uint32_t slot) > +void gen_store32(TCGv vaddr, TCGv src, uint8_t width, uint32_t slot) > { > tcg_gen_mov_tl(hex_store_addr[slot], vaddr); > - tcg_gen_movi_tl(hex_store_width[slot], width); > + tcg_gen_movi_i32(hex_store_width[slot], width); > tcg_gen_mov_tl(hex_store_val32[slot], src); > } > > @@ -444,7 +444,7 @@ void gen_store4i(TCGv_env tcg_env, TCGv vaddr, int32_t > src, uint32_t slot) > void gen_store8(TCGv_env tcg_env, TCGv vaddr, TCGv_i64 src, uint32_t slot) > { > tcg_gen_mov_tl(hex_store_addr[slot], vaddr); > - tcg_gen_movi_tl(hex_store_width[slot], 8); > + tcg_gen_movi_i32(hex_store_width[slot], 8); > tcg_gen_mov_i64(hex_store_val64[slot], src); > } > > diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c > index e2e80ca7ef..823307696d 100644 > --- a/target/hexagon/op_helper.c > +++ b/target/hexagon/op_helper.c > @@ -52,7 +52,7 @@ G_NORETURN void HELPER(raise_exception)(CPUHexagonState > *env, uint32_t excp) > } > > void log_store32(CPUHexagonState *env, target_ulong addr, > - target_ulong val, int width, int slot) > + target_ulong val, uint8_t width, int slot) > { > env->mem_log_stores[slot].va = addr; > env->mem_log_stores[slot].width = width; > @@ -60,7 +60,7 @@ void log_store32(CPUHexagonState *env, target_ulong addr, > } > > void log_store64(CPUHexagonState *env, target_ulong addr, > - int64_t val, int width, int slot) > + int64_t val, uint8_t width, int slot) > { > env->mem_log_stores[slot].va = addr; > env->mem_log_stores[slot].width = width; > diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c > index 8fce219c0d..6151bdd4a6 100644 > --- a/target/hexagon/translate.c > +++ b/target/hexagon/translate.c > @@ -51,7 +51,7 @@ TCGv hex_pred[NUM_PREGS]; > TCGv hex_slot_cancelled; > TCGv hex_new_value_usr; > TCGv hex_store_addr[STORES_MAX]; > -TCGv hex_store_width[STORES_MAX]; > +TCGv_i32 hex_store_width[STORES_MAX]; > TCGv hex_store_val32[STORES_MAX]; > TCGv_i64 hex_store_val64[STORES_MAX]; > TCGv hex_llsc_addr; > @@ -1079,7 +1079,7 @@ void hexagon_translate_init(void) > store_addr_names[i]); > > snprintf(store_width_names[i], NAME_LEN, "store_width_%d", i); > - hex_store_width[i] = tcg_global_mem_new(tcg_env, > + hex_store_width[i] = tcg_global_mem_new_i32(tcg_env, > offsetof(CPUHexagonState, mem_log_stores[i].width), > store_width_names[i]); > > -- > 2.51.0 > >
