From cbc664e8f3cf719e544c729b9a727c063db9b812 Mon Sep 17 00:00:00 2001 From: Zhongwei Yao Date: Thu, 7 Sep 2023 12:26:14 -0700 Subject: [PATCH] ARM64: Fix LDP/STP fusion error. --- src/lj_emit_arm64.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lj_emit_arm64.h b/src/lj_emit_arm64.h index 6926c71a..54146700 100644 --- a/src/lj_emit_arm64.h +++ b/src/lj_emit_arm64.h @@ -133,10 +133,12 @@ static void emit_lso(ASMState *as, A64Ins ai, Reg rd, Reg rn, int64_t ofs) int ofsm = ofs - (1<>sc)) || - prev == ((ai^A64I_LS_U) | A64F_N(rn) | A64F_S9(ofsm&0x1ff))) { + (emit_checkofs(A64I_LS_U, ofsm) == -1 && + prev == ((ai^A64I_LS_U) | A64F_N(rn) | A64F_S9(ofsm&0x1ff)))) { aip = (A64F_A(rd) | A64F_D(*as->mcp & 31)); } else if (prev == (ai | A64F_N(rn) | A64F_U12(ofsp>>sc)) || - prev == ((ai^A64I_LS_U) | A64F_N(rn) | A64F_S9(ofsp&0x1ff))) { + (emit_checkofs(A64I_LS_U, ofsp) == -1 && + prev == ((ai^A64I_LS_U) | A64F_N(rn) | A64F_S9(ofsp&0x1ff)))) { aip = (A64F_D(rd) | A64F_A(*as->mcp & 31)); ofsm = ofs; } else {