(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512vl-logic-2.c
       1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-O2 -mavx512vl -mno-avx512dq" } */
       3  
       4  #include <x86intrin.h>
       5  
       6  __m128d
       7  f1 (__m128d a, __m128d b)
       8  {
       9    register __m128d c __asm ("xmm16") = a;
      10    asm volatile ("" : "+v" (c));
      11    c = _mm_and_pd (c, b);
      12    asm volatile ("" : "+v" (c));
      13    return c;
      14  }
      15  
      16  /* { dg-final { scan-assembler-times "vpandq\[^\n\r\]*xmm\[0-9\]" 1 } } */
      17  
      18  __m128d
      19  f2 (__m128d a, __m128d b)
      20  {
      21    register __m128d c __asm ("xmm16") = a;
      22    asm volatile ("" : "+v" (c));
      23    c = _mm_or_pd (c, b);
      24    asm volatile ("" : "+v" (c));
      25    return c;
      26  }
      27  
      28  /* { dg-final { scan-assembler-times "vporq\[^\n\r\]*xmm\[0-9\]" 1 } } */
      29  
      30  __m128d
      31  f3 (__m128d a, __m128d b)
      32  {
      33    register __m128d c __asm ("xmm16") = a;
      34    asm volatile ("" : "+v" (c));
      35    c = _mm_xor_pd (c, b);
      36    asm volatile ("" : "+v" (c));
      37    return c;
      38  }
      39  
      40  /* { dg-final { scan-assembler-times "vpxorq\[^\n\r\]*xmm\[0-9\]" 1 } } */
      41  
      42  __m128d
      43  f4 (__m128d a, __m128d b)
      44  {
      45    register __m128d c __asm ("xmm16") = a;
      46    asm volatile ("" : "+v" (c));
      47    c = _mm_andnot_pd (c, b);
      48    asm volatile ("" : "+v" (c));
      49    return c;
      50  }
      51  
      52  /* { dg-final { scan-assembler-times "vpandnq\[^\n\r\]*xmm\[0-9\]" 1 } } */
      53  
      54  __m128
      55  f5 (__m128 a, __m128 b)
      56  {
      57    register __m128 c __asm ("xmm16") = a;
      58    asm volatile ("" : "+v" (c));
      59    c = _mm_and_ps (c, b);
      60    asm volatile ("" : "+v" (c));
      61    return c;
      62  }
      63  
      64  /* { dg-final { scan-assembler-times "vpandd\[^\n\r\]*xmm\[0-9\]" 1 } } */
      65  
      66  __m128
      67  f6 (__m128 a, __m128 b)
      68  {
      69    register __m128 c __asm ("xmm16") = a;
      70    asm volatile ("" : "+v" (c));
      71    c = _mm_or_ps (c, b);
      72    asm volatile ("" : "+v" (c));
      73    return c;
      74  }
      75  
      76  /* { dg-final { scan-assembler-times "vpord\[^\n\r\]*xmm\[0-9\]" 1 } } */
      77  
      78  __m128
      79  f7 (__m128 a, __m128 b)
      80  {
      81    register __m128 c __asm ("xmm16") = a;
      82    asm volatile ("" : "+v" (c));
      83    c = _mm_xor_ps (c, b);
      84    asm volatile ("" : "+v" (c));
      85    return c;
      86  }
      87  
      88  /* { dg-final { scan-assembler-times "vpxord\[^\n\r\]*xmm\[0-9\]" 1 } } */
      89  
      90  __m128
      91  f8 (__m128 a, __m128 b)
      92  {
      93    register __m128 c __asm ("xmm16") = a;
      94    asm volatile ("" : "+v" (c));
      95    c = _mm_andnot_ps (c, b);
      96    asm volatile ("" : "+v" (c));
      97    return c;
      98  }
      99  
     100  /* { dg-final { scan-assembler-times "vpandnd\[^\n\r\]*xmm\[0-9\]" 1 } } */
     101  
     102  __m256d
     103  f9 (__m256d a, __m256d b)
     104  {
     105    register __m256d c __asm ("xmm16") = a;
     106    asm volatile ("" : "+v" (c));
     107    c = _mm256_and_pd (c, b);
     108    asm volatile ("" : "+v" (c));
     109    return c;
     110  }
     111  
     112  /* { dg-final { scan-assembler-times "vpandq\[^\n\r\]*ymm\[0-9\]" 1 } } */
     113  
     114  __m256d
     115  f10 (__m256d a, __m256d b)
     116  {
     117    register __m256d c __asm ("xmm16") = a;
     118    asm volatile ("" : "+v" (c));
     119    c = _mm256_or_pd (c, b);
     120    asm volatile ("" : "+v" (c));
     121    return c;
     122  }
     123  
     124  /* { dg-final { scan-assembler-times "vporq\[^\n\r\]*ymm\[0-9\]" 1 } } */
     125  
     126  __m256d
     127  f11 (__m256d a, __m256d b)
     128  {
     129    register __m256d c __asm ("xmm16") = a;
     130    asm volatile ("" : "+v" (c));
     131    c = _mm256_xor_pd (c, b);
     132    asm volatile ("" : "+v" (c));
     133    return c;
     134  }
     135  
     136  /* { dg-final { scan-assembler-times "vpxorq\[^\n\r\]*ymm\[0-9\]" 1 } } */
     137  
     138  __m256d
     139  f12 (__m256d a, __m256d b)
     140  {
     141    register __m256d c __asm ("xmm16") = a;
     142    asm volatile ("" : "+v" (c));
     143    c = _mm256_andnot_pd (c, b);
     144    asm volatile ("" : "+v" (c));
     145    return c;
     146  }
     147  
     148  /* { dg-final { scan-assembler-times "vpandnq\[^\n\r\]*ymm\[0-9\]" 1 } } */
     149  
     150  __m256
     151  f13 (__m256 a, __m256 b)
     152  {
     153    register __m256 c __asm ("xmm16") = a;
     154    asm volatile ("" : "+v" (c));
     155    c = _mm256_and_ps (c, b);
     156    asm volatile ("" : "+v" (c));
     157    return c;
     158  }
     159  
     160  /* { dg-final { scan-assembler-times "vpandd\[^\n\r\]*ymm\[0-9\]" 1 } } */
     161  
     162  __m256
     163  f14 (__m256 a, __m256 b)
     164  {
     165    register __m256 c __asm ("xmm16") = a;
     166    asm volatile ("" : "+v" (c));
     167    c = _mm256_or_ps (c, b);
     168    asm volatile ("" : "+v" (c));
     169    return c;
     170  }
     171  
     172  /* { dg-final { scan-assembler-times "vpord\[^\n\r\]*ymm\[0-9\]" 1 } } */
     173  
     174  __m256
     175  f15 (__m256 a, __m256 b)
     176  {
     177    register __m256 c __asm ("xmm16") = a;
     178    asm volatile ("" : "+v" (c));
     179    c = _mm256_xor_ps (c, b);
     180    asm volatile ("" : "+v" (c));
     181    return c;
     182  }
     183  
     184  /* { dg-final { scan-assembler-times "vpxord\[^\n\r\]*ymm\[0-9\]" 1 } } */
     185  
     186  __m256
     187  f16 (__m256 a, __m256 b)
     188  {
     189    register __m256 c __asm ("xmm16") = a;
     190    asm volatile ("" : "+v" (c));
     191    c = _mm256_andnot_ps (c, b);
     192    asm volatile ("" : "+v" (c));
     193    return c;
     194  }
     195  
     196  /* { dg-final { scan-assembler-times "vpandnd\[^\n\r\]*ymm\[0-9\]" 1 } } */