[AArch64] Fix issue in emitter.

Loadstore pairs support only signed offsets, not unsigned.
This commit is contained in:
Ryan Houdek 2015-08-30 23:05:59 -05:00
parent 5110574c1f
commit f2c17436ab

View File

@ -766,7 +766,7 @@ void ARM64XEmitter::EncodeLoadStorePair(u32 op, u32 load, IndexType type, ARM64R
switch (type)
{
case INDEX_UNSIGNED:
case INDEX_SIGNED:
type_encode = 0b010;
break;
case INDEX_POST:
@ -775,8 +775,8 @@ void ARM64XEmitter::EncodeLoadStorePair(u32 op, u32 load, IndexType type, ARM64R
case INDEX_PRE:
type_encode = 0b011;
break;
case INDEX_SIGNED:
_assert_msg_(DYNA_REC, false, "%s doesn't support INDEX_SIGNED!", __FUNCTION__);
case INDEX_UNSIGNED:
_assert_msg_(DYNA_REC, false, "%s doesn't support INDEX_UNSIGNED!", __FUNCTION__);
break;
}
@ -1992,7 +1992,7 @@ void ARM64XEmitter::ABI_PushRegisters(BitSet32 registers)
reg_pair.push_back((ARM64Reg)(X0 + it));
if (reg_pair.size() == 2)
{
STP(INDEX_UNSIGNED, reg_pair[0], reg_pair[1], SP, current_offset);
STP(INDEX_SIGNED, reg_pair[0], reg_pair[1], SP, current_offset);
reg_pair.clear();
current_offset += 16;
}