summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarson Fleming <cflems@cflems.net>2026-03-27 11:38:06 -1000
committerCarson Fleming <cflems@cflems.net>2026-03-27 11:38:06 -1000
commit617732aac7394fb335baf957dc8cebac1fea756d (patch)
treef358927f20a91c779988c1c56112b950712c6a1e
parent414a608c36b2d8f208ad0223219736d7582948ae (diff)
downloadccc-617732aac7394fb335baf957dc8cebac1fea756d.tar.gz
todo: make weird.c work
-rw-r--r--codegen.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/codegen.c b/codegen.c
index d0905e2..9d7f183 100644
--- a/codegen.c
+++ b/codegen.c
@@ -61,9 +61,9 @@ static void emit_var_ref(
CGEN_PANIC("reference to undefined variable %s", node->ident);
fprintf(outfile, "\tmov ");
- emit_storage_loc(outfile, &var_def.loc);
- fprintf(outfile, ", ");
emit_storage_loc(outfile, storage);
+ fprintf(outfile, ", ");
+ emit_storage_loc(outfile, &var_def.loc);
fprintf(outfile, "\n");
}
}
@@ -171,19 +171,18 @@ static void emit_fn_decl(FILE* outfile, const struct fn_decl_node* node) {
scope->bp_offset = 0;
struct var_decl_node* args_node = node->args_head;
- long long arg_bp_offset = -8;
while (args_node != NULL) {
unsigned long long type_sz = get_type_size(&args_node->type);
+ scope->bp_offset += type_sz;
scope_define_var(scope, (struct var_def) {
.name = args_node->ident,
.loc = {
.type = BP_OFFSET,
- .offset = arg_bp_offset,
+ .offset = scope->bp_offset,
},
});
- arg_bp_offset -= type_sz;
args_node = args_node->next;
}