aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorMeghan Denny <hello@nektro.net>2021-08-30 00:31:40 -0700
committerMeghan Denny <hello@nektro.net>2021-08-30 00:31:40 -0700
commite878a6633f2447666217a5f9247af7c34507dca0 (patch)
tree86c3c8bb4e817ef9c09ca353c6b7481f73e0bf61 /src/codegen.zig
parent56845082bc6fb88a27c18cc3403216f93dc8ba42 (diff)
downloadzig-e878a6633f2447666217a5f9247af7c34507dca0.tar.gz
zig-e878a6633f2447666217a5f9247af7c34507dca0.zip
stage2: implement runtime `%` and `@rem`
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 9103c7ad17..a706b3b21c 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -809,6 +809,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
.mul => try self.airMul(inst),
.mulwrap => try self.airMulWrap(inst),
.div => try self.airDiv(inst),
+ .rem => try self.airRem(inst),
.cmp_lt => try self.airCmp(inst, .lt),
.cmp_lte => try self.airCmp(inst, .lte),
@@ -1266,6 +1267,14 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
}
+ fn airRem(self: *Self, inst: Air.Inst.Index) !void {
+ const bin_op = self.air.instructions.items(.data)[inst].bin_op;
+ const result: MCValue = if (self.liveness.isUnused(inst)) .dead else switch (arch) {
+ else => return self.fail("TODO implement rem for {}", .{self.target.cpu.arch}),
+ };
+ return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
+ }
+
fn airBitAnd(self: *Self, inst: Air.Inst.Index) !void {
const bin_op = self.air.instructions.items(.data)[inst].bin_op;
const result: MCValue = if (self.liveness.isUnused(inst)) .dead else switch (arch) {