ARM64: Fix LDP/STP fusing for unaligned accesses.

Thanks to Peter Cawley. #1056
This commit is contained in:
Mike Pall 2023-08-28 22:33:54 +02:00
parent c0d5240a25
commit 0fa2f1cbcf

View File

@ -142,7 +142,7 @@ static void emit_lso(ASMState *as, A64Ins ai, Reg rd, Reg rn, int64_t ofs)
} else {
goto nopair;
}
if (ofsm >= (int)((unsigned int)-64<<sc) && ofsm <= (63<<sc)) {
if (lj_ror((unsigned int)ofsm + (64u<<sc), sc) <= 127u) {
*as->mcp = aip | A64F_N(rn) | (((ofsm >> sc) & 0x7f) << 15) |
(ai ^ ((ai == A64I_LDRx || ai == A64I_STRx) ? 0x50000000 : 0x90000000));
return;