Mem and Regs not part of cpu anymore.
This commit is contained in:
@@ -3,7 +3,8 @@
|
||||
|
||||
namespace n64 {
|
||||
#ifndef __aarch64__
|
||||
JIT::JIT(ParallelRDP ¶llel) : regs(this), mem(this) {
|
||||
JIT::JIT(ParallelRDP& parallel, Mem& mem, Registers& regs) : mem(mem), regs(regs) {
|
||||
regs.SetJIT(this);
|
||||
blockCache.resize(kUpperSize);
|
||||
if (cs_open(CS_ARCH_MIPS, static_cast<cs_mode>(CS_MODE_MIPS64 | CS_MODE_BIG_ENDIAN), &disassemblerMips) !=
|
||||
CS_ERR_OK) {
|
||||
@@ -29,7 +30,7 @@ void JIT::CheckCompareInterrupt() {
|
||||
regs.cop0.count &= 0x1FFFFFFFF;
|
||||
if (regs.cop0.count == static_cast<u64>(regs.cop0.compare) << 1) {
|
||||
regs.cop0.cause.ip7 = 1;
|
||||
mem.mmio.mi.UpdateInterrupt();
|
||||
Core::GetMem().mmio.mi.UpdateInterrupt();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +59,42 @@ u32 JIT::FetchInstruction() {
|
||||
static_cast<int>(Cop0::GetTLBExceptionCode(regs.cop0.tlbError, Cop0::LOAD)), static_cast<u64>(blockPC));
|
||||
}
|
||||
|
||||
return mem.Read<u32>(paddr);
|
||||
return Core::GetMem().Read<u32>(paddr);
|
||||
}
|
||||
|
||||
void JIT::SetPC32(s32 val) {
|
||||
code.mov(code.SCR1, REG(qword, pc));
|
||||
code.mov(REG(qword, oldPC), code.SCR1);
|
||||
code.mov(code.SCR1, s64(val));
|
||||
code.mov(REG(qword, pc), code.SCR1);
|
||||
code.mov(code.SCR1, s64(val) + 4);
|
||||
code.mov(REG(qword, nextPC), code.SCR1);
|
||||
}
|
||||
|
||||
void JIT::SetPC64(s64 val) {
|
||||
code.mov(code.SCR1, REG(qword, pc));
|
||||
code.mov(REG(qword, oldPC), code.SCR1);
|
||||
code.mov(code.SCR1, val);
|
||||
code.mov(REG(qword, pc), code.SCR1);
|
||||
code.mov(code.SCR1, val + 4);
|
||||
code.mov(REG(qword, nextPC), code.SCR1);
|
||||
}
|
||||
|
||||
void JIT::SetPC32(const Xbyak::Reg32& val) {
|
||||
code.mov(code.SCR1, REG(qword, pc));
|
||||
code.mov(REG(qword, oldPC), code.SCR1);
|
||||
code.movsxd(val.cvt64(), val);
|
||||
code.mov(REG(qword, pc), val);
|
||||
code.add(val, 4);
|
||||
code.mov(REG(qword, nextPC), val);
|
||||
}
|
||||
|
||||
void JIT::SetPC64(const Xbyak::Reg64& val) {
|
||||
code.mov(code.SCR1, REG(qword, pc));
|
||||
code.mov(REG(qword, oldPC), code.SCR1);
|
||||
code.mov(REG(qword, pc), val);
|
||||
code.add(val, 4);
|
||||
code.mov(REG(qword, nextPC), val);
|
||||
}
|
||||
|
||||
int JIT::Step() {
|
||||
@@ -126,7 +162,7 @@ int JIT::Step() {
|
||||
static_cast<int>(Cop0::GetTLBExceptionCode(regs.cop0.tlbError, Cop0::LOAD)), static_cast<u64>(blockPC));
|
||||
}
|
||||
|
||||
instruction = mem.Read<u32>(paddr);
|
||||
instruction = Core::GetMem().Read<u32>(paddr);
|
||||
instructionsInBlock++;
|
||||
|
||||
blockOldPC = blockPC;
|
||||
|
||||
Reference in New Issue
Block a user