From ecffc7cf7aaa3fd447848568619161a95408aa0e Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 5 May 2025 01:16:48 +0900 Subject: align rsp --- main.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'main.c') diff --git a/main.c b/main.c index acc4c38..1ac07e3 100644 --- a/main.c +++ b/main.c @@ -1632,9 +1632,28 @@ void gen_func_call(struct CodeGen* g, struct AstNode* ast) { fatal_error("gen_func_call: too many args"); } } + + int label = gen_new_label(g); + + printf(" mov rax, rsp\n"); + printf(" and rax, 15\n"); + printf(" cmp rax, 0\n"); + printf(" je .Laligned%d\n", label); + printf(" mov rax, 0\n"); + printf(" sub rsp, 8\n"); printf(" call %s\n", func_name); + printf(" add rsp, 8\n"); printf(" push rax\n"); + + printf(" jmp .Lend%d\n", label); + printf(".Laligned%d:\n", label); + + printf(" mov rax, 0\n"); + printf(" call %s\n", func_name); + printf(" push rax\n"); + + printf(".Lend%d:\n", label); } void gen_lvar(struct CodeGen* g, struct AstNode* ast, int gen_mode) { -- cgit v1.2.3-70-g09d2