On 10/13/26 05:14, Matt Turner wrote:
The trap qualifiers (/U, /V, /I) control whether an exception traps,
but EV6 still records every exception in the FPCR status bits.  Commit
471d493047 ("target-alpha: Set fpcr_exc_status even for disabled
exceptions") made helper_fp_exc_raise follow this, but in
helper_fp_exc_raise_s it only added a second "exc &= ~ignore" and left
the mask in the initializer, so for insns with software completion the
masked exceptions still never reached env->fpcr.

The most visible effect is on inexact: the IEEE-mode code generated by
gcc -mieee (e.g. ADDT/SU, DIVT/SUD) has no /I qualifier, so FE_INEXACT
was never set.  Many of glibc's math tests fail because of that, and
the narrowing functions such as f32addf64 return results 1ulp off
because their round-to-odd step depends on inexact.

Record all exceptions first and only then apply the ignore mask, as
helper_fp_exc_raise does.  Which exceptions trap is unchanged.

Fixes: 471d493047 ("target-alpha: Set fpcr_exc_status even for disabled 
exceptions")
Signed-off-by: Matt Turner<[email protected]>
---
  target/alpha/fpu_helper.c | 10 +++++++++-
  1 file changed, 9 insertions(+), 1 deletion(-)

Reviewed-by: Richard Henderson <[email protected]>

r~

Reply via email to