aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorMathias Magnusson <mathias@magnusson.space>2025-07-03 23:00:50 +0200
committerMathias Magnusson <mathias@magnusson.space>2025-07-03 23:00:50 +0200
commit7f86e0dc92670dd5da34cd22c36aba18fa58ec6d (patch)
tree692521deb068563d650a0028874d11dea8cdda31 /src/codegen.zig
parent3959256af626292d50d5c05c63073ef28d760546 (diff)
downloadhuginn-7f86e0dc92670dd5da34cd22c36aba18fa58ec6d.tar.gz
implement comparisons
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 7ade3fd..701a4e8 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -642,6 +642,14 @@ const Context = struct {
switch (bin_op.op) {
.add => try self.emit(.add(reg, lhs, rhs)),
.sub => try self.emit(.sub(reg, lhs, rhs)),
+ .less_than => try self.emit(.sltu(reg, lhs, rhs)),
+ .greater_than => try self.emit(.sltu(reg, rhs, lhs)),
+ .less_or_equal, .greater_or_equal => {
+ const l, const r = if (bin_op.op == .less_or_equal) .{ lhs, rhs } else .{ rhs, lhs };
+
+ try self.emit(.sltu(reg, r, l));
+ try self.emit(.xori(reg, reg, 1));
+ },
}
}