authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-12-27 18:59:59+01:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-12-27 18:59:59+01:00
logaea3460cf5a7f0bf03f09181bd6352ea5818d00e
tree8cdef5054989654ef2253d14793bc594a74d5128
parenta70cbe779adb11faeb88ceffad0cfa729d2eec6e
parent485082064aa3dee6cffec8db9f8146f1cf2aefbc
signature Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #14084 from joachimschmidt557/stage2-aarch64

stage2 AArch64: small improvements

27 files changed, 28 insertions(+), 105 deletions(-)

src/arch/aarch64/CodeGen.zig+18-3
......@@ -4043,9 +4043,24 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void {
40434043
40444044fn airFieldParentPtr(self: *Self, inst: Air.Inst.Index) !void {
40454045 const ty_pl = self.air.instructions.items(.data)[inst].ty_pl;
4046 const extra = self.air.extraData(Air.StructField, ty_pl.payload).data;
4047 _ = extra;
4048 return self.fail("TODO implement codegen airFieldParentPtr", .{});
4046 const extra = self.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
4047 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
4048 const field_ptr = try self.resolveInst(extra.field_ptr);
4049 const struct_ty = self.air.getRefType(ty_pl.ty).childType();
4050 const struct_field_offset = @intCast(u32, struct_ty.structFieldOffset(extra.field_index, self.target.*));
4051 switch (field_ptr) {
4052 .ptr_stack_offset => |off| {
4053 break :result MCValue{ .ptr_stack_offset = off + struct_field_offset };
4054 },
4055 else => {
4056 const lhs_bind: ReadArg.Bind = .{ .mcv = field_ptr };
4057 const rhs_bind: ReadArg.Bind = .{ .mcv = .{ .immediate = struct_field_offset } };
4058
4059 break :result try self.addSub(.sub, lhs_bind, rhs_bind, Type.usize, Type.usize, null);
4060 },
4061 }
4062 };
4063 return self.finishAir(inst, result, .{ extra.field_ptr, .none, .none });
40494064}
40504065
40514066fn airArg(self: *Self, inst: Air.Inst.Index) !void {
src/arch/aarch64/abi.zig+7-16
......@@ -136,19 +136,10 @@ pub fn getFloatArrayType(ty: Type) ?Type {
136136 }
137137}
138138
139const callee_preserved_regs_impl = if (builtin.os.tag.isDarwin()) struct {
140 pub const callee_preserved_regs = [_]Register{
141 .x20, .x21, .x22, .x23,
142 .x24, .x25, .x26, .x27,
143 .x28,
144 };
145} else struct {
146 pub const callee_preserved_regs = [_]Register{
147 .x19, .x20, .x21, .x22, .x23,
148 .x24, .x25, .x26, .x27, .x28,
149 };
139pub const callee_preserved_regs = [_]Register{
140 .x19, .x20, .x21, .x22, .x23,
141 .x24, .x25, .x26, .x27, .x28,
150142};
151pub const callee_preserved_regs = callee_preserved_regs_impl.callee_preserved_regs;
152143
153144pub const c_abi_int_param_regs = [_]Register{ .x0, .x1, .x2, .x3, .x4, .x5, .x6, .x7 };
154145pub const c_abi_int_return_regs = [_]Register{ .x0, .x1, .x2, .x3, .x4, .x5, .x6, .x7 };
......@@ -161,10 +152,10 @@ const RegisterBitSet = RegisterManager.RegisterBitSet;
161152pub const RegisterClass = struct {
162153 pub const gp: RegisterBitSet = blk: {
163154 var set = RegisterBitSet.initEmpty();
164 set.setRangeValue(.{
165 .start = 0,
166 .end = callee_preserved_regs.len,
167 }, true);
155 for (callee_preserved_regs) |reg| {
156 const index = RegisterManager.indexOfRegIntoTracked(reg).?;
157 set.set(index);
158 }
168159 break :blk set;
169160 };
170161};
src/arch/aarch64/bits.zig+3-1
......@@ -4,13 +4,15 @@ const DW = std.dwarf;
44const assert = std.debug.assert;
55const testing = std.testing;
66
7/// Disjoint sets of registers. Every register must belong to
8/// exactly one register class.
79pub const RegisterClass = enum {
810 general_purpose,
911 stack_pointer,
1012 floating_point,
1113};
1214
13/// General purpose registers in the AArch64 instruction set
15/// Registers in the AArch64 instruction set
1416pub const Register = enum(u8) {
1517 // zig fmt: off
1618 // 64-bit general-purpose registers
test/behavior/alignof.zig-1
......@@ -11,7 +11,6 @@ const Foo = struct {
1111};
1212
1313test "@alignOf(T) before referencing T" {
14 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1514 comptime try expect(@alignOf(Foo) != maxInt(usize));
1615 if (native_arch == .x86_64) {
1716 comptime try expect(@alignOf(Foo) == 4);
test/behavior/basic.zig-16
......@@ -113,21 +113,18 @@ fn first4KeysOfHomeRow() []const u8 {
113113}
114114
115115test "return string from function" {
116 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
117116 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
118117
119118 try expect(mem.eql(u8, first4KeysOfHomeRow(), "aoeu"));
120119}
121120
122121test "hex escape" {
123 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
124122 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
125123
126124 try expect(mem.eql(u8, "\x68\x65\x6c\x6c\x6f", "hello"));
127125}
128126
129127test "multiline string" {
130 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
131128 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
132129
133130 const s1 =
......@@ -140,7 +137,6 @@ test "multiline string" {
140137}
141138
142139test "multiline string comments at start" {
143 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
144140 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
145141
146142 const s1 =
......@@ -153,7 +149,6 @@ test "multiline string comments at start" {
153149}
154150
155151test "multiline string comments at end" {
156 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
157152 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
158153
159154 const s1 =
......@@ -166,7 +161,6 @@ test "multiline string comments at end" {
166161}
167162
168163test "multiline string comments in middle" {
169 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
170164 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
171165
172166 const s1 =
......@@ -179,7 +173,6 @@ test "multiline string comments in middle" {
179173}
180174
181175test "multiline string comments at multiple places" {
182 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
183176 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
184177
185178 const s1 =
......@@ -198,7 +191,6 @@ test "string concatenation" {
198191}
199192
200193test "array mult operator" {
201 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
202194 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
203195
204196 try expect(mem.eql(u8, "ab" ** 5, "ababababab"));
......@@ -208,7 +200,6 @@ const OpaqueA = opaque {};
208200const OpaqueB = opaque {};
209201
210202test "opaque types" {
211 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
212203 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
213204
214205 try expect(*OpaqueA != *OpaqueB);
......@@ -226,7 +217,6 @@ test "compile time global reinterpret" {
226217}
227218
228219test "cast undefined" {
229 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
230220 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
231221
232222 const array: [100]u8 = undefined;
......@@ -238,7 +228,6 @@ fn testCastUndefined(x: []const u8) void {
238228}
239229
240230test "implicit cast after unreachable" {
241 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
242231 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
243232 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
244233
......@@ -297,7 +286,6 @@ fn fB() []const u8 {
297286}
298287
299288test "call function pointer in struct" {
300 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
301289 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
302290
303291 try expect(mem.eql(u8, f3(true), "a"));
......@@ -459,7 +447,6 @@ fn testArray2DConstDoublePtr(ptr: *const f32) !void {
459447}
460448
461449test "double implicit cast in same expression" {
462 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
463450 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
464451
465452 var x = @as(i32, @as(u16, nine()));
......@@ -492,7 +479,6 @@ fn testStructInFn() !void {
492479}
493480
494481test "fn call returning scalar optional in equality expression" {
495 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
496482 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
497483 try expect(getNull() == null);
498484}
......@@ -502,7 +488,6 @@ fn getNull() ?*i32 {
502488}
503489
504490test "global variable assignment with optional unwrapping with var initialized to undefined" {
505 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
506491 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
507492 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
508493
......@@ -628,7 +613,6 @@ var gdt = [_]GDTEntry{
628613var global_ptr = &gdt[0];
629614
630615test "global constant is loaded with a runtime-known index" {
631 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
632616 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
633617
634618 const S = struct {
test/behavior/bitcast.zig-1
......@@ -239,7 +239,6 @@ test "bitcast packed struct to integer and back" {
239239}
240240
241241test "implicit cast to error union by returning" {
242 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
243242 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
244243 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
245244
test/behavior/byval_arg_var.zig-1
......@@ -5,7 +5,6 @@ var result: []const u8 = "wrong";
55
66test "pass string literal byvalue to a generic var param" {
77 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
98 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
109
1110 start();
test/behavior/call.zig-1
......@@ -107,7 +107,6 @@ test "result location of function call argument through runtime condition and st
107107}
108108
109109test "function call with 40 arguments" {
110 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
111110 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
112111
113112 const S = struct {
test/behavior/error.zig-13
......@@ -29,7 +29,6 @@ fn shouldBeNotEqual(a: anyerror, b: anyerror) void {
2929}
3030
3131test "error binary operator" {
32 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3332 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
3433
3534 const a = errBinaryOperatorG(true) catch 3;
......@@ -68,7 +67,6 @@ test "error wrapping" {
6867}
6968
7069test "unwrap simple value from error" {
71 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7270 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
7371
7472 const i = unwrapSimpleValueFromErrorDo() catch unreachable;
......@@ -128,7 +126,6 @@ test "debug info for optional error set" {
128126}
129127
130128test "implicit cast to optional to error union to return result loc" {
131 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
132129 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
133130
134131 const S = struct {
......@@ -151,7 +148,6 @@ test "implicit cast to optional to error union to return result loc" {
151148
152149test "fn returning empty error set can be passed as fn returning any error" {
153150 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
154 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
155151
156152 entry();
157153 comptime entry();
......@@ -159,7 +155,6 @@ test "fn returning empty error set can be passed as fn returning any error" {
159155
160156test "fn returning empty error set can be passed as fn returning any error - pointer" {
161157 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
162 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
163158
164159 entryPtr();
165160 comptime entryPtr();
......@@ -228,7 +223,6 @@ fn testErrorSetType() !void {
228223
229224test "explicit error set cast" {
230225 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
231 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
232226 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
233227
234228 try testExplicitErrorSetCast(Set1.A);
......@@ -248,7 +242,6 @@ fn testExplicitErrorSetCast(set1: Set1) !void {
248242
249243test "comptime test error for empty error set" {
250244 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
251 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
252245 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
253246
254247 try testComptimeTestErrorEmptySet(1234);
......@@ -266,7 +259,6 @@ fn testComptimeTestErrorEmptySet(x: EmptyErrorSet!i32) !void {
266259
267260test "comptime err to int of error set with only 1 possible value" {
268261 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
269 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
270262
271263 testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A));
272264 comptime testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A));
......@@ -309,7 +301,6 @@ test "error inference with an empty set" {
309301}
310302
311303test "error union peer type resolution" {
312 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
313304 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
314305
315306 try testErrorUnionPeerTypeResolution(1);
......@@ -341,7 +332,6 @@ fn quux_1() !i32 {
341332}
342333
343334test "error: Zero sized error set returned with value payload crash" {
344 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
345335 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
346336
347337 _ = try foo3(0);
......@@ -354,7 +344,6 @@ fn foo3(b: usize) Error!usize {
354344}
355345
356346test "error: Infer error set from literals" {
357 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
358347 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
359348
360349 _ = nullLiteral("n") catch |err| handleErrors(err);
......@@ -501,7 +490,6 @@ test "nested catch" {
501490
502491test "function pointer with return type that is error union with payload which is pointer of parent struct" {
503492 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
504 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
505493 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
506494
507495 const S = struct {
......@@ -632,7 +620,6 @@ test "error set equality" {
632620}
633621
634622test "inferred error set equality" {
635 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
636623 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
637624
638625 const S = struct {
test/behavior/field_parent_ptr.zig-2
......@@ -2,7 +2,6 @@ const expect = @import("std").testing.expect;
22const builtin = @import("builtin");
33
44test "@fieldParentPtr non-first field" {
5 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
65 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
76 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
87 try testParentFieldPtr(&foo.c);
......@@ -10,7 +9,6 @@ test "@fieldParentPtr non-first field" {
109}
1110
1211test "@fieldParentPtr first field" {
13 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1412 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1513 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1614 try testParentFieldPtrFirst(&foo.a);
test/behavior/fn.zig-5
......@@ -145,7 +145,6 @@ fn fnWithUnreachable() noreturn {
145145
146146test "extern struct with stdcallcc fn pointer" {
147147 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
148 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
149148
150149 const S = extern struct {
151150 ptr: *const fn () callconv(if (builtin.target.cpu.arch == .x86) .Stdcall else .C) i32,
......@@ -196,7 +195,6 @@ fn addPointCoords(pt: Point) i32 {
196195}
197196
198197test "pass by non-copying value through var arg" {
199 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
200198 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
201199
202200 try expect((try addPointCoordsVar(Point{ .x = 1, .y = 2 })) == 3);
......@@ -292,7 +290,6 @@ fn voidFun(a: i32, b: void, c: i32, d: void) !void {
292290}
293291
294292test "call function with empty string" {
295 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
296293 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
297294
298295 acceptsString("");
......@@ -410,7 +407,6 @@ test "function with inferred error set but returning no error" {
410407}
411408
412409test "import passed byref to function in return type" {
413 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
414410 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
415411
416412 const S = struct {
......@@ -445,7 +441,6 @@ test "implicit cast function to function ptr" {
445441
446442test "method call with optional and error union first param" {
447443 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
448 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
449444 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
450445
451446 const S = struct {
test/behavior/if.zig-1
......@@ -81,7 +81,6 @@ test "const result loc, runtime if cond, else unreachable" {
8181test "if copies its payload" {
8282 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
8383 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
84 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8584 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8685
8786 const S = struct {
test/behavior/math.zig-2
......@@ -9,7 +9,6 @@ const mem = std.mem;
99const math = std.math;
1010
1111test "assignment operators" {
12 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1312 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1413 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1514
......@@ -546,7 +545,6 @@ fn negateWrap(comptime T: type, x: T) T {
546545}
547546
548547test "unsigned 64-bit division" {
549 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
550548 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
551549 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
552550
test/behavior/merge_error_sets.zig-1
......@@ -12,7 +12,6 @@ fn foo() C!void {
1212}
1313
1414test "merge error sets" {
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1615 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1716 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1817
test/behavior/null.zig-4
......@@ -73,7 +73,6 @@ fn foo(x: ?i32) ?bool {
7373test "test null runtime" {
7474 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
7575 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
76 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7776 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
7877
7978 try testTestNullRuntime(null);
......@@ -85,7 +84,6 @@ fn testTestNullRuntime(x: ?i32) !void {
8584
8685test "optional void" {
8786 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
88 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8987 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
9088
9189 try optionalVoidImpl();
......@@ -109,7 +107,6 @@ const Empty = struct {};
109107
110108test "optional struct{}" {
111109 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
112 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
113110 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
114111
115112 _ = try optionalEmptyStructImpl();
......@@ -135,7 +132,6 @@ test "null with default unwrap" {
135132}
136133
137134test "optional pointer to 0 bit type null value at runtime" {
138 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
139135 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
140136
141137 const EmptyStruct = struct {};
test/behavior/pointers.zig-2
......@@ -66,7 +66,6 @@ test "initialize const optional C pointer to null" {
6666}
6767
6868test "assigning integer to C pointer" {
69 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7069 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
7170
7271 var x: i32 = 0;
......@@ -193,7 +192,6 @@ test "allowzero pointer and slice" {
193192 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
194193 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
195194 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
196 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
197195 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
198196
199197 var ptr = @intToPtr([*]allowzero i32, 0);
test/behavior/ptrcast.zig-5
......@@ -4,8 +4,6 @@ const expect = std.testing.expect;
44const native_endian = builtin.target.cpu.arch.endian();
55
66test "reinterpret bytes as integer with nonzero offset" {
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
8
97 try testReinterpretBytesAsInteger();
108 comptime try testReinterpretBytesAsInteger();
119}
......@@ -38,7 +36,6 @@ fn testReinterpretWithOffsetAndNoWellDefinedLayout() !void {
3836}
3937
4038test "reinterpret bytes inside auto-layout struct as integer with nonzero offset" {
41 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
4239 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
4340
4441 try testReinterpretStructWrappedBytesAsInteger();
......@@ -173,7 +170,6 @@ test "lower reinterpreted comptime field ptr" {
173170}
174171
175172test "reinterpret struct field at comptime" {
176 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
177173 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
178174
179175 const numNative = comptime Bytes.init(0x12345678);
......@@ -236,7 +232,6 @@ test "ptrcast of const integer has the correct object size" {
236232
237233test "implicit optional pointer to optional anyopaque pointer" {
238234 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
239 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
240235 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
241236
242237 var buf: [4]u8 = "aoeu".*;
test/behavior/sizeof_and_typeof.zig-1
......@@ -75,7 +75,6 @@ const P = packed struct {
7575};
7676
7777test "@offsetOf" {
78 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7978 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8079
8180 // Packed structs have fixed memory layout
test/behavior/slice.zig-6
......@@ -28,7 +28,6 @@ comptime {
2828}
2929
3030test "slicing" {
31 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3231 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
3332
3433 var array: [20]i32 = undefined;
......@@ -64,7 +63,6 @@ test "comptime slice of undefined pointer of length 0" {
6463}
6564
6665test "implicitly cast array of size 0 to slice" {
67 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6866 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
6967
7068 var msg = [_]u8{};
......@@ -121,7 +119,6 @@ test "slice of type" {
121119}
122120
123121test "generic malloc free" {
124 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
125122 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
126123 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
127124
......@@ -233,7 +230,6 @@ fn sliceFromLenToLen(a_slice: []u8, start: usize, end: usize) []u8 {
233230}
234231
235232test "C pointer" {
236 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
237233 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
238234
239235 var buf: [*c]const u8 = "kjdhfkjdhfdkjhfkfjhdfkjdhfkdjhfdkjhf";
......@@ -288,7 +284,6 @@ test "slice type with custom alignment" {
288284}
289285
290286test "obtaining a null terminated slice" {
291 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
292287 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
293288
294289 // here we have a normal array
......@@ -590,7 +585,6 @@ test "array mult of slice gives ptr to array" {
590585}
591586
592587test "slice bounds in comptime concatenation" {
593 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
594588 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
595589
596590 const bs = comptime blk: {
test/behavior/struct.zig-7
......@@ -106,7 +106,6 @@ fn testMutation(foo: *StructFoo) void {
106106}
107107
108108test "struct byval assign" {
109 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
110109 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
111110
112111 var foo1: StructFoo = undefined;
......@@ -140,7 +139,6 @@ fn returnEmptyStructInstance() StructWithNoFields {
140139}
141140
142141test "fn call of struct field" {
143 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
144142 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
145143
146144 const Foo = struct {
......@@ -323,7 +321,6 @@ const VoidStructFieldsFoo = struct {
323321};
324322
325323test "return empty struct from fn" {
326 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
327324 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
328325
329326 _ = testReturnEmptyStructFromFn();
......@@ -334,7 +331,6 @@ fn testReturnEmptyStructFromFn() EmptyStruct2 {
334331}
335332
336333test "pass slice of empty struct to fn" {
337 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
338334 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
339335
340336 try expect(testPassSliceOfEmptyStructToFn(&[_]EmptyStruct2{EmptyStruct2{}}) == 1);
......@@ -369,7 +365,6 @@ const EmptyStruct = struct {
369365};
370366
371367test "align 1 field before self referential align 8 field as slice return type" {
372 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
373368 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
374369
375370 const result = alloc(Expr);
......@@ -1094,7 +1089,6 @@ test "packed struct with undefined initializers" {
10941089
10951090test "for loop over pointers to struct, getting field from struct pointer" {
10961091 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1097 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
10981092 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10991093 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
11001094
......@@ -1236,7 +1230,6 @@ test "initialize struct with empty literal" {
12361230}
12371231
12381232test "loading a struct pointer perfoms a copy" {
1239 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
12401233 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
12411234
12421235 const S = struct {
test/behavior/struct_contains_slice_of_itself.zig-1
......@@ -12,7 +12,6 @@ const NodeAligned = struct {
1212};
1313
1414test "struct contains slice of itself" {
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1615 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1716
1817 var other_nodes = [_]Node{
test/behavior/type_info.zig-3
......@@ -284,7 +284,6 @@ fn testUnion() !void {
284284}
285285
286286test "type info: struct info" {
287 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
288287 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
289288
290289 try testStruct();
......@@ -511,7 +510,6 @@ test "type info for async frames" {
511510
512511test "Declarations are returned in declaration order" {
513512 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
514 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
515513 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
516514
517515 const S = struct {
......@@ -535,7 +533,6 @@ test "Struct.is_tuple for anon list literal" {
535533
536534test "Struct.is_tuple for anon struct literal" {
537535 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
538 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
539536 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
540537
541538 const info = @typeInfo(@TypeOf(.{ .a = 0 }));
test/behavior/undefined.zig-2
......@@ -16,7 +16,6 @@ test "init static array to undefined" {
1616 // This test causes `initStaticArray()` to be codegen'd, and the
1717 // C backend does not yet support returning arrays, so it fails
1818 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
19 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2019 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2120
2221 try expect(static_array[0] == 1);
......@@ -79,7 +78,6 @@ test "assign undefined to struct with method" {
7978}
8079
8180test "type name of undefined" {
82 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8381 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8482
8583 const x = undefined;
test/behavior/underscore.zig-1
......@@ -7,7 +7,6 @@ test "ignore lval with underscore" {
77}
88
99test "ignore lval with underscore (while loop)" {
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1110 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1211
1312 while (optionalReturnError()) |_| {
test/behavior/union.zig-3
......@@ -413,7 +413,6 @@ test "tagged union with no payloads" {
413413}
414414
415415test "union with only 1 field casted to its enum type" {
416 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
417416 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
418417
419418 const Literal = union(enum) {
......@@ -563,7 +562,6 @@ const Baz = enum { A, B, C, D };
563562
564563test "tagged union type" {
565564 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
566 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
567565 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
568566
569567 const foo1 = TaggedFoo{ .One = 13 };
......@@ -697,7 +695,6 @@ const PartialInstWithPayload = union(enum) {
697695};
698696
699697test "union with only 1 field casted to its enum type which has enum value specified" {
700 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
701698 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
702699
703700 const Literal = union(enum) {
test/behavior/void.zig-1
......@@ -19,7 +19,6 @@ test "compare void with void compile time known" {
1919}
2020
2121test "iterate over a void slice" {
22 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2322 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2423
2524 var j: usize = 0;
test/behavior/while.zig-5
......@@ -4,7 +4,6 @@ const expect = std.testing.expect;
44const assert = std.debug.assert;
55
66test "while loop" {
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
87 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
98
109 var i: i32 = 0;
......@@ -24,7 +23,6 @@ fn whileLoop2() i32 {
2423}
2524
2625test "static eval while" {
27 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2826 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2927
3028 try expect(static_eval_while_number == 1);
......@@ -108,7 +106,6 @@ fn testBreakOuter() void {
108106test "while copies its payload" {
109107 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
110108 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
111 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
112109 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
113110
114111 const S = struct {
......@@ -148,7 +145,6 @@ fn runContinueAndBreakTest() !void {
148145test "while with optional as condition" {
149146 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
150147 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
151 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
152148 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
153149
154150 numbers_left = 10;
......@@ -162,7 +158,6 @@ test "while with optional as condition" {
162158test "while with optional as condition with else" {
163159 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
164160 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
165 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
166161 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
167162
168163 numbers_left = 10;