diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index a8355bc296..9c020cb219 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -10,6 +10,8 @@ #include "Emu/Cell/SPUDisAsm.h" #include "Emu/Cell/SPURecompiler.h" +#include + SPUThread& GetCurrentSPUThread() { PPCThread* thread = GetCurrentPPCThread(); @@ -35,6 +37,19 @@ SPUThread::~SPUThread() { } +void SPUThread::Task() +{ + const int round = std::fegetround(); + std::fesetround(FE_TOWARDZERO); + + CPUThread::Task(); + if (std::fegetround() != FE_TOWARDZERO) + { + LOG_ERROR(Log::SPU, "Rounding mode has changed(%d)", std::fegetround()); + } + std::fesetround(round); +} + void SPUThread::DoReset() { PPCThread::DoReset(); diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index a56751bbe8..5f38235859 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -1444,6 +1444,7 @@ public: public: virtual void InitRegs(); virtual u64 GetFreeStackSize() const; + virtual void Task(); protected: virtual void DoReset();