[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
1 changed files with 4 additions and 4 deletions

View File

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