All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 22/25] target/arm: Add SVL to TB flags
Date: Mon, 27 Jun 2022 11:22:33 +0100	[thread overview]
Message-ID: <20220627102236.3097629-23-peter.maydell@linaro.org> (raw)
In-Reply-To: <20220627102236.3097629-1-peter.maydell@linaro.org>

From: Richard Henderson <richard.henderson@linaro.org>

We need SVL separate from VL for RDSVL et al, as well as
ZA storage loads and stores, which do not require PSTATE.SM.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20220620175235.60881-20-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/arm/cpu.h           | 12 ++++++++++++
 target/arm/translate.h     |  1 +
 target/arm/helper.c        |  8 +++++++-
 target/arm/translate-a64.c |  1 +
 4 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 0295e854838..4a4342f2622 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -3182,6 +3182,7 @@ FIELD(TBFLAG_A64, MTE0_ACTIVE, 19, 1)
 FIELD(TBFLAG_A64, SMEEXC_EL, 20, 2)
 FIELD(TBFLAG_A64, PSTATE_SM, 22, 1)
 FIELD(TBFLAG_A64, PSTATE_ZA, 23, 1)
+FIELD(TBFLAG_A64, SVL, 24, 4)
 
 /*
  * Helpers for using the above.
@@ -3227,6 +3228,17 @@ static inline int sve_vq(CPUARMState *env)
     return EX_TBFLAG_A64(env->hflags, VL) + 1;
 }
 
+/**
+ * sme_vq
+ * @env: the cpu context
+ *
+ * Return the SVL cached within env->hflags, in units of quadwords.
+ */
+static inline int sme_vq(CPUARMState *env)
+{
+    return EX_TBFLAG_A64(env->hflags, SVL) + 1;
+}
+
 static inline bool bswap_code(bool sctlr_b)
 {
 #ifdef CONFIG_USER_ONLY
diff --git a/target/arm/translate.h b/target/arm/translate.h
index 93766649f7f..22fd882368b 100644
--- a/target/arm/translate.h
+++ b/target/arm/translate.h
@@ -44,6 +44,7 @@ typedef struct DisasContext {
     int sve_excp_el; /* SVE exception EL or 0 if enabled */
     int sme_excp_el; /* SME exception EL or 0 if enabled */
     int vl;          /* current vector length in bytes */
+    int svl;         /* current streaming vector length in bytes */
     bool vfp_enabled; /* FP enabled via FPSCR.EN */
     int vec_len;
     int vec_stride;
diff --git a/target/arm/helper.c b/target/arm/helper.c
index 2e4e739969a..d2886a123a6 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -11352,7 +11352,13 @@ static CPUARMTBFlags rebuild_hflags_a64(CPUARMState *env, int el, int fp_el,
         DP_TBFLAG_A64(flags, SVEEXC_EL, sve_el);
     }
     if (cpu_isar_feature(aa64_sme, env_archcpu(env))) {
-        DP_TBFLAG_A64(flags, SMEEXC_EL, sme_exception_el(env, el));
+        int sme_el = sme_exception_el(env, el);
+
+        DP_TBFLAG_A64(flags, SMEEXC_EL, sme_el);
+        if (sme_el == 0) {
+            /* Similarly, do not compute SVL if SME is disabled. */
+            DP_TBFLAG_A64(flags, SVL, sve_vqm1_for_el_sm(env, el, true));
+        }
         if (FIELD_EX64(env->svcr, SVCR, SM)) {
             DP_TBFLAG_A64(flags, PSTATE_SM, 1);
         }
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index c050ebe0053..c86b97b1d49 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -14647,6 +14647,7 @@ static void aarch64_tr_init_disas_context(DisasContextBase *dcbase,
     dc->sve_excp_el = EX_TBFLAG_A64(tb_flags, SVEEXC_EL);
     dc->sme_excp_el = EX_TBFLAG_A64(tb_flags, SMEEXC_EL);
     dc->vl = (EX_TBFLAG_A64(tb_flags, VL) + 1) * 16;
+    dc->svl = (EX_TBFLAG_A64(tb_flags, SVL) + 1) * 16;
     dc->pauth_active = EX_TBFLAG_A64(tb_flags, PAUTH_ACTIVE);
     dc->bt = EX_TBFLAG_A64(tb_flags, BT);
     dc->btype = EX_TBFLAG_A64(tb_flags, BTYPE);
-- 
2.25.1



  parent reply	other threads:[~2022-06-27 10:41 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-27 10:22 [PULL 00/25] target-arm queue Peter Maydell
2022-06-27 10:22 ` [PULL 01/25] sphinx: change default language to 'en' Peter Maydell
2022-06-27 10:22 ` [PULL 02/25] accel: Introduce current_accel_name() Peter Maydell
2022-06-27 10:22 ` [PULL 03/25] target/arm: Catch invalid kvm state also for hvf Peter Maydell
2022-06-27 10:22 ` [PULL 04/25] target/arm: Implement TPIDR2_EL0 Peter Maydell
2022-06-27 10:22 ` [PULL 05/25] target/arm: Add SMEEXC_EL to TB flags Peter Maydell
2022-06-27 10:22 ` [PULL 06/25] target/arm: Add syn_smetrap Peter Maydell
2022-06-27 10:22 ` [PULL 07/25] target/arm: Add ARM_CP_SME Peter Maydell
2022-06-27 10:22 ` [PULL 08/25] target/arm: Add SVCR Peter Maydell
2022-06-27 10:22 ` [PULL 09/25] target/arm: Add SMCR_ELx Peter Maydell
2022-06-27 10:22 ` [PULL 10/25] target/arm: Add SMIDR_EL1, SMPRI_EL1, SMPRIMAP_EL2 Peter Maydell
2022-06-27 10:22 ` [PULL 11/25] target/arm: Add PSTATE.{SM,ZA} to TB flags Peter Maydell
2022-06-27 10:22 ` [PULL 12/25] target/arm: Add the SME ZA storage to CPUARMState Peter Maydell
2022-06-27 10:22 ` [PULL 13/25] target/arm: Implement SMSTART, SMSTOP Peter Maydell
2022-06-27 10:22 ` [PULL 14/25] target/arm: Move error for sve%d property to arm_cpu_sve_finalize Peter Maydell
2022-06-27 10:22 ` [PULL 15/25] target/arm: Create ARMVQMap Peter Maydell
2022-06-27 10:22 ` [PULL 16/25] target/arm: Generalize cpu_arm_{get,set}_vq Peter Maydell
2022-06-27 10:22 ` [PULL 17/25] target/arm: Generalize cpu_arm_{get, set}_default_vec_len Peter Maydell
2022-06-27 10:22 ` [PULL 18/25] target/arm: Move arm_cpu_*_finalize to internals.h Peter Maydell
2022-06-27 10:22 ` [PULL 19/25] target/arm: Unexport aarch64_add_*_properties Peter Maydell
2022-06-27 10:22 ` [PULL 20/25] target/arm: Add cpu properties for SME Peter Maydell
2022-06-27 10:22 ` [PULL 21/25] target/arm: Introduce sve_vqm1_for_el_sm Peter Maydell
2022-06-27 10:22 ` Peter Maydell [this message]
2022-06-27 10:22 ` [PULL 23/25] target/arm: Move pred_{full, gvec}_reg_{offset, size} to translate-a64.h Peter Maydell
2022-06-27 10:22 ` [PULL 24/25] target/arm: Extend arm_pamax to more than aarch64 Peter Maydell
2022-06-27 10:22 ` [PULL 25/25] target/arm: Check V7VE as well as LPAE in arm_pamax Peter Maydell
2022-06-27 22:55 ` [PULL 00/25] target-arm queue Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220627102236.3097629-23-peter.maydell@linaro.org \
    --to=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.