(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512bw-vpextr-1.c
       1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-O2 -mavx512vl -mavx512bw" } */
       3  
       4  typedef char v16qi __attribute__((vector_size (16)));
       5  typedef short v8hi __attribute__((vector_size (16)));
       6  typedef int v4si __attribute__((vector_size (16)));
       7  typedef long long v2di __attribute__((vector_size (16)));
       8  
       9  void
      10  f1 (v16qi a)
      11  {
      12    register v16qi c __asm ("xmm16") = a;
      13    register unsigned char e __asm ("dl");
      14    asm volatile ("" : "+v" (c));
      15    v16qi d = c;
      16    e = ((unsigned char *) &d)[3];
      17    asm volatile ("" : : "q" (e));
      18  }
      19  
      20  unsigned short
      21  f2 (v8hi a)
      22  {
      23    register v8hi c __asm ("xmm16") = a;
      24    register unsigned short e __asm ("dx");
      25    asm volatile ("" : "+v" (c));
      26    v8hi d = c;
      27    e = ((unsigned short *) &d)[3];
      28    asm volatile ("" : : "r" (e));
      29  }
      30  
      31  unsigned int
      32  f3 (v16qi a)
      33  {
      34    register v16qi c __asm ("xmm16") = a;
      35    asm volatile ("" : "+v" (c));
      36    v16qi d = c;
      37    return ((unsigned char *) &d)[3];
      38  }
      39  
      40  unsigned int
      41  f4 (v8hi a)
      42  {
      43    register v8hi c __asm ("xmm16") = a;
      44    asm volatile ("" : "+v" (c));
      45    v8hi d = c;
      46    return ((unsigned short *) &d)[3];
      47  }
      48  
      49  unsigned long long
      50  f5 (v16qi a)
      51  {
      52    register v16qi c __asm ("xmm16") = a;
      53    asm volatile ("" : "+v" (c));
      54    v16qi d = c;
      55    return ((unsigned char *) &d)[3];
      56  }
      57  
      58  unsigned long long
      59  f6 (v8hi a)
      60  {
      61    register v8hi c __asm ("xmm16") = a;
      62    asm volatile ("" : "+v" (c));
      63    v8hi d = c;
      64    return ((unsigned short *) &d)[3];
      65  }
      66  
      67  void
      68  f7 (v16qi a, unsigned char *p)
      69  {
      70    register v16qi c __asm ("xmm16") = a;
      71    asm volatile ("" : "+v" (c));
      72    v16qi d = c;
      73    *p = ((unsigned char *) &d)[3];
      74  }
      75  
      76  void
      77  f8 (v8hi a, unsigned short *p)
      78  {
      79    register v8hi c __asm ("xmm16") = a;
      80    asm volatile ("" : "+v" (c));
      81    v8hi d = c;
      82    *p = ((unsigned short *) &d)[3];
      83  }
      84  
      85  void
      86  f9 (v4si a)
      87  {
      88    register v4si c __asm ("xmm16") = a;
      89    register unsigned int e __asm ("xmm17");
      90    asm volatile ("" : "+v" (c));
      91    v4si d = c;
      92    e = ((unsigned int *) &d)[3];
      93    asm volatile ("" : "+v" (e));
      94  }
      95  
      96  void
      97  f10 (v2di a)
      98  {
      99    register v2di c __asm ("xmm16") = a;
     100    register unsigned long long e __asm ("xmm17");
     101    asm volatile ("" : "+v" (c));
     102    v2di d = c;
     103    e = ((unsigned long long *) &d)[1];
     104    asm volatile ("" : "+v" (e));
     105  }
     106  
     107  /* { dg-final { scan-assembler-times "vpextrb\[^\n\r]*xmm16" 4 } } */
     108  /* { dg-final { scan-assembler-times "vpextrw\[^\n\r]*xmm16" 4 } } */
     109  /* { dg-final { scan-assembler-times "vpsrldq\[^\n\r]*xmm1\[67\]\[^\n\r]*xmm1\[67\]" 2 } } */