1  /* { dg-do assemble { target { avx512bw && { avx512vl && { ! ia32 } } } } } */
       2  /* { dg-options "-O2 -mavx512bw -mavx512vl" } */
       3  
       4  #include <x86intrin.h>
       5  
       6  void
       7  f1 (__m128i x, int y)
       8  {
       9    register __m128i a __asm ("xmm16");
      10    a = x;
      11    asm volatile ("" : "+v" (a));
      12    a = _mm_srai_epi16 (a, y);
      13    asm volatile ("" : "+v" (a));
      14  }
      15  
      16  void
      17  f2 (__m128i x)
      18  {
      19    register __m128i a __asm ("xmm16");
      20    a = x;
      21    asm volatile ("" : "+v" (a));
      22    a = _mm_srai_epi16 (a, 16);
      23    asm volatile ("" : "+v" (a));
      24  }
      25  
      26  void
      27  f3 (__m256i x, int y)
      28  {
      29    register __m256i a __asm ("xmm16");
      30    a = x;
      31    asm volatile ("" : "+v" (a));
      32    a = _mm256_srai_epi16 (a, y);
      33    asm volatile ("" : "+v" (a));
      34  }
      35  
      36  void
      37  f4 (__m256i x)
      38  {
      39    register __m256i a __asm ("xmm16");
      40    a = x;
      41    asm volatile ("" : "+v" (a));
      42    a = _mm256_srai_epi16 (a, 16);
      43    asm volatile ("" : "+v" (a));
      44  }