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 {...@@ -3502,17 +3502,7 @@ fn genSliceElemPtr(self: *Self, lhs: Air.Inst.Ref, rhs: Air.Inst.Ref) !MCValue {
3502 defer self.register_manager.unlockReg(offset_reg_lock);3502 defer self.register_manager.unlockReg(offset_reg_lock);
35033503
3504 const addr_reg = try self.register_manager.allocReg(null, gp);3504 const addr_reg = try self.register_manager.allocReg(null, gp);
3505 switch (slice_mcv) {3505 try self.genSetReg(addr_reg, Type.usize, 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 }
3516 // TODO we could allocate register here, but need to expect addr register and potentially3506 // TODO we could allocate register here, but need to expect addr register and potentially
3517 // offset register.3507 // offset register.
3518 try self.genBinOpMir(.add, slice_ptr_field_type, .{ .register = addr_reg }, .{3508 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)" {...@@ -66,7 +66,6 @@ test "ignore lval with underscore (for loop)" {
66}66}
6767
68test "basic for loop" {68test "basic for loop" {
69 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
70 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;69 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
71 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;70 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
72 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO71 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
...@@ -306,7 +305,6 @@ test "1-based counter and ptr to array" {...@@ -306,7 +305,6 @@ test "1-based counter and ptr to array" {
306test "slice and two counters, one is offset and one is runtime" {305test "slice and two counters, one is offset and one is runtime" {
307 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO306 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
308 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO307 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
309 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
310 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO308 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
311309
312 const slice: []const u8 = "blah";310 const slice: []const u8 = "blah";
...@@ -335,7 +333,6 @@ test "slice and two counters, one is offset and one is runtime" {...@@ -335,7 +333,6 @@ test "slice and two counters, one is offset and one is runtime" {
335test "two slices, one captured by-ref" {333test "two slices, one captured by-ref" {
336 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO334 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
337 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO335 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
338 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
339 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO336 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
340337
341 var buf: [10]u8 = undefined;338 var buf: [10]u8 = undefined;
...@@ -355,7 +352,6 @@ test "two slices, one captured by-ref" {...@@ -355,7 +352,6 @@ test "two slices, one captured by-ref" {
355test "raw pointer and slice" {352test "raw pointer and slice" {
356 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO353 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
357 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO354 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
358 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
359 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO355 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
360356
361 var buf: [10]u8 = undefined;357 var buf: [10]u8 = undefined;