authorgravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2022-03-17 09:40:41+01:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-03-17 09:40:41+01:00
log3c3826bf93f7cbd88ecc30b43afac12cde313ffa
tree617ffc8f30d7750aad90ddbafcf2e33580a2a02d
parent87779cfd93fdcb525f386d693a099e4188a3fc44
parentdcc1de12b097db4971b85cfc0b4e18fec2c8b2c4
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #11192 from joachimschmidt557/stage2-arm

stage2 ARM: misc improvements

23 files changed, 189 insertions(+), 143 deletions(-)

src/arch/arm/CodeGen.zig+180-102
...@@ -530,13 +530,13 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {...@@ -530,13 +530,13 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {
530 switch (air_tags[inst]) {530 switch (air_tags[inst]) {
531 // zig fmt: off531 // zig fmt: off
532 .add, .ptr_add => try self.airBinOp(inst),532 .add, .ptr_add => try self.airBinOp(inst),
533 .addwrap => try self.airAddWrap(inst),533 .addwrap => try self.airBinOp(inst),
534 .add_sat => try self.airAddSat(inst),534 .add_sat => try self.airAddSat(inst),
535 .sub, .ptr_sub => try self.airBinOp(inst),535 .sub, .ptr_sub => try self.airBinOp(inst),
536 .subwrap => try self.airSubWrap(inst),536 .subwrap => try self.airBinOp(inst),
537 .sub_sat => try self.airSubSat(inst),537 .sub_sat => try self.airSubSat(inst),
538 .mul => try self.airBinOp(inst),538 .mul => try self.airBinOp(inst),
539 .mulwrap => try self.airMulWrap(inst),539 .mulwrap => try self.airBinOp(inst),
540 .mul_sat => try self.airMulSat(inst),540 .mul_sat => try self.airMulSat(inst),
541 .rem => try self.airRem(inst),541 .rem => try self.airRem(inst),
542 .mod => try self.airMod(inst),542 .mod => try self.airMod(inst),
...@@ -939,63 +939,85 @@ fn airIntCast(self: *Self, inst: Air.Inst.Index) !void {...@@ -939,63 +939,85 @@ fn airIntCast(self: *Self, inst: Air.Inst.Index) !void {
939 // return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });939 // return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
940}940}
941941
942fn airTrunc(self: *Self, inst: Air.Inst.Index) !void {942fn truncRegister(
943 const ty_op = self.air.instructions.items(.data)[inst].ty_op;943 self: *Self,
944 if (self.liveness.isUnused(inst))944 operand_reg: Register,
945 return self.finishAir(inst, .dead, .{ ty_op.operand, .none, .none });945 dest_reg: Register,
946 int_signedness: std.builtin.Signedness,
947 int_bits: u16,
948) !void {
949 // TODO check if sxtb/uxtb/sxth/uxth are more efficient
950 _ = try self.addInst(.{
951 .tag = switch (int_signedness) {
952 .signed => .sbfx,
953 .unsigned => .ubfx,
954 },
955 .data = .{ .rr_lsb_width = .{
956 .rd = dest_reg,
957 .rn = operand_reg,
958 .lsb = 0,
959 .width = @intCast(u6, int_bits),
960 } },
961 });
962}
946963
947 const operand_ty = self.air.typeOf(ty_op.operand);964fn trunc(
948 const operand = try self.resolveInst(ty_op.operand);965 self: *Self,
966 maybe_inst: ?Air.Inst.Index,
967 operand: MCValue,
968 operand_ty: Type,
969 dest_ty: Type,
970) !MCValue {
949 const info_a = operand_ty.intInfo(self.target.*);971 const info_a = operand_ty.intInfo(self.target.*);
950 const info_b = self.air.typeOfIndex(inst).intInfo(self.target.*);972 const info_b = dest_ty.intInfo(self.target.*);
951973
952 const result: MCValue = blk: {974 if (info_b.bits <= 32) {
953 if (info_b.bits <= 32) {975 const operand_reg = switch (operand) {
954 const operand_reg = switch (operand) {976 .register => |r| r,
955 .register => |r| r,977 else => operand_reg: {
956 else => operand_reg: {978 if (info_a.bits <= 32) {
957 if (info_a.bits <= 32) {979 break :operand_reg try self.copyToTmpRegister(operand_ty, operand);
958 break :operand_reg try self.copyToTmpRegister(operand_ty, operand);980 } else {
959 } else {981 return self.fail("TODO load least significant word into register", .{});
960 return self.fail("TODO load least significant word into register", .{});
961 }
962 },
963 };
964 self.register_manager.freezeRegs(&.{operand_reg});
965 defer self.register_manager.unfreezeRegs(&.{operand_reg});
966
967 const dest_reg = dest_reg: {
968 if (operand == .register and self.reuseOperand(inst, ty_op.operand, 0, operand)) {
969 break :dest_reg operand_reg;
970 }982 }
983 },
984 };
985 self.register_manager.freezeRegs(&.{operand_reg});
986 defer self.register_manager.unfreezeRegs(&.{operand_reg});
971987
972 break :dest_reg try self.register_manager.allocReg(null);988 const dest_reg = if (maybe_inst) |inst| blk: {
973 };989 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
974990
975 switch (info_b.bits) {991 if (operand == .register and self.reuseOperand(inst, ty_op.operand, 0, operand)) {
976 32 => {992 break :blk operand_reg;
977 try self.genSetReg(operand_ty, dest_reg, .{ .register = operand_reg });993 } else {
978 break :blk MCValue{ .register = dest_reg };994 break :blk try self.register_manager.allocReg(inst);
979 },
980 else => {
981 _ = try self.addInst(.{
982 .tag = switch (info_b.signedness) {
983 .signed => .sbfx,
984 .unsigned => .ubfx,
985 },
986 .data = .{ .rr_lsb_width = .{
987 .rd = dest_reg,
988 .rn = operand_reg,
989 .lsb = 0,
990 .width = @intCast(u6, info_b.bits),
991 } },
992 });
993 break :blk MCValue{ .register = dest_reg };
994 },
995 }995 }
996 } else {996 } else try self.register_manager.allocReg(null);
997 return self.fail("TODO: truncate to ints > 32 bits", .{});997
998 switch (info_b.bits) {
999 32 => {
1000 try self.genSetReg(operand_ty, dest_reg, .{ .register = operand_reg });
1001 return MCValue{ .register = dest_reg };
1002 },
1003 else => {
1004 try self.truncRegister(operand_reg, dest_reg, info_b.signedness, info_b.bits);
1005 return MCValue{ .register = dest_reg };
1006 },
998 }1007 }
1008 } else {
1009 return self.fail("TODO: truncate to ints > 32 bits", .{});
1010 }
1011}
1012
1013fn airTrunc(self: *Self, inst: Air.Inst.Index) !void {
1014 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1015 const operand = try self.resolveInst(ty_op.operand);
1016 const operand_ty = self.air.typeOf(ty_op.operand);
1017 const dest_ty = self.air.typeOfIndex(inst);
1018
1019 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else blk: {
1020 break :blk try self.trunc(inst, operand, operand_ty, dest_ty);
999 };1021 };
10001022
1001 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });1023 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
...@@ -1099,6 +1121,10 @@ fn airNot(self: *Self, inst: Air.Inst.Index) !void {...@@ -1099,6 +1121,10 @@ fn airNot(self: *Self, inst: Air.Inst.Index) !void {
1099 } },1121 } },
1100 });1122 });
11011123
1124 if (int_info.bits < 32) {
1125 try self.truncRegister(dest_reg, dest_reg, int_info.signedness, int_info.bits);
1126 }
1127
1102 break :result MCValue{ .register = dest_reg };1128 break :result MCValue{ .register = dest_reg };
1103 } else {1129 } else {
1104 return self.fail("TODO ARM not on integers > u32/i32", .{});1130 return self.fail("TODO ARM not on integers > u32/i32", .{});
...@@ -1957,8 +1983,8 @@ fn binOpRegister(...@@ -1957,8 +1983,8 @@ fn binOpRegister(
1957 if (!rhs_is_register) try self.genSetReg(rhs_ty, rhs_reg, rhs);1983 if (!rhs_is_register) try self.genSetReg(rhs_ty, rhs_reg, rhs);
19581984
1959 const mir_tag: Mir.Inst.Tag = switch (tag) {1985 const mir_tag: Mir.Inst.Tag = switch (tag) {
1960 .add, .ptr_add => .add,1986 .add => .add,
1961 .sub, .ptr_sub => .sub,1987 .sub => .sub,
1962 .cmp_eq => .cmp,1988 .cmp_eq => .cmp,
1963 .mul => .mul,1989 .mul => .mul,
1964 .bit_and,1990 .bit_and,
...@@ -1967,12 +1993,8 @@ fn binOpRegister(...@@ -1967,12 +1993,8 @@ fn binOpRegister(
1967 .bit_or,1993 .bit_or,
1968 .bool_or,1994 .bool_or,
1969 => .orr,1995 => .orr,
1970 .shl,1996 .shl_exact => .lsl,
1971 .shl_exact,1997 .shr_exact => switch (lhs_ty.intInfo(self.target.*).signedness) {
1972 => .lsl,
1973 .shr,
1974 .shr_exact,
1975 => switch (lhs_ty.intInfo(self.target.*).signedness) {
1976 .signed => Mir.Inst.Tag.asr,1998 .signed => Mir.Inst.Tag.asr,
1977 .unsigned => Mir.Inst.Tag.lsr,1999 .unsigned => Mir.Inst.Tag.lsr,
1978 },2000 },
...@@ -1988,16 +2010,12 @@ fn binOpRegister(...@@ -1988,16 +2010,12 @@ fn binOpRegister(
1988 .bit_or,2010 .bit_or,
1989 .bool_or,2011 .bool_or,
1990 .xor,2012 .xor,
1991 .ptr_add,
1992 .ptr_sub,
1993 => .{ .rr_op = .{2013 => .{ .rr_op = .{
1994 .rd = dest_reg,2014 .rd = dest_reg,
1995 .rn = lhs_reg,2015 .rn = lhs_reg,
1996 .op = Instruction.Operand.reg(rhs_reg, Instruction.Operand.Shift.none),2016 .op = Instruction.Operand.reg(rhs_reg, Instruction.Operand.Shift.none),
1997 } },2017 } },
1998 .shl,
1999 .shl_exact,2018 .shl_exact,
2000 .shr,
2001 .shr_exact,2019 .shr_exact,
2002 => .{ .rr_shift = .{2020 => .{ .rr_shift = .{
2003 .rd = dest_reg,2021 .rd = dest_reg,
...@@ -2094,12 +2112,8 @@ fn binOpImmediate(...@@ -2094,12 +2112,8 @@ fn binOpImmediate(
2094 .bit_or,2112 .bit_or,
2095 .bool_or,2113 .bool_or,
2096 => .orr,2114 => .orr,
2097 .shl,2115 .shl_exact => .lsl,
2098 .shl_exact,2116 .shr_exact => switch (lhs_ty.intInfo(self.target.*).signedness) {
2099 => .lsl,
2100 .shr,
2101 .shr_exact,
2102 => switch (lhs_ty.intInfo(self.target.*).signedness) {
2103 .signed => Mir.Inst.Tag.asr,2117 .signed => Mir.Inst.Tag.asr,
2104 .unsigned => Mir.Inst.Tag.lsr,2118 .unsigned => Mir.Inst.Tag.lsr,
2105 },2119 },
...@@ -2120,9 +2134,7 @@ fn binOpImmediate(...@@ -2120,9 +2134,7 @@ fn binOpImmediate(
2120 .rn = lhs_reg,2134 .rn = lhs_reg,
2121 .op = Instruction.Operand.fromU32(rhs.immediate).?,2135 .op = Instruction.Operand.fromU32(rhs.immediate).?,
2122 } },2136 } },
2123 .shl,
2124 .shl_exact,2137 .shl_exact,
2125 .shr,
2126 .shr_exact,2138 .shr_exact,
2127 => .{ .rr_shift = .{2139 => .{ .rr_shift = .{
2128 .rd = dest_reg,2140 .rd = dest_reg,
...@@ -2225,6 +2237,39 @@ fn binOp(...@@ -2225,6 +2237,39 @@ fn binOp(
2225 else => unreachable,2237 else => unreachable,
2226 }2238 }
2227 },2239 },
2240 .addwrap,
2241 .subwrap,
2242 .mulwrap,
2243 => {
2244 const base_tag: Air.Inst.Tag = switch (tag) {
2245 .addwrap => .add,
2246 .subwrap => .sub,
2247 .mulwrap => .mul,
2248 else => unreachable,
2249 };
2250
2251 // Generate an add/sub/mul
2252 const result = try self.binOp(base_tag, maybe_inst, lhs, rhs, lhs_ty, rhs_ty);
2253
2254 // Truncate if necessary
2255 switch (lhs_ty.zigTypeTag()) {
2256 .Vector => return self.fail("TODO ARM binary operations on vectors", .{}),
2257 .Int => {
2258 const int_info = lhs_ty.intInfo(self.target.*);
2259 if (int_info.bits <= 32) {
2260 const result_reg = result.register;
2261
2262 if (int_info.bits < 32) {
2263 try self.truncRegister(result_reg, result_reg, int_info.signedness, int_info.bits);
2264 return result;
2265 } else return result;
2266 } else {
2267 return self.fail("TODO ARM binary operations on integers > u32/i32", .{});
2268 }
2269 },
2270 else => unreachable,
2271 }
2272 },
2228 .bit_and,2273 .bit_and,
2229 .bit_or,2274 .bit_or,
2230 .xor,2275 .xor,
...@@ -2253,8 +2298,8 @@ fn binOp(...@@ -2253,8 +2298,8 @@ fn binOp(
2253 else => unreachable,2298 else => unreachable,
2254 }2299 }
2255 },2300 },
2256 .shl,2301 .shl_exact,
2257 .shr,2302 .shr_exact,
2258 => {2303 => {
2259 switch (lhs_ty.zigTypeTag()) {2304 switch (lhs_ty.zigTypeTag()) {
2260 .Vector => return self.fail("TODO ARM binary operations on vectors", .{}),2305 .Vector => return self.fail("TODO ARM binary operations on vectors", .{}),
...@@ -2275,6 +2320,41 @@ fn binOp(...@@ -2275,6 +2320,41 @@ fn binOp(
2275 else => unreachable,2320 else => unreachable,
2276 }2321 }
2277 },2322 },
2323 .shl,
2324 .shr,
2325 => {
2326 const base_tag: Air.Inst.Tag = switch (tag) {
2327 .shl => .shl_exact,
2328 .shr => .shr_exact,
2329 else => unreachable,
2330 };
2331
2332 // Generate a shl_exact/shr_exact
2333 const result = try self.binOp(base_tag, maybe_inst, lhs, rhs, lhs_ty, rhs_ty);
2334
2335 // Truncate if necessary
2336 switch (tag) {
2337 .shr => return result,
2338 .shl => switch (lhs_ty.zigTypeTag()) {
2339 .Vector => return self.fail("TODO ARM binary operations on vectors", .{}),
2340 .Int => {
2341 const int_info = lhs_ty.intInfo(self.target.*);
2342 if (int_info.bits <= 32) {
2343 const result_reg = result.register;
2344
2345 if (int_info.bits < 32) {
2346 try self.truncRegister(result_reg, result_reg, int_info.signedness, int_info.bits);
2347 return result;
2348 } else return result;
2349 } else {
2350 return self.fail("TODO ARM binary operations on integers > u32/i32", .{});
2351 }
2352 },
2353 else => unreachable,
2354 },
2355 else => unreachable,
2356 }
2357 },
2278 .bool_and,2358 .bool_and,
2279 .bool_or,2359 .bool_or,
2280 => {2360 => {
...@@ -2308,7 +2388,13 @@ fn binOp(...@@ -2308,7 +2388,13 @@ fn binOp(
2308 const elem_size = @intCast(u32, elem_ty.abiSize(self.target.*));2388 const elem_size = @intCast(u32, elem_ty.abiSize(self.target.*));
23092389
2310 if (elem_size == 1) {2390 if (elem_size == 1) {
2311 return try self.binOpRegister(tag, maybe_inst, lhs, rhs, lhs_ty, rhs_ty);2391 const base_tag: Air.Inst.Tag = switch (tag) {
2392 .ptr_add => .add,
2393 .ptr_sub => .sub,
2394 else => unreachable,
2395 };
2396
2397 return try self.binOpRegister(base_tag, maybe_inst, lhs, rhs, lhs_ty, rhs_ty);
2312 } else {2398 } else {
2313 // convert the offset into a byte offset by2399 // convert the offset into a byte offset by
2314 // multiplying it with elem_size2400 // multiplying it with elem_size
...@@ -2876,35 +2962,19 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {...@@ -2876,35 +2962,19 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
2876 const condition = Condition.fromCompareOperatorUnsigned(cmp_op);2962 const condition = Condition.fromCompareOperatorUnsigned(cmp_op);
2877 break :blk condition.negate();2963 break :blk condition.negate();
2878 },2964 },
2879 .register => |reg| blk: {2965 else => blk: {
2880 try self.spillCompareFlagsIfOccupied();2966 const reg = switch (cond) {
28812967 .register => |r| r,
2882 // cmp reg, 12968 else => try self.copyToTmpRegister(Type.bool, cond),
2883 // bne ...2969 };
2884 _ = try self.addInst(.{
2885 .tag = .cmp,
2886 .cond = .al,
2887 .data = .{ .rr_op = .{
2888 .rd = .r0,
2889 .rn = reg,
2890 .op = Instruction.Operand.imm(1, 0),
2891 } },
2892 });
28932970
2894 break :blk .ne;
2895 },
2896 .stack_offset,
2897 .memory,
2898 .stack_argument_offset,
2899 => blk: {
2900 try self.spillCompareFlagsIfOccupied();2971 try self.spillCompareFlagsIfOccupied();
29012972
2902 const reg = try self.copyToTmpRegister(Type.initTag(.bool), cond);
2903
2904 // cmp reg, 12973 // cmp reg, 1
2905 // bne ...2974 // bne ...
2906 _ = try self.addInst(.{2975 _ = try self.addInst(.{
2907 .tag = .cmp,2976 .tag = .cmp,
2977 .cond = .al,
2908 .data = .{ .rr_op = .{2978 .data = .{ .rr_op = .{
2909 .rd = .r0,2979 .rd = .r0,
2910 .rn = reg,2980 .rn = reg,
...@@ -2914,7 +2984,6 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {...@@ -2914,7 +2984,6 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
29142984
2915 break :blk .ne;2985 break :blk .ne;
2916 },2986 },
2917 else => return self.fail("TODO implement condbr {} when condition is {s}", .{ self.target.cpu.arch, @tagName(cond) }),
2918 };2987 };
29192988
2920 break :reloc try self.addInst(.{2989 break :reloc try self.addInst(.{
...@@ -3603,9 +3672,18 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro...@@ -3603,9 +3672,18 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro
3603 try self.genSetReg(ptr_ty, src_reg, .{ .ptr_stack_offset = off });3672 try self.genSetReg(ptr_ty, src_reg, .{ .ptr_stack_offset = off });
3604 },3673 },
3605 .memory => |addr| try self.genSetReg(ptr_ty, src_reg, .{ .immediate = @intCast(u32, addr) }),3674 .memory => |addr| try self.genSetReg(ptr_ty, src_reg, .{ .immediate = @intCast(u32, addr) }),
3606 .embedded_in_code,3675 .stack_argument_offset => |unadjusted_off| {
3607 .stack_argument_offset,3676 const adj_off = unadjusted_off + abi_size;
3608 => return self.fail("TODO genSetStack with src={}", .{mcv}),3677
3678 _ = try self.addInst(.{
3679 .tag = .ldr_ptr_stack_argument,
3680 .data = .{ .r_stack_offset = .{
3681 .rt = src_reg,
3682 .stack_offset = adj_off,
3683 } },
3684 });
3685 },
3686 .embedded_in_code => return self.fail("TODO genSetStack with src={}", .{mcv}),
3609 else => unreachable,3687 else => unreachable,
3610 }3688 }
36113689
src/arch/arm/Emit.zig+7
...@@ -112,6 +112,7 @@ pub fn emitMir(...@@ -112,6 +112,7 @@ pub fn emitMir(
112 .str => try emit.mirLoadStore(inst),112 .str => try emit.mirLoadStore(inst),
113 .strb => try emit.mirLoadStore(inst),113 .strb => try emit.mirLoadStore(inst),
114114
115 .ldr_ptr_stack_argument => try emit.mirLoadStackArgument(inst),
115 .ldr_stack_argument => try emit.mirLoadStackArgument(inst),116 .ldr_stack_argument => try emit.mirLoadStackArgument(inst),
116 .ldrb_stack_argument => try emit.mirLoadStackArgument(inst),117 .ldrb_stack_argument => try emit.mirLoadStackArgument(inst),
117 .ldrh_stack_argument => try emit.mirLoadStackArgument(inst),118 .ldrh_stack_argument => try emit.mirLoadStackArgument(inst),
...@@ -597,6 +598,12 @@ fn mirLoadStackArgument(emit: *Emit, inst: Mir.Inst.Index) !void {...@@ -597,6 +598,12 @@ fn mirLoadStackArgument(emit: *Emit, inst: Mir.Inst.Index) !void {
597598
598 const raw_offset = emit.prologue_stack_space - r_stack_offset.stack_offset;599 const raw_offset = emit.prologue_stack_space - r_stack_offset.stack_offset;
599 switch (tag) {600 switch (tag) {
601 .ldr_ptr_stack_argument => {
602 const operand = Instruction.Operand.fromU32(raw_offset) orelse
603 return emit.fail("TODO mirLoadStack larger offsets", .{});
604
605 try emit.writeInstruction(Instruction.add(cond, r_stack_offset.rt, .fp, operand));
606 },
600 .ldr_stack_argument,607 .ldr_stack_argument,
601 .ldrb_stack_argument,608 .ldrb_stack_argument,
602 => {609 => {
src/arch/arm/Mir.zig+2
...@@ -54,6 +54,8 @@ pub const Inst = struct {...@@ -54,6 +54,8 @@ pub const Inst = struct {
54 eor,54 eor,
55 /// Load Register55 /// Load Register
56 ldr,56 ldr,
57 /// Pseudo-instruction: Load pointer to stack argument offset
58 ldr_ptr_stack_argument,
57 /// Load Register59 /// Load Register
58 ldr_stack_argument,60 ldr_stack_argument,
59 /// Load Register Byte61 /// Load Register Byte
test/behavior/array.zig-1
...@@ -202,7 +202,6 @@ fn doSomeMangling(array: *[4]u8) void {...@@ -202,7 +202,6 @@ fn doSomeMangling(array: *[4]u8) void {
202202
203test "implicit cast zero sized array ptr to slice" {203test "implicit cast zero sized array ptr to slice" {
204 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;204 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
205 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
206205
207 {206 {
208 var b = "".*;207 var b = "".*;
test/behavior/bitcast.zig-1
...@@ -269,7 +269,6 @@ test "bitcast passed as tuple element" {...@@ -269,7 +269,6 @@ test "bitcast passed as tuple element" {
269269
270test "triple level result location with bitcast sandwich passed as tuple element" {270test "triple level result location with bitcast sandwich passed as tuple element" {
271 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;271 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
272 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
273272
274 const S = struct {273 const S = struct {
275 fn foo(args: anytype) !void {274 fn foo(args: anytype) !void {
test/behavior/bugs/11181.zig-2
...@@ -2,7 +2,6 @@ const builtin = @import("builtin");...@@ -2,7 +2,6 @@ const builtin = @import("builtin");
22
3test "const inferred array of slices" {3test "const inferred array of slices" {
4 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO4 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
5 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
6 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO5 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
76
8 const T = struct { v: bool };7 const T = struct { v: bool };
...@@ -17,7 +16,6 @@ test "const inferred array of slices" {...@@ -17,7 +16,6 @@ test "const inferred array of slices" {
1716
18test "var inferred array of slices" {17test "var inferred array of slices" {
19 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO18 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
20 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
21 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO19 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
2220
23 const T = struct { v: bool };21 const T = struct { v: bool };
test/behavior/bugs/1421.zig-1
...@@ -9,7 +9,6 @@ const S = struct {...@@ -9,7 +9,6 @@ const S = struct {
9};9};
1010
11test "functions with return type required to be comptime are generic" {11test "functions with return type required to be comptime are generic" {
12 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
13 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;12 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
14 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;13 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;14 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
test/behavior/bugs/2692.zig-1
...@@ -6,7 +6,6 @@ fn foo(a: []u8) void {...@@ -6,7 +6,6 @@ fn foo(a: []u8) void {
66
7test "address of 0 length array" {7test "address of 0 length array" {
8 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;8 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1110
12 var pt: [0]u8 = undefined;11 var pt: [0]u8 = undefined;
test/behavior/bugs/5474.zig-4
...@@ -49,15 +49,11 @@ fn constant() !void {...@@ -49,15 +49,11 @@ fn constant() !void {
49}49}
5050
51test "pointer-to-array constness for zero-size elements, var" {51test "pointer-to-array constness for zero-size elements, var" {
52 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
53
54 try mutable();52 try mutable();
55 comptime try mutable();53 comptime try mutable();
56}54}
5755
58test "pointer-to-array constness for zero-size elements, const" {56test "pointer-to-array constness for zero-size elements, const" {
59 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
60
61 try constant();57 try constant();
62 comptime try constant();58 comptime try constant();
63}59}
test/behavior/bugs/828.zig-1
...@@ -30,7 +30,6 @@ fn constCount(comptime cb: *const CountBy, comptime unused: u32) void {...@@ -30,7 +30,6 @@ fn constCount(comptime cb: *const CountBy, comptime unused: u32) void {
30}30}
3131
32test "comptime struct return should not return the same instance" {32test "comptime struct return should not return the same instance" {
33 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
34 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;33 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3534
36 //the first parameter must be passed by reference to trigger the bug35 //the first parameter must be passed by reference to trigger the bug
test/behavior/cast.zig-4
...@@ -1080,7 +1080,6 @@ test "compile time int to ptr of function" {...@@ -1080,7 +1080,6 @@ test "compile time int to ptr of function" {
10801080
1081 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1081 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1082 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO1082 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
1083 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1084 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1083 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1085 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1084 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
10861085
...@@ -1129,7 +1128,6 @@ fn returnNullLitFromOptionalTypeErrorRef() anyerror!?*A {...@@ -1129,7 +1128,6 @@ fn returnNullLitFromOptionalTypeErrorRef() anyerror!?*A {
1129test "peer type resolution: [0]u8 and []const u8" {1128test "peer type resolution: [0]u8 and []const u8" {
1130 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1129 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1131 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO1130 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
1132 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
11331131
1134 try expect(peerTypeEmptyArrayAndSlice(true, "hi").len == 0);1132 try expect(peerTypeEmptyArrayAndSlice(true, "hi").len == 0);
1135 try expect(peerTypeEmptyArrayAndSlice(false, "hi").len == 1);1133 try expect(peerTypeEmptyArrayAndSlice(false, "hi").len == 1);
...@@ -1278,8 +1276,6 @@ test "assignment to optional pointer result loc" {...@@ -1278,8 +1276,6 @@ test "assignment to optional pointer result loc" {
1278}1276}
12791277
1280test "cast between *[N]void and []void" {1278test "cast between *[N]void and []void" {
1281 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1282
1283 var a: [4]void = undefined;1279 var a: [4]void = undefined;
1284 var b: []void = &a;1280 var b: []void = &a;
1285 try expect(b.len == 4);1281 try expect(b.len == 4);
test/behavior/fn.zig-1
...@@ -389,7 +389,6 @@ test "ability to give comptime types and non comptime types to same parameter" {...@@ -389,7 +389,6 @@ test "ability to give comptime types and non comptime types to same parameter" {
389test "function with inferred error set but returning no error" {389test "function with inferred error set but returning no error" {
390 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO390 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
391 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO391 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
392 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
393392
394 const S = struct {393 const S = struct {
395 fn foo() !void {}394 fn foo() !void {}
test/behavior/math.zig-8
...@@ -367,7 +367,6 @@ test "binary not" {...@@ -367,7 +367,6 @@ test "binary not" {
367 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO367 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
368 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO368 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
369 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO369 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
370 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
371370
372 try expect(comptime x: {371 try expect(comptime x: {
373 break :x ~@as(u16, 0b1010101010101010) == 0b0101010101010101;372 break :x ~@as(u16, 0b1010101010101010) == 0b0101010101010101;
...@@ -488,7 +487,6 @@ fn mod(comptime T: type, a: T, b: T) T {...@@ -488,7 +487,6 @@ fn mod(comptime T: type, a: T, b: T) T {
488test "unsigned wrapping" {487test "unsigned wrapping" {
489 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO488 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
490 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO489 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
491 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
492490
493 try testUnsignedWrappingEval(maxInt(u32));491 try testUnsignedWrappingEval(maxInt(u32));
494 comptime try testUnsignedWrappingEval(maxInt(u32));492 comptime try testUnsignedWrappingEval(maxInt(u32));
...@@ -503,7 +501,6 @@ fn testUnsignedWrappingEval(x: u32) !void {...@@ -503,7 +501,6 @@ fn testUnsignedWrappingEval(x: u32) !void {
503test "signed wrapping" {501test "signed wrapping" {
504 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO502 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
505 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO503 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
506 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
507504
508 try testSignedWrappingEval(maxInt(i32));505 try testSignedWrappingEval(maxInt(i32));
509 comptime try testSignedWrappingEval(maxInt(i32));506 comptime try testSignedWrappingEval(maxInt(i32));
...@@ -518,7 +515,6 @@ fn testSignedWrappingEval(x: i32) !void {...@@ -518,7 +515,6 @@ fn testSignedWrappingEval(x: i32) !void {
518test "signed negation wrapping" {515test "signed negation wrapping" {
519 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO516 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
520 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO517 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
521 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
522518
523 try testSignedNegationWrappingEval(minInt(i16));519 try testSignedNegationWrappingEval(minInt(i16));
524 comptime try testSignedNegationWrappingEval(minInt(i16));520 comptime try testSignedNegationWrappingEval(minInt(i16));
...@@ -532,7 +528,6 @@ fn testSignedNegationWrappingEval(x: i16) !void {...@@ -532,7 +528,6 @@ fn testSignedNegationWrappingEval(x: i16) !void {
532test "unsigned negation wrapping" {528test "unsigned negation wrapping" {
533 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO529 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
534 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO530 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
535 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
536531
537 try testUnsignedNegationWrappingEval(1);532 try testUnsignedNegationWrappingEval(1);
538 comptime try testUnsignedNegationWrappingEval(1);533 comptime try testUnsignedNegationWrappingEval(1);
...@@ -868,7 +863,6 @@ test "quad hex float literal parsing accurate" {...@@ -868,7 +863,6 @@ test "quad hex float literal parsing accurate" {
868863
869test "truncating shift left" {864test "truncating shift left" {
870 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO865 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
871 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
872 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO866 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
873867
874 try testShlTrunc(maxInt(u16));868 try testShlTrunc(maxInt(u16));
...@@ -881,7 +875,6 @@ fn testShlTrunc(x: u16) !void {...@@ -881,7 +875,6 @@ fn testShlTrunc(x: u16) !void {
881875
882test "exact shift left" {876test "exact shift left" {
883 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO877 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
884 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
885 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO878 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
886879
887 try testShlExact(0b00110101);880 try testShlExact(0b00110101);
...@@ -894,7 +887,6 @@ fn testShlExact(x: u8) !void {...@@ -894,7 +887,6 @@ fn testShlExact(x: u8) !void {
894887
895test "exact shift right" {888test "exact shift right" {
896 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO889 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
897 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
898 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO890 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
899891
900 try testShrExact(0b10110100);892 try testShrExact(0b10110100);
test/behavior/optional.zig-1
...@@ -26,7 +26,6 @@ pub const EmptyStruct = struct {};...@@ -26,7 +26,6 @@ pub const EmptyStruct = struct {};
2626
27test "optional pointer to size zero struct" {27test "optional pointer to size zero struct" {
28 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;28 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
29 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
3029
31 var e = EmptyStruct{};30 var e = EmptyStruct{};
32 var o: ?*EmptyStruct = &e;31 var o: ?*EmptyStruct = &e;
test/behavior/ptrcast.zig-1
...@@ -59,7 +59,6 @@ fn testReinterpretStructWrappedBytesAsInteger() !void {...@@ -59,7 +59,6 @@ fn testReinterpretStructWrappedBytesAsInteger() !void {
59}59}
6060
61test "reinterpret bytes of an array into an extern struct" {61test "reinterpret bytes of an array into an extern struct" {
62 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
63 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO62 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
64 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO63 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
6564
test/behavior/sizeof_and_typeof.zig-1
...@@ -186,7 +186,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" {...@@ -186,7 +186,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" {
186}186}
187187
188test "@TypeOf() has no runtime side effects" {188test "@TypeOf() has no runtime side effects" {
189 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
190 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;189 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
191 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;190 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
192 const S = struct {191 const S = struct {
test/behavior/slice.zig-2
...@@ -70,7 +70,6 @@ test "comptime slice of undefined pointer of length 0" {...@@ -70,7 +70,6 @@ test "comptime slice of undefined pointer of length 0" {
70test "implicitly cast array of size 0 to slice" {70test "implicitly cast array of size 0 to slice" {
71 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;71 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
72 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO72 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
73 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7473
75 var msg = [_]u8{};74 var msg = [_]u8{};
76 try assertLenIsZero(&msg);75 try assertLenIsZero(&msg);
...@@ -206,7 +205,6 @@ const y = x[0x100..];...@@ -206,7 +205,6 @@ const y = x[0x100..];
206test "compile time slice of pointer to hard coded address" {205test "compile time slice of pointer to hard coded address" {
207 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO206 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
208 if (builtin.zig_backend == .stage1) return error.SkipZigTest;207 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
209 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
210 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;208 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
211 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;209 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
212210
test/behavior/struct.zig-2
...@@ -926,7 +926,6 @@ test "anonymous struct literal syntax" {...@@ -926,7 +926,6 @@ test "anonymous struct literal syntax" {
926926
927test "fully anonymous struct" {927test "fully anonymous struct" {
928 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO928 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
929 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
930929
931 const S = struct {930 const S = struct {
932 fn doTheTest() !void {931 fn doTheTest() !void {
...@@ -951,7 +950,6 @@ test "fully anonymous struct" {...@@ -951,7 +950,6 @@ test "fully anonymous struct" {
951950
952test "fully anonymous list literal" {951test "fully anonymous list literal" {
953 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO952 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
954 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
955953
956 const S = struct {954 const S = struct {
957 fn doTheTest() !void {955 fn doTheTest() !void {
test/behavior/struct_contains_null_ptr_itself.zig-1
...@@ -3,7 +3,6 @@ const expect = std.testing.expect;...@@ -3,7 +3,6 @@ const expect = std.testing.expect;
3const builtin = @import("builtin");3const builtin = @import("builtin");
44
5test "struct contains null pointer which contains original struct" {5test "struct contains null pointer which contains original struct" {
6 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;6 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;7 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;8 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
test/behavior/type.zig-2
...@@ -468,7 +468,6 @@ test "Type.Union from Type.Enum" {...@@ -468,7 +468,6 @@ test "Type.Union from Type.Enum" {
468 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO468 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
469 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO469 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
470 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO470 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
471 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
472 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO471 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
473472
474 const Tag = @Type(.{473 const Tag = @Type(.{
...@@ -500,7 +499,6 @@ test "Type.Union from regular enum" {...@@ -500,7 +499,6 @@ test "Type.Union from regular enum" {
500 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO499 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
501 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO500 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
502 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO501 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
503 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
504 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO502 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
505503
506 const E = enum { working_as_expected };504 const E = enum { working_as_expected };
test/behavior/type_info.zig-1
...@@ -385,7 +385,6 @@ extern fn foo(a: usize, b: bool, ...) callconv(.C) usize;...@@ -385,7 +385,6 @@ extern fn foo(a: usize, b: bool, ...) callconv(.C) usize;
385extern fn fooAligned(a: usize, b: bool, ...) align(4) callconv(.C) usize;385extern fn fooAligned(a: usize, b: bool, ...) align(4) callconv(.C) usize;
386386
387test "type info: generic function types" {387test "type info: generic function types" {
388 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
389 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;388 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
390 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;389 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
391390
test/behavior/var_args.zig-5
...@@ -14,7 +14,6 @@ fn add(args: anytype) i32 {...@@ -14,7 +14,6 @@ fn add(args: anytype) i32 {
1414
15test "add arbitrary args" {15test "add arbitrary args" {
16 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO16 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
17 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1817
19 try expect(add(.{ @as(i32, 1), @as(i32, 2), @as(i32, 3), @as(i32, 4) }) == 10);18 try expect(add(.{ @as(i32, 1), @as(i32, 2), @as(i32, 3), @as(i32, 4) }) == 10);
20 try expect(add(.{@as(i32, 1234)}) == 1234);19 try expect(add(.{@as(i32, 1234)}) == 1234);
...@@ -27,14 +26,12 @@ fn readFirstVarArg(args: anytype) void {...@@ -27,14 +26,12 @@ fn readFirstVarArg(args: anytype) void {
2726
28test "send void arg to var args" {27test "send void arg to var args" {
29 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO28 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
30 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
3129
32 readFirstVarArg(.{{}});30 readFirstVarArg(.{{}});
33}31}
3432
35test "pass args directly" {33test "pass args directly" {
36 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO34 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
37 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
38 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO35 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
3936
40 try expect(addSomeStuff(.{ @as(i32, 1), @as(i32, 2), @as(i32, 3), @as(i32, 4) }) == 10);37 try expect(addSomeStuff(.{ @as(i32, 1), @as(i32, 2), @as(i32, 3), @as(i32, 4) }) == 10);
...@@ -89,7 +86,6 @@ fn foo2(args: anytype) bool {...@@ -89,7 +86,6 @@ fn foo2(args: anytype) bool {
8986
90test "array of var args functions" {87test "array of var args functions" {
91 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO88 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
92 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
9389
94 try expect(foos[0](.{}));90 try expect(foos[0](.{}));
95 try expect(!foos[1](.{}));91 try expect(!foos[1](.{}));
...@@ -97,7 +93,6 @@ test "array of var args functions" {...@@ -97,7 +93,6 @@ test "array of var args functions" {
9793
98test "pass zero length array to var args param" {94test "pass zero length array to var args param" {
99 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO95 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
100 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10196
102 doNothingWithFirstArg(.{""});97 doNothingWithFirstArg(.{""});
103}98}
test/behavior/void.zig-1
...@@ -19,7 +19,6 @@ test "compare void with void compile time known" {...@@ -19,7 +19,6 @@ test "compare void with void compile time known" {
19}19}
2020
21test "iterate over a void slice" {21test "iterate over a void slice" {
22 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
23 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;22 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2423
25 var j: usize = 0;24 var j: usize = 0;