diff options
author | Teddy <ted.sybil@gmail.com> | 2014-05-05 13:55:18 +0800 |
---|---|---|
committer | Teddy <ted.sybil@gmail.com> | 2014-05-05 13:55:18 +0800 |
commit | 9d5a3d9e203572a1e33a3690c2fad5e03426e4c0 (patch) | |
tree | 5a5a200736cb3a6d2753204259591621603c9a0c /mips.c | |
parent | b6e3e473d0b9c1550791cc3d21d86bfa2920acb8 (diff) |
fix bugs in mips_load
Diffstat (limited to 'mips.c')
-rw-r--r-- | mips.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -68,9 +68,10 @@ void mips_prologue(void) { void mips_load(int reg, COpr_t opr) { CVar_t var = opr->spill->info.var; CType_t type = opr->type; - if (type->type == CSTRUCT || + if (opr->kind == VAR && + (type->type == CSTRUCT || type->type == CUNION || - type->type == CARR) + type->type == CARR)) { if (var->loc > 0) printf("\tla $%d, _%s\n", reg, var->name); @@ -214,7 +215,7 @@ void mips_space_alloc(void) { int i; for (i = 0; i < MAX_AVAIL_REGS; i++) save_pos[avail_regs[i]] = prev + i * INT_SIZE; - save_pos[30] = save_size; + save_pos[30] = prev + save_size; save_size += INT_SIZE; } prev += save_size; |