authorgravatar for paul.verigo@gmail.comPavel Verigo <paul.verigo@gmail.com> 2026-04-20 20:49:35+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-04-22 00:19:46+02:00
log22945fbbdc1ec89def58f39ddc8c35502b6e05dd
tree2d30a01ac77771db9f74f3927fa86969f6fa94a9
parent36faf76fe1eeb3aafcc4de94fc83fd8ca3b18b25

stage2-wasm: vector, std tests


30 files changed, 547 insertions(+), 453 deletions(-)

src/Air/Legalize.zig+9-4
...@@ -1503,7 +1503,7 @@ fn scalarizeBitcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?...@@ -1503,7 +1503,7 @@ fn scalarizeBitcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?
1503 l,1503 l,
1504 .store,1504 .store,
1505 index_ptr,1505 index_ptr,
1506 .fromValue(try pt.intValue(.usize, operand_ty.arrayLen(zcu))),1506 .fromValue(try pt.intValue(.usize, operand_ty.arrayLen(zcu) - 1)),
1507 );1507 );
1508 _ = uint_block.addBinOp(l, .store, result_ptr, .fromValue(try pt.intValue(uint_ty, 0)));1508 _ = uint_block.addBinOp(l, .store, result_ptr, .fromValue(try pt.intValue(uint_ty, 0)));
15091509
...@@ -1811,6 +1811,7 @@ fn scalarizeReduceBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, optimize...@@ -1811,6 +1811,7 @@ fn scalarizeReduceBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, optimize
1811 .Or, .Xor, .Add => switch (scalar_ty.zigTypeTag(zcu)) {1811 .Or, .Xor, .Add => switch (scalar_ty.zigTypeTag(zcu)) {
1812 .int => try pt.intValue(scalar_ty, 0),1812 .int => try pt.intValue(scalar_ty, 0),
1813 .float => try pt.floatValue(scalar_ty, 0.0),1813 .float => try pt.floatValue(scalar_ty, 0.0),
1814 .bool => .false,
1814 else => unreachable,1815 else => unreachable,
1815 },1816 },
1816 // identity for multiplication is 11817 // identity for multiplication is 1
...@@ -1820,9 +1821,13 @@ fn scalarizeReduceBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, optimize...@@ -1820,9 +1821,13 @@ fn scalarizeReduceBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, optimize
1820 else => unreachable,1821 else => unreachable,
1821 },1822 },
1822 // identity for AND is all 1 bits1823 // identity for AND is all 1 bits
1823 .And => switch (scalar_ty.intInfo(zcu).signedness) {1824 .And => switch (scalar_ty.zigTypeTag(zcu)) {
1824 .unsigned => try scalar_ty.maxIntScalar(pt, scalar_ty),1825 .int => switch (scalar_ty.intInfo(zcu).signedness) {
1825 .signed => try pt.intValue(scalar_ty, -1),1826 .unsigned => try scalar_ty.maxIntScalar(pt, scalar_ty),
1827 .signed => try pt.intValue(scalar_ty, -1),
1828 },
1829 .bool => .true,
1830 else => unreachable,
1826 },1831 },
1827 // identity for @min is maximum value1832 // identity for @min is maximum value
1828 .Min => switch (scalar_ty.zigTypeTag(zcu)) {1833 .Min => switch (scalar_ty.zigTypeTag(zcu)) {
src/Type.zig+2-2
...@@ -935,7 +935,7 @@ pub fn abiAlignment(ty: Type, zcu: *const Zcu) Alignment {...@@ -935,7 +935,7 @@ pub fn abiAlignment(ty: Type, zcu: *const Zcu) Alignment {
935 const bytes = ((elem_bits * vector_type.len) + 7) / 8;935 const bytes = ((elem_bits * vector_type.len) + 7) / 8;
936 return .fromByteUnits(std.math.ceilPowerOfTwoAssert(u32, bytes));936 return .fromByteUnits(std.math.ceilPowerOfTwoAssert(u32, bytes));
937 },937 },
938 .stage2_c => return Type.fromInterned(vector_type.child).abiAlignment(zcu),938 .stage2_c, .stage2_wasm => return Type.fromInterned(vector_type.child).abiAlignment(zcu),
939 .stage2_x86_64 => {939 .stage2_x86_64 => {
940 if (vector_type.child == .bool_type) {940 if (vector_type.child == .bool_type) {
941 if (vector_type.len > 256 and target.cpu.has(.x86, .avx512f)) return .@"64";941 if (vector_type.len > 256 and target.cpu.has(.x86, .avx512f)) return .@"64";
...@@ -1084,7 +1084,7 @@ pub fn abiSize(ty: Type, zcu: *const Zcu) u64 {...@@ -1084,7 +1084,7 @@ pub fn abiSize(ty: Type, zcu: *const Zcu) u64 {
1084 const elem_ty: Type = .fromInterned(vec.child);1084 const elem_ty: Type = .fromInterned(vec.child);
1085 const bytes = switch (zcu.comp.getZigBackend()) {1085 const bytes = switch (zcu.comp.getZigBackend()) {
1086 else => std.math.divCeil(u64, vec.len * elem_ty.bitSize(zcu), 8) catch unreachable,1086 else => std.math.divCeil(u64, vec.len * elem_ty.bitSize(zcu), 8) catch unreachable,
1087 .stage2_c => vec.len * elem_ty.abiSize(zcu),1087 .stage2_c, .stage2_wasm => vec.len * elem_ty.abiSize(zcu),
1088 .stage2_x86_64 => switch (elem_ty.toIntern()) {1088 .stage2_x86_64 => switch (elem_ty.toIntern()) {
1089 .bool_type => std.math.divCeil(u64, vec.len, 8) catch unreachable,1089 .bool_type => std.math.divCeil(u64, vec.len, 8) catch unreachable,
1090 else => vec.len * elem_ty.abiSize(zcu),1090 else => vec.len * elem_ty.abiSize(zcu),
src/codegen.zig+5-1
...@@ -484,7 +484,11 @@ pub fn generateSymbol(...@@ -484,7 +484,11 @@ pub fn generateSymbol(
484 },484 },
485 .vector_type => |vector_type| {485 .vector_type => |vector_type| {
486 const abi_size = math.cast(usize, ty.abiSize(zcu)) orelse return error.Overflow;486 const abi_size = math.cast(usize, ty.abiSize(zcu)) orelse return error.Overflow;
487 if (vector_type.child == .bool_type) {487 const vector_bool_bitpacked = switch (zcu.comp.getZigBackend()) {
488 .stage2_wasm => false,
489 else => true,
490 };
491 if (vector_type.child == .bool_type and vector_bool_bitpacked) {
488 const bytes = try w.writableSlice(abi_size);492 const bytes = try w.writableSlice(abi_size);
489 @memset(bytes, 0xaa);493 @memset(bytes, 0xaa);
490 var index: usize = 0;494 var index: usize = 0;
src/codegen/wasm/CodeGen.zig+369-262
...@@ -43,6 +43,83 @@ pub fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {...@@ -43,6 +43,83 @@ pub fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
43 .expand_packed_store,43 .expand_packed_store,
44 .expand_packed_struct_field_val,44 .expand_packed_struct_field_val,
45 .expand_packed_aggregate_init,45 .expand_packed_aggregate_init,
46
47 .scalarize_add,
48 .scalarize_add_optimized,
49 .scalarize_add_wrap,
50 .scalarize_add_sat,
51 .scalarize_sub,
52 .scalarize_sub_optimized,
53 .scalarize_sub_wrap,
54 .scalarize_sub_sat,
55 .scalarize_mul,
56 .scalarize_mul_optimized,
57 .scalarize_mul_wrap,
58 .scalarize_mul_sat,
59 .scalarize_div_float,
60 .scalarize_div_float_optimized,
61 .scalarize_div_trunc,
62 .scalarize_div_trunc_optimized,
63 .scalarize_div_floor,
64 .scalarize_div_floor_optimized,
65 .scalarize_div_exact,
66 .scalarize_div_exact_optimized,
67 .scalarize_rem,
68 .scalarize_rem_optimized,
69 .scalarize_mod,
70 .scalarize_mod_optimized,
71 .scalarize_max,
72 .scalarize_min,
73 .scalarize_add_with_overflow,
74 .scalarize_sub_with_overflow,
75 .scalarize_mul_with_overflow,
76 .scalarize_shl_with_overflow,
77 .scalarize_bit_and,
78 .scalarize_bit_or,
79 .scalarize_shr,
80 .scalarize_shr_exact,
81 .scalarize_shl,
82 .scalarize_shl_exact,
83 .scalarize_shl_sat,
84 .scalarize_xor,
85 .scalarize_not,
86 .scalarize_bitcast,
87 .scalarize_clz,
88 .scalarize_ctz,
89 .scalarize_popcount,
90 .scalarize_byte_swap,
91 .scalarize_bit_reverse,
92 .scalarize_sqrt,
93 .scalarize_sin,
94 .scalarize_cos,
95 .scalarize_tan,
96 .scalarize_exp,
97 .scalarize_exp2,
98 .scalarize_log,
99 .scalarize_log2,
100 .scalarize_log10,
101 .scalarize_abs,
102 .scalarize_floor,
103 .scalarize_ceil,
104 .scalarize_round,
105 .scalarize_trunc_float,
106 .scalarize_neg,
107 .scalarize_neg_optimized,
108 .scalarize_cmp_vector,
109 .scalarize_cmp_vector_optimized,
110 .scalarize_fptrunc,
111 .scalarize_fpext,
112 .scalarize_intcast,
113 .scalarize_trunc,
114 .scalarize_int_from_float,
115 .scalarize_int_from_float_optimized,
116 .scalarize_float_from_int,
117 .scalarize_reduce,
118 .scalarize_reduce_optimized,
119 .scalarize_shuffle_one,
120 .scalarize_shuffle_two,
121 .scalarize_select,
122 .scalarize_mul_add,
46 });123 });
47}124}
48125
...@@ -217,8 +294,7 @@ const WValue = union(enum) {...@@ -217,8 +294,7 @@ const WValue = union(enum) {
217 try gen.addLocal(.local_set, new_local.local.value);294 try gen.addLocal(.local_set, new_local.local.value);
218 return new_local;295 return new_local;
219 },296 },
220 .local, .stack_offset => return value,297 else => return value,
221 else => unreachable,
222 }298 }
223 }299 }
224300
...@@ -765,7 +841,8 @@ fn generateInner(cg: *CodeGen, any_returns: bool) InnerError!Mir {...@@ -765,7 +841,8 @@ fn generateInner(cg: *CodeGen, any_returns: bool) InnerError!Mir {
765 // In case we have a return value, but the last instruction is a noreturn (such as a while loop)841 // In case we have a return value, but the last instruction is a noreturn (such as a while loop)
766 // we emit an unreachable instruction to tell the stack validator that part will never be reached.842 // we emit an unreachable instruction to tell the stack validator that part will never be reached.
767 if (any_returns and cg.air.instructions.len > 0) {843 if (any_returns and cg.air.instructions.len > 0) {
768 const inst: Air.Inst.Index = @enumFromInt(cg.air.instructions.len - 1);844 const main_body = cg.air.getMainBody();
845 const inst: Air.Inst.Index = main_body[main_body.len - 1];
769 const last_inst_ty = cg.typeOfIndex(inst);846 const last_inst_ty = cg.typeOfIndex(inst);
770 if (!last_inst_ty.hasRuntimeBits(zcu)) {847 if (!last_inst_ty.hasRuntimeBits(zcu)) {
771 try cg.addTag(.@"unreachable");848 try cg.addTag(.@"unreachable");
...@@ -1032,10 +1109,6 @@ fn allocStackPtr(cg: *CodeGen, inst: Air.Inst.Index) !WValue {...@@ -1032,10 +1109,6 @@ fn allocStackPtr(cg: *CodeGen, inst: Air.Inst.Index) !WValue {
1032 try cg.initializeStack();1109 try cg.initializeStack();
1033 }1110 }
10341111
1035 if (!pointee_ty.hasRuntimeBits(zcu)) {
1036 return cg.allocStack(Type.usize); // create a value containing just the stack pointer.
1037 }
1038
1039 const abi_alignment = ptr_ty.ptrAlignment(zcu);1112 const abi_alignment = ptr_ty.ptrAlignment(zcu);
1040 const abi_size = std.math.cast(u32, pointee_ty.abiSize(zcu)) orelse {1113 const abi_size = std.math.cast(u32, pointee_ty.abiSize(zcu)) orelse {
1041 return cg.fail("Type {f} with ABI size of {d} exceeds stack frame size", .{1114 return cg.fail("Type {f} with ABI size of {d} exceeds stack frame size", .{
...@@ -1050,157 +1123,67 @@ fn allocStackPtr(cg: *CodeGen, inst: Air.Inst.Index) !WValue {...@@ -1050,157 +1123,67 @@ fn allocStackPtr(cg: *CodeGen, inst: Air.Inst.Index) !WValue {
1050 return .{ .stack_offset = .{ .value = offset, .references = 1 } };1123 return .{ .stack_offset = .{ .value = offset, .references = 1 } };
1051}1124}
10521125
1053/// Performs a copy of bytes for a given type. Copying all bytes1126fn emitMemoryCopy(cg: *CodeGen, dst: WValue, src: WValue, len: WValue) !void {
1054/// from rhs to lhs.
1055fn memcpy(cg: *CodeGen, dst: WValue, src: WValue, len: WValue) !void {
1056 const len_known_neq_0 = switch (len) {1127 const len_known_neq_0 = switch (len) {
1057 .imm32 => |val| if (val != 0) true else return,1128 .imm32 => |val| if (val != 0) true else return,
1058 .imm64 => |val| if (val != 0) true else return,1129 .imm64 => |val| if (val != 0) true else return,
1059 else => false,1130 else => false,
1060 };1131 };
1061 // When bulk_memory is enabled, we lower it to wasm's memcpy instruction.1132 const len0_ok = cg.target.cpu.has(.wasm, .nontrapping_bulk_memory_len0);
1062 // If not, we lower it ourselves manually1133 const emit_check = !(len0_ok or len_known_neq_0);
1063 if (cg.target.cpu.has(.wasm, .bulk_memory)) {
1064 const len0_ok = cg.target.cpu.has(.wasm, .nontrapping_bulk_memory_len0);
1065 const emit_check = !(len0_ok or len_known_neq_0);
10661134
1067 if (emit_check) {1135 if (emit_check) {
1068 try cg.startBlock(.block, .empty);1136 try cg.startBlock(.block, .empty);
1069
1070 // Even if `len` is zero, the spec requires an implementation to trap if `src + len` or
1071 // `dst + len` are out of memory bounds. This can easily happen in Zig in a case such
1072 // as:
1073 //
1074 // const dst: [*]u8 = undefined;
1075 // const src: [*]u8 = undefined;
1076 // var len: usize = runtime_zero();
1077 // @memcpy(dst[0..len], src[0..len]);
1078 //
1079 // So explicitly avoid using `memory.copy` in the `len == 0` case. Lovely design.
1080 try cg.emitWValue(len);
1081 try cg.addTag(.i32_eqz);
1082 try cg.addLabel(.br_if, 0);
1083 }
10841137
1085 try cg.lowerToStack(dst);1138 // Even if `len` is zero, the spec requires an implementation to trap if `src + len` or
1086 try cg.lowerToStack(src);1139 // `dst + len` are out of memory bounds. This can easily happen in Zig in a case such
1140 // as:
1141 //
1142 // const dst: [*]u8 = undefined;
1143 // const src: [*]u8 = undefined;
1144 // var len: usize = runtime_zero();
1145 // @memcpy(dst[0..len], src[0..len]);
1146 //
1147 // So explicitly avoid using `memory.copy` in the `len == 0` case. Lovely design.
1087 try cg.emitWValue(len);1148 try cg.emitWValue(len);
1088 try cg.addExtended(.memory_copy);1149 try cg.addTag(.i32_eqz);
10891150 try cg.addLabel(.br_if, 0);
1090 if (emit_check) {
1091 try cg.endBlock();
1092 }
1093
1094 return;
1095 }1151 }
10961152
1097 // when the length is comptime-known, rather than a runtime value, we can optimize the generated code by having1153 try cg.lowerToStack(dst);
1098 // the loop during codegen, rather than inserting a runtime loop into the binary.1154 try cg.lowerToStack(src);
1099 switch (len) {1155 try cg.emitWValue(len);
1100 .imm32, .imm64 => blk: {1156 try cg.addExtended(.memory_copy);
1101 const length = switch (len) {
1102 .imm32 => |val| val,
1103 .imm64 => |val| val,
1104 else => unreachable,
1105 };
1106 // if the size (length) is more than 32 bytes, we use a runtime loop instead to prevent
1107 // binary size bloat.
1108 if (length > 32) break :blk;
1109 var offset: u32 = 0;
1110 const lhs_base = dst.offset();
1111 const rhs_base = src.offset();
1112 while (offset < length) : (offset += 1) {
1113 // get dst's address to store the result
1114 try cg.emitWValue(dst);
1115 // load byte from src's address
1116 try cg.emitWValue(src);
1117 switch (cg.ptr_size) {
1118 .wasm32 => {
1119 try cg.addMemArg(.i32_load8_u, .{ .offset = rhs_base + offset, .alignment = 1 });
1120 try cg.addMemArg(.i32_store8, .{ .offset = lhs_base + offset, .alignment = 1 });
1121 },
1122 .wasm64 => {
1123 try cg.addMemArg(.i64_load8_u, .{ .offset = rhs_base + offset, .alignment = 1 });
1124 try cg.addMemArg(.i64_store8, .{ .offset = lhs_base + offset, .alignment = 1 });
1125 },
1126 }
1127 }
1128 return;
1129 },
1130 else => {},
1131 }
11321157
1133 // allocate a local for the offset, and set it to 0.1158 if (emit_check) {
1134 // This to ensure that inside loops we correctly re-set the counter.1159 try cg.endBlock();
1135 var offset = try cg.allocLocal(Type.usize); // local for counter
1136 defer offset.free(cg);
1137 switch (cg.ptr_size) {
1138 .wasm32 => try cg.addImm32(0),
1139 .wasm64 => try cg.addImm64(0),
1140 }1160 }
1141 try cg.addLocal(.local_set, offset.local.value);1161}
1142
1143 // outer block to jump to when loop is done
1144 try cg.startBlock(.block, .empty);
1145 try cg.startBlock(.loop, .empty);
11461162
1147 // loop condition (offset == length -> break)1163fn memcpy(cg: *CodeGen, dst: WValue, src: WValue, len: WValue) !void {
1148 {1164 if (cg.target.cpu.has(.wasm, .bulk_memory)) {
1149 try cg.emitWValue(offset);1165 try cg.emitMemoryCopy(dst, src, len);
1150 try cg.emitWValue(len);1166 return;
1151 switch (cg.ptr_size) {
1152 .wasm32 => try cg.addTag(.i32_eq),
1153 .wasm64 => try cg.addTag(.i64_eq),
1154 }
1155 try cg.addLabel(.br_if, 1); // jump out of loop into outer block (finished)
1156 }1167 }
11571168
1158 // get dst ptr1169 try cg.lowerToStack(dst);
1159 {1170 try cg.lowerToStack(src);
1160 try cg.emitWValue(dst);1171 try cg.emitWValue(len);
1161 try cg.emitWValue(offset);1172 try cg.addCallIntrinsic(.memcpy);
1162 switch (cg.ptr_size) {1173 try cg.addTag(.drop);
1163 .wasm32 => try cg.addTag(.i32_add),1174}
1164 .wasm64 => try cg.addTag(.i64_add),
1165 }
1166 }
11671175
1168 // get src value and also store in dst1176fn memmove(cg: *CodeGen, dst: WValue, src: WValue, len: WValue) !void {
1169 {1177 if (cg.target.cpu.has(.wasm, .bulk_memory)) {
1170 try cg.emitWValue(src);1178 try cg.emitMemoryCopy(dst, src, len);
1171 try cg.emitWValue(offset);1179 return;
1172 switch (cg.ptr_size) {
1173 .wasm32 => {
1174 try cg.addTag(.i32_add);
1175 try cg.addMemArg(.i32_load8_u, .{ .offset = src.offset(), .alignment = 1 });
1176 try cg.addMemArg(.i32_store8, .{ .offset = dst.offset(), .alignment = 1 });
1177 },
1178 .wasm64 => {
1179 try cg.addTag(.i64_add);
1180 try cg.addMemArg(.i64_load8_u, .{ .offset = src.offset(), .alignment = 1 });
1181 try cg.addMemArg(.i64_store8, .{ .offset = dst.offset(), .alignment = 1 });
1182 },
1183 }
1184 }1180 }
11851181
1186 // increment loop counter1182 try cg.lowerToStack(dst);
1187 {1183 try cg.lowerToStack(src);
1188 try cg.emitWValue(offset);1184 try cg.emitWValue(len);
1189 switch (cg.ptr_size) {1185 try cg.addCallIntrinsic(.memmove);
1190 .wasm32 => {1186 try cg.addTag(.drop);
1191 try cg.addImm32(1);
1192 try cg.addTag(.i32_add);
1193 },
1194 .wasm64 => {
1195 try cg.addImm64(1);
1196 try cg.addTag(.i64_add);
1197 },
1198 }
1199 try cg.addLocal(.local_set, offset.local.value);
1200 try cg.addLabel(.br, 0); // jump to start of loop
1201 }
1202 try cg.endBlock(); // close off loop block
1203 try cg.endBlock(); // close off outer block
1204}1187}
12051188
1206fn ptrSize(cg: *const CodeGen) u16 {1189fn ptrSize(cg: *const CodeGen) u16 {
...@@ -1310,14 +1293,34 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -1310,14 +1293,34 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
1310 const zcu = cg.pt.zcu;1293 const zcu = cg.pt.zcu;
1311 const air_tags = cg.air.instructions.items(.tag);1294 const air_tags = cg.air.instructions.items(.tag);
1312 return switch (air_tags[@intFromEnum(inst)]) {1295 return switch (air_tags[@intFromEnum(inst)]) {
1313 // No "scalarize" legalizations are enabled, so these instructions never appear.
1314 .legalize_vec_elem_val => unreachable,
1315 .legalize_vec_store_elem => unreachable,
1316 // No soft float legalizations are enabled.1296 // No soft float legalizations are enabled.
1317 .legalize_compiler_rt_call => unreachable,1297 .legalize_compiler_rt_call => unreachable,
13181298
1319 .inferred_alloc, .inferred_alloc_comptime => unreachable,1299 .inferred_alloc, .inferred_alloc_comptime => unreachable,
13201300
1301 .legalize_vec_elem_val => cg.airArrayElemVal(inst),
1302 .legalize_vec_store_elem => {
1303 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
1304 const bin_op = cg.air.extraData(Air.Bin, pl_op.payload).data;
1305 const vec_ptr = try cg.resolveInst(pl_op.operand);
1306 const elem_idx = try cg.resolveInst(bin_op.lhs);
1307 const elem_val = try cg.resolveInst(bin_op.rhs);
1308
1309 const elem_ty = cg.typeOf(bin_op.rhs);
1310 const elem_size = elem_ty.abiSize(zcu);
1311
1312 try cg.lowerToStack(vec_ptr);
1313 try cg.emitWValue(elem_idx);
1314 try cg.addImm32(@intCast(elem_size));
1315 try cg.addTag(.i32_mul);
1316 try cg.addTag(.i32_add);
1317 const ptr = try WValue.toLocal(.stack, cg, Type.usize);
1318
1319 try cg.store(ptr, elem_val, elem_ty, 0);
1320
1321 return cg.finishAir(inst, .none, &.{ pl_op.operand, bin_op.lhs, bin_op.rhs });
1322 },
1323
1321 .add,1324 .add,
1322 .sub,1325 .sub,
1323 .mul,1326 .mul,
...@@ -1818,7 +1821,8 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -1818,7 +1821,8 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
1818 .wasm_memory_size => cg.airWasmMemorySize(inst),1821 .wasm_memory_size => cg.airWasmMemorySize(inst),
1819 .wasm_memory_grow => cg.airWasmMemoryGrow(inst),1822 .wasm_memory_grow => cg.airWasmMemoryGrow(inst),
18201823
1821 .memcpy, .memmove => cg.airMemcpy(inst),1824 .memcpy => cg.airMemcpy(inst),
1825 .memmove => cg.airMemmove(inst),
18221826
1823 .ret_addr => cg.airRetAddr(inst),1827 .ret_addr => cg.airRetAddr(inst),
1824 .tag_name => cg.airTagName(inst),1828 .tag_name => cg.airTagName(inst),
...@@ -2105,7 +2109,7 @@ fn airStore(cg: *CodeGen, inst: Air.Inst.Index, safety: bool) InnerError!void {...@@ -2105,7 +2109,7 @@ fn airStore(cg: *CodeGen, inst: Air.Inst.Index, safety: bool) InnerError!void {
2105 return cg.finishAir(inst, .none, &.{ bin_op.lhs, bin_op.rhs });2109 return cg.finishAir(inst, .none, &.{ bin_op.lhs, bin_op.rhs });
2106 }2110 }
21072111
2108 assert(ptr_info.packed_offset.host_size == 0); // legalize .expand_packed_store2112 assert(!(ptr_info.packed_offset.host_size > 0 and ptr_info.flags.vector_index == .none)); // legalize .expand_packed_store
21092113
2110 try cg.store(lhs, rhs, ty, 0);2114 try cg.store(lhs, rhs, ty, 0);
21112115
...@@ -2180,35 +2184,22 @@ fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -2180,35 +2184,22 @@ fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
21802184
2181 if (!ty.hasRuntimeBits(zcu)) return cg.finishAir(inst, .none, &.{ty_op.operand});2185 if (!ty.hasRuntimeBits(zcu)) return cg.finishAir(inst, .none, &.{ty_op.operand});
21822186
2183 assert(ptr_info.packed_offset.host_size == 0); // legalize .expand_packed_load2187 assert(!(ptr_info.packed_offset.host_size > 0 and ptr_info.flags.vector_index == .none)); // legalize .expand_packed_load
2184
2185 const result = result: {
2186 if (isByRef(ty, zcu, cg.target)) {
2187 const new_local = try cg.allocStack(ty);
2188 try cg.store(new_local, operand, ty, 0);
2189 break :result new_local;
2190 }
21912188
2192 const loaded = try cg.load(operand, ty, 0);2189 const result = try cg.load(operand, ty, 0);
2193 const ty_size = ty.abiSize(zcu);
2194 if (ty.isAbiInt(zcu) and ty_size * 8 > ty.bitSize(zcu)) {
2195 const int_info = ty.intInfo(zcu);
2196 const loaded_int_ty: IntType = .{
2197 .is_signed = int_info.signedness == .signed,
2198 .bits = @intCast(ty_size * 8),
2199 };
2200 break :result try cg.intTrunc(.fromType(cg, ty), loaded_int_ty, loaded);
2201 } else {
2202 break :result loaded;
2203 }
2204 };
2205 return cg.finishAir(inst, result, &.{ty_op.operand});2190 return cg.finishAir(inst, result, &.{ty_op.operand});
2206}2191}
22072192
2208/// Loads an operand from the linear memory section.2193/// Loads an operand from the linear memory section.
2209/// NOTE: Leaves the value on the stack.2194/// NOTE: Leaves the value on the stack, if isByRef == false.
2210fn load(cg: *CodeGen, operand: WValue, ty: Type, offset: u32) InnerError!WValue {2195fn load(cg: *CodeGen, operand: WValue, ty: Type, offset: u32) InnerError!WValue {
2211 const zcu = cg.pt.zcu;2196 const zcu = cg.pt.zcu;
2197 if (isByRef(ty, zcu, cg.target)) {
2198 const val = try cg.allocStack(ty);
2199 try cg.store(val, try operand.toLocal(cg, .usize), ty, 0);
2200 return val;
2201 }
2202
2212 // load local's value from memory by its stack position2203 // load local's value from memory by its stack position
2213 try cg.emitWValue(operand);2204 try cg.emitWValue(operand);
22142205
...@@ -2254,6 +2245,14 @@ fn load(cg: *CodeGen, operand: WValue, ty: Type, offset: u32) InnerError!WValue...@@ -2254,6 +2245,14 @@ fn load(cg: *CodeGen, operand: WValue, ty: Type, offset: u32) InnerError!WValue
2254 },2245 },
2255 );2246 );
22562247
2248 if (ty.isAbiInt(zcu)) {
2249 const int_info: IntType = .fromType(cg, ty);
2250 switch (int_info.bits) {
2251 8, 16, 32, 64 => {},
2252 else => _ = try cg.intWrap(int_info, .stack),
2253 }
2254 }
2255
2257 return .stack;2256 return .stack;
2258}2257}
22592258
...@@ -2321,7 +2320,7 @@ const IntType = struct {...@@ -2321,7 +2320,7 @@ const IntType = struct {
2321 .hasRuntimeBits(zcu)) .{ .is_signed = false, .bits = zcu.errorSetBits() } else unreachable,2320 .hasRuntimeBits(zcu)) .{ .is_signed = false, .bits = zcu.errorSetBits() } else unreachable,
2322 .simple_type => |simple_type| return switch (simple_type) {2321 .simple_type => |simple_type| return switch (simple_type) {
2323 .bool => .{ .is_signed = false, .bits = 1 },2322 .bool => .{ .is_signed = false, .bits = 1 },
2324 .anyerror => .{ .is_signed = false, .bits = zcu.errorSetBits() },2323 .anyerror, .adhoc_inferred_error_set => .{ .is_signed = false, .bits = zcu.errorSetBits() },
2325 .isize => .{ .is_signed = true, .bits = cg.target.ptrBitWidth() },2324 .isize => .{ .is_signed = true, .bits = cg.target.ptrBitWidth() },
2326 .usize => .{ .is_signed = false, .bits = cg.target.ptrBitWidth() },2325 .usize => .{ .is_signed = false, .bits = cg.target.ptrBitWidth() },
2327 .c_char => .{ .is_signed = cg.target.cCharSignedness() == .signed, .bits = cg.target.cTypeBitSize(.char) },2326 .c_char => .{ .is_signed = cg.target.cCharSignedness() == .signed, .bits = cg.target.cTypeBitSize(.char) },
...@@ -2334,7 +2333,7 @@ const IntType = struct {...@@ -2334,7 +2333,7 @@ const IntType = struct {
2334 .c_longlong => .{ .is_signed = true, .bits = cg.target.cTypeBitSize(.longlong) },2333 .c_longlong => .{ .is_signed = true, .bits = cg.target.cTypeBitSize(.longlong) },
2335 .c_ulonglong => .{ .is_signed = false, .bits = cg.target.cTypeBitSize(.longlong) },2334 .c_ulonglong => .{ .is_signed = false, .bits = cg.target.cTypeBitSize(.longlong) },
2336 .f16, .f32, .f64, .f80, .f128, .c_longdouble => unreachable,2335 .f16, .f32, .f64, .f80, .f128, .c_longdouble => unreachable,
2337 .anyopaque, .void, .type, .comptime_int, .comptime_float, .noreturn, .null, .undefined, .enum_literal, .adhoc_inferred_error_set, .generic_poison => unreachable,2336 .anyopaque, .void, .type, .comptime_int, .comptime_float, .noreturn, .null, .undefined, .enum_literal, .generic_poison => unreachable,
2338 },2337 },
2339 .struct_type => {2338 .struct_type => {
2340 const loaded_struct = ip.loadStructType(ty_index);2339 const loaded_struct = ip.loadStructType(ty_index);
...@@ -3069,7 +3068,13 @@ fn intClz(cg: *CodeGen, ty: IntType, operand: WValue) InnerError!WValue {...@@ -3069,7 +3068,13 @@ fn intClz(cg: *CodeGen, ty: IntType, operand: WValue) InnerError!WValue {
3069 var msb = try (try cg.load(operand, Type.u64, 8)).toLocal(cg, Type.u64);3068 var msb = try (try cg.load(operand, Type.u64, 8)).toLocal(cg, Type.u64);
3070 defer msb.free(cg);3069 defer msb.free(cg);
30713070
3072 try cg.emitWValue(msb);3071 if (ty.is_signed and ty.bits < 128) {
3072 const mask: u64 = ~@as(u64, 0) >> @intCast(128 - ty.bits);
3073 _ = try cg.intAnd(.u64, msb, .{ .imm64 = mask });
3074 } else {
3075 try cg.emitWValue(msb);
3076 }
3077
3073 try cg.addTag(.i64_clz);3078 try cg.addTag(.i64_clz);
3074 _ = try cg.load(operand, Type.u64, 0);3079 _ = try cg.load(operand, Type.u64, 0);
3075 try cg.addTag(.i64_clz);3080 try cg.addTag(.i64_clz);
...@@ -3078,6 +3083,12 @@ fn intClz(cg: *CodeGen, ty: IntType, operand: WValue) InnerError!WValue {...@@ -3078,6 +3083,12 @@ fn intClz(cg: *CodeGen, ty: IntType, operand: WValue) InnerError!WValue {
3078 _ = try cg.intCmp(.u64, .neq, msb, .{ .imm64 = 0 });3083 _ = try cg.intCmp(.u64, .neq, msb, .{ .imm64 = 0 });
3079 try cg.addTag(.select);3084 try cg.addTag(.select);
3080 try cg.addTag(.i32_wrap_i64);3085 try cg.addTag(.i32_wrap_i64);
3086
3087 if (ty.bits < 128) {
3088 try cg.addImm32(128 - ty.bits);
3089 try cg.addTag(.i32_sub);
3090 }
3091
3081 return .stack;3092 return .stack;
3082 },3093 },
3083 else => {3094 else => {
...@@ -4622,11 +4633,18 @@ fn floatFromInt(cg: *CodeGen, dest_ty: FloatType, src_ty: IntType, operand: WVal...@@ -4622,11 +4633,18 @@ fn floatFromInt(cg: *CodeGen, dest_ty: FloatType, src_ty: IntType, operand: WVal
4622fn lowerPtr(cg: *CodeGen, ptr_val: InternPool.Index, prev_offset: u64) InnerError!WValue {4633fn lowerPtr(cg: *CodeGen, ptr_val: InternPool.Index, prev_offset: u64) InnerError!WValue {
4623 const pt = cg.pt;4634 const pt = cg.pt;
4624 const zcu = pt.zcu;4635 const zcu = pt.zcu;
4636 const ip = &zcu.intern_pool;
4625 const ptr = zcu.intern_pool.indexToKey(ptr_val).ptr;4637 const ptr = zcu.intern_pool.indexToKey(ptr_val).ptr;
4626 const offset: u64 = prev_offset + ptr.byte_offset;4638 const offset: u64 = prev_offset + ptr.byte_offset;
4627 return switch (ptr.base_addr) {4639 return switch (ptr.base_addr) {
4628 .nav => |nav| return .{ .nav_ref = .{ .nav_index = nav, .offset = @intCast(offset) } },4640 .nav => |nav| return if (Type.fromInterned(ip.getNav(nav).resolved.?.type).isRuntimeFnOrHasRuntimeBits(zcu))
4629 .uav => |uav| return .{ .uav_ref = .{ .ip_index = uav.val, .offset = @intCast(offset), .orig_ptr_ty = uav.orig_ty } },4641 .{ .nav_ref = .{ .nav_index = nav, .offset = @intCast(offset) } }
4642 else
4643 .{ .imm32 = @intCast(zcu.navAlignment(nav).forward(@as(u32, 0xaaaaaaaa))) },
4644 .uav => |uav| return if (Type.fromInterned(ip.typeOf(uav.val)).isRuntimeFnOrHasRuntimeBits(zcu))
4645 .{ .uav_ref = .{ .ip_index = uav.val, .offset = @intCast(offset), .orig_ptr_ty = uav.orig_ty } }
4646 else
4647 .{ .imm32 = @intCast(Type.fromInterned(uav.orig_ty).ptrAlignment(zcu).forward(@as(u32, 0xaaaaaaaa))) },
4630 .int => return cg.lowerConstant(try pt.intValue(.usize, offset)),4648 .int => return cg.lowerConstant(try pt.intValue(.usize, offset)),
4631 .eu_payload => |eu_ptr| try cg.lowerPtr(4649 .eu_payload => |eu_ptr| try cg.lowerPtr(
4632 eu_ptr,4650 eu_ptr,
...@@ -4960,9 +4978,9 @@ fn airCmp(cg: *CodeGen, inst: Air.Inst.Index, op: std.math.CompareOperator) Inne...@@ -4960,9 +4978,9 @@ fn airCmp(cg: *CodeGen, inst: Air.Inst.Index, op: std.math.CompareOperator) Inne
4960 try cg.addImm32(if (op == .eq) 0 else 1);4978 try cg.addImm32(if (op == .eq) 0 else 1);
4961 try cg.addLocal(.local_set, result.local.value);4979 try cg.addLocal(.local_set, result.local.value);
49624980
4963 _ = try cg.isNull(lhs, operand_ty, .i32_eq);4981 _ = try cg.isNull(lhs, operand_ty, .i32_eq, .value);
4964 try cg.addLocal(.local_tee, lhs_null.local.value);4982 try cg.addLocal(.local_tee, lhs_null.local.value);
4965 _ = try cg.isNull(rhs, operand_ty, .i32_eq);4983 _ = try cg.isNull(rhs, operand_ty, .i32_eq, .value);
4966 try cg.addTag(.i32_ne);4984 try cg.addTag(.i32_ne);
4967 try cg.addLabel(.br_if, 0);4985 try cg.addLabel(.br_if, 0);
49684986
...@@ -5234,26 +5252,56 @@ fn airBitcast(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -5234,26 +5252,56 @@ fn airBitcast(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5234fn bitcast(cg: *CodeGen, dest_ty: Type, src_ty: Type, operand: WValue) InnerError!?WValue {5252fn bitcast(cg: *CodeGen, dest_ty: Type, src_ty: Type, operand: WValue) InnerError!?WValue {
5235 const zcu = cg.pt.zcu;5253 const zcu = cg.pt.zcu;
5236 const bit_size = src_ty.bitSize(zcu);5254 const bit_size = src_ty.bitSize(zcu);
5237 const needs_wrapping = (src_ty.isSignedInt(zcu) != dest_ty.isSignedInt(zcu)) and5255 const dest_signed = if (dest_ty.isAbiInt(zcu)) IntType.fromType(cg, dest_ty).is_signed else false;
5256 const src_signed = if (src_ty.isAbiInt(zcu)) IntType.fromType(cg, src_ty).is_signed else false;
5257 const needs_wrapping = (src_signed != dest_signed) and
5238 bit_size != 32 and bit_size != 64 and bit_size != 128;5258 bit_size != 32 and bit_size != 64 and bit_size != 128;
52395259
5240 if (src_ty.isAnyFloat() or dest_ty.isAnyFloat()) {5260 if (src_ty.isAnyFloat()) {
5241 if (dest_ty.ip_index == .f16_type or src_ty.ip_index == .f16_type) return null;5261 const float_ty: FloatType = .fromType(cg, src_ty);
5242 if (dest_ty.bitSize(zcu) > 64) return null;5262 switch (float_ty) {
5243 assert((dest_ty.isInt(zcu) and src_ty.isAnyFloat()) or (dest_ty.isAnyFloat() and src_ty.isInt(zcu)));5263 .f16, .f80, .f128 => {
52445264 if (dest_signed) {
5245 const dest_valtype = typeToValtype(dest_ty, zcu, cg.target);5265 const int_ty: IntType = .fromType(cg, dest_ty);
5246 const opcode: Mir.Inst.Tag = switch (dest_valtype) {5266 return try cg.intWrap(int_ty, operand);
5247 .i32 => .i32_reinterpret_f32,5267 } else {
5248 .i64 => .i64_reinterpret_f64,5268 return null;
5249 .f32 => .f32_reinterpret_i32,5269 }
5250 .f64 => .f64_reinterpret_i64,5270 },
5251 else => unreachable,5271 .f32 => {
5252 };5272 try cg.emitWValue(operand);
5273 try cg.addTag(.i32_reinterpret_f32);
5274 return .stack;
5275 },
5276 .f64 => {
5277 try cg.emitWValue(operand);
5278 try cg.addTag(.i64_reinterpret_f64);
5279 return .stack;
5280 },
5281 }
5282 }
52535283
5254 try cg.emitWValue(operand);5284 if (dest_ty.isAnyFloat()) {
5255 try cg.addTag(opcode);5285 const float_ty: FloatType = .fromType(cg, dest_ty);
5256 return .stack;5286 switch (float_ty) {
5287 .f16, .f80, .f128 => {
5288 if (src_signed) {
5289 return try cg.intWrap(.{ .bits = @intCast(bit_size), .is_signed = false }, operand);
5290 } else {
5291 return null;
5292 }
5293 },
5294 .f32 => {
5295 try cg.emitWValue(operand);
5296 try cg.addTag(.f32_reinterpret_i32);
5297 return .stack;
5298 },
5299 .f64 => {
5300 try cg.emitWValue(operand);
5301 try cg.addTag(.f64_reinterpret_i64);
5302 return .stack;
5303 },
5304 }
5257 }5305 }
52585306
5259 if (isByRef(src_ty, zcu, cg.target) and !isByRef(dest_ty, zcu, cg.target)) {5307 if (isByRef(src_ty, zcu, cg.target) and !isByRef(dest_ty, zcu, cg.target)) {
...@@ -5751,23 +5799,27 @@ fn airWrapErrUnionErr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -5751,23 +5799,27 @@ fn airWrapErrUnionErr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5751 return cg.finishAir(inst, result, &.{ty_op.operand});5799 return cg.finishAir(inst, result, &.{ty_op.operand});
5752}5800}
57535801
5754fn airIsNull(cg: *CodeGen, inst: Air.Inst.Index, opcode: std.wasm.Opcode, op_kind: enum { value, ptr }) InnerError!void {5802const OpKind = enum { value, ptr };
5755 const zcu = cg.pt.zcu;5803
5804fn airIsNull(cg: *CodeGen, inst: Air.Inst.Index, opcode: std.wasm.Opcode, op_kind: OpKind) InnerError!void {
5756 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;5805 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5757 const operand = try cg.resolveInst(un_op);5806 const operand = try cg.resolveInst(un_op);
57585807
5759 const op_ty = cg.typeOf(un_op);5808 const op_ty = cg.typeOf(un_op);
5760 const optional_ty = if (op_kind == .ptr) op_ty.childType(zcu) else op_ty;5809 const result = try cg.isNull(operand, op_ty, opcode, op_kind);
5761 const result = try cg.isNull(operand, optional_ty, opcode);
5762 return cg.finishAir(inst, result, &.{un_op});5810 return cg.finishAir(inst, result, &.{un_op});
5763}5811}
57645812
5765/// For a given type and operand, checks if it's considered `null`.5813/// For a given type and operand, checks if it's considered `null`.
5766/// NOTE: Leaves the result on the stack5814/// NOTE: Leaves the result on the stack
5767fn isNull(cg: *CodeGen, operand: WValue, optional_ty: Type, opcode: std.wasm.Opcode) InnerError!WValue {5815fn isNull(cg: *CodeGen, operand: WValue, op_ty: Type, opcode: std.wasm.Opcode, op_kind: OpKind) InnerError!WValue {
5768 const pt = cg.pt;5816 const pt = cg.pt;
5769 const zcu = pt.zcu;5817 const zcu = pt.zcu;
5770 try cg.emitWValue(operand);5818 try cg.emitWValue(operand);
5819 const optional_ty = switch (op_kind) {
5820 .value => op_ty,
5821 .ptr => op_ty.childType(zcu),
5822 };
5771 const payload_ty = optional_ty.optionalChild(zcu);5823 const payload_ty = optional_ty.optionalChild(zcu);
5772 if (!optional_ty.optionalReprIsPayload(zcu)) {5824 if (!optional_ty.optionalReprIsPayload(zcu)) {
5773 // When payload is zero-bits, we can treat operand as a value, rather than5825 // When payload is zero-bits, we can treat operand as a value, rather than
...@@ -5783,6 +5835,13 @@ fn isNull(cg: *CodeGen, operand: WValue, optional_ty: Type, opcode: std.wasm.Opc...@@ -5783,6 +5835,13 @@ fn isNull(cg: *CodeGen, operand: WValue, optional_ty: Type, opcode: std.wasm.Opc
5783 .wasm32 => try cg.addMemArg(.i32_load, .{ .offset = operand.offset(), .alignment = 4 }),5835 .wasm32 => try cg.addMemArg(.i32_load, .{ .offset = operand.offset(), .alignment = 4 }),
5784 .wasm64 => try cg.addMemArg(.i64_load, .{ .offset = operand.offset(), .alignment = 8 }),5836 .wasm64 => try cg.addMemArg(.i64_load, .{ .offset = operand.offset(), .alignment = 8 }),
5785 }5837 }
5838 } else {
5839 if (op_kind == .ptr) {
5840 try cg.addMemArg(.i32_load, .{
5841 .offset = operand.offset(),
5842 .alignment = 4,
5843 });
5844 }
5786 }5845 }
57875846
5788 // Compare the null value with '0'5847 // Compare the null value with '0'
...@@ -5934,10 +5993,7 @@ fn airSliceElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -5934,10 +5993,7 @@ fn airSliceElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5934 try cg.addTag(.i32_mul);5993 try cg.addTag(.i32_mul);
5935 try cg.addTag(.i32_add);5994 try cg.addTag(.i32_add);
59365995
5937 const elem_result = if (isByRef(elem_ty, zcu, cg.target))5996 const elem_result = try cg.load(.stack, elem_ty, 0);
5938 .stack
5939 else
5940 try cg.load(.stack, elem_ty, 0);
59415997
5942 return cg.finishAir(inst, elem_result, &.{ bin_op.lhs, bin_op.rhs });5998 return cg.finishAir(inst, elem_result, &.{ bin_op.lhs, bin_op.rhs });
5943}5999}
...@@ -5991,10 +6047,7 @@ fn airArrayToSlice(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -5991,10 +6047,7 @@ fn airArrayToSlice(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5991 // create a slice on the stack6047 // create a slice on the stack
5992 const slice_local = try cg.allocStack(slice_ty);6048 const slice_local = try cg.allocStack(slice_ty);
59936049
5994 // store the array ptr in the slice6050 try cg.store(slice_local, operand, Type.usize, 0);
5995 if (array_ty.hasRuntimeBits(zcu)) {
5996 try cg.store(slice_local, operand, Type.usize, 0);
5997 }
59986051
5999 // store the length of the array in the slice6052 // store the length of the array in the slice
6000 const array_len: u32 = @intCast(array_ty.arrayLen(zcu));6053 const array_len: u32 = @intCast(array_ty.arrayLen(zcu));
...@@ -6026,10 +6079,7 @@ fn airPtrElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -6026,10 +6079,7 @@ fn airPtrElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6026 try cg.addTag(.i32_mul);6079 try cg.addTag(.i32_mul);
6027 try cg.addTag(.i32_add);6080 try cg.addTag(.i32_add);
60286081
6029 const elem_result = if (isByRef(elem_ty, zcu, cg.target))6082 const elem_result = try cg.load(.stack, elem_ty, 0);
6030 .stack
6031 else
6032 try cg.load(.stack, elem_ty, 0);
60336083
6034 return cg.finishAir(inst, elem_result, &.{ bin_op.lhs, bin_op.rhs });6084 return cg.finishAir(inst, elem_result, &.{ bin_op.lhs, bin_op.rhs });
6035}6085}
...@@ -6349,12 +6399,8 @@ fn airSplat(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -6349,12 +6399,8 @@ fn airSplat(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6349 else => unreachable,6399 else => unreachable,
6350 }6400 }
6351 }6401 }
6352 const elem_size = elem_ty.bitSize(zcu);
6353 const vector_len = @as(usize, @intCast(ty.vectorLen(zcu)));
6354 if ((!std.math.isPowerOfTwo(elem_size) or elem_size % 8 != 0) and vector_len > 1) {
6355 return cg.fail("TODO: WebAssembly `@splat` for arbitrary element bitsize {d}", .{elem_size});
6356 }
63576402
6403 const vector_len = @as(usize, @intCast(ty.vectorLen(zcu)));
6358 const result = try cg.allocStack(ty);6404 const result = try cg.allocStack(ty);
6359 const elem_byte_size = @as(u32, @intCast(elem_ty.abiSize(zcu)));6405 const elem_byte_size = @as(u32, @intCast(elem_ty.abiSize(zcu)));
6360 var index: usize = 0;6406 var index: usize = 0;
...@@ -6494,7 +6540,7 @@ fn airAggregateInit(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -6494,7 +6540,7 @@ fn airAggregateInit(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
64946540
6495 const result: WValue = result_value: {6541 const result: WValue = result_value: {
6496 switch (result_ty.zigTypeTag(zcu)) {6542 switch (result_ty.zigTypeTag(zcu)) {
6497 .array => {6543 .array, .vector => {
6498 const result = try cg.allocStack(result_ty);6544 const result = try cg.allocStack(result_ty);
6499 const elem_ty = result_ty.childType(zcu);6545 const elem_ty = result_ty.childType(zcu);
6500 const elem_size = @as(u32, @intCast(elem_ty.abiSize(zcu)));6546 const elem_size = @as(u32, @intCast(elem_ty.abiSize(zcu)));
...@@ -6554,7 +6600,6 @@ fn airAggregateInit(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -6554,7 +6600,6 @@ fn airAggregateInit(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6554 break :result_value result;6600 break :result_value result;
6555 },6601 },
6556 },6602 },
6557 .vector => return cg.fail("TODO: Wasm backend: implement airAggregateInit for vectors", .{}),
6558 else => unreachable,6603 else => unreachable,
6559 }6604 }
6560 };6605 };
...@@ -6792,6 +6837,37 @@ fn airMemcpy(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -6792,6 +6837,37 @@ fn airMemcpy(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6792 return cg.finishAir(inst, .none, &.{ bin_op.lhs, bin_op.rhs });6837 return cg.finishAir(inst, .none, &.{ bin_op.lhs, bin_op.rhs });
6793}6838}
67946839
6840fn airMemmove(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6841 const zcu = cg.pt.zcu;
6842 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6843 const dst = try cg.resolveInst(bin_op.lhs);
6844 const dst_ty = cg.typeOf(bin_op.lhs);
6845 const ptr_elem_ty = dst_ty.childType(zcu);
6846 const src = try cg.resolveInst(bin_op.rhs);
6847 const src_ty = cg.typeOf(bin_op.rhs);
6848 const len = switch (dst_ty.ptrSize(zcu)) {
6849 .slice => blk: {
6850 const slice_len = try cg.sliceLen(dst);
6851 if (ptr_elem_ty.abiSize(zcu) != 1) {
6852 try cg.emitWValue(slice_len);
6853 try cg.emitWValue(.{ .imm32 = @as(u32, @intCast(ptr_elem_ty.abiSize(zcu))) });
6854 try cg.addTag(.i32_mul);
6855 try cg.addLocal(.local_set, slice_len.local.value);
6856 }
6857 break :blk slice_len;
6858 },
6859 .one => @as(WValue, .{
6860 .imm32 = @as(u32, @intCast(ptr_elem_ty.arrayLen(zcu) * ptr_elem_ty.childType(zcu).abiSize(zcu))),
6861 }),
6862 .c, .many => unreachable,
6863 };
6864 const dst_ptr = try cg.sliceOrArrayPtr(dst, dst_ty);
6865 const src_ptr = try cg.sliceOrArrayPtr(src, src_ty);
6866 try cg.memmove(dst_ptr, src_ptr, len);
6867
6868 return cg.finishAir(inst, .none, &.{ bin_op.lhs, bin_op.rhs });
6869}
6870
6795fn airRetAddr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {6871fn airRetAddr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6796 // TODO: Implement this properly once stack serialization is solved6872 // TODO: Implement this properly once stack serialization is solved
6797 return cg.finishAir(inst, switch (cg.ptr_size) {6873 return cg.finishAir(inst, switch (cg.ptr_size) {
...@@ -6992,7 +7068,7 @@ fn airTagName(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -6992,7 +7068,7 @@ fn airTagName(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
69927068
6993 const result_ptr = try cg.allocStack(cg.typeOfIndex(inst));7069 const result_ptr = try cg.allocStack(cg.typeOfIndex(inst));
6994 try cg.lowerToStack(result_ptr);7070 try cg.lowerToStack(result_ptr);
6995 try cg.emitWValue(operand);7071 try cg.lowerToStack(operand);
6996 try cg.addInst(.{ .tag = .call_tag_name, .data = .{ .ip_index = enum_ty.toIntern() } });7072 try cg.addInst(.{ .tag = .call_tag_name, .data = .{ .ip_index = enum_ty.toIntern() } });
69977073
6998 return cg.finishAir(inst, result_ptr, &.{un_op});7074 return cg.finishAir(inst, result_ptr, &.{un_op});
...@@ -7195,9 +7271,8 @@ fn airAtomicRmw(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -7195,9 +7271,8 @@ fn airAtomicRmw(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7195 const ty = cg.typeOfIndex(inst);7271 const ty = cg.typeOfIndex(inst);
7196 const op: std.builtin.AtomicRmwOp = extra.op();7272 const op: std.builtin.AtomicRmwOp = extra.op();
71977273
7198 const int_ty: IntType = .fromType(cg, ty);
7199
7200 if (cg.useAtomicFeature()) {7274 if (cg.useAtomicFeature()) {
7275 const int_ty: IntType = .fromType(cg, ty);
7201 switch (op) {7276 switch (op) {
7202 .Max,7277 .Max,
7203 .Min,7278 .Min,
...@@ -7312,35 +7387,65 @@ fn airAtomicRmw(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -7312,35 +7387,65 @@ fn airAtomicRmw(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7312 },7387 },
7313 .Add,7388 .Add,
7314 .Sub,7389 .Sub,
7390 => {
7391 if (ty.isAnyFloat()) {
7392 const float_ty: FloatType = .fromType(cg, ty);
7393 try cg.emitWValue(ptr);
7394 _ = switch (op) {
7395 .Add => try cg.floatAdd(float_ty, result, operand),
7396 .Sub => try cg.floatSub(float_ty, result, operand),
7397 else => unreachable,
7398 };
7399 try cg.store(.stack, .stack, ty, ptr.offset());
7400 } else {
7401 const int_ty: IntType = .fromType(cg, ty);
7402 try cg.emitWValue(ptr);
7403 _ = switch (op) {
7404 .Add => try cg.intAdd(int_ty, result, operand),
7405 .Sub => try cg.intSub(int_ty, result, operand),
7406 else => unreachable,
7407 };
7408 _ = try cg.intWrap(int_ty, .stack);
7409 try cg.store(.stack, .stack, ty, ptr.offset());
7410 }
7411 },
7315 .And,7412 .And,
7316 .Or,7413 .Or,
7317 .Xor,7414 .Xor,
7318 => {7415 => {
7416 const int_ty: IntType = .fromType(cg, ty);
7319 try cg.emitWValue(ptr);7417 try cg.emitWValue(ptr);
7320 _ = switch (op) {7418 _ = switch (op) {
7321 .Add => try cg.intAdd(int_ty, result, operand),
7322 .Sub => try cg.intSub(int_ty, result, operand),
7323 .And => try cg.intAnd(int_ty, result, operand),7419 .And => try cg.intAnd(int_ty, result, operand),
7324 .Or => try cg.intOr(int_ty, result, operand),7420 .Or => try cg.intOr(int_ty, result, operand),
7325 .Xor => try cg.intXor(int_ty, result, operand),7421 .Xor => try cg.intXor(int_ty, result, operand),
7326 else => unreachable,7422 else => unreachable,
7327 };7423 };
7328 if (ty.isInt(zcu) and (op == .Add or op == .Sub)) {
7329 _ = try cg.intWrap(int_ty, .stack);
7330 }
7331 try cg.store(.stack, .stack, ty, ptr.offset());7424 try cg.store(.stack, .stack, ty, ptr.offset());
7332 },7425 },
7333 .Max,7426 .Max,
7334 .Min,7427 .Min,
7335 => {7428 => {
7336 try cg.emitWValue(ptr);7429 if (ty.isAnyFloat()) {
7337 try cg.emitWValue(result);7430 const float_ty: FloatType = .fromType(cg, ty);
7338 try cg.emitWValue(operand);7431 try cg.emitWValue(ptr);
7339 _ = try cg.intCmp(int_ty, if (op == .Max) .gt else .lt, result, operand);7432 try cg.emitWValue(result);
7340 try cg.addTag(.select);7433 try cg.emitWValue(operand);
7341 try cg.store(.stack, .stack, ty, ptr.offset());7434 _ = try cg.floatCmp(float_ty, if (op == .Max) .gt else .lt, result, operand);
7435 try cg.addTag(.select);
7436 try cg.store(.stack, .stack, ty, ptr.offset());
7437 } else {
7438 const int_ty: IntType = .fromType(cg, ty);
7439 try cg.emitWValue(ptr);
7440 try cg.emitWValue(result);
7441 try cg.emitWValue(operand);
7442 _ = try cg.intCmp(int_ty, if (op == .Max) .gt else .lt, result, operand);
7443 try cg.addTag(.select);
7444 try cg.store(.stack, .stack, ty, ptr.offset());
7445 }
7342 },7446 },
7343 .Nand => {7447 .Nand => {
7448 const int_ty: IntType = .fromType(cg, ty);
7344 try cg.emitWValue(ptr);7449 try cg.emitWValue(ptr);
7345 const and_res = try cg.intAnd(int_ty, result, operand);7450 const and_res = try cg.intAnd(int_ty, result, operand);
7346 if (int_ty.bits <= 32) {7451 if (int_ty.bits <= 32) {
...@@ -7423,49 +7528,51 @@ fn airAsm(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {...@@ -7423,49 +7528,51 @@ fn airAsm(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7423 else7528 else
7424 .none;7529 .none;
74257530
7426 var local_map: assembly.LocalMap = .empty;7531 if (unwrapped_asm.source.len != 0) {
7427 defer local_map.deinit(cg.gpa);7532 var local_map: assembly.LocalMap = .empty;
7533 defer local_map.deinit(cg.gpa);
74287534
7429 {7535 {
7430 var it = unwrapped_asm.iterateOutputs();7536 var it = unwrapped_asm.iterateOutputs();
7431 if (it.next()) |output| {7537 if (it.next()) |output| {
7432 const constraint = output.constraint;7538 const constraint = output.constraint;
7433 assert(output.operand == .none);7539 assert(output.operand == .none);
7434 const name = output.name;7540 const name = output.name;
7435
7436 if (!mem.eql(u8, constraint, "=r")) {
7437 return cg.fail("Self-hosted wasm backend requires output constraint to be equal \"=r\"", .{});
7438 }
74397541
7440 const gop = try local_map.getOrPutValue(cg.gpa, name, result.local.value);7542 if (!mem.eql(u8, constraint, "=r")) {
7441 assert(!gop.found_existing); // first value7543 return cg.fail("Self-hosted wasm backend requires output constraint to be equal \"=r\"", .{});
7544 }
74427545
7443 assert(it.next() == null);7546 const gop = try local_map.getOrPutValue(cg.gpa, name, result.local.value);
7444 }7547 assert(!gop.found_existing); // first value
7445 }
74467548
7447 {7549 assert(it.next() == null);
7448 var it = unwrapped_asm.iterateInputs();
7449 while (it.next()) |input| {
7450 const constraint = input.constraint;
7451 const operand = try cg.resolveInst(input.operand);
7452 const name = input.name;
7453
7454 if (!mem.eql(u8, constraint, "r")) {
7455 return cg.fail("Self-hosted wasm backend requires input constraint to be equal \"r\"", .{});
7456 }7550 }
7551 }
74577552
7458 try cg.lowerToStack(operand);7553 {
7459 const op_local = try WValue.toLocal(.stack, cg, cg.typeOf(input.operand));7554 var it = unwrapped_asm.iterateInputs();
7555 while (it.next()) |input| {
7556 const constraint = input.constraint;
7557 const operand = try cg.resolveInst(input.operand);
7558 const name = input.name;
7559
7560 if (!mem.eql(u8, constraint, "r")) {
7561 return cg.fail("Self-hosted wasm backend requires input constraint to be equal \"r\"", .{});
7562 }
7563
7564 try cg.lowerToStack(operand);
7565 const op_local = try WValue.toLocal(.stack, cg, cg.typeOf(input.operand));
74607566
7461 const gop = try local_map.getOrPutValue(cg.gpa, name, op_local.local.value);7567 const gop = try local_map.getOrPutValue(cg.gpa, name, op_local.local.value);
7462 if (gop.found_existing) {7568 if (gop.found_existing) {
7463 return cg.fail("Duplicate asm variable name \"{s}\"", .{name});7569 return cg.fail("Duplicate asm variable name \"{s}\"", .{name});
7570 }
7464 }7571 }
7465 }7572 }
7466 }
74677573
7468 try assembly.assemble(cg, unwrapped_asm.source, &local_map);7574 try assembly.assemble(cg, unwrapped_asm.source, &local_map);
7575 }
74697576
7470 var bt = cg.liveness.iterateBigTomb(inst);7577 var bt = cg.liveness.iterateBigTomb(inst);
7471 for (outputs) |output| if (output != .none) cg.feed(&bt, output);7578 for (outputs) |output| if (output != .none) cg.feed(&bt, output);
src/codegen/wasm/Mir.zig+3
...@@ -1028,6 +1028,9 @@ pub const Intrinsic = enum(u32) {...@@ -1028,6 +1028,9 @@ pub const Intrinsic = enum(u32) {
1028 tanf,1028 tanf,
1029 tanq,1029 tanq,
1030 truncq,1030 truncq,
1031 memcpy,
1032 memmove,
1033 memset,
1031 __addo_limb64,1034 __addo_limb64,
1032 __subo_limb64,1035 __subo_limb64,
1033 __cmp_limb64,1036 __cmp_limb64,
src/link/Wasm/Flush.zig+54-34
...@@ -1865,7 +1865,6 @@ fn emitTagNameFunction(...@@ -1865,7 +1865,6 @@ fn emitTagNameFunction(
1865) !void {1865) !void {
1866 const comp = wasm.base.comp;1866 const comp = wasm.base.comp;
1867 const gpa = comp.gpa;1867 const gpa = comp.gpa;
1868 const diags = &comp.link_diags;
1869 const zcu = comp.zcu.?;1868 const zcu = comp.zcu.?;
1870 const ip = &zcu.intern_pool;1869 const ip = &zcu.intern_pool;
1871 const enum_type = ip.loadEnumType(enum_type_ip);1870 const enum_type = ip.loadEnumType(enum_type_ip);
...@@ -1909,11 +1908,7 @@ fn emitTagNameFunction(...@@ -1909,11 +1908,7 @@ fn emitTagNameFunction(
1909 }1908 }
19101909
1911 const int_info = Zcu.Type.intInfo(.fromInterned(enum_type.int_tag_type), zcu);1910 const int_info = Zcu.Type.intInfo(.fromInterned(enum_type.int_tag_type), zcu);
1912 const outer_block_type: std.wasm.BlockType = switch (int_info.bits) {1911 const is_big_int = int_info.bits > 64;
1913 0...32 => .i32,
1914 33...64 => .i64,
1915 else => return diags.fail("wasm linker does not yet implement @tagName for sparse enums with more than 64 bit integer tag types", .{}),
1916 };
19171912
1918 try code.ensureUnusedCapacity(1913 try code.ensureUnusedCapacity(
1919 gpa,1914 gpa,
...@@ -1930,41 +1925,66 @@ fn emitTagNameFunction(...@@ -1930,41 +1925,66 @@ fn emitTagNameFunction(
19301925
1931 // Outer block that computes table offset.1926 // Outer block that computes table offset.
1932 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block));1927 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block));
1933 code.appendAssumeCapacity(@intFromEnum(outer_block_type));1928 code.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.i32));
19341929
1935 for (tag_values, 0..) |tag_value, tag_index| {1930 for (tag_values, 0..) |tag_value, tag_index| {
1936 // block for this if case1931 // block for this if case
1937 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block));1932 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block));
1938 code.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.empty));1933 code.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.empty));
19391934
1940 // Tag value whose name should be returned.
1941 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1942 appendReservedUleb32(code, 1);
1943
1944 const val: Zcu.Value = .fromInterned(tag_value);1935 const val: Zcu.Value = .fromInterned(tag_value);
1945 switch (outer_block_type) {1936 if (is_big_int) {
1946 .i32 => {1937 var val_space: Zcu.Value.BigIntSpace = undefined;
1947 const x: u32 = switch (int_info.signedness) {1938 const val_bigint = val.toBigInt(&val_space, zcu);
1948 .signed => @bitCast(@as(i32, @intCast(val.toSignedInt(zcu)))),1939 const num_limbs = (int_info.bits + 63) / 64;
1949 .unsigned => @intCast(val.toUnsignedInt(zcu)),1940
1950 };1941 const limbs = try gpa.alloc(u64, num_limbs);
1951 appendReservedI32Const(code, x);1942 defer gpa.free(limbs);
1952 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_ne));1943 val_bigint.writeTwosComplement(@ptrCast(limbs), .little);
1953 },1944
1954 .i64 => {1945 try code.ensureUnusedCapacity(gpa, 35 * num_limbs);
1955 const x: u64 = switch (int_info.signedness) {1946
1956 .signed => @bitCast(val.toSignedInt(zcu)),1947 for (0..num_limbs) |limb_index| {
1957 .unsigned => val.toUnsignedInt(zcu),1948 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1958 };1949 appendReservedUleb32(code, 1);
1959 appendReservedI64Const(code, x);1950
1951 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_load));
1952 appendReservedUleb32(code, @ctz(@as(u32, 8)));
1953 appendReservedUleb32(code, @intCast(limb_index * 8));
1954
1955 appendReservedI64Const(code, limbs[limb_index]);
1960 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_ne));1956 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_ne));
1961 },
1962 else => unreachable,
1963 }
19641957
1965 // if they're not equal, break out of current branch1958 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br_if));
1966 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br_if));1959 appendReservedUleb32(code, 0);
1967 appendReservedUleb32(code, 0);1960 }
1961 } else {
1962 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1963 appendReservedUleb32(code, 1);
1964
1965 switch (int_info.bits) {
1966 0...32 => {
1967 const x: u32 = switch (int_info.signedness) {
1968 .signed => @bitCast(@as(i32, @intCast(val.toSignedInt(zcu)))),
1969 .unsigned => @intCast(val.toUnsignedInt(zcu)),
1970 };
1971 appendReservedI32Const(code, x);
1972 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_ne));
1973 },
1974 33...64 => {
1975 const x: u64 = switch (int_info.signedness) {
1976 .signed => @bitCast(val.toSignedInt(zcu)),
1977 .unsigned => val.toUnsignedInt(zcu),
1978 };
1979 appendReservedI64Const(code, x);
1980 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_ne));
1981 },
1982 else => unreachable,
1983 }
1984
1985 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br_if));
1986 appendReservedUleb32(code, 0);
1987 }
19681988
1969 // Put the table offset of the result on the stack.1989 // Put the table offset of the result on the stack.
1970 appendReservedI32Const(code, @intCast(tag_index * slice_abi_size));1990 appendReservedI32Const(code, @intCast(tag_index * slice_abi_size));
...@@ -1995,7 +2015,7 @@ fn appendReservedI32Const(bytes: *ArrayList(u8), val: u32) void {...@@ -1995,7 +2015,7 @@ fn appendReservedI32Const(bytes: *ArrayList(u8), val: u32) void {
1995 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));2015 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
1996 var w: std.Io.Writer = .fromArrayList(bytes);2016 var w: std.Io.Writer = .fromArrayList(bytes);
1997 defer bytes.* = w.toArrayList();2017 defer bytes.* = w.toArrayList();
1998 return w.writeSleb128(val) catch |err| switch (err) {2018 return w.writeSleb128(@as(i32, @bitCast(val))) catch |err| switch (err) {
1999 error.WriteFailed => unreachable,2019 error.WriteFailed => unreachable,
2000 };2020 };
2001}2021}
...@@ -2005,7 +2025,7 @@ fn appendReservedI64Const(bytes: *ArrayList(u8), val: u64) void {...@@ -2005,7 +2025,7 @@ fn appendReservedI64Const(bytes: *ArrayList(u8), val: u64) void {
2005 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_const));2025 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_const));
2006 var w: std.Io.Writer = .fromArrayList(bytes);2026 var w: std.Io.Writer = .fromArrayList(bytes);
2007 defer bytes.* = w.toArrayList();2027 defer bytes.* = w.toArrayList();
2008 return w.writeSleb128(val) catch |err| switch (err) {2028 return w.writeSleb128(@as(i64, @bitCast(val))) catch |err| switch (err) {
2009 error.WriteFailed => unreachable,2029 error.WriteFailed => unreachable,
2010 };2030 };
2011}2031}
test/behavior/abs.zig+2-5
...@@ -214,9 +214,9 @@ test "@abs floats" {...@@ -214,9 +214,9 @@ test "@abs floats" {
214 try comptime testAbsFloats(f64);214 try comptime testAbsFloats(f64);
215 try testAbsFloats(f64);215 try testAbsFloats(f64);
216 try comptime testAbsFloats(f80);216 try comptime testAbsFloats(f80);
217 if (builtin.zig_backend != .stage2_wasm and builtin.zig_backend != .stage2_spirv and builtin.zig_backend != .stage2_riscv64) try testAbsFloats(f80);217 if (builtin.zig_backend != .stage2_spirv and builtin.zig_backend != .stage2_riscv64) try testAbsFloats(f80);
218 try comptime testAbsFloats(f128);218 try comptime testAbsFloats(f128);
219 if (builtin.zig_backend != .stage2_wasm and builtin.zig_backend != .stage2_spirv and builtin.zig_backend != .stage2_riscv64) try testAbsFloats(f128);219 if (builtin.zig_backend != .stage2_spirv and builtin.zig_backend != .stage2_riscv64) try testAbsFloats(f128);
220}220}
221221
222fn testAbsFloats(comptime T: type) !void {222fn testAbsFloats(comptime T: type) !void {
...@@ -259,7 +259,6 @@ fn testAbsFloats(comptime T: type) !void {...@@ -259,7 +259,6 @@ fn testAbsFloats(comptime T: type) !void {
259test "@abs int vectors" {259test "@abs int vectors" {
260 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;260 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
261 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO261 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
262 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
263 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO262 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
264 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO263 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
265 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;264 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -326,7 +325,6 @@ fn testAbsIntVectors(comptime len: comptime_int) !void {...@@ -326,7 +325,6 @@ fn testAbsIntVectors(comptime len: comptime_int) !void {
326325
327test "@abs unsigned int vectors" {326test "@abs unsigned int vectors" {
328 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;327 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
329 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
330 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO328 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
331 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO329 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
332 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;330 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -385,7 +383,6 @@ fn testAbsUnsignedIntVectors(comptime len: comptime_int) !void {...@@ -385,7 +383,6 @@ fn testAbsUnsignedIntVectors(comptime len: comptime_int) !void {
385383
386test "@abs float vectors" {384test "@abs float vectors" {
387 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;385 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
388 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
389 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO386 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
390 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO387 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
391 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;388 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
test/behavior/align.zig-1
...@@ -527,7 +527,6 @@ test "alignment of zero-bit types is respected" {...@@ -527,7 +527,6 @@ test "alignment of zero-bit types is respected" {
527 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;527 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
528 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;528 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
529 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;529 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
530 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
531 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO530 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
532531
533 const S = struct { arr: [0]usize = .{} };532 const S = struct { arr: [0]usize = .{} };
test/behavior/atomics.zig-1
...@@ -189,7 +189,6 @@ test "atomicrmw with floats" {...@@ -189,7 +189,6 @@ test "atomicrmw with floats" {
189 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO189 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
190 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;190 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
191 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO191 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
192 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
193192
194 try testAtomicRmwFloat();193 try testAtomicRmwFloat();
195 try comptime testAtomicRmwFloat();194 try comptime testAtomicRmwFloat();
test/behavior/basic.zig-1
...@@ -1147,7 +1147,6 @@ test "arrays and vectors with big integers" {...@@ -1147,7 +1147,6 @@ test "arrays and vectors with big integers" {
1147 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1147 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1148 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;1148 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
1149 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;1149 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1150 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
1151 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1150 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
1152 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1151 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1153 if (builtin.zig_backend == .stage2_llvm and (builtin.abi == .gnuabin32 or builtin.abi == .muslabin32)) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/238051152 if (builtin.zig_backend == .stage2_llvm and (builtin.abi == .gnuabin32 or builtin.abi == .muslabin32)) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/23805
test/behavior/bitcast.zig-2
...@@ -387,7 +387,6 @@ test "bitcast vector to integer and back" {...@@ -387,7 +387,6 @@ test "bitcast vector to integer and back" {
387 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;387 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
388 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO388 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
389 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO389 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
390 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
391 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;390 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
392 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;391 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
393 if (builtin.cpu.arch.endian() == .big and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;392 if (builtin.cpu.arch.endian() == .big and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
...@@ -530,7 +529,6 @@ test "@bitCast of extern struct containing pointer" {...@@ -530,7 +529,6 @@ test "@bitCast of extern struct containing pointer" {
530 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;529 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
531 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO530 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
532 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO531 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
533 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
534 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO532 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
535533
536 const S = struct {534 const S = struct {
test/behavior/bitreverse.zig-5
...@@ -122,7 +122,6 @@ fn vector8() !void {...@@ -122,7 +122,6 @@ fn vector8() !void {
122122
123test "bitReverse vectors u8" {123test "bitReverse vectors u8" {
124 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;124 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
125 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
126 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;125 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
127 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO126 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
128 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;127 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -142,7 +141,6 @@ fn vector16() !void {...@@ -142,7 +141,6 @@ fn vector16() !void {
142141
143test "bitReverse vectors u16" {142test "bitReverse vectors u16" {
144 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;143 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
145 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
146 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;144 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
147 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO145 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
148 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;146 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -162,7 +160,6 @@ fn vector24() !void {...@@ -162,7 +160,6 @@ fn vector24() !void {
162160
163test "bitReverse vectors u24" {161test "bitReverse vectors u24" {
164 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;162 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
165 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
166 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;163 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
167 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO164 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
168 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;165 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -181,8 +178,6 @@ fn vector0() !void {...@@ -181,8 +178,6 @@ fn vector0() !void {
181}178}
182179
183test "bitReverse vectors u0" {180test "bitReverse vectors u0" {
184 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
185
186 try comptime vector0();181 try comptime vector0();
187 try vector0();182 try vector0();
188}183}
test/behavior/byteswap.zig-5
...@@ -82,7 +82,6 @@ fn vector8() !void {...@@ -82,7 +82,6 @@ fn vector8() !void {
8282
83test "@byteSwap vectors u8" {83test "@byteSwap vectors u8" {
84 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;84 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
85 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
86 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;85 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
87 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO86 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
88 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;87 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -102,7 +101,6 @@ fn vector16() !void {...@@ -102,7 +101,6 @@ fn vector16() !void {
102101
103test "@byteSwap vectors u16" {102test "@byteSwap vectors u16" {
104 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;103 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
105 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
106 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;104 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
107 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO105 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
108 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;106 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -122,7 +120,6 @@ fn vector24() !void {...@@ -122,7 +120,6 @@ fn vector24() !void {
122120
123test "@byteSwap vectors u24" {121test "@byteSwap vectors u24" {
124 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;122 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
125 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
126 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;123 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
127 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO124 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
128 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;125 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -141,8 +138,6 @@ fn vector0() !void {...@@ -141,8 +138,6 @@ fn vector0() !void {
141}138}
142139
143test "@byteSwap vectors u0" {140test "@byteSwap vectors u0" {
144 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
145
146 try comptime vector0();141 try comptime vector0();
147 try vector0();142 try vector0();
148}143}
test/behavior/cast.zig-15
...@@ -268,7 +268,6 @@ test "type coercion from int to float" {...@@ -268,7 +268,6 @@ test "type coercion from int to float" {
268 try check.value(c_longdouble, @as(u1, 0)); // Smoke test - size varies by target.268 try check.value(c_longdouble, @as(u1, 0)); // Smoke test - size varies by target.
269269
270 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;270 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
271 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
272271
273 // Basic sanity check that the coercions work for vectors too.272 // Basic sanity check that the coercions work for vectors too.
274 const int_vec: @Vector(2, u24) = @splat(123);273 const int_vec: @Vector(2, u24) = @splat(123);
...@@ -758,7 +757,6 @@ test "cast *[1][*]const u8 to [*]const ?[*]const u8" {...@@ -758,7 +757,6 @@ test "cast *[1][*]const u8 to [*]const ?[*]const u8" {
758757
759test "@intCast on vector" {758test "@intCast on vector" {
760 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;759 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
761 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
762 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO760 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
763 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO761 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
764 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;762 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2145,7 +2143,6 @@ test "peer type resolution: array and vector with same child type" {...@@ -2145,7 +2143,6 @@ test "peer type resolution: array and vector with same child type" {
2145 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2143 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2146 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;2144 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
2147 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO2145 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
2148 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
21492146
2150 var arr: [2]u32 = .{ 0, 1 };2147 var arr: [2]u32 = .{ 0, 1 };
2151 var vec: @Vector(2, u32) = .{ 2, 3 };2148 var vec: @Vector(2, u32) = .{ 2, 3 };
...@@ -2167,7 +2164,6 @@ test "peer type resolution: array and vector with same child type" {...@@ -2167,7 +2164,6 @@ test "peer type resolution: array and vector with same child type" {
2167test "peer type resolution: array with smaller child type and vector with larger child type" {2164test "peer type resolution: array with smaller child type and vector with larger child type" {
2168 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2165 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2169 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2166 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2170 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2171 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2167 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2172 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2168 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
21732169
...@@ -2279,7 +2275,6 @@ test "peer type resolution: three-way resolution combines error set and optional...@@ -2279,7 +2275,6 @@ test "peer type resolution: three-way resolution combines error set and optional
2279test "peer type resolution: vector and optional vector" {2275test "peer type resolution: vector and optional vector" {
2280 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2276 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2281 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2277 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2282 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2283 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2278 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2284 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO2279 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
2285 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO2280 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
...@@ -2349,7 +2344,6 @@ test "peer type resolution: array and tuple" {...@@ -2349,7 +2344,6 @@ test "peer type resolution: array and tuple" {
2349test "peer type resolution: vector and tuple" {2344test "peer type resolution: vector and tuple" {
2350 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2345 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2351 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2346 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2352 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2353 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2347 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
23542348
2355 var vec: @Vector(3, i32) = .{ 1, 2, 3 };2349 var vec: @Vector(3, i32) = .{ 1, 2, 3 };
...@@ -2373,7 +2367,6 @@ test "peer type resolution: vector and tuple" {...@@ -2373,7 +2367,6 @@ test "peer type resolution: vector and tuple" {
2373test "peer type resolution: vector and array and tuple" {2367test "peer type resolution: vector and array and tuple" {
2374 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2368 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2375 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2369 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2376 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2377 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2370 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2378 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;2371 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
23792372
...@@ -2816,7 +2809,6 @@ test "cast builtins can wrap result in error union and optional" {...@@ -2816,7 +2809,6 @@ test "cast builtins can wrap result in error union and optional" {
28162809
2817test "@floatCast on vector" {2810test "@floatCast on vector" {
2818 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2811 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2819 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2820 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2812 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2821 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2813 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2822 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2814 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2857,7 +2849,6 @@ test "@floatCast on vector" {...@@ -2857,7 +2849,6 @@ test "@floatCast on vector" {
28572849
2858test "@ptrFromInt on vector" {2850test "@ptrFromInt on vector" {
2859 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2851 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2860 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2861 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2852 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2862 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2853 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2863 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2854 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2882,7 +2873,6 @@ test "@ptrFromInt on vector" {...@@ -2882,7 +2873,6 @@ test "@ptrFromInt on vector" {
28822873
2883test "@intFromPtr on vector" {2874test "@intFromPtr on vector" {
2884 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2875 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2885 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2886 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2876 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2887 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2877 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2888 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2878 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2907,7 +2897,6 @@ test "@intFromPtr on vector" {...@@ -2907,7 +2897,6 @@ test "@intFromPtr on vector" {
29072897
2908test "@floatFromInt on vector" {2898test "@floatFromInt on vector" {
2909 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2899 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2910 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2911 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2900 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2912 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2901 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2913 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2902 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2927,7 +2916,6 @@ test "@floatFromInt on vector" {...@@ -2927,7 +2916,6 @@ test "@floatFromInt on vector" {
29272916
2928test "@intFromFloat on vector" {2917test "@intFromFloat on vector" {
2929 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2918 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2930 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2931 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2919 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2932 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2920 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2933 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2921 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2947,7 +2935,6 @@ test "@intFromFloat on vector" {...@@ -2947,7 +2935,6 @@ test "@intFromFloat on vector" {
29472935
2948test "@intFromBool on vector" {2936test "@intFromBool on vector" {
2949 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2937 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2950 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2951 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2938 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2952 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2939 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2953 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2940 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -3023,7 +3010,6 @@ test "result information is preserved through many nested structures" {...@@ -3023,7 +3010,6 @@ test "result information is preserved through many nested structures" {
3023test "@intCast vector of signed integer" {3010test "@intCast vector of signed integer" {
3024 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;3011 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3025 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO3012 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
3026 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
3027 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO3013 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
3028 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;3014 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
3029 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;3015 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -3109,7 +3095,6 @@ test "@intFromFloat boundary cases" {...@@ -3109,7 +3095,6 @@ test "@intFromFloat boundary cases" {
3109test "@intFromFloat vector boundary cases" {3095test "@intFromFloat vector boundary cases" {
3110 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;3096 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3111 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;3097 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
3112 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
31133098
3114 const S = struct {3099 const S = struct {
3115 fn case(comptime I: type, unshifted_inputs: [2]f32, expected: [2]I) !void {3100 fn case(comptime I: type, unshifted_inputs: [2]f32, expected: [2]I) !void {
test/behavior/enum.zig+98-1
...@@ -1057,7 +1057,6 @@ test "tag name with signed enum values" {...@@ -1057,7 +1057,6 @@ test "tag name with signed enum values" {
1057test "tag name with large enum values" {1057test "tag name with large enum values" {
1058 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1058 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1059 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;1059 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1060 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
10611060
1062 const Kdf = enum(u128) {1061 const Kdf = enum(u128) {
1063 aes_kdf = 0xea4f8ac1080d74bf60448a629af3d9c9,1062 aes_kdf = 0xea4f8ac1080d74bf60448a629af3d9c9,
...@@ -1074,6 +1073,104 @@ test "tag name with large enum values" {...@@ -1074,6 +1073,104 @@ test "tag name with large enum values" {
1074 try expect(mem.eql(u8, @tagName(kdf), "argon2id"));1073 try expect(mem.eql(u8, @tagName(kdf), "argon2id"));
1075}1074}
10761075
1076test "@tagName with exotic integer enum types" {
1077 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1078 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1079
1080 const S = struct {
1081 fn testEnumSigned(comptime T: type) !void {
1082 {
1083 const E1 = enum(T) {
1084 a = -125,
1085 b = 125,
1086 c = std.math.minInt(T),
1087 d = std.math.maxInt(T),
1088 };
1089
1090 var e: E1 = .a;
1091 try expect(mem.eql(u8, @tagName(e), "a"));
1092 e = .b;
1093 try expect(mem.eql(u8, @tagName(e), "b"));
1094 e = .c;
1095 try expect(mem.eql(u8, @tagName(e), "c"));
1096 e = .d;
1097 try expect(mem.eql(u8, @tagName(e), "d"));
1098 }
1099 {
1100 const E2 = enum(T) {
1101 a = -125,
1102 b = 125,
1103 c = std.math.minInt(T),
1104 d = std.math.maxInt(T),
1105 _,
1106 };
1107
1108 var e: E2 = .a;
1109 try expect(mem.eql(u8, @tagName(e), "a"));
1110 e = .b;
1111 try expect(mem.eql(u8, @tagName(e), "b"));
1112 e = .c;
1113 try expect(mem.eql(u8, @tagName(e), "c"));
1114 e = .d;
1115 try expect(mem.eql(u8, @tagName(e), "d"));
1116 }
1117 }
1118
1119 fn testEnumUnsigned(comptime T: type) !void {
1120 {
1121 const E1 = enum(T) {
1122 a = std.math.maxInt(T) - 125,
1123 b = 125,
1124 c = std.math.minInt(T),
1125 d = std.math.maxInt(T),
1126 };
1127
1128 var e: E1 = .a;
1129 try expect(mem.eql(u8, @tagName(e), "a"));
1130 e = .b;
1131 try expect(mem.eql(u8, @tagName(e), "b"));
1132 e = .c;
1133 try expect(mem.eql(u8, @tagName(e), "c"));
1134 e = .d;
1135 try expect(mem.eql(u8, @tagName(e), "d"));
1136 }
1137 {
1138 const E2 = enum(T) {
1139 a = std.math.maxInt(T) - 125,
1140 b = 125,
1141 c = std.math.minInt(T),
1142 d = std.math.maxInt(T),
1143 _,
1144 };
1145
1146 var e: E2 = .a;
1147 try expect(mem.eql(u8, @tagName(e), "a"));
1148 e = .b;
1149 try expect(mem.eql(u8, @tagName(e), "b"));
1150 e = .c;
1151 try expect(mem.eql(u8, @tagName(e), "c"));
1152 e = .d;
1153 try expect(mem.eql(u8, @tagName(e), "d"));
1154 }
1155 }
1156
1157 fn doTheTest() !void {
1158 try testEnumSigned(i33);
1159 try testEnumSigned(i95);
1160 try testEnumSigned(i127);
1161 try testEnumSigned(i257);
1162
1163 try testEnumUnsigned(u33);
1164 try testEnumUnsigned(u95);
1165 try testEnumUnsigned(u127);
1166 try testEnumUnsigned(u257);
1167 }
1168 };
1169
1170 try S.doTheTest();
1171 try comptime S.doTheTest();
1172}
1173
1077test "@tagName in callconv(.c) function" {1174test "@tagName in callconv(.c) function" {
1078 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1175 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1079 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;1176 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
test/behavior/floatop.zig-22
...@@ -221,9 +221,7 @@ fn testCmp(comptime T: type) !void {...@@ -221,9 +221,7 @@ fn testCmp(comptime T: type) !void {
221221
222test "vector cmp f16" {222test "vector cmp f16" {
223 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;223 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
224 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
225 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO224 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
226 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
227 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;225 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
228 if (builtin.cpu.arch.isArm()) return error.SkipZigTest;226 if (builtin.cpu.arch.isArm()) return error.SkipZigTest;
229 if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest;227 if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest;
...@@ -236,7 +234,6 @@ test "vector cmp f16" {...@@ -236,7 +234,6 @@ test "vector cmp f16" {
236test "vector cmp f32" {234test "vector cmp f32" {
237 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;235 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
238 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;236 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
239 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
240 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO237 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
241 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;238 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
242 if (builtin.cpu.arch.isArm()) return error.SkipZigTest;239 if (builtin.cpu.arch.isArm()) return error.SkipZigTest;
...@@ -249,7 +246,6 @@ test "vector cmp f32" {...@@ -249,7 +246,6 @@ test "vector cmp f32" {
249246
250test "vector cmp f64" {247test "vector cmp f64" {
251 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;248 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
252 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
253 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO249 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
254 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;250 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
255 if (builtin.cpu.arch.isArm()) return error.SkipZigTest;251 if (builtin.cpu.arch.isArm()) return error.SkipZigTest;
...@@ -262,7 +258,6 @@ test "vector cmp f64" {...@@ -262,7 +258,6 @@ test "vector cmp f64" {
262258
263test "vector cmp f128" {259test "vector cmp f128" {
264 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;260 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
265 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
266 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO261 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
267 if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArm()) return error.SkipZigTest;262 if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArm()) return error.SkipZigTest;
268 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;263 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -281,7 +276,6 @@ test "vector cmp f80/c_longdouble" {...@@ -281,7 +276,6 @@ test "vector cmp f80/c_longdouble" {
281 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .powerpc64le) return error.SkipZigTest;276 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .powerpc64le) return error.SkipZigTest;
282 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;277 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
283 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;278 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
284 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
285279
286 try testCmpVector(f80);280 try testCmpVector(f80);
287 try comptime testCmpVector(f80);281 try comptime testCmpVector(f80);
...@@ -477,7 +471,6 @@ fn testSqrt(comptime T: type) !void {...@@ -477,7 +471,6 @@ fn testSqrt(comptime T: type) !void {
477471
478test "@sqrt with vectors" {472test "@sqrt with vectors" {
479 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;473 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
480 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
481 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO474 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
482 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;475 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
483 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;476 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -546,7 +539,6 @@ fn testSin(comptime T: type) !void {...@@ -546,7 +539,6 @@ fn testSin(comptime T: type) !void {
546539
547test "@sin with vectors" {540test "@sin with vectors" {
548 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;541 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
549 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
550 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO542 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
551 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;543 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
552 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;544 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -615,7 +607,6 @@ fn testCos(comptime T: type) !void {...@@ -615,7 +607,6 @@ fn testCos(comptime T: type) !void {
615607
616test "@cos with vectors" {608test "@cos with vectors" {
617 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;609 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
618 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
619 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO610 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
620 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;611 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
621 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;612 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -684,7 +675,6 @@ fn testTan(comptime T: type) !void {...@@ -684,7 +675,6 @@ fn testTan(comptime T: type) !void {
684675
685test "@tan with vectors" {676test "@tan with vectors" {
686 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;677 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
687 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
688 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO678 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
689 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;679 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
690 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;680 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -757,7 +747,6 @@ fn testExp(comptime T: type) !void {...@@ -757,7 +747,6 @@ fn testExp(comptime T: type) !void {
757747
758test "@exp with vectors" {748test "@exp with vectors" {
759 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;749 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
760 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
761 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO750 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
762 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;751 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
763 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;752 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -825,7 +814,6 @@ fn testExp2(comptime T: type) !void {...@@ -825,7 +814,6 @@ fn testExp2(comptime T: type) !void {
825814
826test "@exp2 with @vectors" {815test "@exp2 with @vectors" {
827 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;816 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
828 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
829 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO817 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
830 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;818 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
831 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;819 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -893,7 +881,6 @@ fn testLog(comptime T: type) !void {...@@ -893,7 +881,6 @@ fn testLog(comptime T: type) !void {
893881
894test "@log with @vectors" {882test "@log with @vectors" {
895 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;883 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
896 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
897 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO884 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
898 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO885 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
899 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;886 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -959,7 +946,6 @@ fn testLog2(comptime T: type) !void {...@@ -959,7 +946,6 @@ fn testLog2(comptime T: type) !void {
959946
960test "@log2 with vectors" {947test "@log2 with vectors" {
961 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;948 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
962 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
963 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO949 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
964 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;950 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
965 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;951 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1031,7 +1017,6 @@ fn testLog10(comptime T: type) !void {...@@ -1031,7 +1017,6 @@ fn testLog10(comptime T: type) !void {
10311017
1032test "@log10 with vectors" {1018test "@log10 with vectors" {
1033 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1019 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1034 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1035 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1020 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1036 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1021 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1037 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1022 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1151,7 +1136,6 @@ fn testFabs(comptime T: type) !void {...@@ -1151,7 +1136,6 @@ fn testFabs(comptime T: type) !void {
1151test "@abs with vectors" {1136test "@abs with vectors" {
1152 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1137 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1153 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1138 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1154 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1155 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1139 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
11561140
1157 try testFabsWithVectors();1141 try testFabsWithVectors();
...@@ -1241,7 +1225,6 @@ fn testFloor(comptime T: type) !void {...@@ -1241,7 +1225,6 @@ fn testFloor(comptime T: type) !void {
1241test "@floor with vectors" {1225test "@floor with vectors" {
1242 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1226 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1243 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1227 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1244 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1245 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1228 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
12461229
1247 try testFloorWithVectors();1230 try testFloorWithVectors();
...@@ -1349,7 +1332,6 @@ fn testCeil(comptime T: type) !void {...@@ -1349,7 +1332,6 @@ fn testCeil(comptime T: type) !void {
1349test "@ceil with vectors" {1332test "@ceil with vectors" {
1350 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1333 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1351 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1334 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1352 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1353 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1335 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
13541336
1355 try testCeilWithVectors();1337 try testCeilWithVectors();
...@@ -1439,7 +1421,6 @@ fn testTrunc(comptime T: type) !void {...@@ -1439,7 +1421,6 @@ fn testTrunc(comptime T: type) !void {
1439test "@trunc with vectors" {1421test "@trunc with vectors" {
1440 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1422 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1441 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1423 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1442 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1443 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1424 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
14441425
1445 try testTruncWithVectors();1426 try testTruncWithVectors();
...@@ -1460,7 +1441,6 @@ test "neg f16" {...@@ -1460,7 +1441,6 @@ test "neg f16" {
1460 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1441 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1461 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1442 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1462 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1443 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1463 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
14641444
1465 if (builtin.os.tag == .freebsd) {1445 if (builtin.os.tag == .freebsd) {
1466 // TODO file issue to track this failure1446 // TODO file issue to track this failure
...@@ -1486,7 +1466,6 @@ test "neg f80/f128/c_longdouble" {...@@ -1486,7 +1466,6 @@ test "neg f80/f128/c_longdouble" {
1486 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1466 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1487 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1467 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1488 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1468 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
1489 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
1490 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1469 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
14911470
1492 try testNeg(f80);1471 try testNeg(f80);
...@@ -1741,7 +1720,6 @@ test "comptime calls are only memoized when float arguments are bit-for-bit equa...@@ -1741,7 +1720,6 @@ test "comptime calls are only memoized when float arguments are bit-for-bit equa
1741}1720}
17421721
1743test "result location forwarded through unary float builtins" {1722test "result location forwarded through unary float builtins" {
1744 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1745 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1723 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1746 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1724 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1747 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1725 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
test/behavior/lower_strlit_to_vector.zig-1
...@@ -4,7 +4,6 @@ const builtin = @import("builtin");...@@ -4,7 +4,6 @@ const builtin = @import("builtin");
4test "strlit to vector" {4test "strlit to vector" {
5 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO5 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
6 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO6 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
7 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;7 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
98
10 const strlit = "0123456789abcdef0123456789ABCDEF";9 const strlit = "0123456789abcdef0123456789ABCDEF";
test/behavior/math.zig-12
...@@ -100,7 +100,6 @@ fn testOneClz(comptime T: type, x: T) u32 {...@@ -100,7 +100,6 @@ fn testOneClz(comptime T: type, x: T) u32 {
100100
101test "@clz vectors" {101test "@clz vectors" {
102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
103 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
104 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO103 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
105 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO104 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
106 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;105 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -184,7 +183,6 @@ fn testCtz128() !void {...@@ -184,7 +183,6 @@ fn testCtz128() !void {
184183
185test "@ctz vectors" {184test "@ctz vectors" {
186 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;185 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
187 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
188 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO186 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
189 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO187 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
190 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;188 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -584,7 +582,6 @@ test "large integer division" {...@@ -584,7 +582,6 @@ test "large integer division" {
584 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;582 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
585 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;583 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
586 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;584 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
587 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
588 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;585 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
589 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;586 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
590587
...@@ -2260,7 +2257,6 @@ fn testRound(comptime T: type, x: T) !void {...@@ -2260,7 +2257,6 @@ fn testRound(comptime T: type, x: T) !void {
22602257
2261test "vector integer addition" {2258test "vector integer addition" {
2262 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2259 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2263 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2264 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2260 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2265 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2261 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2266 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2262 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2322,7 +2318,6 @@ fn testNanEqNan(comptime F: type) !void {...@@ -2322,7 +2318,6 @@ fn testNanEqNan(comptime F: type) !void {
23222318
2323test "vector comparison" {2319test "vector comparison" {
2324 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2320 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2325 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2326 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2321 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2327 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2322 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2328 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2323 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2414,7 +2409,6 @@ test "mod lazy values" {...@@ -2414,7 +2409,6 @@ test "mod lazy values" {
24142409
2415test "@clz works on both vector and scalar inputs" {2410test "@clz works on both vector and scalar inputs" {
2416 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2411 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2417 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2418 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2412 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2419 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2413 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2420 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2414 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2489,7 +2483,6 @@ test "runtime int comparison to inf is comptime-known" {...@@ -2489,7 +2483,6 @@ test "runtime int comparison to inf is comptime-known" {
2489}2483}
24902484
2491test "float divide by zero" {2485test "float divide by zero" {
2492 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2493 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2486 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2494 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2487 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2495 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2488 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2525,7 +2518,6 @@ test "float divide by zero" {...@@ -2525,7 +2518,6 @@ test "float divide by zero" {
25252518
2526test "partially-runtime integer vector division would be illegal if vector elements were reordered" {2519test "partially-runtime integer vector division would be illegal if vector elements were reordered" {
2527 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2520 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2528 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2529 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2521 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2530 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2522 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2531 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2523 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2554,7 +2546,6 @@ test "partially-runtime integer vector division would be illegal if vector eleme...@@ -2554,7 +2546,6 @@ test "partially-runtime integer vector division would be illegal if vector eleme
25542546
2555test "float vector division of comptime zero by runtime nan is nan" {2547test "float vector division of comptime zero by runtime nan is nan" {
2556 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2548 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2557 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2558 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2549 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2559 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2550 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2560 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2551 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2572,7 +2563,6 @@ test "float vector division of comptime zero by runtime nan is nan" {...@@ -2572,7 +2563,6 @@ test "float vector division of comptime zero by runtime nan is nan" {
25722563
2573test "float vector multiplication of comptime zero by runtime nan is nan" {2564test "float vector multiplication of comptime zero by runtime nan is nan" {
2574 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;2565 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2575 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2576 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2566 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2577 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2567 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2578 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2568 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2588,7 +2578,6 @@ test "float vector multiplication of comptime zero by runtime nan is nan" {...@@ -2588,7 +2578,6 @@ test "float vector multiplication of comptime zero by runtime nan is nan" {
2588}2578}
25892579
2590test "comptime float vector division of zero by nan is nan" {2580test "comptime float vector division of zero by nan is nan" {
2591 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2592 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2581 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2593 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2582 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2594 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2583 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -2603,7 +2592,6 @@ test "comptime float vector division of zero by nan is nan" {...@@ -2603,7 +2592,6 @@ test "comptime float vector division of zero by nan is nan" {
2603}2592}
26042593
2605test "comptime float vector multiplication of zero by nan is nan" {2594test "comptime float vector multiplication of zero by nan is nan" {
2606 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2607 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2595 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2608 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2596 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2609 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2597 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
test/behavior/maximum_minimum.zig-7
...@@ -28,7 +28,6 @@ test "@max" {...@@ -28,7 +28,6 @@ test "@max" {
2828
29test "@max on vectors" {29test "@max on vectors" {
30 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;30 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
31 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
32 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO31 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
33 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO32 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
34 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;33 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -82,7 +81,6 @@ test "@min" {...@@ -82,7 +81,6 @@ test "@min" {
8281
83test "@min for vectors" {82test "@min for vectors" {
84 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;83 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
85 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
86 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO84 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
87 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO85 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
88 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;86 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -165,7 +163,6 @@ test "@min/@max more than two arguments" {...@@ -165,7 +163,6 @@ test "@min/@max more than two arguments" {
165163
166test "@min/@max more than two vector arguments" {164test "@min/@max more than two vector arguments" {
167 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;165 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
168 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
169 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO166 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
170 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO167 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
171 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;168 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -195,7 +192,6 @@ test "@min/@max notices bounds" {...@@ -195,7 +192,6 @@ test "@min/@max notices bounds" {
195192
196test "@min/@max notices vector bounds" {193test "@min/@max notices vector bounds" {
197 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;194 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
198 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
199 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO195 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
200 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO196 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
201 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;197 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -246,7 +242,6 @@ test "@min/@max notices bounds from types" {...@@ -246,7 +242,6 @@ test "@min/@max notices bounds from types" {
246242
247test "@min/@max notices bounds from vector types" {243test "@min/@max notices bounds from vector types" {
248 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;244 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
249 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
250 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO245 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
251 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO246 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
252 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;247 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -287,7 +282,6 @@ test "@min/@max notices bounds from types when comptime-known value is undef" {...@@ -287,7 +282,6 @@ test "@min/@max notices bounds from types when comptime-known value is undef" {
287282
288test "@min/@max notices bounds from vector types when element of comptime-known vector is undef" {283test "@min/@max notices bounds from vector types when element of comptime-known vector is undef" {
289 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;284 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
290 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
291 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO285 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
292 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO286 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
293 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;287 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -357,7 +351,6 @@ test "@min/@max with runtime signed and unsigned integers of same size" {...@@ -357,7 +351,6 @@ test "@min/@max with runtime signed and unsigned integers of same size" {
357351
358test "@min/@max with runtime vectors of signed and unsigned integers of same size" {352test "@min/@max with runtime vectors of signed and unsigned integers of same size" {
359 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;353 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
360 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
361 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO354 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
362 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO355 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
363 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;356 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
test/behavior/memmove.zig-4
...@@ -6,7 +6,6 @@ test "memmove and memset intrinsics" {...@@ -6,7 +6,6 @@ test "memmove and memset intrinsics" {
6 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;6 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO7 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;8 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;9 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1110
12 try testMemmoveMemset();11 try testMemmoveMemset();
...@@ -34,7 +33,6 @@ test "@memmove with both operands single-ptr-to-array, one is null-terminated" {...@@ -34,7 +33,6 @@ test "@memmove with both operands single-ptr-to-array, one is null-terminated" {
34 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;33 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
35 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;34 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
36 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;35 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
37 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
38 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;36 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
3937
40 try testMemmoveBothSinglePtrArrayOneIsNullTerminated();38 try testMemmoveBothSinglePtrArrayOneIsNullTerminated();
...@@ -78,7 +76,6 @@ test "@memmove dest many pointer" {...@@ -78,7 +76,6 @@ test "@memmove dest many pointer" {
78 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;76 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
79 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;77 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
80 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;78 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
81 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
82 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;79 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
8380
84 try testMemmoveDestManyPtr();81 try testMemmoveDestManyPtr();
...@@ -121,7 +118,6 @@ test "@memmove slice" {...@@ -121,7 +118,6 @@ test "@memmove slice" {
121 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;118 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
122 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;119 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
123 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;120 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
124 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
125 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;121 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
126122
127 try testMemmoveSlice();123 try testMemmoveSlice();
test/behavior/memset.zig-2
...@@ -80,7 +80,6 @@ test "memset with 1-byte struct element" {...@@ -80,7 +80,6 @@ test "memset with 1-byte struct element" {
80 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;80 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
81 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;81 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
82 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;82 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
83 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
8483
85 const S = struct { x: bool };84 const S = struct { x: bool };
86 var buf: [5]S = undefined;85 var buf: [5]S = undefined;
...@@ -93,7 +92,6 @@ test "memset with 1-byte array element" {...@@ -93,7 +92,6 @@ test "memset with 1-byte array element" {
93 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;92 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
94 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;93 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
95 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;94 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
96 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
9795
98 const A = [1]bool;96 const A = [1]bool;
99 var buf: [5]A = undefined;97 var buf: [5]A = undefined;
test/behavior/muladd.zig-5
...@@ -100,7 +100,6 @@ fn vector16() !void {...@@ -100,7 +100,6 @@ fn vector16() !void {
100100
101test "vector f16" {101test "vector f16" {
102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
103 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
104 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO103 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
105 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO104 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
106 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;105 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -125,7 +124,6 @@ fn vector32() !void {...@@ -125,7 +124,6 @@ fn vector32() !void {
125124
126test "vector f32" {125test "vector f32" {
127 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;126 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
128 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
129 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO127 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
130 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO128 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
131 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;129 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -150,7 +148,6 @@ fn vector64() !void {...@@ -150,7 +148,6 @@ fn vector64() !void {
150148
151test "vector f64" {149test "vector f64" {
152 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;150 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
153 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
154 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO151 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
155 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO152 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
156 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;153 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -174,7 +171,6 @@ fn vector80() !void {...@@ -174,7 +171,6 @@ fn vector80() !void {
174171
175test "vector f80" {172test "vector f80" {
176 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;173 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
177 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
178 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO174 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
179 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO175 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
180 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;176 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -200,7 +196,6 @@ fn vector128() !void {...@@ -200,7 +196,6 @@ fn vector128() !void {
200196
201test "vector f128" {197test "vector f128" {
202 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;198 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
203 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
204 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO199 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
205 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO200 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
206 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;201 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
test/behavior/popcount.zig-1
...@@ -77,7 +77,6 @@ fn testPopCountIntegers() !void {...@@ -77,7 +77,6 @@ fn testPopCountIntegers() !void {
7777
78test "@popCount vectors" {78test "@popCount vectors" {
79 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;79 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
80 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
81 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO80 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
82 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO81 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
83 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;82 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
test/behavior/ptrcast.zig-2
...@@ -515,7 +515,6 @@ test "@ptrCast single-item pointer to slice with length 1" {...@@ -515,7 +515,6 @@ test "@ptrCast single-item pointer to slice with length 1" {
515 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO515 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
516 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO516 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
517 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;517 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
518 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
519518
520 const S = struct {519 const S = struct {
521 fn doTheTest(comptime T: type, ptr: *const T) !void {520 fn doTheTest(comptime T: type, ptr: *const T) !void {
...@@ -536,7 +535,6 @@ test "@ptrCast single-item pointer to slice of bytes" {...@@ -536,7 +535,6 @@ test "@ptrCast single-item pointer to slice of bytes" {
536 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO535 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
537 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO536 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
538 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;537 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
539 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
540538
541 const S = struct {539 const S = struct {
542 fn doTheTest(comptime T: type, ptr: *const T) !void {540 fn doTheTest(comptime T: type, ptr: *const T) !void {
test/behavior/select.zig-3
...@@ -5,7 +5,6 @@ const expect = std.testing.expect;...@@ -5,7 +5,6 @@ const expect = std.testing.expect;
55
6test "@select vectors" {6test "@select vectors" {
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO8 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO9 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
11 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;10 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -36,7 +35,6 @@ fn selectVectors() !void {...@@ -36,7 +35,6 @@ fn selectVectors() !void {
3635
37test "@select arrays" {36test "@select arrays" {
38 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;37 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
39 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
40 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO38 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
41 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO39 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
42 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;40 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -68,7 +66,6 @@ fn selectArrays() !void {...@@ -68,7 +66,6 @@ fn selectArrays() !void {
68test "@select compare result" {66test "@select compare result" {
69 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;67 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
70 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;68 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
71 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
72 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .hexagon) return error.SkipZigTest;69 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .hexagon) return error.SkipZigTest;
7370
74 const S = struct {71 const S = struct {
test/behavior/shuffle.zig-3
...@@ -51,7 +51,6 @@ test "@shuffle int" {...@@ -51,7 +51,6 @@ test "@shuffle int" {
5151
52test "@shuffle int strange sizes" {52test "@shuffle int strange sizes" {
53 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;53 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
54 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
55 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO54 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
56 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO55 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
57 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;56 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -133,7 +132,6 @@ fn testShuffle(...@@ -133,7 +132,6 @@ fn testShuffle(
133132
134test "@shuffle bool 1" {133test "@shuffle bool 1" {
135 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;134 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
136 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
137 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO135 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
138 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO136 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
139 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;137 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -156,7 +154,6 @@ test "@shuffle bool 1" {...@@ -156,7 +154,6 @@ test "@shuffle bool 1" {
156154
157test "@shuffle bool 2" {155test "@shuffle bool 2" {
158 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;156 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
159 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
160 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO157 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
161 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO158 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
162 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;159 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
test/behavior/truncate.zig-1
...@@ -112,7 +112,6 @@ test "@truncate > 128 bits" {...@@ -112,7 +112,6 @@ test "@truncate > 128 bits" {
112112
113test "truncate on vectors" {113test "truncate on vectors" {
114 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;114 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
115 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
116 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;115 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
117 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO116 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
118 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;117 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
test/behavior/union.zig-1
...@@ -2184,7 +2184,6 @@ test "matching captures causes union equivalence" {...@@ -2184,7 +2184,6 @@ test "matching captures causes union equivalence" {
2184test "signed enum tag with negative value" {2184test "signed enum tag with negative value" {
2185 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2185 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2186 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;2186 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
2187 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
2188 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2187 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
21892188
2190 const Enum = enum(i8) {2189 const Enum = enum(i8) {
test/behavior/vector.zig+4-49
...@@ -9,7 +9,6 @@ const expectEqual = std.testing.expectEqual;...@@ -9,7 +9,6 @@ const expectEqual = std.testing.expectEqual;
9test "implicit cast vector to array - bool" {9test "implicit cast vector to array - bool" {
10 if (builtin.cpu.arch == .aarch64_be and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;10 if (builtin.cpu.arch == .aarch64_be and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
11 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;11 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
12 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
1312
14 const S = struct {13 const S = struct {
15 fn doTheTest() !void {14 fn doTheTest() !void {
...@@ -33,7 +32,6 @@ test "implicit cast vector to array - bool" {...@@ -33,7 +32,6 @@ test "implicit cast vector to array - bool" {
3332
34test "implicit cast array to vector - bool" {33test "implicit cast array to vector - bool" {
35 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;34 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
36 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
3735
38 const S = struct {36 const S = struct {
39 fn doTheTest() !void {37 fn doTheTest() !void {
...@@ -57,7 +55,6 @@ test "implicit cast array to vector - bool" {...@@ -57,7 +55,6 @@ test "implicit cast array to vector - bool" {
5755
58test "vector wrap operators" {56test "vector wrap operators" {
59 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;57 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
60 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
61 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO58 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
62 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO59 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
63 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;60 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -81,7 +78,6 @@ test "vector wrap operators" {...@@ -81,7 +78,6 @@ test "vector wrap operators" {
8178
82test "vector bin compares with mem.eql" {79test "vector bin compares with mem.eql" {
83 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;80 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
84 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
85 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO81 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
86 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO82 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
87 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;83 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -106,7 +102,6 @@ test "vector bin compares with mem.eql" {...@@ -106,7 +102,6 @@ test "vector bin compares with mem.eql" {
106102
107test "vector int operators" {103test "vector int operators" {
108 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;104 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
109 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
110 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO105 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
111 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO106 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
112 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;107 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -129,7 +124,6 @@ test "vector int operators" {...@@ -129,7 +124,6 @@ test "vector int operators" {
129124
130test "vector float operators" {125test "vector float operators" {
131 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;126 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
132 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
133 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO127 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
134 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO128 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
135 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;129 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -173,7 +167,6 @@ test "vector float operators" {...@@ -173,7 +167,6 @@ test "vector float operators" {
173167
174test "vector bit operators" {168test "vector bit operators" {
175 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;169 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
176 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
177 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO170 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
178 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO171 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
179 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;172 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -228,7 +221,6 @@ test "array to vector" {...@@ -228,7 +221,6 @@ test "array to vector" {
228 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO221 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
229 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO222 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
230 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;223 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
231 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
232224
233 const S = struct {225 const S = struct {
234 fn doTheTest() !void {226 fn doTheTest() !void {
...@@ -247,7 +239,6 @@ test "array vector coercion - odd sizes" {...@@ -247,7 +239,6 @@ test "array vector coercion - odd sizes" {
247 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;239 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
248 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO240 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
249 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO241 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
250 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
251 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;242 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
252243
253 const S = struct {244 const S = struct {
...@@ -286,7 +277,6 @@ test "array to vector with element type coercion" {...@@ -286,7 +277,6 @@ test "array to vector with element type coercion" {
286 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;277 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
287 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO278 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
288 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO279 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
289 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
290 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;280 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
291 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;281 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
292282
...@@ -304,7 +294,6 @@ test "array to vector with element type coercion" {...@@ -304,7 +294,6 @@ test "array to vector with element type coercion" {
304}294}
305295
306test "peer type resolution with coercible element types" {296test "peer type resolution with coercible element types" {
307 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
308 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO297 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
309 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO298 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
310299
...@@ -323,7 +312,6 @@ test "peer type resolution with coercible element types" {...@@ -323,7 +312,6 @@ test "peer type resolution with coercible element types" {
323312
324test "tuple to vector" {313test "tuple to vector" {
325 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;314 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
326 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
327 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO315 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
328 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO316 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
329 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;317 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -346,7 +334,6 @@ test "tuple to vector" {...@@ -346,7 +334,6 @@ test "tuple to vector" {
346334
347test "vector casts of sizes not divisible by 8" {335test "vector casts of sizes not divisible by 8" {
348 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;336 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
349 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
350 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO337 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
351 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO338 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
352 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;339 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -493,7 +480,6 @@ test "initialize vector which is a struct field" {...@@ -493,7 +480,6 @@ test "initialize vector which is a struct field" {
493480
494test "vector comparison operators" {481test "vector comparison operators" {
495 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;482 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
496 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
497 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO483 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
498 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO484 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
499 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;485 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -539,7 +525,6 @@ test "vector comparison operators" {...@@ -539,7 +525,6 @@ test "vector comparison operators" {
539525
540test "vector division operators" {526test "vector division operators" {
541 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;527 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
542 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
543 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO528 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
544 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO529 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
545 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;530 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -632,7 +617,6 @@ test "vector division operators" {...@@ -632,7 +617,6 @@ test "vector division operators" {
632617
633test "vector bitwise not operator" {618test "vector bitwise not operator" {
634 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;619 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
635 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
636 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;620 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
637 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO621 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
638 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO622 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
...@@ -671,7 +655,6 @@ test "vector bitwise not operator" {...@@ -671,7 +655,6 @@ test "vector bitwise not operator" {
671655
672test "vector boolean not operator" {656test "vector boolean not operator" {
673 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;657 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
674 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
675 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;658 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
676 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO659 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
677 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO660 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
...@@ -700,7 +683,6 @@ test "vector boolean not operator" {...@@ -700,7 +683,6 @@ test "vector boolean not operator" {
700683
701test "vector shift operators" {684test "vector shift operators" {
702 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;685 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
703 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
704 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO686 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
705 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO687 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
706 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;688 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -772,7 +754,6 @@ test "vector shift operators" {...@@ -772,7 +754,6 @@ test "vector shift operators" {
772754
773test "vector reduce operation" {755test "vector reduce operation" {
774 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;756 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
775 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
776 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO757 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
777 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO758 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
778 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;759 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -902,7 +883,6 @@ test "vector reduce operation" {...@@ -902,7 +883,6 @@ test "vector reduce operation" {
902}883}
903884
904test "vector @reduce comptime" {885test "vector @reduce comptime" {
905 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
906 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO886 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
907 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO887 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
908888
...@@ -919,7 +899,6 @@ test "vector @reduce comptime" {...@@ -919,7 +899,6 @@ test "vector @reduce comptime" {
919899
920test "saturating add" {900test "saturating add" {
921 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;901 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
922 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
923 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO902 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
924 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO903 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
925 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;904 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1020,7 +999,6 @@ test "saturating add" {...@@ -1020,7 +999,6 @@ test "saturating add" {
1020999
1021test "saturating subtraction" {1000test "saturating subtraction" {
1022 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1001 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1023 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1024 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1002 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1025 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1003 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1026 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1004 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1113,7 +1091,6 @@ test "saturating subtraction" {...@@ -1113,7 +1091,6 @@ test "saturating subtraction" {
11131091
1114test "saturating multiplication" {1092test "saturating multiplication" {
1115 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1093 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1116 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1117 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1094 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1118 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1095 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1119 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1096 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1141,7 +1118,6 @@ test "saturating multiplication" {...@@ -1141,7 +1118,6 @@ test "saturating multiplication" {
11411118
1142test "saturating shift-left" {1119test "saturating shift-left" {
1143 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1120 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1144 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1145 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1121 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1146 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1122 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1147 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1123 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1165,7 +1141,6 @@ test "saturating shift-left" {...@@ -1165,7 +1141,6 @@ test "saturating shift-left" {
11651141
1166test "multiplication-assignment operator with an array operand" {1142test "multiplication-assignment operator with an array operand" {
1167 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1143 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1168 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1169 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1144 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1170 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1145 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1171 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1146 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -1186,7 +1161,6 @@ test "multiplication-assignment operator with an array operand" {...@@ -1186,7 +1161,6 @@ test "multiplication-assignment operator with an array operand" {
11861161
1187test "@addWithOverflow" {1162test "@addWithOverflow" {
1188 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1163 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1189 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1190 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1164 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1191 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1165 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1192 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1166 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -1235,7 +1209,6 @@ test "@addWithOverflow" {...@@ -1235,7 +1209,6 @@ test "@addWithOverflow" {
12351209
1236test "@subWithOverflow" {1210test "@subWithOverflow" {
1237 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1211 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1238 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1239 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1212 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1240 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1213 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1241 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1214 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -1268,7 +1241,6 @@ test "@subWithOverflow" {...@@ -1268,7 +1241,6 @@ test "@subWithOverflow" {
12681241
1269test "@mulWithOverflow" {1242test "@mulWithOverflow" {
1270 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1243 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1271 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1272 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1244 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1273 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1245 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1274 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1246 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -1290,7 +1262,6 @@ test "@mulWithOverflow" {...@@ -1290,7 +1262,6 @@ test "@mulWithOverflow" {
12901262
1291test "@shlWithOverflow" {1263test "@shlWithOverflow" {
1292 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1264 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1293 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1294 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1265 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1295 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1266 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1296 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1267 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -1313,28 +1284,27 @@ test "@shlWithOverflow" {...@@ -1313,28 +1284,27 @@ test "@shlWithOverflow" {
1313test "alignment of vectors" {1284test "alignment of vectors" {
1314 try expect(@alignOf(@Vector(2, u8)) == switch (builtin.zig_backend) {1285 try expect(@alignOf(@Vector(2, u8)) == switch (builtin.zig_backend) {
1315 else => 2,1286 else => 2,
1316 .stage2_c => @alignOf(u8),1287 .stage2_c, .stage2_wasm => @alignOf(u8),
1317 .stage2_x86_64 => 16,1288 .stage2_x86_64 => 16,
1318 });1289 });
1319 try expect(@alignOf(@Vector(2, u1)) == switch (builtin.zig_backend) {1290 try expect(@alignOf(@Vector(2, u1)) == switch (builtin.zig_backend) {
1320 else => 1,1291 else => 1,
1321 .stage2_c => @alignOf(u1),1292 .stage2_c, .stage2_wasm => @alignOf(u1),
1322 .stage2_x86_64 => 16,1293 .stage2_x86_64 => 16,
1323 });1294 });
1324 try expect(@alignOf(@Vector(1, u1)) == switch (builtin.zig_backend) {1295 try expect(@alignOf(@Vector(1, u1)) == switch (builtin.zig_backend) {
1325 else => 1,1296 else => 1,
1326 .stage2_c => @alignOf(u1),1297 .stage2_c, .stage2_wasm => @alignOf(u1),
1327 .stage2_x86_64 => 16,1298 .stage2_x86_64 => 16,
1328 });1299 });
1329 try expect(@alignOf(@Vector(2, u16)) == switch (builtin.zig_backend) {1300 try expect(@alignOf(@Vector(2, u16)) == switch (builtin.zig_backend) {
1330 else => 4,1301 else => 4,
1331 .stage2_c => @alignOf(u16),1302 .stage2_c, .stage2_wasm => @alignOf(u16),
1332 .stage2_x86_64 => 16,1303 .stage2_x86_64 => 16,
1333 });1304 });
1334}1305}
13351306
1336test "loading the second vector from a slice of vectors" {1307test "loading the second vector from a slice of vectors" {
1337 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1338 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1308 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1339 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1309 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1340 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1310 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1351,7 +1321,6 @@ test "loading the second vector from a slice of vectors" {...@@ -1351,7 +1321,6 @@ test "loading the second vector from a slice of vectors" {
13511321
1352test "array of vectors is copied" {1322test "array of vectors is copied" {
1353 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1323 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1354 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1355 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1324 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1356 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1325 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1357 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1326 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1375,7 +1344,6 @@ test "array of vectors is copied" {...@@ -1375,7 +1344,6 @@ test "array of vectors is copied" {
13751344
1376test "byte vector initialized in inline function" {1345test "byte vector initialized in inline function" {
1377 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1346 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1378 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1379 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1347 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1380 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1348 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1381 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1349 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -1401,7 +1369,6 @@ test "byte vector initialized in inline function" {...@@ -1401,7 +1369,6 @@ test "byte vector initialized in inline function" {
1401}1369}
14021370
1403test "zero divisor" {1371test "zero divisor" {
1404 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1405 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1372 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1406 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1373 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
14071374
...@@ -1420,7 +1387,6 @@ test "zero divisor" {...@@ -1420,7 +1387,6 @@ test "zero divisor" {
1420}1387}
14211388
1422test "zero multiplicand" {1389test "zero multiplicand" {
1423 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1424 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1390 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1425 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1391 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1426 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO1392 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
...@@ -1444,7 +1410,6 @@ test "zero multiplicand" {...@@ -1444,7 +1410,6 @@ test "zero multiplicand" {
1444}1410}
14451411
1446test "@intCast to u0" {1412test "@intCast to u0" {
1447 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1448 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1413 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1449 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1414 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1450 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1415 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -1469,7 +1434,6 @@ test "modRem with zero divisor" {...@@ -1469,7 +1434,6 @@ test "modRem with zero divisor" {
14691434
1470test "array operands to shuffle are coerced to vectors" {1435test "array operands to shuffle are coerced to vectors" {
1471 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1436 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1472 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1473 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1437 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1474 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1438 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1475 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1439 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
...@@ -1486,7 +1450,6 @@ test "load packed vector element" {...@@ -1486,7 +1450,6 @@ test "load packed vector element" {
1486 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1450 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1487 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1451 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1488 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1452 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1489 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1490 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1453 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
14911454
1492 var x: @Vector(2, u15) = .{ 1, 4 };1455 var x: @Vector(2, u15) = .{ 1, 4 };
...@@ -1498,7 +1461,6 @@ test "store packed vector element" {...@@ -1498,7 +1461,6 @@ test "store packed vector element" {
1498 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1461 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1499 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1462 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1500 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1463 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1501 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1502 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO1464 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
1503 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1465 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1504 if (builtin.cpu.arch == .aarch64_be and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;1466 if (builtin.cpu.arch == .aarch64_be and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
...@@ -1513,7 +1475,6 @@ test "store packed vector element" {...@@ -1513,7 +1475,6 @@ test "store packed vector element" {
1513test "store to vector in slice" {1475test "store to vector in slice" {
1514 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1476 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1515 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1477 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1516 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1517 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1478 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1518 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1479 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
15191480
...@@ -1531,7 +1492,6 @@ test "store to vector in slice" {...@@ -1531,7 +1492,6 @@ test "store to vector in slice" {
1531test "store vector with memset" {1492test "store vector with memset" {
1532 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1493 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1533 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1494 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1534 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1535 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1495 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1536 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO1496 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
1537 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO1497 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
...@@ -1574,7 +1534,6 @@ test "addition of vectors represented as strings" {...@@ -1574,7 +1534,6 @@ test "addition of vectors represented as strings" {
1574test "compare vectors with different element types" {1534test "compare vectors with different element types" {
1575 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1535 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1576 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1536 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1577 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1578 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1537 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1579 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1538 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
15801539
...@@ -1586,7 +1545,6 @@ test "compare vectors with different element types" {...@@ -1586,7 +1545,6 @@ test "compare vectors with different element types" {
15861545
1587test "vector pointer is indexable" {1546test "vector pointer is indexable" {
1588 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1547 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1589 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1590 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1548 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
15911549
1592 const V = @Vector(2, u32);1550 const V = @Vector(2, u32);
...@@ -1609,7 +1567,6 @@ test "vector pointer is indexable" {...@@ -1609,7 +1567,6 @@ test "vector pointer is indexable" {
16091567
1610test "boolean vector with 2 or more booleans" {1568test "boolean vector with 2 or more booleans" {
1611 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1569 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1612 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1613 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1570 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
16141571
1615 const vec1 = @Vector(2, bool){ true, true };1572 const vec1 = @Vector(2, bool){ true, true };
...@@ -1622,7 +1579,6 @@ test "boolean vector with 2 or more booleans" {...@@ -1622,7 +1579,6 @@ test "boolean vector with 2 or more booleans" {
1622test "bitcast to vector with different child type" {1579test "bitcast to vector with different child type" {
1623 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1580 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1624 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1581 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1625 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1626 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1582 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1627 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1583 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1628 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1584 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
...@@ -1667,7 +1623,6 @@ test "arithmetic on zero-length vectors" {...@@ -1667,7 +1623,6 @@ test "arithmetic on zero-length vectors" {
1667}1623}
16681624
1669test "@reduce on bool vector" {1625test "@reduce on bool vector" {
1670 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1671 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1626 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
16721627
1673 const a = @Vector(2, bool){ true, true };1628 const a = @Vector(2, bool){ true, true };
test/tests.zig+1-1
...@@ -1473,7 +1473,7 @@ const module_test_targets = blk: {...@@ -1473,7 +1473,7 @@ const module_test_targets = blk: {
1473 .os_tag = .wasi,1473 .os_tag = .wasi,
1474 .abi = .none,1474 .abi = .none,
1475 },1475 },
1476 .skip_modules = &.{ "compiler-rt", "std" },1476 .skip_modules = &.{"compiler-rt"},
1477 .use_llvm = false,1477 .use_llvm = false,
1478 .use_lld = false,1478 .use_lld = false,
1479 },1479 },