diff --git a/src/mapleall/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp b/src/mapleall/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp index 5024936740e405f3680c2b7bf7f21d3ae692a1cd..ef9657d39d9ece44ebf83bfb4d0ed23605cf2f3d 100644 --- a/src/mapleall/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp +++ b/src/mapleall/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp @@ -1156,6 +1156,13 @@ void AArch64CGFunc::SelectAggDassign(DassignNode &stmt) { } else { MOperator mOp = PickStInsn(copySize * k8BitSize, PTY_u32); GetCurBB()->AppendInsn(GetCG()->BuildInstruction(mOp, result, *lhsMemOpnd)); + if (doPair) { + AArch64OfstOperand &lhsOfstOpnd1 = GetOrCreateOfstOpnd(lhsBaseOffset + copySize, k32BitSize); + MemOperand *lhsMemOpnd1 = + &GetOrCreateMemOpnd(addrMode, copySize * k8BitSize, lhsBaseReg, nullptr, &lhsOfstOpnd1, sym); + lhsMemOpnd1 = FixLargeMemOpnd(*lhsMemOpnd1, copySize); + GetCurBB()->AppendInsn(GetCG()->BuildInstruction(mOp, *result1, *lhsMemOpnd1)); + } } } /* take care of extra content at the end less than the unit */ @@ -1255,6 +1262,13 @@ void AArch64CGFunc::SelectAggDassign(DassignNode &stmt) { } else { MOperator mOp = PickStInsn(copySize * k8BitSize, PTY_u32); GetCurBB()->AppendInsn(GetCG()->BuildInstruction(mOp, result, *lhsMemOpnd)); + if (doPair) { + AArch64OfstOperand &lhsOfstOpnd1 = GetOrCreateOfstOpnd(lhsBaseOffset + copySize, k32BitSize); + MemOperand *lhsMemOpnd1 = + &GetOrCreateMemOpnd(addrMode, copySize * k8BitSize, lhsBaseReg, nullptr, &lhsOfstOpnd1, sym); + lhsMemOpnd1 = FixLargeMemOpnd(*lhsMemOpnd1, copySize); + GetCurBB()->AppendInsn(GetCG()->BuildInstruction(mOp, *result1, *lhsMemOpnd1)); + } } } /* take care of extra content at the end less than the unit of alignUsed */