mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
linux-user/loongarch64: Use traps to track LSX/LASX usage
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20231101030816.2353416-2-gaosong@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn>
This commit is contained in:
parent
1d832c19db
commit
91ffd93be6
2 changed files with 13 additions and 11 deletions
|
@ -72,6 +72,19 @@ void cpu_loop(CPULoongArchState *env)
|
||||||
case EXCCODE_BCE:
|
case EXCCODE_BCE:
|
||||||
force_sig_fault(TARGET_SIGSYS, TARGET_SI_KERNEL, env->pc);
|
force_sig_fault(TARGET_SIGSYS, TARGET_SI_KERNEL, env->pc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Begin with LSX and LASX disabled, then enable on the first trap.
|
||||||
|
* In this way we can tell if the unit is in use. This is used to
|
||||||
|
* choose the layout of any signal frame.
|
||||||
|
*/
|
||||||
|
case EXCCODE_SXD:
|
||||||
|
env->CSR_EUEN |= R_CSR_EUEN_SXE_MASK;
|
||||||
|
break;
|
||||||
|
case EXCCODE_ASXD:
|
||||||
|
env->CSR_EUEN |= R_CSR_EUEN_ASXE_MASK;
|
||||||
|
break;
|
||||||
|
|
||||||
case EXCP_ATOMIC:
|
case EXCP_ATOMIC:
|
||||||
cpu_exec_step_atomic(cs);
|
cpu_exec_step_atomic(cs);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
* Copyright (c) 2022-2023 Loongson Technology Corporation Limited
|
* Copyright (c) 2022-2023 Loongson Technology Corporation Limited
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
|
||||||
|
|
||||||
static bool check_vec(DisasContext *ctx, uint32_t oprsz)
|
static bool check_vec(DisasContext *ctx, uint32_t oprsz)
|
||||||
{
|
{
|
||||||
if ((oprsz == 16) && ((ctx->base.tb->flags & HW_FLAGS_EUEN_SXE) == 0)) {
|
if ((oprsz == 16) && ((ctx->base.tb->flags & HW_FLAGS_EUEN_SXE) == 0)) {
|
||||||
|
@ -21,15 +19,6 @@ static bool check_vec(DisasContext *ctx, uint32_t oprsz)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static bool check_vec(DisasContext *ctx, uint32_t oprsz)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static bool gen_vvvv_ptr_vl(DisasContext *ctx, arg_vvvv *a, uint32_t oprsz,
|
static bool gen_vvvv_ptr_vl(DisasContext *ctx, arg_vvvv *a, uint32_t oprsz,
|
||||||
gen_helper_gvec_4_ptr *fn)
|
gen_helper_gvec_4_ptr *fn)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue