The masked histogram instructions save the predicate operand to the qtmp temporary with a gvec move sized sizeof(MMVector). Both source and destination are MMQReg, which is eight times smaller, so the move read 112 bytes past the predicate register and wrote them over the fields following qtmp in CPUHexagonState, that is vstore[0]. Use the size of the registers actually being copied.
Signed-off-by: Brian Cain <[email protected]> --- target/hexagon/gen_tcg_hvx.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/hexagon/gen_tcg_hvx.h b/target/hexagon/gen_tcg_hvx.h index 2a342cdee69..d3f2cc7bc62 100644 --- a/target/hexagon/gen_tcg_hvx.h +++ b/target/hexagon/gen_tcg_hvx.h @@ -50,7 +50,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ assert_vhist_tmp(ctx); \ gen_helper_vhistq(tcg_env); \ @@ -66,7 +66,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ assert_vhist_tmp(ctx); \ gen_helper_vwhist256q(tcg_env); \ @@ -82,7 +82,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ assert_vhist_tmp(ctx); \ gen_helper_vwhist256q_sat(tcg_env); \ @@ -98,7 +98,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ assert_vhist_tmp(ctx); \ gen_helper_vwhist128q(tcg_env); \ @@ -115,7 +115,7 @@ static inline void assert_vhist_tmp(DisasContext *ctx) if (ctx->pre_commit) { \ intptr_t dstoff = offsetof(CPUHexagonState, qtmp); \ tcg_gen_gvec_mov(MO_64, dstoff, QvV_off, \ - sizeof(MMVector), sizeof(MMVector)); \ + sizeof(MMQReg), sizeof(MMQReg)); \ } else { \ TCGv tcgv_uiV = tcg_constant_tl(uiV); \ assert_vhist_tmp(ctx); \ -- 2.34.1
