aboutsummaryrefslogtreecommitdiff
path: root/lldb/packages/Python/lldbsuite/test/lldbtest.py
diff options
context:
space:
mode:
authorDavid Spickett <david.spickett@linaro.org>2023-10-25 09:56:00 +0100
committerGitHub <noreply@github.com>2023-10-25 09:56:00 +0100
commite7012ba8d36f8a38ab58edccf7267f12266218ab (patch)
tree6c3bc6bbdef740f039c9629e80cae5e72591d00f /lldb/packages/Python/lldbsuite/test/lldbtest.py
parentd8abce1181cf089ef1161aad97072b1e53c1e941 (diff)
downloadllvm-e7012ba8d36f8a38ab58edccf7267f12266218ab.zip
llvm-e7012ba8d36f8a38ab58edccf7267f12266218ab.tar.gz
llvm-e7012ba8d36f8a38ab58edccf7267f12266218ab.tar.bz2
[lldb][AArch64] Add isAArch64SMEFA64 check to SME testing (#68094)
FEAT_SME_FA64 (smefa64 in Linux cpuinfo) allows the use of the full A64 instruction set while in streaming SVE mode. See https://developer.arm.com/documentation/ddi0616/latest/ for details. This means for example if we want to write to the ffr register during or use floating point registers while in streaming mode, we need this extension. I initially was using QEMU which has it by default, and switched to Arm's FVP which does not. So this change adds a more strict check and converts most of the tests to use that. It would be possible in some cases to avoid the offending instructions but it would be a lot of effort and liable to fail randomly as the C library changes. It is also my assumption that the majority of systems will have smefa64 as QEMU has chosen to have. If I turn out to be wrong, we can make the effort to get the tests working without smefa64. `isAArch64SME` remains for some tests, which are as follows: * `test_aarch64_dynamic_regset_config` merely checks for the presence of a register set, which appears for any SME system not just one with smefa64. * `test_aarch64_dynamic_regset_config_sme_za_disabled` only needs the ZA register and does not enter streaming mode. * `test_sme_not_present` tests for the absence of the SME register set, so must be skipped if any form of SME is present. * Various tests in `TestSVERegisters.py` need to know if SME is present at all to generate an expected SVCR value. Earlier in the callstack something else checked `isAArch64SMEFA64` already. * `TestAArch64LinuxTLSRegisters.py` needs to test the `tpidr2` register if any form of SME is present. msr/mrs instructions are used to do this and are allowed even if smefa64 is not present.
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/lldbtest.py')
-rw-r--r--lldb/packages/Python/lldbsuite/test/lldbtest.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py
index 6d736a5..af8d24e 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -1271,6 +1271,14 @@ class Base(unittest2.TestCase):
def isAArch64SME(self):
return self.isAArch64() and "sme" in self.getCPUInfo()
+ def isAArch64SMEFA64(self):
+ # smefa64 allows the use of the full A64 instruction set in streaming
+ # mode. This is required by certain test programs to setup register
+ # state.
+ return self.isAArch64SME() and set(["sme", "smefa64"]).issuperset(
+ set(self.getCPUInfo())
+ )
+
def isAArch64MTE(self):
return self.isAArch64() and "mte" in self.getCPUInfo()