[a64] Fix ResolveFunction thunk
Register was getting stomped over
This commit is contained in:
parent
725ea3d08c
commit
5b8ac36aa6
|
@ -337,8 +337,12 @@ GuestToHostThunk A64ThunkEmitter::EmitGuestToHostThunk() {
|
||||||
uint64_t ResolveFunction(void* raw_context, uint64_t target_address);
|
uint64_t ResolveFunction(void* raw_context, uint64_t target_address);
|
||||||
|
|
||||||
ResolveFunctionThunk A64ThunkEmitter::EmitResolveFunctionThunk() {
|
ResolveFunctionThunk A64ThunkEmitter::EmitResolveFunctionThunk() {
|
||||||
// ebx = target PPC address
|
// Entry:
|
||||||
// rcx = context
|
// X0 = target PPC address
|
||||||
|
|
||||||
|
// Resolve Function:
|
||||||
|
// X0 = context
|
||||||
|
// X1 = target PPC address
|
||||||
|
|
||||||
struct _code_offsets {
|
struct _code_offsets {
|
||||||
size_t prolog;
|
size_t prolog;
|
||||||
|
@ -366,8 +370,8 @@ ResolveFunctionThunk A64ThunkEmitter::EmitResolveFunctionThunk() {
|
||||||
// mov(rdx, rbx);
|
// mov(rdx, rbx);
|
||||||
// mov(rax, reinterpret_cast<uint64_t>(&ResolveFunction));
|
// mov(rax, reinterpret_cast<uint64_t>(&ResolveFunction));
|
||||||
// call(rax)
|
// call(rax)
|
||||||
|
MOV(X1, X0);
|
||||||
MOV(X0, GetContextReg()); // context
|
MOV(X0, GetContextReg()); // context
|
||||||
MOV(X1, X1);
|
|
||||||
MOVP2R(X16, &ResolveFunction);
|
MOVP2R(X16, &ResolveFunction);
|
||||||
BLR(X16);
|
BLR(X16);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue