aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorRobin Voetter <robin@voetter.nl>2021-10-18 01:00:07 +0200
committerRobin Voetter <robin@voetter.nl>2021-10-20 03:44:02 +0200
commit05c5c99a95c894d7e3241e1729e09aa7eacb6035 (patch)
tree4593305c8204570abf179c260574cf775862d49f /src/codegen.zig
parente5d6fe18b90cf2602e7e7712b4dd807b4e243356 (diff)
downloadzig-05c5c99a95c894d7e3241e1729e09aa7eacb6035.tar.gz
zig-05c5c99a95c894d7e3241e1729e09aa7eacb6035.zip
stage2: air ptr_slice_len_ptr and ptr_slice_ptr_ptr
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 0371f32a8a..bedbdf44f1 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -842,6 +842,9 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
.slice_ptr => try self.airSlicePtr(inst),
.slice_len => try self.airSliceLen(inst),
+ .ptr_slice_len_ptr => try self.airPtrSliceLenPtr(inst),
+ .ptr_slice_ptr_ptr => try self.airPtrSlicePtrPtr(inst),
+
.array_elem_val => try self.airArrayElemVal(inst),
.slice_elem_val => try self.airSliceElemVal(inst),
.ptr_slice_elem_val => try self.airPtrSliceElemVal(inst),
@@ -1498,6 +1501,22 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
}
+ fn airPtrSliceLenPtr(self: *Self, inst: Air.Inst.Index) !void {
+ const ty_op = self.air.instructions.items(.data)[inst].ty_op;
+ const result: MCValue = if (self.liveness.isUnused(inst)) .dead else switch (arch) {
+ else => return self.fail("TODO implement ptr_slice_len_ptr for {}", .{self.target.cpu.arch}),
+ };
+ return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
+ }
+
+ fn airPtrSlicePtrPtr(self: *Self, inst: Air.Inst.Index) !void {
+ const ty_op = self.air.instructions.items(.data)[inst].ty_op;
+ const result: MCValue = if (self.liveness.isUnused(inst)) .dead else switch (arch) {
+ else => return self.fail("TODO implement ptr_slice_ptr_ptr for {}", .{self.target.cpu.arch}),
+ };
+ return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
+ }
+
fn airSliceElemVal(self: *Self, inst: Air.Inst.Index) !void {
const is_volatile = false; // TODO
const bin_op = self.air.instructions.items(.data)[inst].bin_op;