Mem and Regs not part of cpu anymore.

This commit is contained in:
SimoZ64
2025-08-01 21:05:11 +02:00
parent 812b905bdf
commit 010bb5e0bb
35 changed files with 246 additions and 250 deletions

View File

@@ -3,7 +3,8 @@
namespace n64 {
#ifndef __aarch64__
JIT::JIT(ParallelRDP &parallel) : 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;