Merge pull request #2910 from Sonicadvance1/aarch64_regcache_fix
[AArch64] Fix a bug in the register cache.
This commit is contained in:
commit
5716d18d10
|
@ -281,9 +281,24 @@ ARM64Reg Arm64FPRCache::R(u32 preg, bool only_lower)
|
||||||
switch (reg.GetType())
|
switch (reg.GetType())
|
||||||
{
|
{
|
||||||
case REG_REG: // already in a reg
|
case REG_REG: // already in a reg
|
||||||
case REG_LOWER_PAIR:
|
|
||||||
return reg.GetReg();
|
return reg.GetReg();
|
||||||
break;
|
break;
|
||||||
|
case REG_LOWER_PAIR:
|
||||||
|
{
|
||||||
|
if (!only_lower)
|
||||||
|
{
|
||||||
|
// Load the high 64bits from the file and insert them in to the high 64bits of the host register
|
||||||
|
ARM64Reg tmp_reg = GetReg();
|
||||||
|
m_float_emit->LDR(64, INDEX_UNSIGNED, tmp_reg, X29, PPCSTATE_OFF(ps[preg][1]));
|
||||||
|
m_float_emit->INS(64, reg.GetReg(), 1, tmp_reg, 0);
|
||||||
|
UnlockRegister(tmp_reg);
|
||||||
|
|
||||||
|
// Change it over to a full 128bit register
|
||||||
|
reg.LoadToReg(reg.GetReg());
|
||||||
|
}
|
||||||
|
return reg.GetReg();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case REG_NOTLOADED: // Register isn't loaded at /all/
|
case REG_NOTLOADED: // Register isn't loaded at /all/
|
||||||
{
|
{
|
||||||
ARM64Reg host_reg = GetReg();
|
ARM64Reg host_reg = GetReg();
|
||||||
|
|
Loading…
Reference in New Issue