Adding the ret required for tail calls.
This commit is contained in:
parent
fb22aeb5ac
commit
da62ec56f9
|
@ -645,16 +645,13 @@ int X64Emitter::CallFunction(FunctionSymbol* target_symbol,
|
||||||
c.alloc(lr, rdx);
|
c.alloc(lr, rdx);
|
||||||
// TODO(benvanik): just use jmp when fixed: https://code.google.com/p/asmjit/issues/detail?id=67
|
// TODO(benvanik): just use jmp when fixed: https://code.google.com/p/asmjit/issues/detail?id=67
|
||||||
// c.jmp(target_ptr);
|
// c.jmp(target_ptr);
|
||||||
c.push(imm(target_ptr));
|
|
||||||
c.ret();
|
|
||||||
#else
|
#else
|
||||||
// Calling convetion: kX86FuncConvX64U
|
// Calling convetion: kX86FuncConvX64U
|
||||||
// Arguments passed as RDI, RSI, RDX, RCX, R8, R9
|
// Arguments passed as RDI, RSI, RDX, RCX, R8, R9
|
||||||
c.alloc(c.getGpArg(0), rdi);
|
c.alloc(c.getGpArg(0), rdi);
|
||||||
c.alloc(lr, rsi);
|
c.alloc(lr, rsi);
|
||||||
// TODO(benvanik): just use jmp when fixed: https://code.google.com/p/asmjit/issues/detail?id=67
|
// TODO(benvanik): just use jmp when fixed: https://code.google.com/p/asmjit/issues/detail?id=67
|
||||||
c.push(imm((uint64_t)target_ptr));
|
// c.jmp(target_ptr);
|
||||||
c.ret();
|
|
||||||
#endif // ASMJIT_WINDOWS
|
#endif // ASMJIT_WINDOWS
|
||||||
} else {
|
} else {
|
||||||
#else
|
#else
|
||||||
|
@ -667,6 +664,9 @@ int X64Emitter::CallFunction(FunctionSymbol* target_symbol,
|
||||||
FuncBuilder2<void, void*, uint64_t>());
|
FuncBuilder2<void, void*, uint64_t>());
|
||||||
call->setArgument(0, c.getGpArg(0));
|
call->setArgument(0, c.getGpArg(0));
|
||||||
call->setArgument(1, lr);
|
call->setArgument(1, lr);
|
||||||
|
if (tail) {
|
||||||
|
c.ret();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue