1 /* { dg-do compile { target { ! ia32 } } } */
2 /* { dg-options "-O2 -mavx512vl -masm=att" } */
3
4 typedef char V1 __attribute__((vector_size (32)));
5 typedef short V2 __attribute__((vector_size (32)));
6
7 void
f1(V1 x,char y)8 f1 (V1 x, char y)
9 {
10 register V1 a __asm ("xmm16");
11 a = x;
12 asm volatile ("" : "+v" (a));
13 a[7] = y;
14 asm volatile ("" : "+v" (a));
15 }
16
17 void
f2(V1 x,char y)18 f2 (V1 x, char y)
19 {
20 register V1 a __asm ("xmm16");
21 a = x;
22 asm volatile ("" : "+v" (a));
23 a[28] = y;
24 asm volatile ("" : "+v" (a));
25 }
26
27 void
f3(V2 x,short y)28 f3 (V2 x, short y)
29 {
30 register V2 a __asm ("xmm16");
31 a = x;
32 asm volatile ("" : "+v" (a));
33 a[3] = y;
34 asm volatile ("" : "+v" (a));
35 }
36
37 void
f4(V2 x,short y)38 f4 (V2 x, short y)
39 {
40 register V2 a __asm ("xmm16");
41 a = x;
42 asm volatile ("" : "+v" (a));
43 a[14] = y;
44 asm volatile ("" : "+v" (a));
45 }
46
47 /* { dg-final { scan-assembler-times "vinserti32x4\[^\n\r]*0x0\[^\n\r]*%ymm16" 2 } } */
48 /* { dg-final { scan-assembler-times "vinserti32x4\[^\n\r]*0x1\[^\n\r]*%ymm16" 2 } } */
49 /* { dg-final { scan-assembler-times "vextracti32x4\[^\n\r]*0x1\[^\n\r]*%\[yz]mm16" 2 } } */
50