On Mon, May 25, 2026 at 11:26 AM Matt Turner <[email protected]> wrote:
>
> The SH4 FPSCR rounding-mode (RM) and denormal (DN) bits are not held
> only in env->fpscr: they are also reflected into the derived
> env->fp_status via set_float_rounding_mode()/set_flush_to_zero(). The
> guest keeps the two in sync by routing every write to FPSCR through
> helper_ld_fpscr().
>
> restore_sigcontext() wrote the saved value straight into env->fpscr and
> never touched env->fp_status, so on sigreturn the interrupted code
> resumed with whatever FP rounding mode and flush-to-zero setting the
> signal handler last installed. (regs->flags = 0 forces the FR/SZ/PR TB
> flags to be recomputed, but fp_status is runtime float state, not a TB
> flag, so it was left stale.) This is the FP analogue of the T/M/Q bit
> problem just fixed for the integer status register.
>
> Factor the FPSCR -> fp_status synchronisation out of helper_ld_fpscr()
> into cpu_load_fpscr() and use it from restore_sigcontext() so the
> rounding mode round-trips correctly across signal delivery.
>
> Fixes: c3b5bc8ab3 ("SH4: Signal handling for the user space emulator, by 
> Magnus Damm.")
> Cc: [email protected]
> ---

Signed-off-by: Matt Turner <[email protected]>

Reply via email to