On 25/10/2024 15:12, Peter Maydell wrote:
> Currently we call cpu_put_fsr(0) in sparc_cpu_realizefn(), which
> initializes various fields in the CPU struct:
> * fsr_cexc_ftt
> * fcc[]
> * fsr_qne
> * fsr
> It also sets the rounding mode in env->fp_status.
>
> This is largely pointless, because when we later reset the CPU
> this will zero out all the fields up until the "end_reset_fields"
> label, which includes all of these (but not fp_status!)
>
> Move the cpu_put_fsr(env, 0) call to reset, because that expresses
> the logical requirement: we want to reset FSR to 0 on every reset.
> This isn't a behaviour change because the fields are all zero anyway.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> target/sparc/cpu.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 54cb269e0af..e7f4068a162 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -76,6 +76,7 @@ static void sparc_cpu_reset_hold(Object *obj, ResetType type)
> env->npc = env->pc + 4;
> #endif
> env->cache_control = 0;
> + cpu_put_fsr(env, 0);
> }
>
> #ifndef CONFIG_USER_ONLY
> @@ -805,7 +806,6 @@ static void sparc_cpu_realizefn(DeviceState *dev, Error **errp)
> env->version |= env->def.maxtl << 8;
> env->version |= env->def.nwindows - 1;
> #endif
> - cpu_put_fsr(env, 0);
>
> cpu_exec_realizefn(cs, &local_err);
> if (local_err != NULL) {
Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
ATB,
Mark.