Message ID | 20220628042117.368549-35-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/arm: Scalable Matrix Extension | expand |
On Tue, 28 Jun 2022 at 06:26, Richard Henderson <richard.henderson@linaro.org> wrote: > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > linux-user/aarch64/cpu_loop.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c > index 3b273f6299..4af6996d57 100644 > --- a/linux-user/aarch64/cpu_loop.c > +++ b/linux-user/aarch64/cpu_loop.c > @@ -89,6 +89,15 @@ void cpu_loop(CPUARMState *env) > > switch (trapnr) { > case EXCP_SWI: > + /* > + * On syscall, PSTATE.ZA is preserved, along with the ZA matrix. > + * PSTATE.SM is cleared, per SMSTOP, which does ResetSVEState. > + */ > + if (FIELD_EX64(env->svcr, SVCR, SM)) { > + env->svcr = FIELD_DP64(env->svcr, SVCR, SM, 0); > + arm_rebuild_hflags(env); > + arm_reset_sve_state(env); > + } > ret = do_syscall(env, > env->xregs[8], > env->xregs[0], > -- Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index 3b273f6299..4af6996d57 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -89,6 +89,15 @@ void cpu_loop(CPUARMState *env) switch (trapnr) { case EXCP_SWI: + /* + * On syscall, PSTATE.ZA is preserved, along with the ZA matrix. + * PSTATE.SM is cleared, per SMSTOP, which does ResetSVEState. + */ + if (FIELD_EX64(env->svcr, SVCR, SM)) { + env->svcr = FIELD_DP64(env->svcr, SVCR, SM, 0); + arm_rebuild_hflags(env); + arm_reset_sve_state(env); + } ret = do_syscall(env, env->xregs[8], env->xregs[0],
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- linux-user/aarch64/cpu_loop.c | 9 +++++++++ 1 file changed, 9 insertions(+)