Small fix

This commit is contained in:
Nekotekina 2015-02-19 14:18:28 +03:00
parent e84fc6426c
commit 2d1d996c50
5 changed files with 19 additions and 7 deletions

View file

@ -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: case 0x7f:
{ {
if (repe && !oso) // MOVDQU xmm/m, xmm if ((repe && !oso) || (!repe && oso)) // MOVDQU/MOVDQA xmm/m, xmm
{ {
out_op = X64OP_STORE; out_op = X64OP_STORE;
out_reg = get_modRM_reg_xmm(code, rex); out_reg = get_modRM_reg_xmm(code, rex);

View file

@ -189,7 +189,7 @@ u64 PPUThread::GetStackArg(s32 i)
return vm::read64(vm::cast(GPR[1] + 0x70 + 0x8 * (i - 9))); 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_status = m_status;
auto old_PC = PC; auto old_PC = PC;
@ -212,8 +212,6 @@ u64 PPUThread::FastCall2(u32 addr, u32 rtoc)
GPR[2] = old_rtoc; GPR[2] = old_rtoc;
LR = old_LR; LR = old_LR;
SetCurrentNamedThread(old_thread); SetCurrentNamedThread(old_thread);
return GPR[3];
} }
void PPUThread::FastStop() void PPUThread::FastStop()

View file

@ -793,13 +793,27 @@ public:
return false; 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: public:
virtual void InitRegs() override; virtual void InitRegs() override;
virtual void InitStack() override; virtual void InitStack() override;
virtual void CloseStack() override; virtual void CloseStack() override;
virtual void Task() override; virtual void Task() override;
u64 GetStackArg(s32 i); u64 GetStackArg(s32 i);
u64 FastCall2(u32 addr, u32 rtoc); void FastCall2(u32 addr, u32 rtoc);
void FastStop(); void FastStop();
virtual void DoRun() override; virtual void DoRun() override;

View file

@ -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 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__)

View file

@ -126,7 +126,7 @@ s32 sys_prx_get_module_id_by_address()
s32 sys_prx_get_module_id_by_name() s32 sys_prx_get_module_id_by_name()
{ {
sys_prx.Todo("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() s32 sys_prx_get_module_info()