From 1ff62f8ff85b32fc92ee1be0f1e61f1bee1a7ef7 Mon Sep 17 00:00:00 2001 From: kugwa Date: Sun, 3 Jan 2016 23:08:05 +0800 Subject: Callers have to pass extend_name[] --- src/code-generation.c | 10 ++++++---- src/register.c | 6 ++---- src/register.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/code-generation.c b/src/code-generation.c index f304cf8..41272e5 100644 --- a/src/code-generation.c +++ b/src/code-generation.c @@ -144,6 +144,7 @@ static void load_variable(CcmmcAst *id, CcmmcState *state, CcmmcTmp *dist, ccmmc_register_unlock(state->reg_pool, dist); } else { + // TODO: global array } } else { if (id->value_id.kind != CCMMC_KIND_ID_ARRAY) { @@ -164,7 +165,7 @@ static void load_variable(CcmmcAst *id, CcmmcState *state, CcmmcTmp *dist, else { CcmmcTmp *offset; const char *offset_reg; - char *extend; + char extend[8]; offset = ccmmc_register_alloc(state->reg_pool, current_offset); calc_array_offset(id, &var_sym->type, state, offset, current_offset); @@ -172,7 +173,7 @@ static void load_variable(CcmmcAst *id, CcmmcState *state, CcmmcTmp *dist, dist_reg = ccmmc_register_lock(state->reg_pool, dist); offset_reg = ccmmc_register_lock(state->reg_pool, offset); - extend = ccmmc_register_extend_name(offset); + ccmmc_register_extend_name(offset, extend); fprintf(state->asm_output, "\tldr\t" REG_TMP ", =%" PRIu64 "\n" "\tsub\t" REG_TMP ", fp, " REG_TMP "\n" @@ -208,6 +209,7 @@ static void store_variable(CcmmcAst *id, CcmmcState *state, CcmmcTmp *src, ccmmc_register_unlock(state->reg_pool, src); } else { + // TODO: global array } } else { if (id->value_id.kind != CCMMC_KIND_ID_ARRAY) { @@ -227,7 +229,7 @@ static void store_variable(CcmmcAst *id, CcmmcState *state, CcmmcTmp *src, else { CcmmcTmp *offset; const char *offset_reg; - char *extend; + char extend[8]; offset = ccmmc_register_alloc(state->reg_pool, current_offset); calc_array_offset(id, &var_sym->type, state, offset, current_offset); @@ -235,7 +237,7 @@ static void store_variable(CcmmcAst *id, CcmmcState *state, CcmmcTmp *src, src_reg = ccmmc_register_lock(state->reg_pool, src); offset_reg = ccmmc_register_lock(state->reg_pool, offset); - extend = ccmmc_register_extend_name(offset); + ccmmc_register_extend_name(offset, extend); fprintf(state->asm_output, "\tldr\t" REG_TMP ", =%" PRIu64 "\n" "\tsub\t" REG_TMP ", fp, " REG_TMP "\n" diff --git a/src/register.c b/src/register.c index 77571fe..00280c0 100644 --- a/src/register.c +++ b/src/register.c @@ -13,7 +13,6 @@ #define REG_SIZE 4 #define SPILL_MAX 64 -static char extend_name[8]; static const char *reg_name[REG_NUM] = { "w10", "w11", "w12", "w13", "w14", "w15"}; @@ -192,14 +191,13 @@ void ccmmc_register_free(CcmmcRegPool *pool, CcmmcTmp *tmp, uint64_t *offset) } } -char *ccmmc_register_extend_name(CcmmcTmp *tmp) +void ccmmc_register_extend_name(CcmmcTmp *tmp, char *extend_name) { if (tmp->reg != NULL) { strcpy(extend_name, tmp->reg->name); extend_name[0] = 'x'; - return extend_name; } - return NULL; + else extend_name[0] = '\0'; } void ccmmc_register_caller_save(CcmmcRegPool *pool) diff --git a/src/register.h b/src/register.h index 6589438..e218b66 100644 --- a/src/register.h +++ b/src/register.h @@ -36,7 +36,7 @@ void ccmmc_register_unlock (CcmmcRegPool *pool, void ccmmc_register_free (CcmmcRegPool *pool, CcmmcTmp *tmp, uint64_t *offset); -char *ccmmc_register_extend_name (CcmmcTmp *tmp); +void ccmmc_register_extend_name (CcmmcTmp *tmp, char *extend_name); void ccmmc_register_caller_save (CcmmcRegPool *pool); void ccmmc_register_caller_load (CcmmcRegPool *pool); void ccmmc_register_fini (CcmmcRegPool *pool); -- cgit v1.2.3