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"
14 #elif AVX512F_LEN > 128
21 CALC (double *e
, UNION_TYPE (AVX512F_LEN
, d
) s1
,
22 UNION_TYPE (AVX512F_LEN
, d
) s2
, int imm
)
24 e
[0] = (imm
& (1 << 0)) ? s1
.a
[1] : s1
.a
[0];
25 e
[1] = (imm
& (1 << 1)) ? s2
.a
[1] : s2
.a
[0];
27 e
[2] = (imm
& (1 << 2)) ? s1
.a
[3] : s1
.a
[2];
28 e
[3] = (imm
& (1 << 3)) ? s2
.a
[3] : s2
.a
[2];
30 e
[4] = (imm
& (1 << 4)) ? s1
.a
[5] : s1
.a
[4];
31 e
[5] = (imm
& (1 << 5)) ? s2
.a
[5] : s2
.a
[4];
32 e
[6] = (imm
& (1 << 6)) ? s1
.a
[7] : s1
.a
[6];
33 e
[7] = (imm
& (1 << 7)) ? s2
.a
[7] : s2
.a
[6];
41 UNION_TYPE (AVX512F_LEN
, d
) u1
, u2
, u3
, s1
, s2
;
43 MASK_TYPE mask
= MASK_VALUE
;
46 for (i
= 0; i
< SIZE
; i
++)
48 s1
.a
[i
] = 2134.3343 * i
+ 54846.4641;
49 s2
.a
[i
] = 856.43576 * i
+ 1124.209;
50 u1
.a
[i
] = DEFAULT_VALUE
;
51 u2
.a
[i
] = DEFAULT_VALUE
;
52 u3
.a
[i
] = DEFAULT_VALUE
;
55 u1
.x
= INTRINSIC (_shuffle_pd
) (s1
.x
, s2
.x
, IMM_VAR
);
56 u2
.x
= INTRINSIC (_mask_shuffle_pd
) (u2
.x
, mask
, s1
.x
, s2
.x
, IMM_VAR
);
57 u3
.x
= INTRINSIC (_maskz_shuffle_pd
) (mask
, s1
.x
, s2
.x
, IMM_VAR
);
58 CALC (e
, s1
, s2
, IMM_VAR
);
60 if (UNION_CHECK (AVX512F_LEN
, d
) (u1
, e
))
63 MASK_MERGE (d
) (e
, mask
, SIZE
);
64 if (UNION_CHECK (AVX512F_LEN
, d
) (u2
, e
))
67 MASK_ZERO (d
) (e
, mask
, SIZE
);
68 if (UNION_CHECK (AVX512F_LEN
, d
) (u3
, e
))