Archived
1
0
Fork 0
forked from Mirror/Ryujinx

ASoftFloat: Fix InvSqrtEstimate for negative values (#233)

This commit is contained in:
Merry 2018-07-08 16:41:46 +01:00 committed by gdkchan
parent 0bec547b9d
commit af1516a146

View file

@ -50,14 +50,8 @@ namespace ChocolArm64.Instruction
long x_exp = (long)((x_bits >> 52) & 0x7FF);
ulong scaled = x_bits & ((1ul << 52) - 1);
if (x_exp == 0x7ff)
if (x_exp == 0x7FF && scaled != 0)
{
if (scaled == 0)
{
// Infinity -> Zero
return BitConverter.Int64BitsToDouble((long)x_sign);
}
// NaN
return BitConverter.Int64BitsToDouble((long)(x_bits | 0x0008000000000000));
}
@ -79,6 +73,18 @@ namespace ChocolArm64.Instruction
scaled <<= 1;
}
if (x_sign != 0)
{
// Negative -> NaN
return BitConverter.Int64BitsToDouble((long)0x7ff8000000000000);
}
if (x_exp == 0x7ff && scaled == 0)
{
// Infinity -> Zero
return BitConverter.Int64BitsToDouble((long)x_sign);
}
if (((ulong)x_exp & 1) == 1)
{
scaled >>= 45;