From: Joseph Myers Date: Mon, 8 Jun 2020 16:55:49 +0000 (+0000) Subject: softfloat: fix floatx80 remainder pseudo-denormal check for zero X-Git-Tag: v5.1.0-rc0~46^2~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=499a2f7b554a295cfc10f8cd026d9b20a38fe664;p=thirdparty%2Fqemu.git softfloat: fix floatx80 remainder pseudo-denormal check for zero The floatx80 remainder implementation ignores the high bit of the significand when checking whether an operand (numerator) with zero exponent is zero. This means it mishandles a pseudo-denormal representation of 0x1p-16382L by treating it as zero. Fix this by checking the whole significand instead. Signed-off-by: Joseph Myers Reviewed-by: Richard Henderson Message-Id: Signed-off-by: Paolo Bonzini --- diff --git a/fpu/softfloat.c b/fpu/softfloat.c index b7dcf4d6c39..f164b5c0adb 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5741,7 +5741,7 @@ floatx80 floatx80_modrem(floatx80 a, floatx80 b, bool mod, normalizeFloatx80Subnormal( bSig, &bExp, &bSig ); } if ( aExp == 0 ) { - if ( (uint64_t) ( aSig0<<1 ) == 0 ) return a; + if ( aSig0 == 0 ) return a; normalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 ); } bSig |= UINT64_C(0x8000000000000000);