Fix function calls.

This commit is contained in:
losfair 2019-02-25 22:47:27 +08:00
parent dbebdf937f
commit 2432a6c9b3

View File

@ -876,13 +876,13 @@ impl X64FunctionCode {
if is_dword(size) {
dynasm!(
assembler
; mov eax, [rsp + (total_size + 16 + caller_stack_offset) as i32]
; mov eax, [rsp + (total_size + 16 + saved_regs.len() * 8 + caller_stack_offset) as i32]
; mov [rsp + offset as i32], eax
);
} else {
dynasm!(
assembler
; mov rax, [rsp + (total_size + 16 + caller_stack_offset) as i32]
; mov rax, [rsp + (total_size + 16 + saved_regs.len() * 8 + caller_stack_offset) as i32]
; mov [rsp + offset as i32], rax
);
}
@ -910,6 +910,14 @@ impl X64FunctionCode {
; jmp =>target
; after_call:
);
for reg in saved_regs.iter().rev() {
dynasm!(
assembler
; pop Rq(*reg as u8)
);
}
if caller_stack_offset != 0 {
dynasm!(
assembler
@ -929,13 +937,6 @@ impl X64FunctionCode {
}
}
for reg in saved_regs.iter().rev() {
dynasm!(
assembler
; pop Rq(*reg as u8)
);
}
Ok(())
}
}