PR target/80969 - Fix ICE with -mabi=ms -mavx512f, reduce wasted space when realignin...
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx512f-vextracti64x4-2.c
blob9753d2461f008c27aa307534b559ea09e50bc6a1
1 /* { dg-do run } */
2 /* { dg-require-effective-target avx512f } */
3 /* { dg-options "-O2 -mavx512f" } */
5 #include <string.h>
6 #include "avx512f-check.h"
7 #include "avx512f-helper.h"
9 void static
10 avx512f_test (void)
12 union512i_q s1;
13 union256i_q res1, res2, res3;
14 __mmask8 mask = 0xBA;
15 long long int res_ref[4];
16 int j;
18 for (j = 0; j < 8; j++)
19 s1.a[j] = j * j;
21 for (j = 0; j < 4; j++)
23 res1.a[j] = DEFAULT_VALUE;
24 res2.a[j] = DEFAULT_VALUE;
25 res3.a[j] = DEFAULT_VALUE;
27 res1.x = _mm512_extracti64x4_epi64 (s1.x, 0);
28 res2.x = _mm512_mask_extracti64x4_epi64 (res2.x, mask, s1.x, 0);
29 res3.x = _mm512_maskz_extracti64x4_epi64 (mask, s1.x, 0);
31 memset (res_ref, 0, 32);
32 memcpy (res_ref, s1.a, 32);
34 if (check_union256i_q (res1, res_ref))
35 abort ();
37 MASK_MERGE (i_q) (res_ref, mask, 4);
38 if (check_union256i_q (res2, res_ref))
39 abort ();
41 MASK_ZERO (i_q) (res_ref, mask, 4);
42 if (check_union256i_q (res3, res_ref))
43 abort ();
45 res1.x = _mm512_extracti64x4_epi64 (s1.x, 1);
46 res2.x = _mm512_mask_extracti64x4_epi64 (res2.x, mask, s1.x, 1);
47 res3.x = _mm512_maskz_extracti64x4_epi64 (mask, s1.x, 1);
49 memset (res_ref, 0, 32);
50 memcpy (res_ref, s1.a + 4, 32);
52 if (check_union256i_q (res1, res_ref))
53 abort ();
55 MASK_MERGE (i_q) (res_ref, mask, 4);
56 if (check_union256i_q (res2, res_ref))
57 abort ();
59 MASK_ZERO (i_q) (res_ref, mask, 4);
60 if (check_union256i_q (res3, res_ref))
61 abort ();