From 3ec458ef4f0d355a6c02825fcea1089f233b4079 Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Sat, 30 Jan 2016 16:30:18 +0100 Subject: [PATCH] FPU: sqrt(-0) == 0 It is marked as a special case in the doc (sqrt(-0) == -0) but test on the PS2 show the contrary. Quite a mistery --- pcsx2/FPU.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pcsx2/FPU.cpp b/pcsx2/FPU.cpp index 86e96910af..dc823fd532 100644 --- a/pcsx2/FPU.cpp +++ b/pcsx2/FPU.cpp @@ -345,12 +345,13 @@ void RSQRT_S() { } void SQRT_S() { - if ( ( _FtValUl_ & 0xFF800000 ) == 0x80000000 ) { _FdValUl_ = 0x80000000; } // If Ft = -0 + if ( ( _FtValUl_ & 0x7F800000 ) == 0 ) // If Ft = +/-0 + _FdValUl_ = 0;// result is 0 else if ( _FtValUl_ & 0x80000000 ) { // If Ft is Negative _ContVal_ |= FPUflagI | FPUflagSI; _FdValf_ = sqrt( fabs( fpuDouble( _FtValUl_ ) ) ); - } - else { _FdValf_ = sqrt( fpuDouble( _FtValUl_ ) ); } // If Ft is Positive + } else + _FdValf_ = sqrt( fpuDouble( _FtValUl_ ) ); // If Ft is Positive clearFPUFlags( FPUflagD ); }