summaryrefslogtreecommitdiff
path: root/src/vm/arm64
diff options
context:
space:
mode:
authorSteve MacLean <sdmaclea.qdt@qualcommdatacenter.com>2018-03-15 05:39:41 -0400
committerJan Vorlicek <janvorli@microsoft.com>2018-03-15 10:39:41 +0100
commit76ba8d518eb5830988878fca01e4a6096c1b0b2a (patch)
tree16d58b141f0fd59122ca0ec454b29049a985bc3b /src/vm/arm64
parenta045eea65cb6e7c553940671b7aabf5c3355eb4e (diff)
downloadcoreclr-76ba8d518eb5830988878fca01e4a6096c1b0b2a.tar.gz
coreclr-76ba8d518eb5830988878fca01e4a6096c1b0b2a.tar.bz2
coreclr-76ba8d518eb5830988878fca01e4a6096c1b0b2a.zip
[Arm64] Fix EmitShuffleThunk reg allocation (#16947)
Diffstat (limited to 'src/vm/arm64')
-rw-r--r--src/vm/arm64/stubs.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/vm/arm64/stubs.cpp b/src/vm/arm64/stubs.cpp
index 3d4213bea1..c1e9a56cf6 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)