summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkugwa <kugwa2000@gmail.com>2016-01-02 20:45:51 +0800
committerkugwa <kugwa2000@gmail.com>2016-01-02 20:45:51 +0800
commitbc85605c978e7e5a6d018fea069b9b2de507a108 (patch)
tree176833199efd0b68563e42905effae126362ef30
parent5268c4c6dceedf3df1c3e54969da6a0b248e79b9 (diff)
downloadcompiler2015-bc85605c978e7e5a6d018fea069b9b2de507a108.tar
compiler2015-bc85605c978e7e5a6d018fea069b9b2de507a108.tar.gz
compiler2015-bc85605c978e7e5a6d018fea069b9b2de507a108.tar.bz2
compiler2015-bc85605c978e7e5a6d018fea069b9b2de507a108.tar.lz
compiler2015-bc85605c978e7e5a6d018fea069b9b2de507a108.tar.xz
compiler2015-bc85605c978e7e5a6d018fea069b9b2de507a108.tar.zst
compiler2015-bc85605c978e7e5a6d018fea069b9b2de507a108.zip
Handle function calls in expr
-rw-r--r--src/code-generation.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/code-generation.c b/src/code-generation.c
index 4b10015..5b95a74 100644
--- a/src/code-generation.c
+++ b/src/code-generation.c
@@ -148,7 +148,10 @@ static void generate_expression(CcmmcAst *expr, CcmmcState *state,
if (expr->type_node == CCMMC_AST_NODE_STMT &&
expr->value_stmt.kind == CCMMC_KIND_STMT_FUNCTION_CALL) {
- // TODO: function call
+ ccmmc_register_caller_save(state->reg_pool);
+ fprintf(state->asm_output, "\tbl\t%s\n", expr->child->value_id.name);
+ ccmmc_register_caller_load(state->reg_pool);
+ fprintf(state->asm_output, "\tmov\t%s, w0\n", result);
assert(false);
}