From 0fa3bf6ca58b3edf0e1bddfc496cc715ce3e9d38 Mon Sep 17 00:00:00 2001 From: Cancerous Date: Mon, 27 Jan 2020 06:51:34 -0500 Subject: [PATCH] [CPU] - skip some operations that cost precious time in mutex lock/unlock that are called frequently for some gains when not debugging --- src/xenia/cpu/ppc/ppc_frontend.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/xenia/cpu/ppc/ppc_frontend.cc b/src/xenia/cpu/ppc/ppc_frontend.cc index 1696cadfa..0a41efb77 100644 --- a/src/xenia/cpu/ppc/ppc_frontend.cc +++ b/src/xenia/cpu/ppc/ppc_frontend.cc @@ -55,26 +55,32 @@ Memory* PPCFrontend::memory() const { return processor_->memory(); } // Checks the state of the global lock and sets scratch to the current MSR // value. void CheckGlobalLock(PPCContext* ppc_context, void* arg0, void* arg1) { - auto global_mutex = reinterpret_cast(arg0); auto global_lock_count = reinterpret_cast(arg1); - std::lock_guard lock(*global_mutex); +#ifdef _DEBUG + auto global_mutex = reinterpret_cast(arg0); + std::lock_guard lock(*global_mutex); +#endif ppc_context->scratch = *global_lock_count ? 0 : 0x8000; } // Enters the global lock. Safe to recursion. void EnterGlobalLock(PPCContext* ppc_context, void* arg0, void* arg1) { auto global_mutex = reinterpret_cast(arg0); +#ifdef _DEBUG auto global_lock_count = reinterpret_cast(arg1); - global_mutex->lock(); xe::atomic_inc(global_lock_count); +#endif + global_mutex->lock(); } // Leaves the global lock. Safe to recursion. void LeaveGlobalLock(PPCContext* ppc_context, void* arg0, void* arg1) { auto global_mutex = reinterpret_cast(arg0); +#ifdef _DEBUG auto global_lock_count = reinterpret_cast(arg1); auto new_lock_count = xe::atomic_dec(global_lock_count); assert_true(new_lock_count >= 0); +#endif global_mutex->unlock(); }