]>
Commit | Line | Data |
---|---|---|
f0a3bab4 IB |
1 | // { dg-additional-options "-mavx" { target avx_runtime } } |
2 | // { dg-do compile { target { avx_runtime || vect_sizes_16B_8B } } } | |
3 | import core.simd; | |
4 | ||
5 | void test2d() | |
6 | { | |
7 | ushort8 v1, v2 = 1, v3 = 1; | |
8 | v1 = v2; | |
9 | v1 = v2 + v3; | |
10 | v1 = v2 - v3; | |
11 | v1 = v2 * v3; | |
12 | v1 = v2 / v3; | |
13 | v1 = v2 % v3; | |
14 | v1 = v2 & v3; | |
15 | v1 = v2 | v3; | |
16 | v1 = v2 ^ v3; | |
17 | static assert(!__traits(compiles, v1 ~ v2)); | |
18 | static assert(!__traits(compiles, v1 ^^ v2)); | |
19 | static assert(!__traits(compiles, v1 is v2)); | |
20 | static assert(!__traits(compiles, v1 !is v2)); | |
21 | static assert(!__traits(compiles, v1 == v2)); | |
22 | static assert(!__traits(compiles, v1 != v2)); | |
23 | static assert(!__traits(compiles, v1 < v2)); | |
24 | static assert(!__traits(compiles, v1 > v2)); | |
25 | static assert(!__traits(compiles, v1 <= v2)); | |
26 | static assert(!__traits(compiles, v1 >= v2)); | |
f0a3bab4 IB |
27 | v1 = v2 << 1; |
28 | v1 = v2 >> 1; | |
29 | v1 = v2 >>> 1; | |
30 | static assert(!__traits(compiles, v1 && v2)); | |
31 | static assert(!__traits(compiles, v1 || v2)); | |
32 | v1 = ~v2; | |
33 | v1 = -v2; | |
34 | v1 = +v2; | |
35 | static assert(!__traits(compiles, !v1)); | |
36 | ||
37 | v1 += v2; | |
38 | v1 -= v2; | |
39 | v1 *= v2; | |
40 | v1 /= v2; | |
41 | v1 %= v2; | |
42 | v1 &= v2; | |
43 | v1 |= v2; | |
44 | v1 ^= v2; | |
45 | static assert(!__traits(compiles, v1 ~= v2)); | |
46 | static assert(!__traits(compiles, v1 ^^= v2)); | |
47 | v1 <<= 1; | |
48 | v1 >>= 1; | |
49 | v1 >>>= 1; | |
50 | ||
51 | // A cast from vector to non-vector is allowed only when the target is same size Tsarray. | |
52 | static assert(!__traits(compiles, cast(byte)v1)); // 1byte | |
53 | static assert(!__traits(compiles, cast(short)v1)); // 2byte | |
54 | static assert(!__traits(compiles, cast(int)v1)); // 4byte | |
55 | static assert(!__traits(compiles, cast(long)v1)); // 8byte | |
56 | static assert(!__traits(compiles, cast(float)v1)); // 4byte | |
57 | static assert(!__traits(compiles, cast(double)v1)); // 8byte | |
58 | static assert(!__traits(compiles, cast(int[2])v1)); // 8byte Tsarray | |
59 | static assert( __traits(compiles, cast(int[4])v1)); // 16byte Tsarray, OK | |
60 | static assert( __traits(compiles, cast(long[2])v1)); // 16byte Tsarray, OK | |
61 | } |