2 /* { dg-options "-O2 -mavx512f" } */
3 /* { dg-require-effective-target avx512f } */
7 #include "avx512f-helper.h"
9 #define SIZE (AVX512F_LEN / 64)
10 #include "avx512f-mask-type.h"
12 CALC (double *e
, UNION_TYPE (AVX512F_LEN
, d
) s1
,
13 UNION_TYPE (AVX512F_LEN
, d
) s2
, int imm
)
15 e
[0] = (imm
& (1 << 0)) ? s1
.a
[1] : s1
.a
[0];
16 e
[1] = (imm
& (1 << 1)) ? s2
.a
[1] : s2
.a
[0];
18 e
[2] = (imm
& (1 << 2)) ? s1
.a
[3] : s1
.a
[2];
19 e
[3] = (imm
& (1 << 3)) ? s2
.a
[3] : s2
.a
[2];
21 e
[4] = (imm
& (1 << 4)) ? s1
.a
[5] : s1
.a
[4];
22 e
[5] = (imm
& (1 << 5)) ? s2
.a
[5] : s2
.a
[4];
23 e
[6] = (imm
& (1 << 6)) ? s1
.a
[7] : s1
.a
[6];
24 e
[7] = (imm
& (1 << 7)) ? s2
.a
[7] : s2
.a
[6];
32 UNION_TYPE (AVX512F_LEN
, d
) u1
, u2
, u3
, s1
, s2
;
34 MASK_TYPE mask
= MASK_VALUE
;
37 for (i
= 0; i
< SIZE
; i
++)
39 s1
.a
[i
] = 2134.3343 * i
+ 54846.4641;
40 s2
.a
[i
] = 856.43576 * i
+ 1124.209;
41 u1
.a
[i
] = DEFAULT_VALUE
;
42 u2
.a
[i
] = DEFAULT_VALUE
;
43 u3
.a
[i
] = DEFAULT_VALUE
;
46 u1
.x
= INTRINSIC (_shuffle_pd
) (s1
.x
, s2
.x
, 120);
47 u2
.x
= INTRINSIC (_mask_shuffle_pd
) (u2
.x
, mask
, s1
.x
, s2
.x
, 120);
48 u3
.x
= INTRINSIC (_maskz_shuffle_pd
) (mask
, s1
.x
, s2
.x
, 120);
49 CALC (e
, s1
, s2
, 120);
51 if (UNION_CHECK (AVX512F_LEN
, d
) (u1
, e
))
54 MASK_MERGE (d
) (e
, mask
, SIZE
);
55 if (UNION_CHECK (AVX512F_LEN
, d
) (u2
, e
))
58 MASK_ZERO (d
) (e
, mask
, SIZE
);
59 if (UNION_CHECK (AVX512F_LEN
, d
) (u3
, e
))