aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/generator.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/generator.c b/src/generator.c
index 23cc315..82c492b 100644
--- a/src/generator.c
+++ b/src/generator.c
@@ -477,16 +477,25 @@ void generate_asm(Node *root, FILE *out)
#if __APPLE__
fprintf(out, "global _main\n");
fprintf(out, "_main:\n");
-#else
- fprintf(out, "global _start\n");
- fprintf(out, "_start:\n");
-#endif
// Push argv
fprintf(out, " mov rax, rsi\n");
fprintf(out, " push rax\n");
// Push argc
fprintf(out, " mov rax, rdi\n");
fprintf(out, " push rax\n");
+#else
+ fprintf(out, "global _start\n");
+ fprintf(out, "_start:\n");
+
+ fprintf(out, " mov rbp, rsp\n");
+ // // Push argv
+ fprintf(out, " mov rax, rbp\n");
+ fprintf(out, " add rax, 8\n");
+ fprintf(out, " push rax\n");
+ // Push argc
+ fprintf(out, " mov rax, [rbp]\n");
+ fprintf(out, " push rax\n");
+#endif
// Initialize global variables
for (int i = 0; i < root->block.num_children; i++) {