1 // { dg-additional-options "-mavx" { target avx_runtime } }
2 // { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
7 static if (__traits(compiles
, __vector(int[4])))
8 alias int4
= __vector(int[4]);
9 static if (__traits(compiles
, __vector(uint[4])))
10 alias uint4
= __vector(uint[4]);
11 static if (__traits(compiles
, __vector(float[4])))
12 alias float4
= __vector(float[4]);
13 static if (__traits(compiles
, __vector(double[4])))
14 alias double4
= __vector(double[4]);
16 static if (__traits(compiles
, int4
))
18 union U1
{ int4 v
; int[4] a
; }
21 static if (__traits(compiles
, uint4
))
23 union U2
{ uint4 v
; uint[4] a
; }
26 static if (__traits(compiles
, float4
))
28 union U3
{ float4 v
; float[4] a
; }
31 static if (__traits(compiles
, double4
))
33 union U4
{ double4 v
; double[4] a
; }
37 static if (__traits(compiles
, u1
) && __traits(compiles
, u2
))
39 static void f1(ref uint4 x
, out int4 y
)
41 y
= convertvector
!int4(x
);
43 static foreach (i
; 0 .. 4)
46 static foreach (i
; 0 .. 4)
47 assert(u1
.a
[i
] == i
* 2);
50 static if (__traits(compiles
, u1
) && __traits(compiles
, u3
))
52 static void f2(ref float4 x
, out int4 y
)
54 y
= convertvector
!int4(x
);
57 static void f3(ref int4 x
, out float4 y
)
59 y
= convertvector
!float4(x
);
62 static foreach (i
; 0 .. 4)
65 static foreach (i
; 0 .. 4)
66 assert(u1
.a
[i
] == (i
== 3 ?
0 : i
- 2));
68 static foreach (i
; 0 .. 4)
71 static foreach (i
; 0 .. 4)
74 static foreach (i
; 0 .. 4)
77 static foreach (i
; 0 .. 4)
78 assert(u3
.a
[i
] == 7 * i
- 5);
80 static if (__traits(compiles
, u1
) && __traits(compiles
, u4
))
82 static void f4(ref double4 x
, out int4 y
)
84 y
= convertvector
!int4(x
);
87 static void f5(ref int4 x
, out double4 y
)
89 y
= convertvector
!double4(x
);
92 static foreach (i
; 0 .. 4)
95 static foreach (i
; 0 .. 4)
96 assert(u1
.a
[i
] == (i
== 3 ?
0 : i
- 2));
98 static foreach (i
; 0 .. 4)
101 static foreach (i
; 0 .. 4)
102 assert(u1
.a
[i
] == i
);
104 static foreach (i
; 0 .. 4)
107 static foreach (i
; 0 .. 4)
108 assert(u4
.a
[i
] == 7 * i
- 5);
110 static if (__traits(compiles
, u4
))
112 static void f6(out double4 x
)
114 int4 a
= [1, 2, -3, -4];
115 x
= convertvector
!double4(a
);
119 static foreach (i
; 0 .. 4)
120 assert(u4
.a
[i
] == (i
>= 2 ?
-1 - i
: i
+ 1));