From 76ba8d518eb5830988878fca01e4a6096c1b0b2a Mon Sep 17 00:00:00 2001 From: Steve MacLean Date: Thu, 15 Mar 2018 05:39:41 -0400 Subject: [PATCH] [Arm64] Fix EmitShuffleThunk reg allocation (#16947) --- src/vm/arm64/stubs.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/vm/arm64/stubs.cpp b/src/vm/arm64/stubs.cpp index 3d4213b..c1e9a56 100644 --- a/src/vm/arm64/stubs.cpp +++ b/src/vm/arm64/stubs.cpp @@ -1775,9 +1775,9 @@ void StubLinkerCPU::Init() VOID StubLinkerCPU::EmitShuffleThunk(ShuffleEntry *pShuffleEntryArray) { // On entry x0 holds the delegate instance. Look up the real target address stored in the MethodPtrAux - // field and save it in x9. Tailcall to the target method after re-arranging the arguments - // ldr x9, [x0, #offsetof(DelegateObject, _methodPtrAux)] - EmitLoadStoreRegImm(eLOAD, IntReg(9), IntReg(0), DelegateObject::GetOffsetOfMethodPtrAux()); + // field and save it in x16(ip). Tailcall to the target method after re-arranging the arguments + // ldr x16, [x0, #offsetof(DelegateObject, _methodPtrAux)] + EmitLoadStoreRegImm(eLOAD, IntReg(16), IntReg(0), DelegateObject::GetOffsetOfMethodPtrAux()); //add x11, x0, DelegateObject::GetOffsetOfMethodPtrAux() - load the indirection cell into x11 used by ResolveWorkerAsmStub EmitAddImm(IntReg(11), IntReg(0), DelegateObject::GetOffsetOfMethodPtrAux()); @@ -1805,14 +1805,14 @@ VOID StubLinkerCPU::EmitShuffleThunk(ShuffleEntry *pShuffleEntryArray) // dest must be on the stack _ASSERTE(!(pEntry->dstofs & ShuffleEntry::REGMASK)); - EmitLoadStoreRegImm(eLOAD, IntReg(8), RegSp, pEntry->srcofs * sizeof(void*)); - EmitLoadStoreRegImm(eSTORE, IntReg(8), RegSp, pEntry->dstofs * sizeof(void*)); + EmitLoadStoreRegImm(eLOAD, IntReg(9), RegSp, pEntry->srcofs * sizeof(void*)); + EmitLoadStoreRegImm(eSTORE, IntReg(9), RegSp, pEntry->dstofs * sizeof(void*)); } } // Tailcall to target - // br x9 - EmitJumpRegister(IntReg(9)); + // br x16 + EmitJumpRegister(IntReg(16)); } void StubLinkerCPU::EmitCallLabel(CodeLabel *target, BOOL fTailCall, BOOL fIndirect) -- 2.7.4