Fixing tail calls.

This commit is contained in:
Ben Vanik
2014-01-26 11:45:58 -08:00
parent aadf92e4ea
commit bbf3b4bdab
4 changed files with 57 additions and 23 deletions

View File

@@ -128,7 +128,6 @@ int X64Emitter::Emit(HIRBuilder* builder) {
const bool emit_prolog = true;
const size_t stack_size = 64;
if (emit_prolog) {
mov(qword[rsp + 16], rdx);
mov(qword[rsp + 8], rcx);
sub(rsp, stack_size);
mov(qword[rsp + 8 * 0], rbx);
@@ -138,6 +137,10 @@ int X64Emitter::Emit(HIRBuilder* builder) {
mov(qword[rsp + 8 * 4], r15);
}
// membase stays in rdx. If we evict it (like on function calls) we
// must put it back.
mov(rdx, qword[rcx + 8]);
auto lowering_table = backend_->lowering_table();
// Body.