|
From: | Richard Henderson |
Subject: | Re: [PATCH v15 8/9] target/loongarch: Adjust functions and structure to support user-mode |
Date: | Mon, 13 Jun 2022 09:05:42 -0700 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 |
On 6/12/22 20:50, gaosong wrote:
Thank you for your advice. like this: void helper_asrtle_d(CPULoongArchState *env, target_ulong rj, target_ulong rk) { + CPUState *cs = env_cpu(env); + if (rj > rk) { - env->badaddr = env->pc; - do_raise_exception(env, EXCCODE_BCE, env->badaddr); + cpu_restore_state(cs, GETPC(), true); + cs->exception_index = EXCCODE_BCE; + cpu_loop_exit(cs); } }
This is not required -- better to continue using do_raise_exception.
cpu.c case EXCCODE_ADEM: + case EXCCODE_BCE: case EXCCODE_SYS: case EXCCODE_BRK: + case EXCCODE_INE: + case EXCCODE_IPE: + case EXCCODE_FPE: + env->badvaddr = env->pc; + QEMU_FALLTHROUGH; case EXCCODE_PIL: case EXCCODE_PIS: case EXCCODE_PME: case EXCCODE_PNR: case EXCCODE_PNX: case EXCCODE_PPI: - case EXCCODE_INE: - case EXCCODE_IPE: - case EXCCODE_FPE: cause = cs->exception_index; break;
But this looks correct, and sufficient to solve the problem. r~
[Prev in Thread] | Current Thread | [Next in Thread] |