From 246b9f3182977db42ba9cc15abe4200dafe15914 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 5 Feb 2017 17:06:03 +0300 Subject: [PATCH] CHECK_EMU_STATUS removal --- rpcs3/Emu/CPU/CPUThread.cpp | 8 ++------ rpcs3/Emu/Cell/Modules/cellAdec.cpp | 4 +--- rpcs3/Emu/Cell/Modules/cellGame.cpp | 3 +-- rpcs3/Emu/Cell/Modules/cellMsgDialog.cpp | 3 +-- rpcs3/Emu/Cell/Modules/cellOskDialog.cpp | 3 +-- rpcs3/Emu/Cell/Modules/cellSpurs.cpp | 4 ---- rpcs3/Emu/Cell/Modules/cellSpursSpu.cpp | 8 +------- rpcs3/Emu/Cell/Modules/cellSync.cpp | 12 ++---------- rpcs3/Emu/Cell/Modules/cellSysutil.cpp | 2 +- rpcs3/Emu/Cell/Modules/libmixer.cpp | 4 +--- rpcs3/Emu/Cell/SPUThread.cpp | 4 +--- rpcs3/Emu/Cell/lv2/sys_process.cpp | 11 +---------- rpcs3/Emu/Cell/lv2/sys_spu.cpp | 4 ++-- rpcs3/Emu/PSP2/Modules/sceLibc.cpp | 9 +-------- rpcs3/Emu/RSX/RSXThread.cpp | 4 +--- rpcs3/Emu/System.h | 2 -- 16 files changed, 17 insertions(+), 68 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 53464ebf4a..9aea5464fa 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -46,9 +46,7 @@ void cpu_thread::on_task() // Check thread status while (!test(state & cpu_flag::exit)) { - CHECK_EMU_STATUS; - - // check stop status + // Check stop status if (!test(state & cpu_flag::stop)) { try @@ -92,14 +90,12 @@ bool cpu_thread::check_state() { while (true) { - CHECK_EMU_STATUS; // check at least once - if (test(state & cpu_flag::exit)) { return true; } - if (!test(state & cpu_state_pause)) + if (!test(state & (cpu_state_pause + cpu_flag::dbg_global_stop))) { break; } diff --git a/rpcs3/Emu/Cell/Modules/cellAdec.cpp b/rpcs3/Emu/Cell/Modules/cellAdec.cpp index 8b43d87dd3..ea1f0127ff 100644 --- a/rpcs3/Emu/Cell/Modules/cellAdec.cpp +++ b/rpcs3/Emu/Cell/Modules/cellAdec.cpp @@ -608,9 +608,7 @@ s32 cellAdecClose(u32 handle) while (!adec->is_finished) { - CHECK_EMU_STATUS; - - std::this_thread::sleep_for(1ms); // hack + thread_ctrl::wait_for(1000); // hack } idm::remove(handle); diff --git a/rpcs3/Emu/Cell/Modules/cellGame.cpp b/rpcs3/Emu/Cell/Modules/cellGame.cpp index d5bbe0e47c..d6abec4706 100644 --- a/rpcs3/Emu/Cell/Modules/cellGame.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGame.cpp @@ -738,8 +738,7 @@ error_code cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, vm::cptr msgString, vm::ptr dialogPara while (!result) { - CHECK_EMU_STATUS; - std::this_thread::sleep_for(1ms); + thread_ctrl::wait_for(1000); } return CELL_OSKDIALOG_OK; diff --git a/rpcs3/Emu/Cell/Modules/cellSpurs.cpp b/rpcs3/Emu/Cell/Modules/cellSpurs.cpp index 24b0a1c356..d3a006c08f 100644 --- a/rpcs3/Emu/Cell/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/Cell/Modules/cellSpurs.cpp @@ -489,8 +489,6 @@ void _spurs::handler_wait_ready(ppu_thread& ppu, vm::ptr spurs) while (true) { - CHECK_EMU_STATUS; - if (spurs->handlerExiting) { CHECK_SUCCESS(CALL_FUNC(ppu, sys_lwmutex_unlock, ppu, spurs.ptr(&CellSpurs::mutex))); @@ -569,8 +567,6 @@ void _spurs::handler_entry(ppu_thread& ppu, vm::ptr spurs) while (true) { - CHECK_EMU_STATUS; - if (spurs->flags1 & SF1_EXIT_IF_NO_WORK) { _spurs::handler_wait_ready(ppu, spurs); diff --git a/rpcs3/Emu/Cell/Modules/cellSpursSpu.cpp b/rpcs3/Emu/Cell/Modules/cellSpursSpu.cpp index 65e8fd1283..67dc36921f 100644 --- a/rpcs3/Emu/Cell/Modules/cellSpursSpu.cpp +++ b/rpcs3/Emu/Cell/Modules/cellSpursSpu.cpp @@ -686,11 +686,7 @@ bool spursKernelWorkloadExit(SPUThread& spu) // SPURS kernel entry point bool spursKernelEntry(SPUThread& spu) { - while (true) - { - std::this_thread::sleep_for(100ms); - CHECK_EMU_STATUS; - } + thread_ctrl::eternalize(); auto ctxt = vm::_ptr(spu.offset + 0x100); memset(ctxt, 0, sizeof(SpursKernelContext)); @@ -934,7 +930,6 @@ void spursSysServiceMain(SPUThread& spu, u32 pollStatus) while (true) { - CHECK_EMU_STATUS; // Process requests for the system service spursSysServiceProcessRequests(spu, ctxt); @@ -977,7 +972,6 @@ void spursSysServiceMain(SPUThread& spu, u32 pollStatus) cellSpursModulePutTrace(&pkt, ctxt->dmaTagId); spursSysServiceIdleHandler(spu, ctxt); - CHECK_EMU_STATUS; goto poll; } diff --git a/rpcs3/Emu/Cell/Modules/cellSync.cpp b/rpcs3/Emu/Cell/Modules/cellSync.cpp index ca68871b65..ccef4c17c1 100644 --- a/rpcs3/Emu/Cell/Modules/cellSync.cpp +++ b/rpcs3/Emu/Cell/Modules/cellSync.cpp @@ -848,8 +848,6 @@ error_code _cellSyncLFQueueGetPushPointer(ppu_thread& ppu, vm::ptrpush1.load(); _mm_lfence(); auto push = old; @@ -1091,8 +1089,6 @@ error_code _cellSyncLFQueuePushBody(ppu_thread& ppu, vm::ptr qu while (true) { - CHECK_EMU_STATUS; - s32 res; if (queue->m_direction != CELL_SYNC_QUEUE_ANY2ANY) @@ -1111,7 +1107,7 @@ error_code _cellSyncLFQueuePushBody(ppu_thread& ppu, vm::ptr qu break; } - std::this_thread::sleep_for(1ms); // hack + thread_ctrl::wait_for(1000); // hack } const s32 depth = queue->m_depth; @@ -1147,8 +1143,6 @@ error_code _cellSyncLFQueueGetPopPointer(ppu_thread& ppu, vm::ptrpop1.load(); _mm_lfence(); auto pop = old; @@ -1390,8 +1384,6 @@ error_code _cellSyncLFQueuePopBody(ppu_thread& ppu, vm::ptr que while (true) { - CHECK_EMU_STATUS; - s32 res; if (queue->m_direction != CELL_SYNC_QUEUE_ANY2ANY) @@ -1410,7 +1402,7 @@ error_code _cellSyncLFQueuePopBody(ppu_thread& ppu, vm::ptr que break; } - std::this_thread::sleep_for(1ms); // hack + thread_ctrl::wait_for(1000); // hack } const s32 depth = queue->m_depth; diff --git a/rpcs3/Emu/Cell/Modules/cellSysutil.cpp b/rpcs3/Emu/Cell/Modules/cellSysutil.cpp index 4fb94aa8c6..2ff341f082 100644 --- a/rpcs3/Emu/Cell/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/Cell/Modules/cellSysutil.cpp @@ -234,7 +234,7 @@ s32 cellSysutilCheckCallback(ppu_thread& ppu) return res; } - CHECK_EMU_STATUS; + thread_ctrl::test(); } return CELL_OK; diff --git a/rpcs3/Emu/Cell/Modules/libmixer.cpp b/rpcs3/Emu/Cell/Modules/libmixer.cpp index d27c082f61..196b7d9cfd 100644 --- a/rpcs3/Emu/Cell/Modules/libmixer.cpp +++ b/rpcs3/Emu/Cell/Modules/libmixer.cpp @@ -333,11 +333,9 @@ struct surmixer_thread : ppu_thread while (port.state != audio_port_state::closed) { - CHECK_EMU_STATUS; - if (g_surmx.mixcount > (port.tag + 0)) // adding positive value (1-15): preemptive buffer filling (hack) { - std::this_thread::sleep_for(1ms); // hack + thread_ctrl::wait_for(1000); // hack continue; } diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index a1c3b077cd..7d951bb479 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -20,8 +20,6 @@ #include #include -#include -#include extern u64 get_timebased_time(); @@ -1061,7 +1059,7 @@ bool SPUThread::stop_and_signal(u32 code) { case 0x001: { - std::this_thread::sleep_for(1ms); // hack + thread_ctrl::wait_for(1000); // hack return true; } diff --git a/rpcs3/Emu/Cell/lv2/sys_process.cpp b/rpcs3/Emu/Cell/lv2/sys_process.cpp index 20697d62f8..2f77aece99 100644 --- a/rpcs3/Emu/Cell/lv2/sys_process.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_process.cpp @@ -21,8 +21,6 @@ #include "sys_fs.h" #include "sys_process.h" -#include - namespace vm { using namespace ps3; } logs::channel sys_process("sys_process", logs::level::notice); @@ -51,20 +49,13 @@ s32 sys_process_exit(s32 status) { sys_process.warning("sys_process_exit(status=0x%x)", status); - CHECK_EMU_STATUS; - Emu.CallAfter([]() { sys_process.success("Process finished"); Emu.Stop(); }); - while (true) - { - CHECK_EMU_STATUS; - - std::this_thread::sleep_for(1ms); - } + thread_ctrl::eternalize(); return CELL_OK; } diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.cpp b/rpcs3/Emu/Cell/lv2/sys_spu.cpp index b8f2221532..ee2f020c55 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_spu.cpp @@ -524,9 +524,9 @@ error_code sys_spu_thread_group_join(u32 id, vm::ptr cause, vm::ptr st break; } - CHECK_EMU_STATUS; - + // TODO group->cv.wait(lock, 1000); + thread_ctrl::test(); } switch (group->join_state & ~SPU_TGJSF_IS_JOINING) diff --git a/rpcs3/Emu/PSP2/Modules/sceLibc.cpp b/rpcs3/Emu/PSP2/Modules/sceLibc.cpp index 14ea3596e0..8bfd007b38 100644 --- a/rpcs3/Emu/PSP2/Modules/sceLibc.cpp +++ b/rpcs3/Emu/PSP2/Modules/sceLibc.cpp @@ -177,8 +177,6 @@ namespace sce_libc_func { sceLibc.warning("exit()"); - CHECK_EMU_STATUS; - for (auto& func : decltype(g_atexit)(std::move(g_atexit))) { func(cpu); @@ -191,12 +189,7 @@ namespace sce_libc_func Emu.Stop(); }); - while (true) - { - CHECK_EMU_STATUS; - - std::this_thread::sleep_for(1ms); - } + thread_ctrl::eternalize(); } void printf(ARMv7Thread& cpu, vm::cptr fmt, arm_va_args_t va_args) diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 40b667291b..c967c6304d 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -388,10 +388,8 @@ namespace rsx }); // TODO: exit condition - while (true) + while (!Emu.IsStopped()) { - CHECK_EMU_STATUS; - const u32 get = ctrl->get; const u32 put = ctrl->put; diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 97b1b1d2bb..410925d3a5 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -138,5 +138,3 @@ public: }; extern Emulator Emu; - -#define CHECK_EMU_STATUS if (Emu.IsStopped()) throw EmulationStopped{}