An SME enabled program has the following extra state:
- Streaming mode or non-streaming mode.
- ZA enabled or disabled.
- The active vector length.
Covering the transition between all possible states and all other
possible states is not viable, therefore the testing added here is a cross
section of that, all of which found real bugs in LLDB and the Linux
Kernel during development.
Many of those transitions will not be possible via LLDB
(e.g. disabling ZA) and many more are possible but unlikely to be
used in normal use.
Added testing:
- TestSVEThreadedDynamic now checks for correct SVG values.
- New test TestZAThreadedDynamic creates 3 threads with different ZA sizes and states and switches between them verifying the register value (derived from the existing threaded SVE test).
- New test TestZARegisterSaveRestore starts in a given SME state, runs a set of expressions in various orders, then checks that the original state has been restored.
- TestArm64DynamicRegsets has ZA and SVG checks added, including writing to ZA to enable it.
Running these tests will as usual require QEMU as there is no
real SME hardware available at this time, and a very recent
kernel.
How can we differentiate between disabled ZA (read as all zeros) and enabled ZA actually set to all zeros?