[ARM32] Moves loadstore extend flag to backpatch code.
This commit is contained in:
parent
32dc105aa3
commit
52c6fb180b
|
@ -60,6 +60,7 @@ private:
|
||||||
FLAG_SIZE_F32 = (1 << 5),
|
FLAG_SIZE_F32 = (1 << 5),
|
||||||
FLAG_SIZE_F64 = (1 << 6),
|
FLAG_SIZE_F64 = (1 << 6),
|
||||||
FLAG_REVERSE = (1 << 7),
|
FLAG_REVERSE = (1 << 7),
|
||||||
|
FLAG_EXTEND = (1 << 8),
|
||||||
};
|
};
|
||||||
|
|
||||||
u32 m_fastmem_size;
|
u32 m_fastmem_size;
|
||||||
|
|
|
@ -300,6 +300,9 @@ u32 JitArm::EmitBackpatchRoutine(ARMXEmitter* emit, u32 flags, bool fastmem, boo
|
||||||
else if (flags & BackPatchInfo::FLAG_SIZE_16)
|
else if (flags & BackPatchInfo::FLAG_SIZE_16)
|
||||||
emit->REV16(RS, RS);
|
emit->REV16(RS, RS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & BackPatchInfo::FLAG_EXTEND)
|
||||||
|
emit->SXTH(RS, RS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -590,7 +593,6 @@ void JitArm::InitBackpatch()
|
||||||
|
|
||||||
m_backpatch_info[flags] = info;
|
m_backpatch_info[flags] = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 16bit - reverse
|
// 16bit - reverse
|
||||||
{
|
{
|
||||||
flags =
|
flags =
|
||||||
|
@ -612,6 +614,27 @@ void JitArm::InitBackpatch()
|
||||||
|
|
||||||
m_backpatch_info[flags] = info;
|
m_backpatch_info[flags] = info;
|
||||||
}
|
}
|
||||||
|
// 16bit - sign extend
|
||||||
|
{
|
||||||
|
flags =
|
||||||
|
BackPatchInfo::FLAG_LOAD |
|
||||||
|
BackPatchInfo::FLAG_SIZE_16 |
|
||||||
|
BackPatchInfo::FLAG_EXTEND;
|
||||||
|
EmitBackpatchRoutine(this, flags, false, false, R0);
|
||||||
|
code_end = GetWritableCodePtr();
|
||||||
|
info.m_slowmem_size = (code_end - code_base) / 4;
|
||||||
|
|
||||||
|
SetCodePtr(code_base);
|
||||||
|
|
||||||
|
info.m_fastmem_trouble_inst_offset =
|
||||||
|
EmitBackpatchRoutine(this, flags, true, false, R0);
|
||||||
|
code_end = GetWritableCodePtr();
|
||||||
|
info.m_fastmem_size = (code_end - code_base) / 4;
|
||||||
|
|
||||||
|
SetCodePtr(code_base);
|
||||||
|
|
||||||
|
m_backpatch_info[flags] = info;
|
||||||
|
}
|
||||||
// 32bit - reverse
|
// 32bit - reverse
|
||||||
{
|
{
|
||||||
flags =
|
flags =
|
||||||
|
|
|
@ -347,13 +347,13 @@ void JitArm::SafeLoadToReg(ARMReg dest, s32 addr, s32 offsetReg, int accessSize,
|
||||||
if (reverse)
|
if (reverse)
|
||||||
flags |= BackPatchInfo::FLAG_REVERSE;
|
flags |= BackPatchInfo::FLAG_REVERSE;
|
||||||
|
|
||||||
|
if (signExtend)
|
||||||
|
flags |= BackPatchInfo::FLAG_EXTEND;
|
||||||
|
|
||||||
EmitBackpatchRoutine(this, flags,
|
EmitBackpatchRoutine(this, flags,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
!(is_immediate && Memory::IsRAMAddress(imm_addr)), dest);
|
!(is_immediate && Memory::IsRAMAddress(imm_addr)), dest);
|
||||||
|
|
||||||
if (signExtend) // Only on 16 loads
|
|
||||||
SXTH(dest, dest);
|
|
||||||
|
|
||||||
if (update)
|
if (update)
|
||||||
MOV(gpr.R(addr), rA);
|
MOV(gpr.R(addr), rA);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue