diff options
Diffstat (limited to 'src/gas_assembly_generator.c')
-rw-r--r-- | src/gas_assembly_generator.c | 5 |
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; } |