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.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gas_assembly_generator.c b/src/gas_assembly_generator.c
index 4326b27..2d6b993 100644
--- a/src/gas_assembly_generator.c
+++ b/src/gas_assembly_generator.c
@@ -29,6 +29,9 @@ static void
gas_assembly_generator_compile_function(gas_assembly_generator_t *gen, ast_function_declaration_t *func);
static void
+gas_assembly_generator_compile_function_call(gas_assembly_generator_t *gen, ast_function_call_t *func_call);
+
+static void
gas_assembly_generator_compile_literal(gas_assembly_generator_t *gen, ast_literal_t *literal);
static void
@@ -156,6 +159,9 @@ gas_assembly_generator_compile(gas_assembly_generator_t *gen, ast_node_t *ast)
case AST_FUNCTION_DECLARATION:
gas_assembly_generator_compile_function(gen, &ast->data.function);
break;
+ case AST_FUNCTION_CALL:
+ gas_assembly_generator_compile_function_call(gen, &ast->data.function_call);
+ break;
case AST_LITERAL:
gas_assembly_generator_compile_literal(gen, &ast->data.literal);
break;
@@ -211,6 +217,13 @@ gas_assembly_generator_compile_function(gas_assembly_generator_t *gen, ast_funct
gen->return_label_index = previous_index;
}
+static void
+gas_assembly_generator_compile_function_call(gas_assembly_generator_t *gen, ast_function_call_t *func_call)
+{
+ fprintf(gen->stream, " call " SVFMT "\n", SVARG(&func_call->identifier->name));
+ gas_assembly_generator_set_latest_evaluation_to_rax(gen);
+}
+
void
gas_assembly_generator_compile_linux_main(gas_assembly_generator_t *gen, ast_node_t *ns)
{