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:
{
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);

View file

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

View file

@ -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;

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 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()
{
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()