1  /* { dg-do run } */
       2  /* { dg-options "-O2 -mavx512vp2intersect -mavx512vl" } */
       3  /* { dg-require-effective-target avx512vp2intersect } */
       4  
       5  #define AVX512VP2INTERSECT
       6  #include <x86intrin.h>
       7  #include "avx512f-helper.h"
       8  
       9   void
      10   TEST (void)
      11  {
      12    __m256i a1 = _mm256_set_epi64x (1, 2, 3, 4);
      13    __m256i b1 = _mm256_set_epi64x (2, 11, 4, 33);
      14    __m256i a2 = _mm256_set_epi32 (1, 2, 3, 4, 5, 6, 7, 8);
      15    __m256i b2 = _mm256_set_epi32 (2, 11, 4, 33, 6, 55, 8, 77);
      16    __m128i a3 = _mm_set_epi64x (13, 22);
      17    __m128i b3 = _mm_set_epi64x (22, 1434);
      18    __m128i a4 = _mm_set_epi32 (1, 2, 3, 4);
      19    __m128i b4 = _mm_set_epi32 (2, 11, 4, 33);
      20    __mmask8 m0, m1, m2, m3, m4, m5, m6, m7;
      21    m0 = m1 = m2 = m3 = m4 = m5 = m6 = m7 = 0;
      22  
      23    _mm_2intersect_epi64 (a3, b3, &m0, &m1);
      24    /* m0 = ******01, m1 = ******10.  */
      25    if (m0 != 0x1 || m1 != 0x2)
      26      abort();
      27  
      28    _mm_2intersect_epi32 (a4, b4, &m2, &m3);
      29    /* m2 = ****0101, m3 = ****1010.  */
      30    if (m2  != 0x5 || m3 != 0xa)
      31      abort();
      32  
      33    _mm256_2intersect_epi64 (a1, b1, &m4, &m5);
      34    /* m4 = ****0101, m5 = ****1010.  */
      35    if (m4 != 0x5 || m5 != 0xa)
      36      abort();
      37  
      38    _mm256_2intersect_epi32 (a2, b2, &m6, &m7);
      39    /* m0 = 01010101, m1 = 10101010.  */
      40    if (m6 != 0x55 || m7 != 0xaa)
      41      abort();
      42  }