(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512bw-pack-2.c
       1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-O2 -mavx512vl -mavx512bw" } */
       3  
       4  #include <x86intrin.h>
       5  
       6  __m128i
       7  f1 (__m128i a, __m128i b)
       8  {
       9    register __m128i c __asm ("xmm16") = a;
      10    asm volatile ("" : "+v" (c));
      11    c = _mm_packs_epi16 (c, b);
      12    asm volatile ("" : "+v" (c));
      13    return c;
      14  }
      15  
      16  /* { dg-final { scan-assembler-times "vpacksswb\[^\n\r\]*xmm16" 1 } } */
      17  
      18  __m128i
      19  f2 (__m128i a, __m128i b)
      20  {
      21    register __m128i c __asm ("xmm16") = a;
      22    asm volatile ("" : "+v" (c));
      23    c = _mm_packs_epi32 (c, b);
      24    asm volatile ("" : "+v" (c));
      25    return c;
      26  }
      27  
      28  /* { dg-final { scan-assembler-times "vpackssdw\[^\n\r\]*xmm16" 1 } } */
      29  
      30  __m128i
      31  f3 (__m128i a, __m128i b)
      32  {
      33    register __m128i c __asm ("xmm16") = a;
      34    asm volatile ("" : "+v" (c));
      35    c = _mm_packus_epi16 (c, b);
      36    asm volatile ("" : "+v" (c));
      37    return c;
      38  }
      39  
      40  /* { dg-final { scan-assembler-times "vpackuswb\[^\n\r\]*xmm16" 1 } } */
      41  
      42  __m128i
      43  f4 (__m128i a, __m128i b)
      44  {
      45    register __m128i c __asm ("xmm16") = a;
      46    asm volatile ("" : "+v" (c));
      47    c = _mm_packus_epi32 (c, b);
      48    asm volatile ("" : "+v" (c));
      49    return c;
      50  }
      51  
      52  /* { dg-final { scan-assembler-times "vpackusdw\[^\n\r\]*xmm16" 1 } } */
      53  
      54  __m256i
      55  f5 (__m256i a, __m256i b)
      56  {
      57    register __m256i c __asm ("xmm16") = a;
      58    asm volatile ("" : "+v" (c));
      59    c = _mm256_packs_epi16 (c, b);
      60    asm volatile ("" : "+v" (c));
      61    return c;
      62  }
      63  
      64  /* { dg-final { scan-assembler-times "vpacksswb\[^\n\r\]*ymm16" 1 } } */
      65  
      66  __m256i
      67  f6 (__m256i a, __m256i b)
      68  {
      69    register __m256i c __asm ("xmm16") = a;
      70    asm volatile ("" : "+v" (c));
      71    c = _mm256_packs_epi32 (c, b);
      72    asm volatile ("" : "+v" (c));
      73    return c;
      74  }
      75  
      76  /* { dg-final { scan-assembler-times "vpackssdw\[^\n\r\]*ymm16" 1 } } */
      77  
      78  __m256i
      79  f7 (__m256i a, __m256i b)
      80  {
      81    register __m256i c __asm ("xmm16") = a;
      82    asm volatile ("" : "+v" (c));
      83    c = _mm256_packus_epi16 (c, b);
      84    asm volatile ("" : "+v" (c));
      85    return c;
      86  }
      87  
      88  /* { dg-final { scan-assembler-times "vpackuswb\[^\n\r\]*ymm16" 1 } } */
      89  
      90  __m256i
      91  f8 (__m256i a, __m256i b)
      92  {
      93    register __m256i c __asm ("xmm16") = a;
      94    asm volatile ("" : "+v" (c));
      95    c = _mm256_packus_epi32 (c, b);
      96    asm volatile ("" : "+v" (c));
      97    return c;
      98  }
      99  
     100  /* { dg-final { scan-assembler-times "vpackusdw\[^\n\r\]*ymm16" 1 } } */