From 26a3eaf95906b047170a6871371fb6201d90d81b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Thu, 14 May 2015 12:33:19 -0400 Subject: Software: Convert most volatile variables to atomics --- .../VideoBackends/Software/SWCommandProcessor.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'Source/Core/VideoBackends/Software/SWCommandProcessor.cpp') diff --git a/Source/Core/VideoBackends/Software/SWCommandProcessor.cpp b/Source/Core/VideoBackends/Software/SWCommandProcessor.cpp index 9c7ff303b7..39f772894e 100644 --- a/Source/Core/VideoBackends/Software/SWCommandProcessor.cpp +++ b/Source/Core/VideoBackends/Software/SWCommandProcessor.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 // Refer to the license.txt file included. +#include #include "Common/Atomic.h" #include "Common/ChunkFile.h" #include "Common/CommonTypes.h" @@ -41,8 +42,8 @@ static u8 commandBuffer[commandBufferSize]; static u32 readPos; static u32 writePos; static int et_UpdateInterrupts; -static volatile bool interruptSet; -static volatile bool interruptWaiting; +static std::atomic interruptSet; +static std::atomic interruptWaiting; static CPReg cpreg; // shared between gfx and emulator thread @@ -92,8 +93,8 @@ void Init() readPos = 0; writePos = 0; - interruptSet = false; - interruptWaiting = false; + interruptSet.store(false); + interruptWaiting.store(false); g_video_buffer_read_ptr = nullptr; g_bSkipCurrentFrame = false; @@ -195,17 +196,17 @@ void UpdateInterrupts(u64 userdata) { if (userdata) { - interruptSet = true; + interruptSet.store(true); INFO_LOG(COMMANDPROCESSOR,"Interrupt set"); ProcessorInterface::SetInterrupt(INT_CAUSE_CP, true); } else { - interruptSet = false; + interruptSet.store(false); INFO_LOG(COMMANDPROCESSOR,"Interrupt cleared"); ProcessorInterface::SetInterrupt(INT_CAUSE_CP, false); } - interruptWaiting = false; + interruptWaiting.store(false); } void UpdateInterruptsFromVideoBackend(u64 userdata) @@ -285,12 +286,12 @@ static void SetStatus() bool interrupt = bpInt || ovfInt || undfInt; - if (interrupt != interruptSet && !interruptWaiting) + if (interrupt != interruptSet.load() && !interruptWaiting.load()) { u64 userdata = interrupt?1:0; if (SConfig::GetInstance().m_LocalCoreStartupParameter.bCPUThread) { - interruptWaiting = true; + interruptWaiting.store(true); SWCommandProcessor::UpdateInterruptsFromVideoBackend(userdata); } else -- cgit v1.2.3