summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw44@gmail.com>2016-01-03 17:26:31 +0800
committerTing-Wei Lan <lantw44@gmail.com>2016-01-03 17:26:31 +0800
commit51e4eb5eff1ec8f232ac87deebe4cb3818c05cca (patch)
tree82f99f9ec67b2a399d3f17a8603b783fa03370f3
parentc25298fa81689b42dd52a81b5a67ca457fa07dcf (diff)
downloadcompiler2015-51e4eb5eff1ec8f232ac87deebe4cb3818c05cca.tar
compiler2015-51e4eb5eff1ec8f232ac87deebe4cb3818c05cca.tar.gz
compiler2015-51e4eb5eff1ec8f232ac87deebe4cb3818c05cca.tar.bz2
compiler2015-51e4eb5eff1ec8f232ac87deebe4cb3818c05cca.tar.lz
compiler2015-51e4eb5eff1ec8f232ac87deebe4cb3818c05cca.tar.xz
compiler2015-51e4eb5eff1ec8f232ac87deebe4cb3818c05cca.tar.zst
compiler2015-51e4eb5eff1ec8f232ac87deebe4cb3818c05cca.zip
Fix syntax error when accessing global variables
-rw-r--r--src/code-generation.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/code-generation.c b/src/code-generation.c
index 78dd8a6..8aa353d 100644
--- a/src/code-generation.c
+++ b/src/code-generation.c
@@ -91,7 +91,8 @@ static inline void load_variable(CcmmcAst *id, CcmmcState *state, const char *r)
// TODO: array
if (ccmmc_symbol_attr_is_global(&var_sym->attr)) {
fprintf(state->asm_output,
- "\tldr\t%s, %s\n", r, var_name);
+ "\tadr\t" REG_TMP ", %s\n"
+ "\tldr\t%s, [" REG_TMP "]\n", var_name, r);
} else {
if (safe_immediate(var_sym->attr.addr)) {
fprintf(state->asm_output,
@@ -113,7 +114,8 @@ static inline void store_variable(CcmmcAst *id, CcmmcState *state, const char *r
// TODO: array
if (ccmmc_symbol_attr_is_global(&var_sym->attr)) {
fprintf(state->asm_output,
- "\tstr\t%s, %s\n", r, var_name);
+ "\tadr\t" REG_TMP ", %s\n"
+ "\tstr\t%s, [" REG_TMP "]\n", var_name, r);
} else {
if (safe_immediate(var_sym->attr.addr)) {
fprintf(state->asm_output,