[Android] Fix buf in CArmRecompilerOps::SPECIAL_XOR
This commit is contained in:
parent
e4a29ce003
commit
2394215349
|
@ -3381,6 +3381,7 @@ void CArmRecompilerOps::SPECIAL_XOR()
|
||||||
uint32_t ConstReg = IsConst(m_Opcode.rt) ? m_Opcode.rt : m_Opcode.rs;
|
uint32_t ConstReg = IsConst(m_Opcode.rt) ? m_Opcode.rt : m_Opcode.rs;
|
||||||
uint32_t MappedReg = IsConst(m_Opcode.rt) ? m_Opcode.rs : m_Opcode.rt;
|
uint32_t MappedReg = IsConst(m_Opcode.rt) ? m_Opcode.rs : m_Opcode.rt;
|
||||||
|
|
||||||
|
ProtectGPR(MappedReg);
|
||||||
if (Is64Bit(m_Opcode.rt) || Is64Bit(m_Opcode.rs))
|
if (Is64Bit(m_Opcode.rt) || Is64Bit(m_Opcode.rs))
|
||||||
{
|
{
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
@ -3432,37 +3433,23 @@ void CArmRecompilerOps::SPECIAL_XOR()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (g_System->b32BitCore())
|
ProtectGPR(KnownReg);
|
||||||
|
if (m_Opcode.rd == KnownReg)
|
||||||
{
|
{
|
||||||
if (m_Opcode.rd == KnownReg)
|
ArmReg TempReg = Arm_Any;
|
||||||
|
if (Is64Bit(KnownReg))
|
||||||
{
|
{
|
||||||
XorArmRegToArmReg(GetMipsRegMapLo(m_Opcode.rd), Map_TempReg(Arm_Any, UnknownReg, false));
|
TempReg = Map_TempReg(Arm_Any, UnknownReg, true);
|
||||||
}
|
XorArmRegToArmReg(GetMipsRegMapHi(m_Opcode.rd), TempReg);
|
||||||
else
|
m_RegWorkingSet.SetArmRegProtected(TempReg, false);
|
||||||
{
|
|
||||||
Map_GPR_32bit(m_Opcode.rd, true, UnknownReg);
|
|
||||||
XorArmRegToArmReg(GetMipsRegMapLo(m_Opcode.rd), GetMipsRegMapLo(KnownReg));
|
|
||||||
}
|
}
|
||||||
|
XorArmRegToArmReg(GetMipsRegMapLo(m_Opcode.rd), Map_TempReg(TempReg, UnknownReg, false));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_Opcode.rd == KnownReg)
|
Map_GPR_64bit(m_Opcode.rd, UnknownReg);
|
||||||
{
|
XorArmRegToArmReg(GetMipsRegMapHi(m_Opcode.rd), Is32Bit(KnownReg) ? Map_TempReg(Arm_Any, KnownReg, true) : GetMipsRegMapHi(KnownReg));
|
||||||
ArmReg TempReg = Arm_Any;
|
XorArmRegToArmReg(GetMipsRegMapLo(m_Opcode.rd), GetMipsRegMapLo(KnownReg));
|
||||||
if (Is64Bit(KnownReg))
|
|
||||||
{
|
|
||||||
TempReg = Map_TempReg(Arm_Any, UnknownReg, true);
|
|
||||||
XorArmRegToArmReg(GetMipsRegMapHi(m_Opcode.rd), TempReg);
|
|
||||||
m_RegWorkingSet.SetArmRegProtected(TempReg, false);
|
|
||||||
}
|
|
||||||
XorArmRegToArmReg(GetMipsRegMapLo(m_Opcode.rd), Map_TempReg(TempReg, UnknownReg, false));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Map_GPR_64bit(m_Opcode.rd, UnknownReg);
|
|
||||||
XorArmRegToArmReg(GetMipsRegMapHi(m_Opcode.rd), Is32Bit(KnownReg) ? Map_TempReg(Arm_Any, KnownReg, true) : GetMipsRegMapHi(KnownReg));
|
|
||||||
XorArmRegToArmReg(GetMipsRegMapLo(m_Opcode.rd), GetMipsRegMapLo(KnownReg));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue