Use sizeof_field(MMVector, ub) for vector-payload storage and sizeof(MMQReg) for predicate storage. This makes the intent clearer and binds to the field instead of a max-size constant.
In particular, these bounds exclude MMVector.ext, the QFloat extended-precision bits. Signed-off-by: Brian Cain <[email protected]> --- target/hexagon/cpu.h | 2 +- target/hexagon/mmvec/mmvec.h | 4 ++-- target/hexagon/cpu.c | 12 ++++++------ target/hexagon/gdbstub.c | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index df4c0182247..e25ac693764 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -103,7 +103,7 @@ typedef struct { typedef struct { target_ulong va; int size; - DECLARE_BITMAP(mask, MAX_VEC_SIZE_BYTES) QEMU_ALIGNED(16); + DECLARE_BITMAP(mask, sizeof_field(MMVector, ub)) QEMU_ALIGNED(16); MMVector data QEMU_ALIGNED(16); } VStoreLog; diff --git a/target/hexagon/mmvec/mmvec.h b/target/hexagon/mmvec/mmvec.h index 662f9d1597e..28f3224cffb 100644 --- a/target/hexagon/mmvec/mmvec.h +++ b/target/hexagon/mmvec/mmvec.h @@ -89,8 +89,8 @@ static inline uint8_t hexagon_mmqreg_get_byte(const MMQReg *q, size_t index) typedef struct { MMVector data; - DECLARE_BITMAP(mask, MAX_VEC_SIZE_BYTES); - target_ulong va[MAX_VEC_SIZE_BYTES]; + DECLARE_BITMAP(mask, sizeof_field(MMVector, ub)); + target_ulong va[sizeof_field(MMVector, ub)]; bool op; int op_size; } VTCMStoreLog; diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index 1f7d8a8df70..d8085db4756 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -191,7 +191,7 @@ static void print_vreg(FILE *f, CPUHexagonState *env, int regnum, { if (skip_if_zero) { bool nonzero_found = false; - for (int i = 0; i < MAX_VEC_SIZE_BYTES; i++) { + for (int i = 0; i < sizeof_field(MMVector, ub); i++) { if (hexagon_mmvec_get_byte(&hex_hvx(env)->VRegs[regnum], i) != 0) { nonzero_found = true; break; @@ -205,8 +205,8 @@ static void print_vreg(FILE *f, CPUHexagonState *env, int regnum, qemu_fprintf(f, " v%d = ( ", regnum); qemu_fprintf(f, "0x%02x", hexagon_mmvec_get_byte(&hex_hvx(env)->VRegs[regnum], - MAX_VEC_SIZE_BYTES - 1)); - for (int i = MAX_VEC_SIZE_BYTES - 2; i >= 0; i--) { + sizeof_field(MMVector, ub) - 1)); + for (int i = sizeof_field(MMVector, ub) - 2; i >= 0; i--) { qemu_fprintf(f, ", 0x%02x", hexagon_mmvec_get_byte(&hex_hvx(env)->VRegs[regnum], i)); } @@ -223,7 +223,7 @@ static void print_qreg(FILE *f, CPUHexagonState *env, int regnum, { if (skip_if_zero) { bool nonzero_found = false; - for (int i = 0; i < MAX_VEC_SIZE_BYTES / 8; i++) { + for (int i = 0; i < sizeof(MMQReg); i++) { if (hexagon_mmqreg_get_byte(&hex_hvx(env)->QRegs[regnum], i) != 0) { nonzero_found = true; break; @@ -237,8 +237,8 @@ static void print_qreg(FILE *f, CPUHexagonState *env, int regnum, qemu_fprintf(f, " q%d = ( ", regnum); qemu_fprintf(f, "0x%02x", hexagon_mmqreg_get_byte(&hex_hvx(env)->QRegs[regnum], - MAX_VEC_SIZE_BYTES / 8 - 1)); - for (int i = MAX_VEC_SIZE_BYTES / 8 - 2; i >= 0; i--) { + sizeof(MMQReg) - 1)); + for (int i = sizeof(MMQReg) - 2; i >= 0; i--) { qemu_fprintf(f, ", 0x%02x", hexagon_mmqreg_get_byte(&hex_hvx(env)->QRegs[regnum], i)); } diff --git a/target/hexagon/gdbstub.c b/target/hexagon/gdbstub.c index 76ab5235f6e..5fac62b5b09 100644 --- a/target/hexagon/gdbstub.c +++ b/target/hexagon/gdbstub.c @@ -120,7 +120,7 @@ static int gdb_put_vreg(CPUHexagonState *env, uint8_t *mem_buf, int n) hex_hvx(env)->VRegs[n].uw[i] = ldl_le_p(mem_buf); mem_buf += 4; } - return MAX_VEC_SIZE_BYTES; + return sizeof_field(MMVector, ub); } static int gdb_put_qreg(CPUHexagonState *env, uint8_t *mem_buf, int n) @@ -130,7 +130,7 @@ static int gdb_put_qreg(CPUHexagonState *env, uint8_t *mem_buf, int n) hex_hvx(env)->QRegs[n].uw[i] = ldl_le_p(mem_buf); mem_buf += 4; } - return MAX_VEC_SIZE_BYTES / 8; + return sizeof(MMQReg); } int hexagon_hvx_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) -- 2.34.1
