From 6b0c950cb873f5fe65c0029140b91dfd8a7b1adb Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Tue, 8 Feb 2022 12:56:50 +0100 Subject: stage2 ARM: support all integer types in genTypedValue --- test/behavior/struct.zig | 6 ------ 1 file changed, 6 deletions(-) (limited to 'test/behavior/struct.zig') diff --git a/test/behavior/struct.zig b/test/behavior/struct.zig index e4b64a39d3..6a0ebb5123 100644 --- a/test/behavior/struct.zig +++ b/test/behavior/struct.zig @@ -114,8 +114,6 @@ test "struct byval assign" { } test "call struct static method" { - if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; - const result = StructWithNoFields.add(3, 4); try expect(result == 7); } @@ -193,8 +191,6 @@ test "store member function in variable" { } test "member functions" { - if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; - const r = MemberFnRand{ .seed = 1234 }; try expect(r.getSeed() == 1234); } @@ -244,8 +240,6 @@ test "call method with mutable reference to struct with no fields" { } test "usingnamespace within struct scope" { - if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; - const S = struct { usingnamespace struct { pub fn inner() i32 { -- cgit v1.2.3 From 8fe9d2f9867101fc8d6a91c6e10c6f3b644ce6a8 Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Tue, 8 Feb 2022 13:21:54 +0100 Subject: stage2 ARM: airStructFieldVal for more MCValues --- src/arch/arm/CodeGen.zig | 11 ++++++++++- test/behavior/struct.zig | 4 ---- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'test/behavior/struct.zig') diff --git a/src/arch/arm/CodeGen.zig b/src/arch/arm/CodeGen.zig index 9e1e3d7f43..2116717cd1 100644 --- a/src/arch/arm/CodeGen.zig +++ b/src/arch/arm/CodeGen.zig @@ -1703,9 +1703,18 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void { const struct_field_offset = @intCast(u32, struct_ty.structFieldOffset(index, self.target.*)); const struct_field_ty = struct_ty.structFieldType(index); const struct_field_size = @intCast(u32, struct_field_ty.abiSize(self.target.*)); + const adjusted_field_offset = struct_size - struct_field_offset - struct_field_size; + switch (mcv) { + .dead, .unreach => unreachable, + .stack_argument_offset => |off| { + break :result MCValue{ .stack_argument_offset = off + adjusted_field_offset }; + }, .stack_offset => |off| { - break :result MCValue{ .stack_offset = off + struct_size - struct_field_offset - struct_field_size }; + break :result MCValue{ .stack_offset = off + adjusted_field_offset }; + }, + .memory => |addr| { + break :result MCValue{ .memory = addr + adjusted_field_offset }; }, else => return self.fail("TODO implement codegen struct_field_val for {}", .{mcv}), } diff --git a/test/behavior/struct.zig b/test/behavior/struct.zig index 6a0ebb5123..03be28b9d1 100644 --- a/test/behavior/struct.zig +++ b/test/behavior/struct.zig @@ -174,16 +174,12 @@ const MemberFnTestFoo = struct { }; test "call member function directly" { - if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; - const instance = MemberFnTestFoo{ .x = 1234 }; const result = MemberFnTestFoo.member(instance); try expect(result == 1234); } test "store member function in variable" { - if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; - const instance = MemberFnTestFoo{ .x = 1234 }; const memberFn = MemberFnTestFoo.member; const result = memberFn(instance); -- cgit v1.2.3