summaryrefslogtreecommitdiffstats
path: root/src/core/core.cpp
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2015-01-07 16:10:58 +0100
committerSubv <subv2112@gmail.com>2015-01-08 02:31:31 +0100
commit60a373a7862a85b8b030ea1b18d01d364ddf8a8b (patch)
treee9e6288406b16f2a8dd10236c96567a895af3410 /src/core/core.cpp
parentMerge pull request #404 from bunnei/more-frame-synch-fixes (diff)
downloadyuzu-60a373a7862a85b8b030ea1b18d01d364ddf8a8b.tar
yuzu-60a373a7862a85b8b030ea1b18d01d364ddf8a8b.tar.gz
yuzu-60a373a7862a85b8b030ea1b18d01d364ddf8a8b.tar.bz2
yuzu-60a373a7862a85b8b030ea1b18d01d364ddf8a8b.tar.lz
yuzu-60a373a7862a85b8b030ea1b18d01d364ddf8a8b.tar.xz
yuzu-60a373a7862a85b8b030ea1b18d01d364ddf8a8b.tar.zst
yuzu-60a373a7862a85b8b030ea1b18d01d364ddf8a8b.zip
Diffstat (limited to '')
-rw-r--r--src/core/core.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 8ac4481cc..98f8a7dff 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -5,6 +5,7 @@
#include "common/common_types.h"
#include "core/core.h"
+#include "core/core_timing.h"
#include "core/settings.h"
#include "core/arm/disassembler/arm_disasm.h"
@@ -23,7 +24,17 @@ ARM_Interface* g_sys_core = nullptr; ///< ARM11 system (OS) core
/// Run the core CPU loop
void RunLoop(int tight_loop) {
- g_app_core->Run(tight_loop);
+ // If the current thread is an idle thread, then don't execute instructions,
+ // instead advance to the next event and try to yield to the next thread
+ if (Kernel::IsIdleThread(Kernel::GetCurrentThreadHandle())) {
+ LOG_TRACE(Core_ARM11, "Idling");
+ CoreTiming::Idle();
+ CoreTiming::Advance();
+ HLE::Reschedule(__func__);
+ } else {
+ g_app_core->Run(tight_loop);
+ }
+
HW::Update();
if (HLE::g_reschedule) {
Kernel::Reschedule();