mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
target/loongarch: Add exception subcode
We need subcodes to distinguish the same excode cs->exception_indexs, such as EXCCODE_ADEF/EXCCODE_ADEM. Signed-off-by: Song Gao <gaosong@loongson.cn> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20221101073210.3934280-1-gaosong@loongson.cn>
This commit is contained in:
parent
3dfbb6dee5
commit
a6b129c810
2 changed files with 36 additions and 29 deletions
|
@ -220,7 +220,10 @@ static void loongarch_cpu_do_interrupt(CPUState *cs)
|
|||
env->CSR_TLBRERA = FIELD_DP64(env->CSR_TLBRERA, CSR_TLBRERA,
|
||||
PC, (env->pc >> 2));
|
||||
} else {
|
||||
env->CSR_ESTAT = FIELD_DP64(env->CSR_ESTAT, CSR_ESTAT, ECODE, cause);
|
||||
env->CSR_ESTAT = FIELD_DP64(env->CSR_ESTAT, CSR_ESTAT, ECODE,
|
||||
EXCODE_MCODE(cause));
|
||||
env->CSR_ESTAT = FIELD_DP64(env->CSR_ESTAT, CSR_ESTAT, ESUBCODE,
|
||||
EXCODE_SUBCODE(cause));
|
||||
env->CSR_PRMD = FIELD_DP64(env->CSR_PRMD, CSR_PRMD, PPLV,
|
||||
FIELD_EX64(env->CSR_CRMD, CSR_CRMD, PLV));
|
||||
env->CSR_PRMD = FIELD_DP64(env->CSR_PRMD, CSR_PRMD, PIE,
|
||||
|
@ -257,7 +260,7 @@ static void loongarch_cpu_do_interrupt(CPUState *cs)
|
|||
env->pc = env->CSR_TLBRENTRY;
|
||||
} else {
|
||||
env->pc = env->CSR_EENTRY;
|
||||
env->pc += cause * vec_size;
|
||||
env->pc += EXCODE_MCODE(cause) * vec_size;
|
||||
}
|
||||
qemu_log_mask(CPU_LOG_INT,
|
||||
"%s: PC " TARGET_FMT_lx " ERA " TARGET_FMT_lx
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue