x86_64: implement slice elem ptr for more MCValue tags

This commit is contained in:
Jacob Young 2023-05-02 00:50:38 -04:00
parent f56f5af403
commit 3f5592c114
2 changed files with 1 additions and 15 deletions

View File

@ -3502,17 +3502,7 @@ fn genSliceElemPtr(self: *Self, lhs: Air.Inst.Ref, rhs: Air.Inst.Ref) !MCValue {
defer self.register_manager.unlockReg(offset_reg_lock);
const addr_reg = try self.register_manager.allocReg(null, gp);
switch (slice_mcv) {
.load_frame => |frame_addr| try self.asmRegisterMemory(
.mov,
addr_reg.to64(),
Memory.sib(.qword, .{
.base = .{ .frame = frame_addr.index },
.disp = frame_addr.off,
}),
),
else => return self.fail("TODO implement slice_elem_ptr when slice is {}", .{slice_mcv}),
}
try self.genSetReg(addr_reg, Type.usize, slice_mcv);
// TODO we could allocate register here, but need to expect addr register and potentially
// offset register.
try self.genBinOpMir(.add, slice_ptr_field_type, .{ .register = addr_reg }, .{

View File

@ -66,7 +66,6 @@ test "ignore lval with underscore (for loop)" {
}
test "basic for loop" {
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
@ -306,7 +305,6 @@ test "1-based counter and ptr to array" {
test "slice and two counters, one is offset and one is runtime" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
const slice: []const u8 = "blah";
@ -335,7 +333,6 @@ test "slice and two counters, one is offset and one is runtime" {
test "two slices, one captured by-ref" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
var buf: [10]u8 = undefined;
@ -355,7 +352,6 @@ test "two slices, one captured by-ref" {
test "raw pointer and slice" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
var buf: [10]u8 = undefined;