aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorMathias Magnusson <mathias@magnusson.space>2025-07-30 14:04:03 +0200
committerMathias Magnusson <mathias@magnusson.space>2025-07-30 14:04:03 +0200
commit580405d656bc896f1e086b72f734a1e61d7c8f50 (patch)
treedb6db88759e5e1dd151b43eace98b0ac8c2a7546 /src/codegen.zig
parentb368fe65bb45dc4414c9cc2dabc7d84fa7690c36 (diff)
downloadhuginn-580405d656bc896f1e086b72f734a1e61d7c8f50.tar.gz
store parameter on the stack
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig9
1 files changed, 2 insertions, 7 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 3fed244..0dbf35e 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -709,7 +709,6 @@ const ProcedureContext = struct {
fn genAssignLocal(self: *Self, assign_local: compile.Instr.AssignLocal) !void {
const src = self.register_allocator.get(assign_local.val);
try self.freeUnusedVRegs();
- std.log.debug("{}", .{self.locals.get(assign_local.local).?.stack_offset});
try self.emit(.sd(.sp, self.locals.get(assign_local.local).?.stack_offset, src));
}
@@ -755,16 +754,12 @@ const ProcedureContext = struct {
try self.emit(.addi(.sp, .sp, -self.stack_size));
try self.emit(.sd(.sp, 0, .ra));
- if (self.proc.param_reg) |reg| {
- const param = try self.register_allocator.allocate(reg);
- try self.emit(.addi(param, .a0, 0));
+ if (self.proc.param_lvar) |lvar| {
+ try self.emit(.sd(.sp, self.locals.get(lvar).?.stack_offset, .a0));
}
}
fn epilogue(self: *Self) !void {
- if (self.proc.param_reg) |reg| {
- self.register_allocator.free(reg);
- }
try self.emit(.ld(.ra, .sp, 0));
try self.emit(.addi(.sp, .sp, self.stack_size));
try self.emit(.jalr(.zero, .ra, 0));