From de3449ab73f251353cf301e6e585cc007ee761e5 Mon Sep 17 00:00:00 2001 From: Ting-Wei Lan <lantw44@gmail.com> Date: Sat, 2 Jan 2016 22:04:15 +0800 Subject: Floating-point return value is in s0 --- src/code-generation.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/code-generation.c') diff --git a/src/code-generation.c b/src/code-generation.c index 8abd72e..b90d00b 100644 --- a/src/code-generation.c +++ b/src/code-generation.c @@ -148,10 +148,17 @@ 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) { + const char *func_name = expr->child->value_id.name; + CcmmcSymbol *func_sym = ccmmc_symbol_table_retrieve( + state->table, func_name); + CcmmcAstValueType func_type = func_sym->type.type_base; ccmmc_register_caller_save(state->reg_pool); - fprintf(state->asm_output, "\tbl\t%s\n", expr->child->value_id.name); + fprintf(state->asm_output, "\tbl\t%s\n", func_name); ccmmc_register_caller_load(state->reg_pool); - fprintf(state->asm_output, "\tmov\t%s, w0\n", result); + if (func_type == CCMMC_AST_VALUE_FLOAT) + fprintf(state->asm_output, "\tfmov\t%s, s0\n", result); + else + fprintf(state->asm_output, "\tmov\t%s, w0\n", result); return ; } -- cgit