target/nios2: Cleanup set of CR_EXCEPTION for do_interrupt
The register is entirely read-only for software, and we do not implement ECC, so we need not deposit the cause into an existing value; just create a new value from scratch. Furthermore, exception.CAUSE is not written for break exceptions. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220421151735.31996-36-richard.henderson@linaro.org>
This commit is contained in:
parent
af95a70a06
commit
34cccb7462
@ -54,9 +54,10 @@ static void do_exception(Nios2CPU *cpu, uint32_t exception_addr, bool is_break)
|
||||
new_status &= ~(CR_STATUS_PIE | CR_STATUS_U);
|
||||
|
||||
env->ctrl[CR_STATUS] = new_status;
|
||||
env->ctrl[CR_EXCEPTION] = FIELD_DP32(env->ctrl[CR_EXCEPTION],
|
||||
CR_EXCEPTION, CAUSE,
|
||||
cs->exception_index);
|
||||
if (!is_break) {
|
||||
env->ctrl[CR_EXCEPTION] = FIELD_DP32(0, CR_EXCEPTION, CAUSE,
|
||||
cs->exception_index);
|
||||
}
|
||||
env->pc = exception_addr;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user