]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
target/arm: Fix SME vs AdvSIMD exception priority
authorRichard Henderson <richard.henderson@linaro.org>
Fri, 4 Jul 2025 14:19:24 +0000 (08:19 -0600)
committerMichael Tokarev <mjt@tls.msk.ru>
Wed, 9 Jul 2025 08:30:58 +0000 (11:30 +0300)
We failed to raise an exception when
sme_excp_el == 0 and fp_excp_el == 1.

Cc: qemu-stable@nongnu.org
Fixes: 3d74825f4d6 ("target/arm: Add SME enablement checks")
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20250704142112.1018902-2-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
(cherry picked from commit f9b0f69304071384b12912bf9dd78e9ffd261cec)
(Mjt: compensate for target/arm/translate-a64.c => target/arm/tcg/
 files move by v7.2.0-1632-gf0984d4040c3)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
target/arm/translate-a64.c

index 190574cb291dfe5300fb595a4cb4910d1417a9f7..74237ef6f949bcff8cf2bf7aeaa7bed444bb1a79 100644 (file)
@@ -1251,7 +1251,8 @@ bool sme_enabled_check(DisasContext *s)
      * to be zero when fp_excp_el has priority.  This is because we need
      * sme_excp_el by itself for cpregs access checks.
      */
-    if (!s->fp_excp_el || s->sme_excp_el < s->fp_excp_el) {
+    if (s->sme_excp_el
+        && (!s->fp_excp_el || s->sme_excp_el <= s->fp_excp_el)) {
         bool ret = sme_access_check(s);
         s->fp_access_checked = (ret ? 1 : -1);
         return ret;