diff --git a/Core/MIPS/IR/IRRegCache.cpp b/Core/MIPS/IR/IRRegCache.cpp index dd4f49cdec..2c2b3a4818 100644 --- a/Core/MIPS/IR/IRRegCache.cpp +++ b/Core/MIPS/IR/IRRegCache.cpp @@ -1030,6 +1030,11 @@ IRNativeReg IRNativeRegCacheBase::MapNativeRegAsPointer(IRReg gpr) { return mr[gpr].nReg; } + // Cannot use if somehow multilane. + if (mr[gpr].nReg != -1 && mr[gpr].lane != -1) { + FlushNativeReg(mr[gpr].nReg); + } + IRNativeReg nreg = mr[gpr].nReg; if (mr[gpr].loc != MIPSLoc::REG && mr[gpr].loc != MIPSLoc::REG_IMM) { nreg = MapNativeReg(MIPSLoc::REG, gpr, 1, MIPSMap::INIT); @@ -1040,6 +1045,13 @@ IRNativeReg IRNativeRegCacheBase::MapNativeRegAsPointer(IRReg gpr) { mr[gpr].loc = MIPSLoc::REG; mr[gpr].imm = 0; +#ifdef MASKED_PSP_MEMORY + if (nr[mr[gpr].nReg].isDirty) { + StoreNativeReg(mr[gpr].nReg, gpr, 1); + nr[mr[gpr].nReg].isDirty = false; + } +#endif + if (!jo_->enablePointerify) { AdjustNativeRegAsPtr(nreg, true); mr[gpr].loc = MIPSLoc::REG_AS_PTR;