Store the true blocksize, not the encoding.

Signed-off-by: Richard Henderson <[email protected]>
---
 target/arm/tcg/translate.h     | 4 ++--
 target/arm/tcg/translate-a64.c | 5 ++---
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
index a3d03159ad..bab91eea22 100644
--- a/target/arm/tcg/translate.h
+++ b/target/arm/tcg/translate.h
@@ -197,14 +197,14 @@ typedef struct DisasContext {
      *  < 0, set by the current instruction.
      */
     int8_t btype;
-    /* A copy of DCZID_EL0.BS. */
-    uint8_t dcz_blocksize;
     /* A copy of cpu->gm_blocksize. */
     uint8_t gm_blocksize;
     /* True if the current insn_start has been updated. */
     bool insn_start_updated;
     /* FPMR access exception EL or 0 if enabled. */
     uint8_t fpmr_el;
+    /* An expansion of DCZID_EL0.BS. */
+    int dcz_blocksize;
     /* Offset from VNCR_EL2 when FEAT_NV2 redirects this reg to memory */
     uint32_t nv2_redirect_offset;
 } DisasContext;
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 1780490065..3d838a4cc1 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -4752,7 +4752,6 @@ static bool trans_LD_single_repl(DisasContext *s, 
arg_LD_single_repl *a)
 static bool trans_STZGM(DisasContext *s, arg_ldst_tag *a)
 {
     TCGv_i64 addr, clean_addr, tcg_rt;
-    int size = 4 << s->dcz_blocksize;
 
     if (!dc_isar_feature(aa64_mte, s)) {
         return false;
@@ -4777,7 +4776,7 @@ static bool trans_STZGM(DisasContext *s, arg_ldst_tag *a)
      * except the alignment happens before the access.
      */
     clean_addr = clean_data_tbi(s, addr);
-    tcg_gen_andi_i64(clean_addr, clean_addr, -size);
+    tcg_gen_andi_i64(clean_addr, clean_addr, -s->dcz_blocksize);
     gen_helper_dc_zva(tcg_env, clean_addr);
     return true;
 }
@@ -11055,7 +11054,7 @@ static void 
aarch64_tr_init_disas_context(DisasContextBase *dcbase,
     dc->vec_stride = 0;
     dc->cp_regs = arm_cpu->cp_regs;
     dc->features = env->features;
-    dc->dcz_blocksize = get_dczid_bs(arm_cpu);
+    dc->dcz_blocksize = 4 << get_dczid_bs(arm_cpu);
     dc->gm_blocksize = arm_cpu->gm_blocksize;
 
 #ifdef CONFIG_USER_ONLY
-- 
2.43.0


Reply via email to