(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
bitwise_mask_op-1.c
       1  /* PR target/88808  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-mavx512bw -mno-avx512dq -O2" } */
       4  
       5  #include <immintrin.h>
       6  __m512i
       7  foo_orq (__m512i a, __m512i b, __m512i c, __m512i d)
       8  {
       9    __mmask64 m1 = _mm512_cmpeq_epi8_mask (a, b);
      10    __mmask64 m2 = _mm512_cmpeq_epi8_mask (c, d);
      11    return _mm512_mask_add_epi8 (c, m1 | m2, a, d);
      12  }
      13  
      14  /* { dg-final { scan-assembler-times "korq" "1" { target { ! ia32 } } } } */
      15  
      16  __m512i
      17  foo_ord (__m512i a, __m512i b, __m512i c, __m512i d)
      18  {
      19    __mmask32 m1 = _mm512_cmpeq_epi16_mask (a, b);
      20    __mmask32 m2 = _mm512_cmpeq_epi16_mask (c, d);
      21    return _mm512_mask_add_epi16 (c, m1 | m2, a, d);
      22  }
      23  
      24  /* { dg-final { scan-assembler-times "kord" "1" } }  */
      25  
      26  __m512i
      27  foo_orw (__m512i a, __m512i b, __m512i c, __m512i d)
      28  {
      29    __mmask16 m1 = _mm512_cmpeq_epi32_mask (a, b);
      30    __mmask16 m2 = _mm512_cmpeq_epi32_mask (c, d);
      31    return _mm512_mask_add_epi32 (c, m1 | m2, a, d);
      32  }
      33  
      34  __m512i
      35  foo_orb (__m512i a, __m512i b, __m512i c, __m512i d)
      36  {
      37    __mmask8 m1 = _mm512_cmpeq_epi64_mask (a, b);
      38    __mmask8 m2 = _mm512_cmpeq_epi64_mask (c, d);
      39    return _mm512_mask_add_epi64 (c, m1 | m2, a, d);
      40  }
      41  
      42  /* { dg-final { scan-assembler-times "korw" "2" } }  */
      43  
      44  __m512i
      45  foo_xorq (__m512i a, __m512i b, __m512i c, __m512i d)
      46  {
      47    __mmask64 m1 = _mm512_cmpeq_epi8_mask (a, b);
      48    __mmask64 m2 = _mm512_cmpeq_epi8_mask (c, d);
      49    return _mm512_mask_add_epi8 (c, m1 ^ m2, a, d);
      50  }
      51  
      52  /* { dg-final { scan-assembler-times "kxorq" "1" { target { ! ia32 } } } }  */
      53  
      54  __m512i
      55  foo_xord (__m512i a, __m512i b, __m512i c, __m512i d)
      56  {
      57    __mmask32 m1 = _mm512_cmpeq_epi16_mask (a, b);
      58    __mmask32 m2 = _mm512_cmpeq_epi16_mask (c, d);
      59    return _mm512_mask_add_epi16 (c, m1 ^ m2, a, d);
      60  }
      61  
      62  /* { dg-final { scan-assembler-times "kxord" "1" } }  */
      63  
      64  __m512i
      65  foo_xorw (__m512i a, __m512i b, __m512i c, __m512i d)
      66  {
      67    __mmask16 m1 = _mm512_cmpeq_epi32_mask (a, b);
      68    __mmask16 m2 = _mm512_cmpeq_epi32_mask (c, d);
      69    return _mm512_mask_add_epi32 (c, m1 ^ m2, a, d);
      70  }
      71  
      72  __m512i
      73  foo_xorb (__m512i a, __m512i b, __m512i c, __m512i d)
      74  {
      75    __mmask8 m1 = _mm512_cmpeq_epi64_mask (a, b);
      76    __mmask8 m2 = _mm512_cmpeq_epi64_mask (c, d);
      77    return _mm512_mask_add_epi64 (c, m1 ^ m2, a, d);
      78  }
      79  
      80  /* { dg-final { scan-assembler-times "korw" "2" } }  */
      81  
      82  __m512i
      83  foo_andq (__m512i a, __m512i b, __m512i c, __m512i d)
      84  {
      85    __mmask64 m1 = _mm512_cmpeq_epi8_mask (a, b);
      86    __mmask64 m2 = _mm512_cmpeq_epi8_mask (c, d);
      87    return _mm512_mask_add_epi8 (c, m1 & m2, a, d);
      88  }
      89  
      90  __m512i
      91  foo_andd (__m512i a, __m512i b, __m512i c, __m512i d)
      92  {
      93    __mmask32 m1 = _mm512_cmpeq_epi16_mask (a, b);
      94    __mmask32 m2 = _mm512_cmpeq_epi16_mask (c, d);
      95    return _mm512_mask_add_epi16 (c, m1 & m2, a, d);
      96  }
      97  
      98  __m512i
      99  foo_andw (__m512i a, __m512i b, __m512i c, __m512i d)
     100  {
     101    __mmask16 m1 = _mm512_cmpeq_epi32_mask (a, b);
     102    __mmask16 m2 = _mm512_cmpeq_epi32_mask (c, d);
     103    return _mm512_mask_add_epi32 (c, m1 & m2, a, d);
     104  }
     105  
     106  __m512i
     107  foo_andb (__m512i a, __m512i b, __m512i c, __m512i d)
     108  {
     109    __mmask8 m1 = _mm512_cmpeq_epi64_mask (a, b);
     110    __mmask8 m2 = _mm512_cmpeq_epi64_mask (c, d);
     111    return _mm512_mask_add_epi64 (c, m1 & m2, a, d);
     112  }
     113  
     114  __m512i
     115  foo_andnq (__m512i a, __m512i b, __m512i c, __m512i d)
     116  {
     117    __mmask64 m1 = _mm512_cmpeq_epi8_mask (a, b);
     118    __mmask64 m2 = _mm512_cmpeq_epi8_mask (c, d);
     119    return _mm512_mask_add_epi8 (c, m1 & ~m2, a, d);
     120  }
     121  
     122  __m512i
     123  foo_andnd (__m512i a, __m512i b, __m512i c, __m512i d)
     124  {
     125    __mmask32 m1 = _mm512_cmpeq_epi16_mask (a, b);
     126    __mmask32 m2 = _mm512_cmpeq_epi16_mask (c, d);
     127    return _mm512_mask_add_epi16 (c, m1 & ~m2, a, d);
     128  }
     129  
     130  __m512i
     131  foo_andnw (__m512i a, __m512i b, __m512i c, __m512i d)
     132  {
     133    __mmask16 m1 = _mm512_cmpeq_epi32_mask (a, b);
     134    __mmask16 m2 = _mm512_cmpeq_epi32_mask (c, d);
     135    return _mm512_mask_add_epi32 (c, m1 & ~m2, a, d);
     136  }
     137  
     138  __m512i
     139  foo_andnb (__m512i a, __m512i b, __m512i c, __m512i d)
     140  {
     141    __mmask8 m1 = _mm512_cmpeq_epi64_mask (a, b);
     142    __mmask8 m2 = _mm512_cmpeq_epi64_mask (c, d);
     143    return _mm512_mask_add_epi64 (c, m1 & ~m2, a, d);
     144  }
     145  
     146  __m512i
     147  foo_notq (__m512i a, __m512i b, __m512i c, __m512i d)
     148  {
     149    __mmask64 m1 = _mm512_cmpeq_epi8_mask (a, b);
     150    return _mm512_mask_add_epi8 (c, ~m1, a, d);
     151  }
     152  
     153  __m512i
     154  foo_notd (__m512i a, __m512i b, __m512i c, __m512i d)
     155  {
     156    __mmask32 m1 = _mm512_cmpeq_epi16_mask (a, b);
     157    return _mm512_mask_add_epi16 (c, ~m1, a, d);
     158  }
     159  
     160  __m512i
     161  foo_notw (__m512i a, __m512i b, __m512i c, __m512i d)
     162  {
     163    __mmask16 m1 = _mm512_cmpeq_epi32_mask (a, b);
     164    return _mm512_mask_add_epi32 (c, ~m1, a, d);
     165  }
     166  
     167  __m512i
     168  foo_notb (__m512i a, __m512i b, __m512i c, __m512i d)
     169  {
     170    __mmask8 m1 = _mm512_cmpeq_epi64_mask (a, b);
     171    return _mm512_mask_add_epi64 (c, ~m1, a, d);
     172  }