1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-O2 -mavx512f -mavx512vl" } */
       3  /* { dg-final { scan-assembler-not "\tvmovaps\t" } } */
       4  /* { dg-final { scan-assembler-not "\tvmovups\t" } } */
       5  
       6  #include <immintrin.h>
       7  
       8  void
       9  foo1 (__m128i *p, __m128i a)
      10  {
      11    register __m128i x __asm ("xmm16") = a;
      12    asm volatile ("" : "+v" (x));
      13    *p = x;
      14  }
      15  
      16  void
      17  foo2 (__m128d *p, __m128d a)
      18  {
      19    register __m128d x __asm ("xmm16") = a;
      20    asm volatile ("" : "+v" (x));
      21    *p = x;
      22  }
      23  
      24  void
      25  foo3 (__float128 *p, __float128 a)
      26  {
      27    register __float128 x __asm ("xmm16") = a;
      28    asm volatile ("" : "+v" (x));
      29    *p = x;
      30  }
      31  
      32  void
      33  foo4 (__m128i_u *p, __m128i a)
      34  {
      35    register __m128i x __asm ("xmm16") = a;
      36    asm volatile ("" : "+v" (x));
      37    *p = x;
      38  }
      39  
      40  void
      41  foo5 (__m128d_u *p, __m128d a)
      42  {
      43    register __m128d x __asm ("xmm16") = a;
      44    asm volatile ("" : "+v" (x));
      45    *p = x;
      46  }
      47  
      48  typedef __float128 __float128_u __attribute__ ((__aligned__ (1)));
      49  
      50  void
      51  foo6 (__float128_u *p, __float128 a)
      52  {
      53    register __float128 x __asm ("xmm16") = a;
      54    asm volatile ("" : "+v" (x));
      55    *p = x;
      56  }
      57  
      58  typedef __int128 __int128_u __attribute__ ((__aligned__ (1)));
      59  
      60  extern __int128 int128;
      61  
      62  void
      63  foo7 (__int128 *p)
      64  {
      65    register __int128 x __asm ("xmm16") = int128;
      66    asm volatile ("" : "+v" (x));
      67    *p = x;
      68  }
      69  
      70  void
      71  foo8 (__int128_u *p)
      72  {
      73    register __int128 x __asm ("xmm16") = int128;
      74    asm volatile ("" : "+v" (x));
      75    *p = x;
      76  }