From dfbc49513dd17aae2665d6f4c92e6c346e945a51 Mon Sep 17 00:00:00 2001 From: Eladash Date: Mon, 6 Sep 2021 19:17:21 +0300 Subject: [PATCH] Debugger/Disasm: Name SPU Syscalls --- rpcs3/Emu/Cell/SPUDisAsm.h | 3 ++- rpcs3/Emu/Cell/lv2/sys_spu.cpp | 19 +++++++++++++++++++ rpcs3/Emu/Cell/lv2/sys_spu.h | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUDisAsm.h b/rpcs3/Emu/Cell/SPUDisAsm.h index 0f2fafe948..b2ff5bac3e 100644 --- a/rpcs3/Emu/Cell/SPUDisAsm.h +++ b/rpcs3/Emu/Cell/SPUDisAsm.h @@ -4,6 +4,7 @@ #include "SPUOpcodes.h" union v128; +enum spu_stop_syscall : u32; static constexpr const char* spu_reg_name[128] = { @@ -176,7 +177,7 @@ public: //0 - 10 void STOP(spu_opcode_t op) { - op.rb ? UNK(op) : DisAsm("stop", op.opcode & 0x3fff); + op.rb ? UNK(op) : DisAsm("stop", fmt::format("0x%x #%s", op.opcode & 0x3fff, spu_stop_syscall{op.opcode & 0x3fff}).c_str()); } void LNOP(spu_opcode_t /*op*/) { diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.cpp b/rpcs3/Emu/Cell/lv2/sys_spu.cpp index f258ce4221..58a1e59e7c 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_spu.cpp @@ -48,6 +48,25 @@ void fmt_class_string::format(std::string& out, u64 arg) }); } +template <> +void fmt_class_string::format(std::string& out, u64 arg) +{ + format_enum(out, arg, [](spu_stop_syscall value) + { + switch (value) + { + case SYS_SPU_THREAD_STOP_YIELD: return "sys_spu_thread_yield"; + case SYS_SPU_THREAD_STOP_GROUP_EXIT: return "sys_spu_thread_group_exit"; + case SYS_SPU_THREAD_STOP_THREAD_EXIT: return "sys_spu_thread_thread_exit"; + case SYS_SPU_THREAD_STOP_RECEIVE_EVENT: return "sys_spu_thread_receive_event"; + case SYS_SPU_THREAD_STOP_TRY_RECEIVE_EVENT: return "sys_spu_thread_tryreceive_event"; + case SYS_SPU_THREAD_STOP_SWITCH_SYSTEM_MODULE: return "sys_spu_thread_switch_system_module"; + } + + return unknown; + }); +} + void sys_spu_image::load(const fs::file& stream) { const spu_exec_object obj{stream, 0, elf_opt::no_sections + elf_opt::no_data}; diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.h b/rpcs3/Emu/Cell/lv2/sys_spu.h index a56db12d6c..ceae6a9b22 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.h +++ b/rpcs3/Emu/Cell/lv2/sys_spu.h @@ -72,7 +72,7 @@ enum : s32 SYS_SPU_SEGMENT_TYPE_INFO = 4, }; -enum : u32 +enum spu_stop_syscall : u32 { SYS_SPU_THREAD_STOP_YIELD = 0x0100, SYS_SPU_THREAD_STOP_GROUP_EXIT = 0x0101,