diff options
| author | Markus Wick <markus+github@selfnet.de> | 2015-05-22 14:11:16 +0200 |
|---|---|---|
| committer | Markus Wick <markus+github@selfnet.de> | 2015-05-22 14:11:16 +0200 |
| commit | ad9dae30a850cb31576f01ab80441e79d630f345 (patch) | |
| tree | 5176a0947c4f456b9bc57e3ff1ba7fd5f3a1d107 /Source/Core/VideoBackends/Software/SWCommandProcessor.cpp | |
| parent | 474188d606c8f20301dfacb8985ffe19df8c3195 (diff) | |
| parent | 26a3eaf95906b047170a6871371fb6201d90d81b (diff) | |
Merge pull request #2410 from lioncash/swatomic
Software: Convert most volatile variables to atomics
Diffstat (limited to 'Source/Core/VideoBackends/Software/SWCommandProcessor.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWCommandProcessor.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
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 <atomic> #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<bool> interruptSet; +static std::atomic<bool> 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 |
