aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-10-21 17:12:04 -0400
committerGitHub <noreply@github.com>2021-10-21 17:12:04 -0400
commitd49c601d623d0b5a90f47c95cb931fe21a13d89e (patch)
tree76f107482d2b7bcf6279ce469da566df4197dc34 /src/codegen.zig
parente2a2e6c14fe181989187d6b59a79c5fc32961250 (diff)
parentfc034ca94f0682a06795616992f176f19ec9a83d (diff)
downloadzig-d49c601d623d0b5a90f47c95cb931fe21a13d89e.tar.gz
zig-d49c601d623d0b5a90f47c95cb931fe21a13d89e.zip
Merge pull request #9993 from Snektron/more-field-elem
stage2: More elemVal and elemPtr stuff
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig28
1 files changed, 9 insertions, 19 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 13169db1fd..5963cdd376 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -848,10 +848,9 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
.array_elem_val => try self.airArrayElemVal(inst),
.slice_elem_val => try self.airSliceElemVal(inst),
- .ptr_slice_elem_val => try self.airPtrSliceElemVal(inst),
+ .slice_elem_ptr => try self.airSliceElemPtr(inst),
.ptr_elem_val => try self.airPtrElemVal(inst),
.ptr_elem_ptr => try self.airPtrElemPtr(inst),
- .ptr_ptr_elem_val => try self.airPtrPtrElemVal(inst),
.constant => unreachable, // excluded from function bodies
.const_ty => unreachable, // excluded from function bodies
@@ -1535,19 +1534,19 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
}
- fn airArrayElemVal(self: *Self, inst: Air.Inst.Index) !void {
- const bin_op = self.air.instructions.items(.data)[inst].bin_op;
+ fn airSliceElemPtr(self: *Self, inst: Air.Inst.Index) !void {
+ const ty_pl = self.air.instructions.items(.data)[inst].ty_pl;
+ const extra = self.air.extraData(Air.Bin, ty_pl.payload).data;
const result: MCValue = if (self.liveness.isUnused(inst)) .dead else switch (arch) {
- else => return self.fail("TODO implement array_elem_val for {}", .{self.target.cpu.arch}),
+ else => return self.fail("TODO implement slice_elem_ptr for {}", .{self.target.cpu.arch}),
};
- return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
+ return self.finishAir(inst, result, .{ extra.lhs, extra.rhs, .none });
}
- fn airPtrSliceElemVal(self: *Self, inst: Air.Inst.Index) !void {
- const is_volatile = false; // TODO
+ fn airArrayElemVal(self: *Self, inst: Air.Inst.Index) !void {
const bin_op = self.air.instructions.items(.data)[inst].bin_op;
- const result: MCValue = if (!is_volatile and self.liveness.isUnused(inst)) .dead else switch (arch) {
- else => return self.fail("TODO implement ptr_slice_elem_val for {}", .{self.target.cpu.arch}),
+ const result: MCValue = if (self.liveness.isUnused(inst)) .dead else switch (arch) {
+ else => return self.fail("TODO implement array_elem_val for {}", .{self.target.cpu.arch}),
};
return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
}
@@ -1570,15 +1569,6 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
return self.finishAir(inst, result, .{ extra.lhs, extra.rhs, .none });
}
- fn airPtrPtrElemVal(self: *Self, inst: Air.Inst.Index) !void {
- const is_volatile = false; // TODO
- const bin_op = self.air.instructions.items(.data)[inst].bin_op;
- const result: MCValue = if (!is_volatile and self.liveness.isUnused(inst)) .dead else switch (arch) {
- else => return self.fail("TODO implement ptr_ptr_elem_val for {}", .{self.target.cpu.arch}),
- };
- return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
- }
-
fn airSetUnionTag(self: *Self, inst: Air.Inst.Index) !void {
const bin_op = self.air.instructions.items(.data)[inst].bin_op;
const result: MCValue = switch (arch) {