mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 01:38:37 +12:00
New reservations
Memory system cleanup sys_memory_get_page_attribute
This commit is contained in:
parent
7cdb5f3123
commit
5e3bacbd9b
26 changed files with 1536 additions and 1531 deletions
|
@ -408,7 +408,37 @@ void spu_recompiler::MFSPR(spu_opcode_t op)
|
|||
|
||||
void spu_recompiler::RDCH(spu_opcode_t op)
|
||||
{
|
||||
InterpreterCall(op); // TODO
|
||||
switch (op.ra)
|
||||
{
|
||||
case SPU_RdSRR0:
|
||||
{
|
||||
const XmmLink& vr = XmmAlloc();
|
||||
c->movd(vr, SPU_OFF_32(srr0));
|
||||
c->pslldq(vr, 12);
|
||||
c->movdqa(SPU_OFF_128(gpr[op.rt]), vr);
|
||||
return;
|
||||
}
|
||||
case MFC_RdTagMask:
|
||||
{
|
||||
const XmmLink& vr = XmmAlloc();
|
||||
c->movd(vr, SPU_OFF_32(ch_tag_mask));
|
||||
c->pslldq(vr, 12);
|
||||
c->movdqa(SPU_OFF_128(gpr[op.rt]), vr);
|
||||
return;
|
||||
}
|
||||
case SPU_RdEventMask:
|
||||
{
|
||||
const XmmLink& vr = XmmAlloc();
|
||||
c->movd(vr, SPU_OFF_32(ch_event_mask));
|
||||
c->pslldq(vr, 12);
|
||||
c->movdqa(SPU_OFF_128(gpr[op.rt]), vr);
|
||||
return;
|
||||
}
|
||||
default:
|
||||
{
|
||||
InterpreterCall(op); // TODO
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void spu_recompiler::RCHCNT(spu_opcode_t op)
|
||||
|
@ -831,7 +861,62 @@ void spu_recompiler::MTSPR(spu_opcode_t op)
|
|||
|
||||
void spu_recompiler::WRCH(spu_opcode_t op)
|
||||
{
|
||||
InterpreterCall(op); // TODO
|
||||
switch (op.ra)
|
||||
{
|
||||
case SPU_WrSRR0:
|
||||
{
|
||||
c->mov(*addr, SPU_OFF_32(gpr[op.rt]._u32[3]));
|
||||
c->mov(SPU_OFF_32(srr0), *addr);
|
||||
c->unuse(*addr);
|
||||
return;
|
||||
}
|
||||
case MFC_WrTagMask:
|
||||
{
|
||||
c->mov(*addr, SPU_OFF_32(gpr[op.rt]._u32[3]));
|
||||
c->mov(SPU_OFF_32(ch_tag_mask), *addr);
|
||||
c->unuse(*addr);
|
||||
return;
|
||||
}
|
||||
case MFC_LSA:
|
||||
{
|
||||
c->mov(*addr, SPU_OFF_32(gpr[op.rt]._u32[3]));
|
||||
c->mov(SPU_OFF_32(ch_mfc_cmd.lsa), *addr);
|
||||
c->unuse(*addr);
|
||||
return;
|
||||
}
|
||||
case MFC_EAH:
|
||||
{
|
||||
c->mov(*addr, SPU_OFF_32(gpr[op.rt]._u32[3]));
|
||||
c->mov(SPU_OFF_32(ch_mfc_cmd.eah), *addr);
|
||||
c->unuse(*addr);
|
||||
return;
|
||||
}
|
||||
case MFC_EAL:
|
||||
{
|
||||
c->mov(*addr, SPU_OFF_32(gpr[op.rt]._u32[3]));
|
||||
c->mov(SPU_OFF_32(ch_mfc_cmd.eal), *addr);
|
||||
c->unuse(*addr);
|
||||
return;
|
||||
}
|
||||
case MFC_Size:
|
||||
{
|
||||
c->mov(*addr, SPU_OFF_32(gpr[op.rt]._u32[3]));
|
||||
c->mov(SPU_OFF_16(ch_mfc_cmd.size), addr->r16());
|
||||
c->unuse(*addr);
|
||||
return;
|
||||
}
|
||||
case MFC_TagID:
|
||||
{
|
||||
c->mov(*addr, SPU_OFF_32(gpr[op.rt]._u32[3]));
|
||||
c->mov(SPU_OFF_8(ch_mfc_cmd.tag), addr->r8());
|
||||
c->unuse(*addr);
|
||||
return;
|
||||
}
|
||||
default:
|
||||
{
|
||||
InterpreterCall(op); // TODO
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void spu_recompiler::BIZ(spu_opcode_t op)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue