1 /* { dg-do compile { target { ! ia32 } } } */ 2 /* { dg-options "-O2 -mavx512vl -mavx512dq" } */ 3 4 typedef int v4si __attribute__((vector_size (16))); 5 typedef long long v2di __attribute__((vector_size (16))); 6 7 unsigned int f1(v4si a)8f1 (v4si a) 9 { 10 register v4si c __asm ("xmm16") = a; 11 asm volatile ("" : "+v" (c)); 12 v4si d = c; 13 return ((unsigned int *) &d)[3]; 14 } 15 16 unsigned long long f2(v2di a)17f2 (v2di a) 18 { 19 register v2di c __asm ("xmm16") = a; 20 asm volatile ("" : "+v" (c)); 21 v2di d = c; 22 return ((unsigned long long *) &d)[1]; 23 } 24 25 unsigned long long f3(v4si a)26f3 (v4si a) 27 { 28 register v4si c __asm ("xmm16") = a; 29 asm volatile ("" : "+v" (c)); 30 v4si d = c; 31 return ((unsigned int *) &d)[3]; 32 } 33 34 void f4(v4si a,unsigned int * p)35f4 (v4si a, unsigned int *p) 36 { 37 register v4si c __asm ("xmm16") = a; 38 asm volatile ("" : "+v" (c)); 39 v4si d = c; 40 *p = ((unsigned int *) &d)[3]; 41 } 42 43 void f5(v2di a,unsigned long long * p)44f5 (v2di a, unsigned long long *p) 45 { 46 register v2di c __asm ("xmm16") = a; 47 asm volatile ("" : "+v" (c)); 48 v2di d = c; 49 *p = ((unsigned long long *) &d)[1]; 50 } 51 52 /* { dg-final { scan-assembler-times "vpextrd\[^\n\r]*xmm16" 3 } } */ 53 /* { dg-final { scan-assembler-times "vpextrq\[^\n\r]*xmm16" 2 } } */ 54