authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-02 00:50:38-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-03 04:25:14-04:00
log3f5592c114ffbc28e7ffb9e9e411870b31d81dd8
treec1611c614d0c114ef29a16749c352b2404c129a8
parentf56f5af4039aadd5f9377eb2663e4733c37fabc5

x86_64: implement slice elem ptr for more MCValue tags


2 files changed, 1 insertions(+), 15 deletions(-)

src/arch/x86_64/CodeGen.zig+1-11
......@@ -3502,17 +3502,7 @@ fn genSliceElemPtr(self: *Self, lhs: Air.Inst.Ref, rhs: Air.Inst.Ref) !MCValue {
35023502 defer self.register_manager.unlockReg(offset_reg_lock);
35033503
35043504 const addr_reg = try self.register_manager.allocReg(null, gp);
3505 switch (slice_mcv) {
3506 .load_frame => |frame_addr| try self.asmRegisterMemory(
3507 .mov,
3508 addr_reg.to64(),
3509 Memory.sib(.qword, .{
3510 .base = .{ .frame = frame_addr.index },
3511 .disp = frame_addr.off,
3512 }),
3513 ),
3514 else => return self.fail("TODO implement slice_elem_ptr when slice is {}", .{slice_mcv}),
3515 }
3505 try self.genSetReg(addr_reg, Type.usize, slice_mcv);
35163506 // TODO we could allocate register here, but need to expect addr register and potentially
35173507 // offset register.
35183508 try self.genBinOpMir(.add, slice_ptr_field_type, .{ .register = addr_reg }, .{
test/behavior/for.zig-4
......@@ -66,7 +66,6 @@ test "ignore lval with underscore (for loop)" {
6666}
6767
6868test "basic for loop" {
69 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
7069 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7170 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7271 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
......@@ -306,7 +305,6 @@ test "1-based counter and ptr to array" {
306305test "slice and two counters, one is offset and one is runtime" {
307306 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
308307 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
309 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
310308 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
311309
312310 const slice: []const u8 = "blah";
......@@ -335,7 +333,6 @@ test "slice and two counters, one is offset and one is runtime" {
335333test "two slices, one captured by-ref" {
336334 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
337335 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
338 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
339336 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
340337
341338 var buf: [10]u8 = undefined;
......@@ -355,7 +352,6 @@ test "two slices, one captured by-ref" {
355352test "raw pointer and slice" {
356353 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
357354 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
358 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
359355 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
360356
361357 var buf: [10]u8 = undefined;