aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 368309c..0696d3a 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -398,7 +398,7 @@ const Instruction = packed union {
imm20: u1,
fn init(opcode: Opcode, rd: Register, imm: i21) Self {
- std.debug.assert(imm % 2 == 0);
+ std.debug.assert(imm & 1 == 0);
const umm: u21 = @bitCast(imm);
return .{ .j = .{
.opcode = opcode,
@@ -406,7 +406,7 @@ const Instruction = packed union {
.imm12_19 = @truncate(umm >> 12),
.imm11 = @truncate(umm >> 11),
.imm1_10 = @truncate(umm >> 1),
- .imm20 = umm >> 20,
+ .imm20 = @intCast(umm >> 20),
} };
}
};
@@ -445,8 +445,8 @@ const RegisterAllocator = struct {
return self.allocated.get(vreg).?;
}
- fn allocate(self: *RegisterAllocator, vreg: compile.VReg) ?Register {
- const reg = self.available.pop() orelse return null;
+ fn allocate(self: *RegisterAllocator, vreg: compile.VReg) !Register {
+ const reg = self.available.pop() orelse return error.OutOfRegisters;
self.allocated.putAssumeCapacityNoClobber(vreg, reg);
return reg;
}
@@ -511,7 +511,7 @@ const Context = struct {
}
fn genConstant(self: *Context, constant: compile.Instr.Constant) !void {
- const reg = self.register_allocator.allocate(constant.dest) orelse return error.OutOfRegisters;
+ const reg = try self.register_allocator.allocate(constant.dest);
try self.genConstantInner(reg, constant.value);
}
@@ -519,7 +519,7 @@ const Context = struct {
const lhs = self.register_allocator.get(bin_op.lhs);
const rhs = self.register_allocator.get(bin_op.rhs);
try self.maybeFreeSources(bin_op.sources());
- const reg = self.register_allocator.allocate(bin_op.dest) orelse return error.OutOfRegisters;
+ const reg = try self.register_allocator.allocate(bin_op.dest);
switch (bin_op.op) {
.add => try self.emit(.add(reg, lhs, rhs)),
}