Message ID | 20241025141254.2141506-12-peter.maydell@linaro.org |
---|---|
State | New |
Headers | show |
Series | softfloat: Set 2-NaN propagation rule in float_status, not at compile time | expand |
On 25/10/24 11: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(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
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.
On 10/25/24 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> > --- Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
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) {
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(-)