summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-05-24 14:37:05 -0400
committerLioncash <mathew1800@gmail.com>2018-05-24 14:37:09 -0400
commit155bcb1649e35ec277babe5c864f2fe8f706ba2c (patch)
treeda53be4d1c8a63ba23076e1c897c882567cd9813 /Source/Core
parent31504f85a7998db647d03241289300c8206c9081 (diff)
Interpreter_FloatingPoint: Set FPSCR.VXSNAN if the input to frsqrte is a signaling NaN
If the input is a signaling NaN, then we need to signal that via setting the FPSCR.VXSNAN bit. We also shouldn't update the FPRF flags if FPSCR.VE is set.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp
index f6d63087d7..e88d97b3cf 100644
--- a/Source/Core/Core/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp
+++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter_FloatingPoint.cpp
@@ -427,6 +427,13 @@ void Interpreter::frsqrtex(UGeckoInstruction inst)
if (FPSCR.ZE == 0)
PowerPC::UpdateFPRF(result);
}
+ else if (Common::IsSNAN(b))
+ {
+ SetFPException(FPSCR_VXSNAN);
+
+ if (FPSCR.VE == 0)
+ PowerPC::UpdateFPRF(result);
+ }
else
{
PowerPC::UpdateFPRF(result);