88 lines
3.4 KiB
Diff
88 lines
3.4 KiB
Diff
|
|
From b69c9f4b7b72c0634f2353135f83d8e59f3308dd Mon Sep 17 00:00:00 2001
|
||
|
|
From: gubin <gubin_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Tue, 17 Dec 2024 14:42:31 +0800
|
||
|
|
Subject: [PATCH] target/arm: Fix SVE/SME gross MTE suppression checks
|
||
|
|
|
||
|
|
cherry-pick from 855f94eca80c85a99f459e36684ea2f98f6a3243
|
||
|
|
|
||
|
|
The TBI and TCMA bits are located within mtedesc, not desc.
|
||
|
|
|
||
|
|
Cc: qemu-stable@nongnu.org
|
||
|
|
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
|
||
|
|
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
|
||
|
|
Tested-by: Gustavo Romero <gustavo.romero@linaro.org>
|
||
|
|
Message-id: 20240207025210.8837-7-richard.henderson@linaro.org
|
||
|
|
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
|
||
|
|
Signed-off-by: gubin <gubin_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
target/arm/tcg/sme_helper.c | 8 ++++----
|
||
|
|
target/arm/tcg/sve_helper.c | 12 ++++++------
|
||
|
|
2 files changed, 10 insertions(+), 10 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c
|
||
|
|
index 1ee2690ceb..904bfdac43 100644
|
||
|
|
--- a/target/arm/tcg/sme_helper.c
|
||
|
|
+++ b/target/arm/tcg/sme_helper.c
|
||
|
|
@@ -573,8 +573,8 @@ void sme_ld1_mte(CPUARMState *env, void *za, uint64_t *vg,
|
||
|
|
desc = extract32(desc, 0, SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT);
|
||
|
|
|
||
|
|
/* Perform gross MTE suppression early. */
|
||
|
|
- if (!tbi_check(desc, bit55) ||
|
||
|
|
- tcma_check(desc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
+ if (!tbi_check(mtedesc, bit55) ||
|
||
|
|
+ tcma_check(mtedesc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
mtedesc = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -750,8 +750,8 @@ void sme_st1_mte(CPUARMState *env, void *za, uint64_t *vg, target_ulong addr,
|
||
|
|
desc = extract32(desc, 0, SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT);
|
||
|
|
|
||
|
|
/* Perform gross MTE suppression early. */
|
||
|
|
- if (!tbi_check(desc, bit55) ||
|
||
|
|
- tcma_check(desc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
+ if (!tbi_check(mtedesc, bit55) ||
|
||
|
|
+ tcma_check(mtedesc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
mtedesc = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c
|
||
|
|
index ce8134320b..9694201550 100644
|
||
|
|
--- a/target/arm/tcg/sve_helper.c
|
||
|
|
+++ b/target/arm/tcg/sve_helper.c
|
||
|
|
@@ -5800,8 +5800,8 @@ void sve_ldN_r_mte(CPUARMState *env, uint64_t *vg, target_ulong addr,
|
||
|
|
desc = extract32(desc, 0, SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT);
|
||
|
|
|
||
|
|
/* Perform gross MTE suppression early. */
|
||
|
|
- if (!tbi_check(desc, bit55) ||
|
||
|
|
- tcma_check(desc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
+ if (!tbi_check(mtedesc, bit55) ||
|
||
|
|
+ tcma_check(mtedesc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
mtedesc = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -6156,8 +6156,8 @@ void sve_ldnfff1_r_mte(CPUARMState *env, void *vg, target_ulong addr,
|
||
|
|
desc = extract32(desc, 0, SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT);
|
||
|
|
|
||
|
|
/* Perform gross MTE suppression early. */
|
||
|
|
- if (!tbi_check(desc, bit55) ||
|
||
|
|
- tcma_check(desc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
+ if (!tbi_check(mtedesc, bit55) ||
|
||
|
|
+ tcma_check(mtedesc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
mtedesc = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -6406,8 +6406,8 @@ void sve_stN_r_mte(CPUARMState *env, uint64_t *vg, target_ulong addr,
|
||
|
|
desc = extract32(desc, 0, SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT);
|
||
|
|
|
||
|
|
/* Perform gross MTE suppression early. */
|
||
|
|
- if (!tbi_check(desc, bit55) ||
|
||
|
|
- tcma_check(desc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
+ if (!tbi_check(mtedesc, bit55) ||
|
||
|
|
+ tcma_check(mtedesc, bit55, allocation_tag_from_addr(addr))) {
|
||
|
|
mtedesc = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|