152
|
1 /* PR target/92658 */
|
|
2 /* { dg-do compile } */
|
|
3 /* { dg-options "-O2 -ftree-vectorize -mavx512bw -mavx512vl" } */
|
|
4
|
|
5 typedef unsigned char v8qi __attribute__((vector_size (8)));
|
|
6 typedef unsigned char v16qi __attribute__((vector_size (16)));
|
|
7 typedef unsigned char v32qi __attribute__((vector_size (32)));
|
|
8 typedef unsigned short v8hi __attribute__((vector_size (16)));
|
|
9 typedef unsigned short v16hi __attribute__((vector_size (32)));
|
|
10 typedef unsigned short v32hi __attribute__((vector_size (64)));
|
|
11
|
|
12
|
|
13 void
|
|
14 truncwb_512 (v32qi * dst, v32hi * __restrict src)
|
|
15 {
|
|
16 unsigned char tem[8];
|
|
17 tem[0] = (*src)[0];
|
|
18 tem[1] = (*src)[1];
|
|
19 tem[2] = (*src)[2];
|
|
20 tem[3] = (*src)[3];
|
|
21 tem[4] = (*src)[4];
|
|
22 tem[5] = (*src)[5];
|
|
23 tem[6] = (*src)[6];
|
|
24 tem[7] = (*src)[7];
|
|
25 tem[8] = (*src)[8];
|
|
26 tem[9] = (*src)[9];
|
|
27 tem[10] = (*src)[10];
|
|
28 tem[11] = (*src)[11];
|
|
29 tem[12] = (*src)[12];
|
|
30 tem[13] = (*src)[13];
|
|
31 tem[14] = (*src)[14];
|
|
32 tem[15] = (*src)[15];
|
|
33 tem[16] = (*src)[16];
|
|
34 tem[17] = (*src)[17];
|
|
35 tem[18] = (*src)[18];
|
|
36 tem[19] = (*src)[19];
|
|
37 tem[20] = (*src)[20];
|
|
38 tem[21] = (*src)[21];
|
|
39 tem[22] = (*src)[22];
|
|
40 tem[23] = (*src)[23];
|
|
41 tem[24] = (*src)[24];
|
|
42 tem[25] = (*src)[25];
|
|
43 tem[26] = (*src)[26];
|
|
44 tem[27] = (*src)[27];
|
|
45 tem[28] = (*src)[28];
|
|
46 tem[29] = (*src)[29];
|
|
47 tem[30] = (*src)[30];
|
|
48 tem[31] = (*src)[31];
|
|
49 dst[0] = *(v32qi *) tem;
|
|
50 }
|
|
51
|
|
52 void
|
|
53 truncwb_256 (v16qi * dst, v16hi * __restrict src)
|
|
54 {
|
|
55 unsigned char tem[8];
|
|
56 tem[0] = (*src)[0];
|
|
57 tem[1] = (*src)[1];
|
|
58 tem[2] = (*src)[2];
|
|
59 tem[3] = (*src)[3];
|
|
60 tem[4] = (*src)[4];
|
|
61 tem[5] = (*src)[5];
|
|
62 tem[6] = (*src)[6];
|
|
63 tem[7] = (*src)[7];
|
|
64 tem[8] = (*src)[8];
|
|
65 tem[9] = (*src)[9];
|
|
66 tem[10] = (*src)[10];
|
|
67 tem[11] = (*src)[11];
|
|
68 tem[12] = (*src)[12];
|
|
69 tem[13] = (*src)[13];
|
|
70 tem[14] = (*src)[14];
|
|
71 tem[15] = (*src)[15];
|
|
72 dst[0] = *(v16qi *) tem;
|
|
73 }
|
|
74
|
|
75 void
|
|
76 truncwb_128 (v16qi * dst, v8hi * __restrict src)
|
|
77 {
|
|
78 unsigned char tem[8];
|
|
79 tem[0] = (*src)[0];
|
|
80 tem[1] = (*src)[1];
|
|
81 tem[2] = (*src)[2];
|
|
82 tem[3] = (*src)[3];
|
|
83 tem[4] = (*src)[4];
|
|
84 tem[5] = (*src)[5];
|
|
85 tem[6] = (*src)[6];
|
|
86 tem[7] = (*src)[7];
|
|
87 dst[0] = *(v16qi *) tem;
|
|
88 }
|
|
89
|
|
90 /* { dg-final { scan-assembler-times "vpmovwb" 2 } } */
|
|
91 /* { dg-final { scan-assembler-times "vpmovwb" 3 { xfail *-*-* } } } */
|