authorgravatar for william@sengir.comWilliam Sengir <william@sengir.com> 2022-03-20 01:11:21-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-21 16:54:19-07:00
logc9598c4cd38f742e75a54d5a28d169351104b61d
tree01de9914d3bdc663b0c02c2ff83a6c49f04d9d71
parentafdcfb005ea32849f30e2abd7361ce1f33d0ee74

behavior tests: enable all vector tests for the stage2 LLVM backend


2 files changed, 184 insertions(+), 41 deletions(-)

src/value.zig+6-10
...@@ -2693,16 +2693,14 @@ pub const Value = extern union {...@@ -2693,16 +2693,14 @@ pub const Value = extern union {
2693 if (int_ty.zigTypeTag() == .Vector) {2693 if (int_ty.zigTypeTag() == .Vector) {
2694 const result_data = try arena.alloc(Value, int_ty.vectorLen());2694 const result_data = try arena.alloc(Value, int_ty.vectorLen());
2695 for (result_data) |*scalar, i| {2695 for (result_data) |*scalar, i| {
2696 scalar.* = try intToFloatScalar(val.indexVectorlike(i), arena, int_ty.scalarType(), float_ty.scalarType(), target);2696 scalar.* = try intToFloatScalar(val.indexVectorlike(i), arena, float_ty.scalarType(), target);
2697 }2697 }
2698 return Value.Tag.aggregate.create(arena, result_data);2698 return Value.Tag.aggregate.create(arena, result_data);
2699 }2699 }
2700 return intToFloatScalar(val, arena, int_ty, float_ty, target);2700 return intToFloatScalar(val, arena, float_ty, target);
2701 }2701 }
27022702
2703 pub fn intToFloatScalar(val: Value, arena: Allocator, int_ty: Type, float_ty: Type, target: Target) !Value {2703 pub fn intToFloatScalar(val: Value, arena: Allocator, float_ty: Type, target: Target) !Value {
2704 assert(int_ty.isNumeric() and !int_ty.isAnyFloat());
2705 assert(float_ty.isAnyFloat());
2706 switch (val.tag()) {2704 switch (val.tag()) {
2707 .undef, .zero, .one => return val,2705 .undef, .zero, .one => return val,
2708 .the_only_possible_value => return Value.initTag(.zero), // for i0, u02706 .the_only_possible_value => return Value.initTag(.zero), // for i0, u0
...@@ -2754,16 +2752,14 @@ pub const Value = extern union {...@@ -2754,16 +2752,14 @@ pub const Value = extern union {
2754 if (float_ty.zigTypeTag() == .Vector) {2752 if (float_ty.zigTypeTag() == .Vector) {
2755 const result_data = try arena.alloc(Value, float_ty.vectorLen());2753 const result_data = try arena.alloc(Value, float_ty.vectorLen());
2756 for (result_data) |*scalar, i| {2754 for (result_data) |*scalar, i| {
2757 scalar.* = try floatToIntScalar(val.indexVectorlike(i), arena, float_ty.scalarType(), int_ty.scalarType(), target);2755 scalar.* = try floatToIntScalar(val.indexVectorlike(i), arena, int_ty.scalarType(), target);
2758 }2756 }
2759 return Value.Tag.aggregate.create(arena, result_data);2757 return Value.Tag.aggregate.create(arena, result_data);
2760 }2758 }
2761 return floatToIntScalar(val, arena, float_ty, int_ty, target);2759 return floatToIntScalar(val, arena, int_ty, target);
2762 }2760 }
27632761
2764 pub fn floatToIntScalar(val: Value, arena: Allocator, float_ty: Type, int_ty: Type, target: Target) error{ FloatCannotFit, OutOfMemory }!Value {2762 pub fn floatToIntScalar(val: Value, arena: Allocator, int_ty: Type, target: Target) error{ FloatCannotFit, OutOfMemory }!Value {
2765 assert(float_ty.isAnyFloat());
2766 assert(int_ty.isInt());
2767 const Limb = std.math.big.Limb;2763 const Limb = std.math.big.Limb;
27682764
2769 var value = val.toFloat(f64); // TODO: f128 ?2765 var value = val.toFloat(f64); // TODO: f128 ?
test/behavior/vector.zig+178-31
...@@ -6,7 +6,12 @@ const expect = std.testing.expect;...@@ -6,7 +6,12 @@ const expect = std.testing.expect;
6const Vector = std.meta.Vector;6const Vector = std.meta.Vector;
77
8test "implicit cast vector to array - bool" {8test "implicit cast vector to array - bool" {
9 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO9 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
10 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
11 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
12 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
13 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
14
10 const S = struct {15 const S = struct {
11 fn doTheTest() !void {16 fn doTheTest() !void {
12 const a: Vector(4, bool) = [_]bool{ true, false, true, false };17 const a: Vector(4, bool) = [_]bool{ true, false, true, false };
...@@ -19,7 +24,12 @@ test "implicit cast vector to array - bool" {...@@ -19,7 +24,12 @@ test "implicit cast vector to array - bool" {
19}24}
2025
21test "vector wrap operators" {26test "vector wrap operators" {
22 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO27 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
28 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
29 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
30 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
31 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
32
23 const S = struct {33 const S = struct {
24 fn doTheTest() !void {34 fn doTheTest() !void {
25 var v: Vector(4, i32) = [4]i32{ 2147483647, -2, 30, 40 };35 var v: Vector(4, i32) = [4]i32{ 2147483647, -2, 30, 40 };
...@@ -36,7 +46,12 @@ test "vector wrap operators" {...@@ -36,7 +46,12 @@ test "vector wrap operators" {
36}46}
3747
38test "vector bin compares with mem.eql" {48test "vector bin compares with mem.eql" {
39 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO49 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
50 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
51 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
52 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
53 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
54
40 const S = struct {55 const S = struct {
41 fn doTheTest() !void {56 fn doTheTest() !void {
42 var v: Vector(4, i32) = [4]i32{ 2147483647, -2, 30, 40 };57 var v: Vector(4, i32) = [4]i32{ 2147483647, -2, 30, 40 };
...@@ -54,7 +69,12 @@ test "vector bin compares with mem.eql" {...@@ -54,7 +69,12 @@ test "vector bin compares with mem.eql" {
54}69}
5570
56test "vector int operators" {71test "vector int operators" {
57 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO72 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
73 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
74 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
75 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
76 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
77
58 const S = struct {78 const S = struct {
59 fn doTheTest() !void {79 fn doTheTest() !void {
60 var v: Vector(4, i32) = [4]i32{ 10, 20, 30, 40 };80 var v: Vector(4, i32) = [4]i32{ 10, 20, 30, 40 };
...@@ -70,7 +90,12 @@ test "vector int operators" {...@@ -70,7 +90,12 @@ test "vector int operators" {
70}90}
7191
72test "vector float operators" {92test "vector float operators" {
73 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO93 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
94 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
95 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
96 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
97 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
98
74 const S = struct {99 const S = struct {
75 fn doTheTest() !void {100 fn doTheTest() !void {
76 var v: Vector(4, f32) = [4]f32{ 10, 20, 30, 40 };101 var v: Vector(4, f32) = [4]f32{ 10, 20, 30, 40 };
...@@ -86,7 +111,12 @@ test "vector float operators" {...@@ -86,7 +111,12 @@ test "vector float operators" {
86}111}
87112
88test "vector bit operators" {113test "vector bit operators" {
89 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO114 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
115 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
116 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
117 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
118 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
119
90 const S = struct {120 const S = struct {
91 fn doTheTest() !void {121 fn doTheTest() !void {
92 var v: Vector(4, u8) = [4]u8{ 0b10101010, 0b10101010, 0b10101010, 0b10101010 };122 var v: Vector(4, u8) = [4]u8{ 0b10101010, 0b10101010, 0b10101010, 0b10101010 };
...@@ -101,7 +131,12 @@ test "vector bit operators" {...@@ -101,7 +131,12 @@ test "vector bit operators" {
101}131}
102132
103test "implicit cast vector to array" {133test "implicit cast vector to array" {
104 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO134 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
135 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
136 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
137 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
138 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
139
105 const S = struct {140 const S = struct {
106 fn doTheTest() !void {141 fn doTheTest() !void {
107 var a: Vector(4, i32) = [_]i32{ 1, 2, 3, 4 };142 var a: Vector(4, i32) = [_]i32{ 1, 2, 3, 4 };
...@@ -115,7 +150,12 @@ test "implicit cast vector to array" {...@@ -115,7 +150,12 @@ test "implicit cast vector to array" {
115}150}
116151
117test "array to vector" {152test "array to vector" {
118 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO153 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
154 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
155 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
156 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
157 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
158
119 const S = struct {159 const S = struct {
120 fn doTheTest() !void {160 fn doTheTest() !void {
121 var foo: f32 = 3.14;161 var foo: f32 = 3.14;
...@@ -129,7 +169,12 @@ test "array to vector" {...@@ -129,7 +169,12 @@ test "array to vector" {
129}169}
130170
131test "vector casts of sizes not divisible by 8" {171test "vector casts of sizes not divisible by 8" {
132 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO172 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
173 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
174 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
175 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
176 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
177
133 const S = struct {178 const S = struct {
134 fn doTheTest() !void {179 fn doTheTest() !void {
135 {180 {
...@@ -159,7 +204,12 @@ test "vector casts of sizes not divisible by 8" {...@@ -159,7 +204,12 @@ test "vector casts of sizes not divisible by 8" {
159}204}
160205
161test "vector @splat" {206test "vector @splat" {
162 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO207 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
208 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
209 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
210 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
211 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
212
163 const S = struct {213 const S = struct {
164 fn testForT(comptime N: comptime_int, v: anytype) !void {214 fn testForT(comptime N: comptime_int, v: anytype) !void {
165 const T = @TypeOf(v);215 const T = @TypeOf(v);
...@@ -195,7 +245,12 @@ test "vector @splat" {...@@ -195,7 +245,12 @@ test "vector @splat" {
195}245}
196246
197test "load vector elements via comptime index" {247test "load vector elements via comptime index" {
198 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO248 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
249 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
250 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
251 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
252 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
253
199 const S = struct {254 const S = struct {
200 fn doTheTest() !void {255 fn doTheTest() !void {
201 var v: Vector(4, i32) = [_]i32{ 1, 2, 3, undefined };256 var v: Vector(4, i32) = [_]i32{ 1, 2, 3, undefined };
...@@ -213,7 +268,12 @@ test "load vector elements via comptime index" {...@@ -213,7 +268,12 @@ test "load vector elements via comptime index" {
213}268}
214269
215test "store vector elements via comptime index" {270test "store vector elements via comptime index" {
216 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO271 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
272 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
273 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
274 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
275 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
276
217 const S = struct {277 const S = struct {
218 fn doTheTest() !void {278 fn doTheTest() !void {
219 var v: Vector(4, i32) = [_]i32{ 1, 5, 3, undefined };279 var v: Vector(4, i32) = [_]i32{ 1, 5, 3, undefined };
...@@ -237,7 +297,12 @@ test "store vector elements via comptime index" {...@@ -237,7 +297,12 @@ test "store vector elements via comptime index" {
237}297}
238298
239test "load vector elements via runtime index" {299test "load vector elements via runtime index" {
240 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO300 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
301 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
302 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
303 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
304 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
305
241 const S = struct {306 const S = struct {
242 fn doTheTest() !void {307 fn doTheTest() !void {
243 var v: Vector(4, i32) = [_]i32{ 1, 2, 3, undefined };308 var v: Vector(4, i32) = [_]i32{ 1, 2, 3, undefined };
...@@ -255,7 +320,12 @@ test "load vector elements via runtime index" {...@@ -255,7 +320,12 @@ test "load vector elements via runtime index" {
255}320}
256321
257test "store vector elements via runtime index" {322test "store vector elements via runtime index" {
258 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO323 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
324 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
325 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
326 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
327 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
328
259 const S = struct {329 const S = struct {
260 fn doTheTest() !void {330 fn doTheTest() !void {
261 var v: Vector(4, i32) = [_]i32{ 1, 5, 3, undefined };331 var v: Vector(4, i32) = [_]i32{ 1, 5, 3, undefined };
...@@ -274,7 +344,12 @@ test "store vector elements via runtime index" {...@@ -274,7 +344,12 @@ test "store vector elements via runtime index" {
274}344}
275345
276test "initialize vector which is a struct field" {346test "initialize vector which is a struct field" {
277 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO347 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
348 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
349 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
350 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
351 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
352
278 const Vec4Obj = struct {353 const Vec4Obj = struct {
279 data: Vector(4, f32),354 data: Vector(4, f32),
280 };355 };
...@@ -292,7 +367,12 @@ test "initialize vector which is a struct field" {...@@ -292,7 +367,12 @@ test "initialize vector which is a struct field" {
292}367}
293368
294test "vector comparison operators" {369test "vector comparison operators" {
295 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO370 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
371 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
372 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
373 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
374 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
375
296 const S = struct {376 const S = struct {
297 fn doTheTest() !void {377 fn doTheTest() !void {
298 {378 {
...@@ -327,7 +407,12 @@ test "vector comparison operators" {...@@ -327,7 +407,12 @@ test "vector comparison operators" {
327}407}
328408
329test "vector division operators" {409test "vector division operators" {
330 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO410 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
411 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
412 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
413 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
414 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
415
331 const S = struct {416 const S = struct {
332 fn doTheTestDiv(comptime T: type, x: Vector(4, T), y: Vector(4, T)) !void {417 fn doTheTestDiv(comptime T: type, x: Vector(4, T), y: Vector(4, T)) !void {
333 if (!comptime std.meta.trait.isSignedInt(T)) {418 if (!comptime std.meta.trait.isSignedInt(T)) {
...@@ -410,7 +495,12 @@ test "vector division operators" {...@@ -410,7 +495,12 @@ test "vector division operators" {
410}495}
411496
412test "vector bitwise not operator" {497test "vector bitwise not operator" {
413 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO498 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
499 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
500 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
501 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
502 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
503
414 const S = struct {504 const S = struct {
415 fn doTheTestNot(comptime T: type, x: Vector(4, T)) !void {505 fn doTheTestNot(comptime T: type, x: Vector(4, T)) !void {
416 var y = ~x;506 var y = ~x;
...@@ -436,7 +526,12 @@ test "vector bitwise not operator" {...@@ -436,7 +526,12 @@ test "vector bitwise not operator" {
436}526}
437527
438test "vector shift operators" {528test "vector shift operators" {
439 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO529 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
530 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
531 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
532 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
533 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
534
440 const S = struct {535 const S = struct {
441 fn doTheTestShift(x: anytype, y: anytype) !void {536 fn doTheTestShift(x: anytype, y: anytype) !void {
442 const N = @typeInfo(@TypeOf(x)).Array.len;537 const N = @typeInfo(@TypeOf(x)).Array.len;
...@@ -667,7 +762,12 @@ test "vector reduce operation" {...@@ -667,7 +762,12 @@ test "vector reduce operation" {
667}762}
668763
669test "mask parameter of @shuffle is comptime scope" {764test "mask parameter of @shuffle is comptime scope" {
670 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO765 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
766 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
767 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
768 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
769 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
770
671 const __v4hi = std.meta.Vector(4, i16);771 const __v4hi = std.meta.Vector(4, i16);
672 var v4_a = __v4hi{ 0, 0, 0, 0 };772 var v4_a = __v4hi{ 0, 0, 0, 0 };
673 var v4_b = __v4hi{ 0, 0, 0, 0 };773 var v4_b = __v4hi{ 0, 0, 0, 0 };
...@@ -681,13 +781,30 @@ test "mask parameter of @shuffle is comptime scope" {...@@ -681,13 +781,30 @@ test "mask parameter of @shuffle is comptime scope" {
681}781}
682782
683test "saturating add" {783test "saturating add" {
684 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO784 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
785 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
786 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
787 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
788 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
789
685 const S = struct {790 const S = struct {
686 fn doTheTest() !void {791 fn doTheTest() !void {
687 const u8x3 = std.meta.Vector(3, u8);792 { // Broken out to avoid https://github.com/ziglang/zig/issues/11251
688 try expect(mem.eql(u8, &@as([3]u8, u8x3{ 255, 255, 255 }), &@as([3]u8, u8x3{ 255, 254, 1 } +| u8x3{ 1, 2, 255 })));793 const u8x3 = std.meta.Vector(3, u8);
689 const i8x3 = std.meta.Vector(3, i8);794 const lhs = u8x3{ 255, 254, 1 };
690 try expect(mem.eql(i8, &@as([3]i8, i8x3{ 127, 127, 127 }), &@as([3]i8, i8x3{ 127, 126, 1 } +| i8x3{ 1, 2, 127 })));795 const rhs = u8x3{ 1, 2, 255 };
796 const result = lhs +| rhs;
797 const expected = u8x3{ 255, 255, 255 };
798 try expect(mem.eql(u8, &@as([3]u8, expected), &@as([3]u8, result)));
799 }
800 { // Broken out to avoid https://github.com/ziglang/zig/issues/11251
801 const i8x3 = std.meta.Vector(3, i8);
802 const lhs = i8x3{ 127, 126, 1 };
803 const rhs = i8x3{ 1, 2, 127 };
804 const result = lhs +| rhs;
805 const expected = i8x3{ 127, 127, 127 };
806 try expect(mem.eql(i8, &@as([3]i8, expected), &@as([3]i8, result)));
807 }
691 }808 }
692 };809 };
693 try S.doTheTest();810 try S.doTheTest();
...@@ -695,11 +812,21 @@ test "saturating add" {...@@ -695,11 +812,21 @@ test "saturating add" {
695}812}
696813
697test "saturating subtraction" {814test "saturating subtraction" {
698 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO815 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
816 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
817 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
818 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
819 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
820
699 const S = struct {821 const S = struct {
700 fn doTheTest() !void {822 fn doTheTest() !void {
823 // Broken out to avoid https://github.com/ziglang/zig/issues/11251
701 const u8x3 = std.meta.Vector(3, u8);824 const u8x3 = std.meta.Vector(3, u8);
702 try expect(mem.eql(u8, &@as([3]u8, u8x3{ 0, 0, 0 }), &@as([3]u8, u8x3{ 0, 0, 0 } -| u8x3{ 255, 255, 255 })));825 const lhs = u8x3{ 0, 0, 0 };
826 const rhs = u8x3{ 255, 255, 255 };
827 const result = lhs -| rhs;
828 const expected = u8x3{ 0, 0, 0 };
829 try expect(mem.eql(u8, &@as([3]u8, expected), &@as([3]u8, result)));
703 }830 }
704 };831 };
705 try S.doTheTest();832 try S.doTheTest();
...@@ -707,14 +834,24 @@ test "saturating subtraction" {...@@ -707,14 +834,24 @@ test "saturating subtraction" {
707}834}
708835
709test "saturating multiplication" {836test "saturating multiplication" {
710 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO837 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
838 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
839 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
840 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
841 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
842
711 // TODO: once #9660 has been solved, remove this line843 // TODO: once #9660 has been solved, remove this line
712 if (builtin.target.cpu.arch == .wasm32) return error.SkipZigTest;844 if (builtin.target.cpu.arch == .wasm32) return error.SkipZigTest;
713845
714 const S = struct {846 const S = struct {
715 fn doTheTest() !void {847 fn doTheTest() !void {
848 // Broken out to avoid https://github.com/ziglang/zig/issues/11251
716 const u8x3 = std.meta.Vector(3, u8);849 const u8x3 = std.meta.Vector(3, u8);
717 try expect(mem.eql(u8, &@as([3]u8, u8x3{ 255, 255, 255 }), &@as([3]u8, u8x3{ 2, 2, 2 } *| u8x3{ 255, 255, 255 })));850 const lhs = u8x3{ 2, 2, 2 };
851 const rhs = u8x3{ 255, 255, 255 };
852 const result = lhs *| rhs;
853 const expected = u8x3{ 255, 255, 255 };
854 try expect(mem.eql(u8, &@as([3]u8, expected), &@as([3]u8, result)));
718 }855 }
719 };856 };
720857
...@@ -723,11 +860,21 @@ test "saturating multiplication" {...@@ -723,11 +860,21 @@ test "saturating multiplication" {
723}860}
724861
725test "saturating shift-left" {862test "saturating shift-left" {
726 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO863 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
864 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
865 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
866 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
867 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
868
727 const S = struct {869 const S = struct {
728 fn doTheTest() !void {870 fn doTheTest() !void {
871 // Broken out to avoid https://github.com/ziglang/zig/issues/11251
729 const u8x3 = std.meta.Vector(3, u8);872 const u8x3 = std.meta.Vector(3, u8);
730 try expect(mem.eql(u8, &@as([3]u8, u8x3{ 255, 255, 255 }), &@as([3]u8, u8x3{ 255, 255, 255 } <<| u8x3{ 1, 1, 1 })));873 const lhs = u8x3{ 1, 1, 1 };
874 const rhs = u8x3{ 255, 255, 255 };
875 const result = lhs <<| rhs;
876 const expected = u8x3{ 255, 255, 255 };
877 try expect(mem.eql(u8, &@as([3]u8, expected), &@as([3]u8, result)));
731 }878 }
732 };879 };
733 try S.doTheTest();880 try S.doTheTest();