On Thu, 17 Mar 2022 at 05:51, Richard Henderson
<richard.hender...@linaro.org> wrote:
>
> 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.
>
> Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
> ---
>  target/nios2/helper.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/target/nios2/helper.c b/target/nios2/helper.c
> index 0392c0ea84..afbafd1fdc 100644
> --- a/target/nios2/helper.c
> +++ b/target/nios2/helper.c
> @@ -74,9 +74,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;
>  }

Reviewed-by: Peter Maydell <peter.mayd...@linaro.org>

thanks
-- PMM

Reply via email to