mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-08 22:15:28 +00:00
softfloat: fix floatx80 pseudo-denormal round to integer
The softfloat function floatx80_round_to_int incorrectly handles the case of a pseudo-denormal where only the high bit of the significand is set, ignoring that bit (treating the number as an exact zero) rather than treating the number as an alternative representation of +/- 2^-16382 (which may round to +/- 1 depending on the rounding mode) as hardware does. Fix this check (simplifying the code in the process). Backports commit 9ecaf5ccec13ff2e8fe1e72f6e0f3367d2169c1c from qemu
This commit is contained in:
parent
3d4a7e34e1
commit
c675454b27
|
@ -5703,7 +5703,7 @@ floatx80 floatx80_round_to_int(floatx80 a, float_status *status)
|
|||
}
|
||||
if ( aExp < 0x3FFF ) {
|
||||
if ( ( aExp == 0 )
|
||||
&& ( (uint64_t) ( extractFloatx80Frac( a )<<1 ) == 0 ) ) {
|
||||
&& ( (uint64_t) ( extractFloatx80Frac( a ) ) == 0 ) ) {
|
||||
return a;
|
||||
}
|
||||
status->float_exception_flags |= float_flag_inexact;
|
||||
|
|
Loading…
Reference in a new issue