target/arm: Implement SME2 ZERO ZT0

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20250704142112.1018902-18-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 3aad4bc8be
commit 10f02d0ced
3 changed files with 28 additions and 0 deletions
+1
View File
@@ -80,6 +80,7 @@ typedef enum {
SME_ET_Streaming,
SME_ET_NotStreaming,
SME_ET_InactiveZA,
SME_ET_InaccessibleZT0,
} SMEExceptionType;
#define ARM_EL_EC_LENGTH 6
+1
View File
@@ -22,6 +22,7 @@
### SME Misc
ZERO 11000000 00 001 00000000000 imm:8
ZERO_zt0 11000000 01 001 00000000000 00000001
### SME Move into/from Array
+26
View File
@@ -27,6 +27,19 @@
#include "decode-sme.c.inc"
static bool sme2_zt0_enabled_check(DisasContext *s)
{
if (!sme_za_enabled_check(s)) {
return false;
}
if (s->zt0_excp_el) {
gen_exception_insn_el(s, 0, EXCP_UDEF,
syn_smetrap(SME_ET_InaccessibleZT0, false),
s->zt0_excp_el);
return false;
}
return true;
}
/*
* Resolve tile.size[index] to a host pointer, where tile and index
@@ -130,6 +143,19 @@ static bool trans_ZERO(DisasContext *s, arg_ZERO *a)
return true;
}
static bool trans_ZERO_zt0(DisasContext *s, arg_ZERO_zt0 *a)
{
if (!dc_isar_feature(aa64_sme2, s)) {
return false;
}
if (sme_enabled_check(s) && sme2_zt0_enabled_check(s)) {
tcg_gen_gvec_dup_imm(MO_64, offsetof(CPUARMState, za_state.zt0),
sizeof_field(CPUARMState, za_state.zt0),
sizeof_field(CPUARMState, za_state.zt0), 0);
}
return true;
}
static bool trans_MOVA(DisasContext *s, arg_MOVA *a)
{
static gen_helper_gvec_4 * const h_fns[5] = {