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 CALC (double *e
, UNION_TYPE (AVX512F_LEN
, d
) s1
,
15 UNION_TYPE (AVX512F_LEN
, d
) s2
, int imm
)
17 int i
, offset
, selector
;
19 for (i
= 0; i
< SIZE
/ 2; i
++)
22 #if AVX512F_LEN == 512
23 selector
= (imm
>> i
* 2) & 0x3;
25 selector
= (imm
>> i
) & 0x1;
29 source
= i
* 2 * 64 < AVX512F_LEN
/ 2 ? s1
.a
: s2
.a
;
30 memcpy (e
+ offset
, source
+ selector
* 2, 16);
37 UNION_TYPE (AVX512F_LEN
, d
) u1
, u2
, u3
, s1
, s2
;
38 MASK_TYPE mask
= MASK_VALUE
;
43 for (i
= 0; i
< SIZE
; i
++)
45 s1
.a
[i
] = 1.2 / (i
+ 0.378);
46 s2
.a
[i
] = 91.02 / (i
+ 4.3578);
47 u1
.a
[i
] = DEFAULT_VALUE
;
48 u2
.a
[i
] = DEFAULT_VALUE
;
49 u3
.a
[i
] = DEFAULT_VALUE
;
52 u1
.x
= INTRINSIC (_shuffle_f64x2
) (s1
.x
, s2
.x
, imm
);
53 u2
.x
= INTRINSIC (_mask_shuffle_f64x2
) (u2
.x
, mask
, s1
.x
, s2
.x
, imm
);
54 u3
.x
= INTRINSIC (_maskz_shuffle_f64x2
) (mask
, s1
.x
, s2
.x
, imm
);
56 CALC (e
, s1
, s2
, imm
);
58 if (UNION_CHECK (AVX512F_LEN
, d
) (u1
, e
))
61 MASK_MERGE (d
) (e
, mask
, SIZE
);
62 if (UNION_CHECK (AVX512F_LEN
, d
) (u2
, e
))
65 MASK_ZERO (d
) (e
, mask
, SIZE
);
66 if (UNION_CHECK (AVX512F_LEN
, d
) (u3
, e
))