target/arm: Add ZT0

This is a 512-bit array introduced with SME2.
Save it only when ZA is in use.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20250704142112.1018902-16-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Richard Henderson
2025-07-04 15:52:21 +01:00
committed by Peter Maydell
parent d8ff459b40
commit 694b2625dd
2 changed files with 23 additions and 0 deletions
+3
View File
@@ -716,6 +716,9 @@ typedef struct CPUArchState {
uint64_t scxtnum_el[4];
struct {
/* SME2 ZT0 -- 512 bit array, with data ordered like ARMVectorReg. */
uint64_t zt0[512 / 64] QEMU_ALIGNED(16);
/*
* SME ZA storage -- 256 x 256 byte array, with bytes in host
* word order, as we do with vfp.zregs[]. This corresponds to
+20
View File
@@ -321,6 +321,25 @@ static const VMStateDescription vmstate_za = {
}
};
static bool zt0_needed(void *opaque)
{
ARMCPU *cpu = opaque;
return za_needed(cpu) && cpu_isar_feature(aa64_sme2, cpu);
}
static const VMStateDescription vmstate_zt0 = {
.name = "cpu/zt0",
.version_id = 1,
.minimum_version_id = 1,
.needed = zt0_needed,
.fields = (VMStateField[]) {
VMSTATE_UINT64_ARRAY(env.za_state.zt0, ARMCPU,
ARRAY_SIZE(((CPUARMState *)0)->za_state.zt0)),
VMSTATE_END_OF_LIST()
}
};
static bool serror_needed(void *opaque)
{
ARMCPU *cpu = opaque;
@@ -1096,6 +1115,7 @@ const VMStateDescription vmstate_arm_cpu = {
&vmstate_m_security,
&vmstate_sve,
&vmstate_za,
&vmstate_zt0,
&vmstate_serror,
&vmstate_irq_line_state,
&vmstate_wfxt_timer,