summaryrefslogtreecommitdiff
path: root/src/gas_assembly_generator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gas_assembly_generator.c')
-rw-r--r--src/gas_assembly_generator.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/gas_assembly_generator.c b/src/gas_assembly_generator.c
index 26bf3f9..7641147 100644
--- a/src/gas_assembly_generator.c
+++ b/src/gas_assembly_generator.c
@@ -214,6 +214,7 @@ gas_assembly_generator_compile_function(gas_assembly_generator_t *gen, ast_funct
fprintf(gen->stream, SVFMT ":\n", SVARG(&func->prototype.identifier.name));
fprintf(gen->stream, " push %%rbp\n");
fprintf(gen->stream, " mov %%rsp, %%rbp\n");
+ fprintf(gen->stream, " subq $16, %%rsp\n");
for (size_t i = 0; i < func->prototype.parameters->size; i++) {
char *reg = calling_registers[i];
@@ -232,7 +233,7 @@ gas_assembly_generator_compile_function(gas_assembly_generator_t *gen, ast_funct
gas_assembly_generator_compile(gen, func->body);
fprintf(gen->stream, ".L%ld:\n", return_label_index);
- fprintf(gen->stream, " pop %%rbp\n");
+ fprintf(gen->stream, " leave\n");
fprintf(gen->stream, " ret\n");
gen->return_label_index = previous_index;
@@ -515,7 +516,7 @@ gas_assembly_generator_binary_operation(gas_assembly_generator_t *gen, ast_binar
binary_operation->kind == AST_BINOP_EQUAL || binary_operation->kind == AST_BINOP_NOT_EQUAL ||
binary_operation->kind == AST_BINOP_GT || binary_operation->kind == AST_BINOP_LT ||
binary_operation->kind == AST_BINOP_LT_EQUAL || binary_operation->kind == AST_BINOP_GT_EQUAL) {
- fprintf(gen->stream, " cmp %%rcx, %%rax\n");
+ fprintf(gen->stream, " cmpq %%rcx, %%rax\n");
return;
}