diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index a47f656695..d379528d5e 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -270,7 +270,7 @@ void decode_x64_reg_op(const u8* code, x64_op_t& out_op, x64_reg_t& out_reg, siz { case 0x7f: { - if (repe && !oso) // MOVDQU xmm/m, xmm + if ((repe && !oso) || (!repe && oso)) // MOVDQU/MOVDQA xmm/m, xmm { out_op = X64OP_STORE; out_reg = get_modRM_reg_xmm(code, rex); diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 08d0f15815..01b3a94b9e 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -189,7 +189,7 @@ u64 PPUThread::GetStackArg(s32 i) return vm::read64(vm::cast(GPR[1] + 0x70 + 0x8 * (i - 9))); } -u64 PPUThread::FastCall2(u32 addr, u32 rtoc) +void PPUThread::FastCall2(u32 addr, u32 rtoc) { auto old_status = m_status; auto old_PC = PC; @@ -212,8 +212,6 @@ u64 PPUThread::FastCall2(u32 addr, u32 rtoc) GPR[2] = old_rtoc; LR = old_LR; SetCurrentNamedThread(old_thread); - - return GPR[3]; } void PPUThread::FastStop() diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 88f1cb392c..64c11c7563 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -793,13 +793,27 @@ public: return false; } + u64 get_next_gpr_arg(u32& g_count, u32& f_count, u32& v_count) + { + assert(!f_count && !v_count); // not supported + + if (g_count < 8) + { + return GPR[g_count++ + 3]; + } + else + { + return GetStackArg(++g_count); + } + } + public: virtual void InitRegs() override; virtual void InitStack() override; virtual void CloseStack() override; virtual void Task() override; u64 GetStackArg(s32 i); - u64 FastCall2(u32 addr, u32 rtoc); + void FastCall2(u32 addr, u32 rtoc); void FastStop(); virtual void DoRun() override; diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index a2f803a95c..856430a235 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -179,4 +179,4 @@ void fix_relocs(Module* module, u32 lib, u32 start, u32 end, u32 seg2); #define REG_FUNC(module, name) module.AddFunc(get_function_id(#name), name) -#define UNIMPLEMENTED_FUNC(module) module.Fatal("%s", __FUNCTION__) +#define UNIMPLEMENTED_FUNC(module) module.Error("%s", __FUNCTION__) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index cf3cc9f17e..70def9c4a3 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -126,7 +126,7 @@ s32 sys_prx_get_module_id_by_address() s32 sys_prx_get_module_id_by_name() { sys_prx.Todo("sys_prx_get_module_id_by_name()"); - return CELL_OK; + return CELL_PRX_ERROR_UNKNOWN_MODULE; } s32 sys_prx_get_module_info()