Core: reoder MoveConstToX86reg parameters

This commit is contained in:
zilmar 2022-10-24 15:05:31 +10:30
parent dd61a4351d
commit 538933e0a5
4 changed files with 81 additions and 81 deletions

View File

@ -210,7 +210,7 @@ void CX86RecompilerOps::PreCompileOpcode(void)
m_Assembler.MoveConstToVariable(m_CompilePC, &g_Reg->m_PROGRAM_COUNTER, "PROGRAM_COUNTER");
if (g_SyncSystem) {
#ifdef _WIN32
m_Assembler.MoveConstToX86reg((uint32_t)g_BaseSystem, CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (uint32_t)g_BaseSystem);
m_Assembler.CallFunc(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
#else
m_Assembler.PushImm32((uint32_t)g_BaseSystem);
@ -230,7 +230,7 @@ void CX86RecompilerOps::PreCompileOpcode(void)
if (g_SyncSystem)
{
#ifdef _WIN32
m_Assembler.MoveConstToX86reg((uint32_t)g_BaseSystem, CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (uint32_t)g_BaseSystem);
m_Assembler.CallFunc(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
#else
m_Assembler.PushImm32((uint32_t)g_BaseSystem);
@ -259,7 +259,7 @@ void CX86RecompilerOps::PreCompileOpcode(void)
m_Assembler.MoveConstToVariable(m_CompilePC,&g_Reg->m_PROGRAM_COUNTER,"PROGRAM_COUNTER");
if (g_SyncSystem) {
#ifdef _WIN32
m_Assembler.MoveConstToX86reg((uint32_t)g_BaseSystem, CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (uint32_t)g_BaseSystem);
m_Assembler.CallFunc(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
#else
m_Assembler.PushImm32((uint32_t)g_BaseSystem);
@ -280,7 +280,7 @@ void CX86RecompilerOps::PreCompileOpcode(void)
m_Assembler.MoveConstToVariable(m_CompilePC,&g_Reg->m_PROGRAM_COUNTER,"PROGRAM_COUNTER");
if (g_SyncSystem) {
#ifdef _WIN32
m_Assembler.MoveConstToX86reg((uint32_t)g_BaseSystem, CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (uint32_t)g_BaseSystem);
m_Assembler.CallFunc(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
#else
m_Assembler.PushImm32((uint32_t)g_BaseSystem);
@ -296,7 +296,7 @@ void CX86RecompilerOps::PreCompileOpcode(void)
m_Assembler.MoveConstToVariable(m_CompilePC,&g_Reg->m_PROGRAM_COUNTER,"PROGRAM_COUNTER");
if (g_SyncSystem) {
#ifdef _WIN32
m_Assembler.MoveConstToX86reg((uint32_t)g_BaseSystem, CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (uint32_t)g_BaseSystem);
m_Assembler.CallFunc(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
#else
m_Assembler.PushImm32((uint32_t)g_BaseSystem);
@ -341,7 +341,7 @@ void CX86RecompilerOps::PostCompileOpcode(void)
if (g_SyncSystem)
{
m_RegWorkingSet.BeforeCallDirect();
m_Assembler.MoveConstToX86reg((uint32_t)g_BaseSystem, CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (uint32_t)g_BaseSystem);
m_Assembler.CallFunc(AddressOf(&CN64System::SyncSystemPC), "CN64System::SyncSystemPC");
m_RegWorkingSet.AfterCallDirect();
}
@ -2640,7 +2640,7 @@ void CX86RecompilerOps::LUI()
}
else
{
m_Assembler.MoveConstToX86reg((uint32_t)(Address + g_MMU->Rdram()), Reg);
m_Assembler.MoveConstToX86reg(Reg, (uint32_t)(Address + g_MMU->Rdram()));
}
}
@ -2844,7 +2844,7 @@ void CX86RecompilerOps::LB_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
if (VAddr < 0x80000000 || VAddr >= 0xC0000000)
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileLoadMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 8, SignExtend);
return;
}
@ -2852,7 +2852,7 @@ void CX86RecompilerOps::LB_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
uint32_t PAddr;
if (!m_MMU.VAddrToPAddr(VAddr, PAddr))
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
m_CodeBlock.Log("%s\nFailed to translate address %08X", __FUNCTION__, VAddr);
if (BreakOnUnhandledMemory())
{
@ -2884,7 +2884,7 @@ void CX86RecompilerOps::LB_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
}
else
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
}
break;
case 0x04000000:
@ -2912,7 +2912,7 @@ void CX86RecompilerOps::LB_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
}
else
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -2944,11 +2944,11 @@ void CX86RecompilerOps::LB_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
}
else
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
}
break;
default:
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -2963,13 +2963,13 @@ void CX86RecompilerOps::LH_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
if (VAddr < 0x80000000 || VAddr >= 0xC0000000)
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileLoadMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 16, SignExtend);
}
if (!m_MMU.VAddrToPAddr(VAddr, PAddr))
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
m_CodeBlock.Log("%s\nFailed to translate address %08X", __FUNCTION__, VAddr);
if (BreakOnUnhandledMemory())
{
@ -3001,7 +3001,7 @@ void CX86RecompilerOps::LH_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
}
else
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
}
break;
case 0x10000000:
@ -3024,11 +3024,11 @@ void CX86RecompilerOps::LH_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
}
else
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
}
break;
default:
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -3183,7 +3183,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
if (VAddr < 0x80000000 || VAddr >= 0xC0000000)
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileLoadMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 32, true);
}
else
@ -3210,7 +3210,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
}
else
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
}
break;
case 0x04000000:
@ -3261,7 +3261,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
case 0x04300008: m_Assembler.MoveVariableToX86reg(&g_Reg->MI_INTR_REG, "MI_INTR_REG", Reg); break;
case 0x0430000C: m_Assembler.MoveVariableToX86reg(&g_Reg->MI_INTR_MASK_REG, "MI_INTR_MASK_REG", Reg); break;
default:
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -3309,7 +3309,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
case 0x0460002C: m_Assembler.MoveVariableToX86reg(&g_Reg->PI_BSD_DOM2_PGS_REG, "PI_BSD_DOM2_PGS_REG", Reg); break;
case 0x04600030: m_Assembler.MoveVariableToX86reg(&g_Reg->PI_BSD_DOM2_RLS_REG, "PI_BSD_DOM2_RLS_REG", Reg); break;
default:
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -3322,7 +3322,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
case 0x0470000C: m_Assembler.MoveVariableToX86reg(&g_Reg->RI_SELECT_REG, "RI_SELECT_REG", Reg); break;
case 0x04700010: m_Assembler.MoveVariableToX86reg(&g_Reg->RI_REFRESH_REG, "RI_REFRESH_REG", Reg); break;
default:
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -3334,7 +3334,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
{
case 0x04800018: m_Assembler.MoveVariableToX86reg(&g_Reg->SI_STATUS_REG, "SI_STATUS_REG", Reg); break;
default:
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -3372,7 +3372,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
case 0x05000544: m_Assembler.MoveVariableToX86reg(&g_Reg->ASIC_TEST_REG, "ASIC_TEST_REG", Reg); break;
case 0x05000548: m_Assembler.MoveVariableToX86reg(&g_Reg->ASIC_TEST_PIN_SEL, "ASIC_TEST_PIN_SEL", Reg); break;
default:
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -3381,7 +3381,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
}
else
{
m_Assembler.MoveConstToX86reg((uint32_t)((PAddr & 0xFFFF) << 16) | (PAddr & 0xFFFF), Reg);
m_Assembler.MoveConstToX86reg(Reg, (uint32_t)((PAddr & 0xFFFF) << 16) | (PAddr & 0xFFFF));
}
break;
case 0x1FC00000:
@ -3403,7 +3403,7 @@ void CX86RecompilerOps::LW_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr)
}
else
{
m_Assembler.MoveConstToX86reg(((PAddr & 0xFFFF) << 16) | (PAddr & 0xFFFF), Reg);
m_Assembler.MoveConstToX86reg(Reg, ((PAddr & 0xFFFF) << 16) | (PAddr & 0xFFFF));
if (BreakOnUnhandledMemory())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
@ -3651,7 +3651,7 @@ void CX86RecompilerOps::SWL()
m_Assembler.MoveVariableDispToX86Reg((void *)R4300iOp::SWL_SHIFT, "R4300iOp::SWL_SHIFT", shift, OffsetReg, 4);
if (IsConst(m_Opcode.rt))
{
m_Assembler.MoveConstToX86reg(GetMipsRegLo(m_Opcode.rt), OffsetReg);
m_Assembler.MoveConstToX86reg(OffsetReg, GetMipsRegLo(m_Opcode.rt));
}
else if (IsMapped(m_Opcode.rt))
{
@ -3817,7 +3817,7 @@ void CX86RecompilerOps::SWR()
m_Assembler.MoveVariableDispToX86Reg((void *)R4300iOp::SWR_SHIFT, "R4300iOp::SWR_SHIFT", shift, OffsetReg, 4);
if (IsConst(m_Opcode.rt))
{
m_Assembler.MoveConstToX86reg(GetMipsRegLo(m_Opcode.rt), OffsetReg);
m_Assembler.MoveConstToX86reg(OffsetReg, GetMipsRegLo(m_Opcode.rt));
}
else if (IsMapped(m_Opcode.rt))
{
@ -4688,7 +4688,7 @@ void CX86RecompilerOps::SPECIAL_DSRLV()
return;
}
Map_TempReg(CX86Ops::x86_ECX, -1, false, false);
m_Assembler.MoveConstToX86reg(Shift, CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, Shift);
Map_GPR_64bit(m_Opcode.rd, m_Opcode.rt);
if ((Shift & 0x20) == 0x20)
{
@ -4963,7 +4963,7 @@ void CX86RecompilerOps::SPECIAL_DIV()
if (IsConst(m_Opcode.rs))
{
m_Assembler.MoveConstToX86reg(GetMipsRegLo_S(m_Opcode.rs) >> 31, CX86Ops::x86_EDX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_EDX, GetMipsRegLo_S(m_Opcode.rs) >> 31);
}
else
{
@ -8628,12 +8628,12 @@ void CX86RecompilerOps::SyncRegState(const CRegInfo & SyncTo)
m_RegWorkingSet.SetX86Mapped(GetIndexFromX86Reg(GetMipsRegMapLo(i)), CRegInfo::NotMapped);
break;
case CRegInfo::STATE_CONST_64:
m_Assembler.MoveConstToX86reg(GetMipsRegHi(i), x86RegHi);
m_Assembler.MoveConstToX86reg(GetMipsRegLo(i), Reg);
m_Assembler.MoveConstToX86reg(x86RegHi, GetMipsRegHi(i));
m_Assembler.MoveConstToX86reg(Reg, GetMipsRegLo(i));
break;
case CRegInfo::STATE_CONST_32_SIGN:
m_Assembler.MoveConstToX86reg(GetMipsRegLo_S(i) >> 31, x86RegHi);
m_Assembler.MoveConstToX86reg(GetMipsRegLo(i), Reg);
m_Assembler.MoveConstToX86reg(x86RegHi, GetMipsRegLo_S(i) >> 31);
m_Assembler.MoveConstToX86reg(Reg, GetMipsRegLo(i));
break;
default:
m_CodeBlock.Log("Do something with states in SyncRegState\nSTATE_MAPPED_64\n%d", GetMipsRegState(i));
@ -8656,7 +8656,7 @@ void CX86RecompilerOps::SyncRegState(const CRegInfo & SyncTo)
switch (GetMipsRegState(i))
{
case CRegInfo::STATE_UNKNOWN: m_Assembler.MoveVariableToX86reg(&_GPR[i].UW[0], CRegName::GPR_Lo[i], Reg); break;
case CRegInfo::STATE_CONST_32_SIGN: m_Assembler.MoveConstToX86reg(GetMipsRegLo(i), Reg); break;
case CRegInfo::STATE_CONST_32_SIGN: m_Assembler.MoveConstToX86reg(Reg, GetMipsRegLo(i)); break;
case CRegInfo::STATE_MAPPED_32_SIGN:
m_Assembler.MoveX86RegToX86Reg(Reg, GetMipsRegMapLo(i));
m_RegWorkingSet.SetX86Mapped(GetIndexFromX86Reg(GetMipsRegMapLo(i)), CRegInfo::NotMapped);
@ -8718,7 +8718,7 @@ void CX86RecompilerOps::SyncRegState(const CRegInfo & SyncTo)
m_CodeBlock.Log("%s: %X", CRegName::GPR[i], GetMipsRegLo_S(i));
g_Notify->BreakPoint(__FILE__, __LINE__);
}
m_Assembler.MoveConstToX86reg(GetMipsRegLo(i), Reg);
m_Assembler.MoveConstToX86reg(Reg, GetMipsRegLo(i));
break;
default:
m_CodeBlock.Log("Do something with states in SyncRegState\nSTATE_MAPPED_32_ZERO\n%d", GetMipsRegState(i));
@ -9494,8 +9494,8 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
// m_Assembler.MoveVariableToX86reg((uint8_t *)RDRAM + pAddr,"RDRAM + pAddr",CX86Ops::x86_EAX);
// Jump2 = nullptr;
// } else {
// m_Assembler.MoveConstToX86reg((TargetPC >> 12),CX86Ops::x86_ECX);
// m_Assembler.MoveConstToX86reg(TargetPC,CX86Ops::x86_EBX);
// m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (TargetPC >> 12));
// m_Assembler.MoveConstToX86reg(CX86Ops::x86_EBX, TargetPC);
// m_Assembler.MoveVariableDispToX86Reg(TLB_ReadMap,"TLB_ReadMap",CX86Ops::x86_ECX,CX86Ops::x86_ECX,4);
// TestX86RegToX86Reg(CX86Ops::x86_ECX,CX86Ops::x86_ECX);
// m_Assembler.JeLabel8("NoTlbEntry",0);
@ -9521,8 +9521,8 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
}
else if (LookUpMode() == FuncFind_VirtualLookup)
{
m_Assembler.MoveConstToX86reg(TargetPC, CX86Ops::x86_EDX);
m_Assembler.MoveConstToX86reg((uint32_t)&m_Functions, CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_EDX, TargetPC);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (uint32_t)&m_Functions);
m_Assembler.CallFunc(AddressOf(&CFunctionMap::CompilerFindFunction), "CFunctionMap::CompilerFindFunction");
m_Assembler.MoveX86RegToX86Reg(CX86Ops::x86_ECX, CX86Ops::x86_EAX);
JecxzLabel8("NullPointer", 0);
@ -9545,8 +9545,8 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
}
else
{
m_Assembler.MoveConstToX86reg((TargetPC >> 12), CX86Ops::x86_ECX);
m_Assembler.MoveConstToX86reg(TargetPC, CX86Ops::x86_EBX);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ECX, (TargetPC >> 12));
m_Assembler.MoveConstToX86reg(CX86Ops::x86_EBX, TargetPC);
m_Assembler.MoveVariableDispToX86Reg(TLB_ReadMap, "TLB_ReadMap", CX86Ops::x86_ECX, CX86Ops::x86_ECX, 4);
TestX86RegToX86Reg(CX86Ops::x86_ECX, CX86Ops::x86_ECX);
m_Assembler.JeLabel8("NoTlbEntry", 0);
@ -9778,7 +9778,7 @@ void CX86RecompilerOps::CompileLoadMemoryValue(CX86Ops::x86Reg AddressReg, CX86O
m_Assembler.TestX86ByteRegToX86Reg(CX86Ops::x86_AL, CX86Ops::x86_AL);
m_RegWorkingSet.AfterCallDirect();
CompileExit((uint32_t)-1, (uint32_t)-1, m_RegWorkingSet, ExitReason_NormalNoSysCheck, false, &CX86Ops::JeLabel32);
m_Assembler.MoveConstToX86reg((uint32_t)&m_TempValue32, TempReg);
m_Assembler.MoveConstToX86reg(TempReg, (uint32_t)&m_TempValue32);
m_Assembler.SubX86RegToX86Reg(TempReg, AddressReg);
}
else if (ValueSize == 16)
@ -9790,7 +9790,7 @@ void CX86RecompilerOps::CompileLoadMemoryValue(CX86Ops::x86Reg AddressReg, CX86O
m_Assembler.TestX86ByteRegToX86Reg(CX86Ops::x86_AL, CX86Ops::x86_AL);
m_RegWorkingSet.AfterCallDirect();
CompileExit((uint32_t)-1, (uint32_t)-1, m_RegWorkingSet, ExitReason_NormalNoSysCheck, false, &CX86Ops::JeLabel32);
m_Assembler.MoveConstToX86reg((uint32_t)&m_TempValue32, TempReg);
m_Assembler.MoveConstToX86reg(TempReg, (uint32_t)&m_TempValue32);
m_Assembler.SubX86RegToX86Reg(TempReg, AddressReg);
m_Assembler.XorConstToX86Reg(AddressReg, 2);
}
@ -9803,7 +9803,7 @@ void CX86RecompilerOps::CompileLoadMemoryValue(CX86Ops::x86Reg AddressReg, CX86O
m_Assembler.TestX86ByteRegToX86Reg(CX86Ops::x86_AL, CX86Ops::x86_AL);
m_RegWorkingSet.AfterCallDirect();
CompileExit((uint32_t)-1, (uint32_t)-1, m_RegWorkingSet, ExitReason_NormalNoSysCheck, false, &CX86Ops::JeLabel32);
m_Assembler.MoveConstToX86reg((uint32_t)&m_TempValue32, TempReg);
m_Assembler.MoveConstToX86reg(TempReg, (uint32_t)&m_TempValue32);
m_Assembler.SubX86RegToX86Reg(TempReg, AddressReg);
m_Assembler.XorConstToX86Reg(AddressReg, 3);
}
@ -10079,7 +10079,7 @@ void CX86RecompilerOps::CompileStoreMemoryValue(CX86Ops::x86Reg AddressReg, CX86
}
else
{
m_Assembler.MoveX86regToX86regPointer(TempReg, ValueReg, AddressReg);
m_Assembler.MoveX86regToX86regPointer(AddressReg, TempReg, ValueReg );
}
}
else if (ValueSize == 64)
@ -10092,9 +10092,9 @@ void CX86RecompilerOps::CompileStoreMemoryValue(CX86Ops::x86Reg AddressReg, CX86
}
else
{
m_Assembler.MoveX86regToX86regPointer(TempReg, ValueRegHi, AddressReg);
m_Assembler.MoveX86regToX86regPointer(AddressReg, TempReg, ValueRegHi);
m_Assembler.AddConstToX86Reg(AddressReg, 4);
m_Assembler.MoveX86regToX86regPointer(TempReg, ValueReg, AddressReg);
m_Assembler.MoveX86regToX86regPointer(AddressReg, TempReg, ValueReg);
}
}
else
@ -10115,7 +10115,7 @@ void CX86RecompilerOps::SB_Const(uint32_t Value, uint32_t VAddr)
if (VAddr < 0x80000000 || VAddr >= 0xC0000000)
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, CX86Ops::x86_Unknown, CX86Ops::x86_Unknown, Value, 8);
return;
}
@ -10144,7 +10144,7 @@ void CX86RecompilerOps::SB_Const(uint32_t Value, uint32_t VAddr)
if (CGameSettings::bSMM_StoreInstruc())
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, CX86Ops::x86_Unknown, CX86Ops::x86_Unknown, Value, 8);
}
else if (PAddr < g_MMU->RdramSize())
@ -10192,7 +10192,7 @@ void CX86RecompilerOps::SB_Register(CX86Ops::x86Reg Reg, uint32_t VAddr)
{
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(Reg), true);
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 0, 8);
return;
}
@ -10221,7 +10221,7 @@ void CX86RecompilerOps::SB_Register(CX86Ops::x86Reg Reg, uint32_t VAddr)
if (CGameSettings::bSMM_StoreInstruc())
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 0, 8);
}
else if (PAddr < g_MMU->RdramSize())
@ -10242,7 +10242,7 @@ void CX86RecompilerOps::SH_Const(uint32_t Value, uint32_t VAddr)
if (VAddr < 0x80000000 || VAddr >= 0xC0000000)
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, CX86Ops::x86_Unknown, CX86Ops::x86_Unknown, (uint16_t)Value, 16);
return;
}
@ -10271,7 +10271,7 @@ void CX86RecompilerOps::SH_Const(uint32_t Value, uint32_t VAddr)
if (CGameSettings::bSMM_StoreInstruc())
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, CX86Ops::x86_Unknown, CX86Ops::x86_Unknown, (uint16_t)Value, 16);
}
else if (PAddr < g_MMU->RdramSize())
@ -10303,7 +10303,7 @@ void CX86RecompilerOps::SH_Register(CX86Ops::x86Reg Reg, uint32_t VAddr)
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(Reg), true);
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 0, 16);
}
else
@ -10324,7 +10324,7 @@ void CX86RecompilerOps::SH_Register(CX86Ops::x86Reg Reg, uint32_t VAddr)
if (CGameSettings::bSMM_StoreInstruc())
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 0, 16);
}
else if (PAddr < g_MMU->RdramSize())
@ -10357,7 +10357,7 @@ void CX86RecompilerOps::SW_Const(uint32_t Value, uint32_t VAddr)
if (VAddr < 0x80000000 || VAddr >= 0xC0000000)
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, CX86Ops::x86_Unknown, CX86Ops::x86_Unknown, Value, 32);
return;
}
@ -10386,7 +10386,7 @@ void CX86RecompilerOps::SW_Const(uint32_t Value, uint32_t VAddr)
if (CGameSettings::bSMM_StoreInstruc())
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, CX86Ops::x86_Unknown, CX86Ops::x86_Unknown, Value, 32);
}
else if (PAddr < g_MMU->RdramSize())
@ -10823,7 +10823,7 @@ void CX86RecompilerOps::SW_Register(CX86Ops::x86Reg Reg, uint32_t VAddr)
{
m_RegWorkingSet.SetX86Protected(GetIndexFromX86Reg(Reg), true);
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 0, 32);
return;
}
@ -10854,7 +10854,7 @@ void CX86RecompilerOps::SW_Register(CX86Ops::x86Reg Reg, uint32_t VAddr)
if (CGameSettings::bSMM_StoreInstruc())
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 0, 32);
}
else if (PAddr < g_MMU->RdramSize())
@ -10893,7 +10893,7 @@ void CX86RecompilerOps::SW_Register(CX86Ops::x86Reg Reg, uint32_t VAddr)
if (CGameSettings::bSMM_StoreInstruc())
{
CX86Ops::x86Reg AddressReg = Map_TempReg(CX86Ops::x86_Unknown, -1, false, false);
m_Assembler.MoveConstToX86reg(VAddr, AddressReg);
m_Assembler.MoveConstToX86reg(AddressReg, VAddr);
CompileStoreMemoryValue(AddressReg, Reg, CX86Ops::x86_Unknown, 0, 32);
}
else if (PAddr < 0x04001000)
@ -11234,7 +11234,7 @@ void CX86RecompilerOps::ResetMemoryStack()
}
else
{
m_Assembler.MoveConstToX86reg(GetMipsRegLo(MipsReg), Reg);
m_Assembler.MoveConstToX86reg(Reg, GetMipsRegLo(MipsReg));
}
}

View File

@ -777,7 +777,7 @@ void CX86RegInfo::Map_GPR_32bit(int32_t MipsReg, bool SignValue, int32_t MipsReg
}
else
{
m_Assembler.MoveConstToX86reg(GetMipsRegLo(MipsRegToLoad), Reg);
m_Assembler.MoveConstToX86reg(Reg, GetMipsRegLo(MipsRegToLoad));
}
}
else if (MipsRegToLoad == 0)
@ -901,18 +901,18 @@ void CX86RegInfo::Map_GPR_64bit(int32_t MipsReg, int32_t MipsRegToLoad)
{
if (IsSigned(MipsRegToLoad))
{
m_Assembler.MoveConstToX86reg(GetMipsRegLo_S(MipsRegToLoad) >> 31, x86Hi);
m_Assembler.MoveConstToX86reg(x86Hi, GetMipsRegLo_S(MipsRegToLoad) >> 31);
}
else
{
m_Assembler.MoveConstToX86reg(0, x86Hi);
m_Assembler.MoveConstToX86reg(x86Hi, 0);
}
}
else
{
m_Assembler.MoveConstToX86reg(GetMipsRegHi(MipsRegToLoad), x86Hi);
m_Assembler.MoveConstToX86reg(x86Hi, GetMipsRegHi(MipsRegToLoad));
}
m_Assembler.MoveConstToX86reg(GetMipsRegLo(MipsRegToLoad), x86lo);
m_Assembler.MoveConstToX86reg(x86lo, GetMipsRegLo(MipsRegToLoad));
}
}
else if (MipsRegToLoad == 0)
@ -1087,18 +1087,18 @@ CX86Ops::x86Reg CX86RegInfo::Map_TempReg(CX86Ops::x86Reg Reg, int32_t MipsReg, b
}
else
{
m_Assembler.MoveConstToX86reg(0, Reg);
m_Assembler.MoveConstToX86reg(Reg, 0);
}
}
else
{
if (Is64Bit(MipsReg))
{
m_Assembler.MoveConstToX86reg(GetMipsRegHi(MipsReg), Reg);
m_Assembler.MoveConstToX86reg(Reg, GetMipsRegHi(MipsReg));
}
else
{
m_Assembler.MoveConstToX86reg(GetMipsRegLo_S(MipsReg) >> 31, Reg);
m_Assembler.MoveConstToX86reg(Reg, GetMipsRegLo_S(MipsReg) >> 31);
}
}
}
@ -1114,7 +1114,7 @@ CX86Ops::x86Reg CX86RegInfo::Map_TempReg(CX86Ops::x86Reg Reg, int32_t MipsReg, b
}
else
{
m_Assembler.MoveConstToX86reg(GetMipsRegLo(MipsReg), Reg);
m_Assembler.MoveConstToX86reg(Reg, GetMipsRegLo(MipsReg));
}
}
}
@ -1517,7 +1517,7 @@ void CX86RegInfo::WriteBackRegisters()
}
if (!bEsiSign && (GetMipsRegLo(count) & 0x80000000))
{
m_Assembler.MoveConstToX86reg(0xFFFFFFFF, CX86Ops::x86_ESI);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ESI, 0xFFFFFFFF);
bEsiSign = true;
}
if ((GetMipsRegLo(count) & 0x80000000) != 0)
@ -1548,7 +1548,7 @@ void CX86RegInfo::WriteBackRegisters()
{
if (!bEsiSign)
{
m_Assembler.MoveConstToX86reg(0xFFFFFFFF, CX86Ops::x86_ESI);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ESI, 0xFFFFFFFF);
bEsiSign = true;
}
}
@ -1598,7 +1598,7 @@ void CX86RegInfo::WriteBackRegisters()
}
if (GetMipsRegLo(count) == 0xFFFFFFFF || GetMipsRegHi(count) == 0xFFFFFFFF)
{
m_Assembler.MoveConstToX86reg(0xFFFFFFFF, CX86Ops::x86_ESI);
m_Assembler.MoveConstToX86reg(CX86Ops::x86_ESI, 0xFFFFFFFF);
bEsiSign = true;
}

View File

@ -203,7 +203,7 @@ void CX86Ops::CallFunc(uint32_t FunctPtr, const char * FunctName)
#ifdef _MSC_VER
void CX86Ops::CallThis(uint32_t ThisPtr, uint32_t FunctPtr, char * FunctName, uint32_t /*StackSize*/)
{
MoveConstToX86reg(ThisPtr, CX86Ops::x86_ECX);
MoveConstToX86reg(CX86Ops::x86_ECX, ThisPtr);
CallFunc(FunctPtr, FunctName);
}
#else
@ -925,16 +925,16 @@ void CX86Ops::MoveConstToX86Pointer(uint32_t Const, x86Reg X86Pointer)
AddCode32(Const);
}
void CX86Ops::MoveConstToX86reg(uint32_t Const, x86Reg reg)
void CX86Ops::MoveConstToX86reg(x86Reg Reg, uint32_t Const)
{
if (Const == 0)
{
XorX86RegToX86Reg(reg, reg);
XorX86RegToX86Reg(Reg, Reg);
}
else
{
CodeLog(" mov %s, %Xh", x86_Name(reg), Const);
AddCode16((uint16_t)(0xC0C7 + (reg * 0x100)));
CodeLog(" mov %s, %Xh", x86_Name(Reg), Const);
AddCode16((uint16_t)(0xC0C7 + (Reg * 0x100)));
AddCode32(Const);
}
}

View File

@ -140,7 +140,7 @@ public:
void MoveConstToN64MemDisp(uint32_t Const, x86Reg AddrReg, uint8_t Disp);
void MoveConstToVariable(uint32_t Const, void * Variable, const char * VariableName);
void MoveConstToX86Pointer(uint32_t Const, x86Reg X86Pointer);
void MoveConstToX86reg(uint32_t Const, x86Reg reg);
void MoveConstToX86reg(x86Reg Reg, uint32_t Const);
void MoveConstToX86regPointer(uint32_t Const, x86Reg AddrReg1, x86Reg AddrReg2);
void MoveN64MemDispToX86reg(x86Reg reg, x86Reg AddrReg, uint8_t Disp);
void MoveN64MemToX86reg(x86Reg reg, x86Reg AddrReg);