mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
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:
committed by
Peter Maydell
parent
3aad4bc8be
commit
10f02d0ced
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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] = {
|
||||
|
||||
Reference in New Issue
Block a user