[x86] Move the vector popcount tests into non-ISA files, and instead
[oota-llvm.git] / test / CodeGen / X86 / vector-popcnt-128.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE3
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
7
8 target triple = "x86_64-unknown-unknown"
9
10 define <2 x i64> @testv2i64(<2 x i64> %in) {
11 ; SSE-LABEL: testv2i64:
12 ; SSE:       # BB#0:
13 ; SSE-NEXT:    movdqa %xmm0, %xmm1
14 ; SSE-NEXT:    psrlq $1, %xmm1
15 ; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
16 ; SSE-NEXT:    psubq %xmm1, %xmm0
17 ; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [3689348814741910323,3689348814741910323]
18 ; SSE-NEXT:    movdqa %xmm0, %xmm2
19 ; SSE-NEXT:    pand %xmm1, %xmm2
20 ; SSE-NEXT:    psrlq $2, %xmm0
21 ; SSE-NEXT:    pand %xmm1, %xmm0
22 ; SSE-NEXT:    paddq %xmm2, %xmm0
23 ; SSE-NEXT:    movdqa %xmm0, %xmm1
24 ; SSE-NEXT:    psrlq $4, %xmm1
25 ; SSE-NEXT:    paddq %xmm0, %xmm1
26 ; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
27 ; SSE-NEXT:    movdqa %xmm1, %xmm0
28 ; SSE-NEXT:    psrlq $8, %xmm0
29 ; SSE-NEXT:    paddq %xmm1, %xmm0
30 ; SSE-NEXT:    movdqa %xmm0, %xmm1
31 ; SSE-NEXT:    psrlq $16, %xmm1
32 ; SSE-NEXT:    paddq %xmm0, %xmm1
33 ; SSE-NEXT:    movdqa %xmm1, %xmm0
34 ; SSE-NEXT:    psrlq $32, %xmm0
35 ; SSE-NEXT:    paddq %xmm1, %xmm0
36 ; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
37 ; SSE-NEXT:    retq
38 ;
39 ; AVX-LABEL: testv2i64:
40 ; AVX:       # BB#0:
41 ; AVX-NEXT:    vpsrlq $1, %xmm0, %xmm1
42 ; AVX-NEXT:    vpand {{.*}}(%rip), %xmm1, %xmm1
43 ; AVX-NEXT:    vpsubq %xmm1, %xmm0, %xmm0
44 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [3689348814741910323,3689348814741910323]
45 ; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm2
46 ; AVX-NEXT:    vpsrlq $2, %xmm0, %xmm0
47 ; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
48 ; AVX-NEXT:    vpaddq %xmm0, %xmm2, %xmm0
49 ; AVX-NEXT:    vpsrlq $4, %xmm0, %xmm1
50 ; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
51 ; AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
52 ; AVX-NEXT:    vpsrlq $8, %xmm0, %xmm1
53 ; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
54 ; AVX-NEXT:    vpsrlq $16, %xmm0, %xmm1
55 ; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
56 ; AVX-NEXT:    vpsrlq $32, %xmm0, %xmm1
57 ; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
58 ; AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
59 ; AVX-NEXT:    retq
60   %out = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %in)
61   ret <2 x i64> %out
62 }
63
64 define <4 x i32> @testv4i32(<4 x i32> %in) {
65 ; SSE-LABEL: testv4i32:
66 ; SSE:       # BB#0:
67 ; SSE-NEXT:    movdqa %xmm0, %xmm1
68 ; SSE-NEXT:    psrld $1, %xmm1
69 ; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
70 ; SSE-NEXT:    psubd %xmm1, %xmm0
71 ; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [858993459,858993459,858993459,858993459]
72 ; SSE-NEXT:    movdqa %xmm0, %xmm2
73 ; SSE-NEXT:    pand %xmm1, %xmm2
74 ; SSE-NEXT:    psrld $2, %xmm0
75 ; SSE-NEXT:    pand %xmm1, %xmm0
76 ; SSE-NEXT:    paddd %xmm2, %xmm0
77 ; SSE-NEXT:    movdqa %xmm0, %xmm1
78 ; SSE-NEXT:    psrld $4, %xmm1
79 ; SSE-NEXT:    paddd %xmm0, %xmm1
80 ; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
81 ; SSE-NEXT:    movdqa %xmm1, %xmm2
82 ; SSE-NEXT:    psrld $8, %xmm2
83 ; SSE-NEXT:    paddd %xmm1, %xmm2
84 ; SSE-NEXT:    movdqa %xmm2, %xmm0
85 ; SSE-NEXT:    psrld $16, %xmm0
86 ; SSE-NEXT:    paddd %xmm2, %xmm0
87 ; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
88 ; SSE-NEXT:    retq
89 ;
90 ; AVX1-LABEL: testv4i32:
91 ; AVX1:       # BB#0:
92 ; AVX1-NEXT:    vpsrld $1, %xmm0, %xmm1
93 ; AVX1-NEXT:    vpand {{.*}}(%rip), %xmm1, %xmm1
94 ; AVX1-NEXT:    vpsubd %xmm1, %xmm0, %xmm0
95 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [858993459,858993459,858993459,858993459]
96 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
97 ; AVX1-NEXT:    vpsrld $2, %xmm0, %xmm0
98 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
99 ; AVX1-NEXT:    vpaddd %xmm0, %xmm2, %xmm0
100 ; AVX1-NEXT:    vpsrld $4, %xmm0, %xmm1
101 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
102 ; AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
103 ; AVX1-NEXT:    vpsrld $8, %xmm0, %xmm1
104 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
105 ; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm1
106 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
107 ; AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
108 ; AVX1-NEXT:    retq
109 ;
110 ; AVX2-LABEL: testv4i32:
111 ; AVX2:       # BB#0:
112 ; AVX2-NEXT:    vpsrld $1, %xmm0, %xmm1
113 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm2
114 ; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm1
115 ; AVX2-NEXT:    vpsubd %xmm1, %xmm0, %xmm0
116 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm1
117 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
118 ; AVX2-NEXT:    vpsrld $2, %xmm0, %xmm0
119 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
120 ; AVX2-NEXT:    vpaddd %xmm0, %xmm2, %xmm0
121 ; AVX2-NEXT:    vpsrld $4, %xmm0, %xmm1
122 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
123 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm1
124 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
125 ; AVX2-NEXT:    vpsrld $8, %xmm0, %xmm1
126 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
127 ; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm1
128 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
129 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm1
130 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
131 ; AVX2-NEXT:    retq
132   %out = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %in)
133   ret <4 x i32> %out
134 }
135
136 define <8 x i16> @testv8i16(<8 x i16> %in) {
137 ; SSE2-LABEL: testv8i16:
138 ; SSE2:       # BB#0:
139 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
140 ; SSE2-NEXT:    movl %eax, %ecx
141 ; SSE2-NEXT:    shrl %ecx
142 ; SSE2-NEXT:    andl $21845, %ecx # imm = 0x5555
143 ; SSE2-NEXT:    subl %ecx, %eax
144 ; SSE2-NEXT:    movl %eax, %ecx
145 ; SSE2-NEXT:    andl $13107, %ecx # imm = 0x3333
146 ; SSE2-NEXT:    shrl $2, %eax
147 ; SSE2-NEXT:    andl $13107, %eax # imm = 0x3333
148 ; SSE2-NEXT:    addl %ecx, %eax
149 ; SSE2-NEXT:    movl %eax, %ecx
150 ; SSE2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
151 ; SSE2-NEXT:    shrl $4, %ecx
152 ; SSE2-NEXT:    addl %eax, %ecx
153 ; SSE2-NEXT:    andl $3855, %ecx # imm = 0xF0F
154 ; SSE2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
155 ; SSE2-NEXT:    movzbl %ah, %eax # NOREX
156 ; SSE2-NEXT:    movd %eax, %xmm1
157 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
158 ; SSE2-NEXT:    movl %eax, %ecx
159 ; SSE2-NEXT:    shrl %ecx
160 ; SSE2-NEXT:    andl $21845, %ecx # imm = 0x5555
161 ; SSE2-NEXT:    subl %ecx, %eax
162 ; SSE2-NEXT:    movl %eax, %ecx
163 ; SSE2-NEXT:    andl $13107, %ecx # imm = 0x3333
164 ; SSE2-NEXT:    shrl $2, %eax
165 ; SSE2-NEXT:    andl $13107, %eax # imm = 0x3333
166 ; SSE2-NEXT:    addl %ecx, %eax
167 ; SSE2-NEXT:    movl %eax, %ecx
168 ; SSE2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
169 ; SSE2-NEXT:    shrl $4, %ecx
170 ; SSE2-NEXT:    addl %eax, %ecx
171 ; SSE2-NEXT:    andl $3855, %ecx # imm = 0xF0F
172 ; SSE2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
173 ; SSE2-NEXT:    movzbl %ah, %eax # NOREX
174 ; SSE2-NEXT:    movd %eax, %xmm2
175 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
176 ; SSE2-NEXT:    pextrw $5, %xmm0, %eax
177 ; SSE2-NEXT:    movl %eax, %ecx
178 ; SSE2-NEXT:    shrl %ecx
179 ; SSE2-NEXT:    andl $21845, %ecx # imm = 0x5555
180 ; SSE2-NEXT:    subl %ecx, %eax
181 ; SSE2-NEXT:    movl %eax, %ecx
182 ; SSE2-NEXT:    andl $13107, %ecx # imm = 0x3333
183 ; SSE2-NEXT:    shrl $2, %eax
184 ; SSE2-NEXT:    andl $13107, %eax # imm = 0x3333
185 ; SSE2-NEXT:    addl %ecx, %eax
186 ; SSE2-NEXT:    movl %eax, %ecx
187 ; SSE2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
188 ; SSE2-NEXT:    shrl $4, %ecx
189 ; SSE2-NEXT:    addl %eax, %ecx
190 ; SSE2-NEXT:    andl $3855, %ecx # imm = 0xF0F
191 ; SSE2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
192 ; SSE2-NEXT:    movzbl %ah, %eax # NOREX
193 ; SSE2-NEXT:    movd %eax, %xmm3
194 ; SSE2-NEXT:    pextrw $1, %xmm0, %eax
195 ; SSE2-NEXT:    movl %eax, %ecx
196 ; SSE2-NEXT:    shrl %ecx
197 ; SSE2-NEXT:    andl $21845, %ecx # imm = 0x5555
198 ; SSE2-NEXT:    subl %ecx, %eax
199 ; SSE2-NEXT:    movl %eax, %ecx
200 ; SSE2-NEXT:    andl $13107, %ecx # imm = 0x3333
201 ; SSE2-NEXT:    shrl $2, %eax
202 ; SSE2-NEXT:    andl $13107, %eax # imm = 0x3333
203 ; SSE2-NEXT:    addl %ecx, %eax
204 ; SSE2-NEXT:    movl %eax, %ecx
205 ; SSE2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
206 ; SSE2-NEXT:    shrl $4, %ecx
207 ; SSE2-NEXT:    addl %eax, %ecx
208 ; SSE2-NEXT:    andl $3855, %ecx # imm = 0xF0F
209 ; SSE2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
210 ; SSE2-NEXT:    movzbl %ah, %eax # NOREX
211 ; SSE2-NEXT:    movd %eax, %xmm1
212 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
213 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
214 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
215 ; SSE2-NEXT:    movl %eax, %ecx
216 ; SSE2-NEXT:    shrl %ecx
217 ; SSE2-NEXT:    andl $21845, %ecx # imm = 0x5555
218 ; SSE2-NEXT:    subl %ecx, %eax
219 ; SSE2-NEXT:    movl %eax, %ecx
220 ; SSE2-NEXT:    andl $13107, %ecx # imm = 0x3333
221 ; SSE2-NEXT:    shrl $2, %eax
222 ; SSE2-NEXT:    andl $13107, %eax # imm = 0x3333
223 ; SSE2-NEXT:    addl %ecx, %eax
224 ; SSE2-NEXT:    movl %eax, %ecx
225 ; SSE2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
226 ; SSE2-NEXT:    shrl $4, %ecx
227 ; SSE2-NEXT:    addl %eax, %ecx
228 ; SSE2-NEXT:    andl $3855, %ecx # imm = 0xF0F
229 ; SSE2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
230 ; SSE2-NEXT:    movzbl %ah, %eax # NOREX
231 ; SSE2-NEXT:    movd %eax, %xmm3
232 ; SSE2-NEXT:    pextrw $2, %xmm0, %eax
233 ; SSE2-NEXT:    movl %eax, %ecx
234 ; SSE2-NEXT:    shrl %ecx
235 ; SSE2-NEXT:    andl $21845, %ecx # imm = 0x5555
236 ; SSE2-NEXT:    subl %ecx, %eax
237 ; SSE2-NEXT:    movl %eax, %ecx
238 ; SSE2-NEXT:    andl $13107, %ecx # imm = 0x3333
239 ; SSE2-NEXT:    shrl $2, %eax
240 ; SSE2-NEXT:    andl $13107, %eax # imm = 0x3333
241 ; SSE2-NEXT:    addl %ecx, %eax
242 ; SSE2-NEXT:    movl %eax, %ecx
243 ; SSE2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
244 ; SSE2-NEXT:    shrl $4, %ecx
245 ; SSE2-NEXT:    addl %eax, %ecx
246 ; SSE2-NEXT:    andl $3855, %ecx # imm = 0xF0F
247 ; SSE2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
248 ; SSE2-NEXT:    movzbl %ah, %eax # NOREX
249 ; SSE2-NEXT:    movd %eax, %xmm2
250 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
251 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
252 ; SSE2-NEXT:    movl %eax, %ecx
253 ; SSE2-NEXT:    shrl %ecx
254 ; SSE2-NEXT:    andl $21845, %ecx # imm = 0x5555
255 ; SSE2-NEXT:    subl %ecx, %eax
256 ; SSE2-NEXT:    movl %eax, %ecx
257 ; SSE2-NEXT:    andl $13107, %ecx # imm = 0x3333
258 ; SSE2-NEXT:    shrl $2, %eax
259 ; SSE2-NEXT:    andl $13107, %eax # imm = 0x3333
260 ; SSE2-NEXT:    addl %ecx, %eax
261 ; SSE2-NEXT:    movl %eax, %ecx
262 ; SSE2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
263 ; SSE2-NEXT:    shrl $4, %ecx
264 ; SSE2-NEXT:    addl %eax, %ecx
265 ; SSE2-NEXT:    andl $3855, %ecx # imm = 0xF0F
266 ; SSE2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
267 ; SSE2-NEXT:    movzbl %ah, %eax # NOREX
268 ; SSE2-NEXT:    movd %eax, %xmm3
269 ; SSE2-NEXT:    movd %xmm0, %eax
270 ; SSE2-NEXT:    movl %eax, %ecx
271 ; SSE2-NEXT:    shrl %ecx
272 ; SSE2-NEXT:    andl $21845, %ecx # imm = 0x5555
273 ; SSE2-NEXT:    subl %ecx, %eax
274 ; SSE2-NEXT:    movl %eax, %ecx
275 ; SSE2-NEXT:    andl $13107, %ecx # imm = 0x3333
276 ; SSE2-NEXT:    shrl $2, %eax
277 ; SSE2-NEXT:    andl $13107, %eax # imm = 0x3333
278 ; SSE2-NEXT:    addl %ecx, %eax
279 ; SSE2-NEXT:    movl %eax, %ecx
280 ; SSE2-NEXT:    andl $65520, %ecx # imm = 0xFFF0
281 ; SSE2-NEXT:    shrl $4, %ecx
282 ; SSE2-NEXT:    addl %eax, %ecx
283 ; SSE2-NEXT:    andl $3855, %ecx # imm = 0xF0F
284 ; SSE2-NEXT:    imull $257, %ecx, %eax # imm = 0x101
285 ; SSE2-NEXT:    movzbl %ah, %eax # NOREX
286 ; SSE2-NEXT:    movd %eax, %xmm0
287 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
288 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
289 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
290 ; SSE2-NEXT:    retq
291 ;
292 ; SSE3-LABEL: testv8i16:
293 ; SSE3:       # BB#0:
294 ; SSE3-NEXT:    pextrw $7, %xmm0, %eax
295 ; SSE3-NEXT:    movl %eax, %ecx
296 ; SSE3-NEXT:    shrl %ecx
297 ; SSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
298 ; SSE3-NEXT:    subl %ecx, %eax
299 ; SSE3-NEXT:    movl %eax, %ecx
300 ; SSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
301 ; SSE3-NEXT:    shrl $2, %eax
302 ; SSE3-NEXT:    andl $13107, %eax # imm = 0x3333
303 ; SSE3-NEXT:    addl %ecx, %eax
304 ; SSE3-NEXT:    movl %eax, %ecx
305 ; SSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
306 ; SSE3-NEXT:    shrl $4, %ecx
307 ; SSE3-NEXT:    addl %eax, %ecx
308 ; SSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
309 ; SSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
310 ; SSE3-NEXT:    movzbl %ah, %eax # NOREX
311 ; SSE3-NEXT:    movd %eax, %xmm1
312 ; SSE3-NEXT:    pextrw $3, %xmm0, %eax
313 ; SSE3-NEXT:    movl %eax, %ecx
314 ; SSE3-NEXT:    shrl %ecx
315 ; SSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
316 ; SSE3-NEXT:    subl %ecx, %eax
317 ; SSE3-NEXT:    movl %eax, %ecx
318 ; SSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
319 ; SSE3-NEXT:    shrl $2, %eax
320 ; SSE3-NEXT:    andl $13107, %eax # imm = 0x3333
321 ; SSE3-NEXT:    addl %ecx, %eax
322 ; SSE3-NEXT:    movl %eax, %ecx
323 ; SSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
324 ; SSE3-NEXT:    shrl $4, %ecx
325 ; SSE3-NEXT:    addl %eax, %ecx
326 ; SSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
327 ; SSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
328 ; SSE3-NEXT:    movzbl %ah, %eax # NOREX
329 ; SSE3-NEXT:    movd %eax, %xmm2
330 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
331 ; SSE3-NEXT:    pextrw $5, %xmm0, %eax
332 ; SSE3-NEXT:    movl %eax, %ecx
333 ; SSE3-NEXT:    shrl %ecx
334 ; SSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
335 ; SSE3-NEXT:    subl %ecx, %eax
336 ; SSE3-NEXT:    movl %eax, %ecx
337 ; SSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
338 ; SSE3-NEXT:    shrl $2, %eax
339 ; SSE3-NEXT:    andl $13107, %eax # imm = 0x3333
340 ; SSE3-NEXT:    addl %ecx, %eax
341 ; SSE3-NEXT:    movl %eax, %ecx
342 ; SSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
343 ; SSE3-NEXT:    shrl $4, %ecx
344 ; SSE3-NEXT:    addl %eax, %ecx
345 ; SSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
346 ; SSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
347 ; SSE3-NEXT:    movzbl %ah, %eax # NOREX
348 ; SSE3-NEXT:    movd %eax, %xmm3
349 ; SSE3-NEXT:    pextrw $1, %xmm0, %eax
350 ; SSE3-NEXT:    movl %eax, %ecx
351 ; SSE3-NEXT:    shrl %ecx
352 ; SSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
353 ; SSE3-NEXT:    subl %ecx, %eax
354 ; SSE3-NEXT:    movl %eax, %ecx
355 ; SSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
356 ; SSE3-NEXT:    shrl $2, %eax
357 ; SSE3-NEXT:    andl $13107, %eax # imm = 0x3333
358 ; SSE3-NEXT:    addl %ecx, %eax
359 ; SSE3-NEXT:    movl %eax, %ecx
360 ; SSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
361 ; SSE3-NEXT:    shrl $4, %ecx
362 ; SSE3-NEXT:    addl %eax, %ecx
363 ; SSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
364 ; SSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
365 ; SSE3-NEXT:    movzbl %ah, %eax # NOREX
366 ; SSE3-NEXT:    movd %eax, %xmm1
367 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
368 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
369 ; SSE3-NEXT:    pextrw $6, %xmm0, %eax
370 ; SSE3-NEXT:    movl %eax, %ecx
371 ; SSE3-NEXT:    shrl %ecx
372 ; SSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
373 ; SSE3-NEXT:    subl %ecx, %eax
374 ; SSE3-NEXT:    movl %eax, %ecx
375 ; SSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
376 ; SSE3-NEXT:    shrl $2, %eax
377 ; SSE3-NEXT:    andl $13107, %eax # imm = 0x3333
378 ; SSE3-NEXT:    addl %ecx, %eax
379 ; SSE3-NEXT:    movl %eax, %ecx
380 ; SSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
381 ; SSE3-NEXT:    shrl $4, %ecx
382 ; SSE3-NEXT:    addl %eax, %ecx
383 ; SSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
384 ; SSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
385 ; SSE3-NEXT:    movzbl %ah, %eax # NOREX
386 ; SSE3-NEXT:    movd %eax, %xmm3
387 ; SSE3-NEXT:    pextrw $2, %xmm0, %eax
388 ; SSE3-NEXT:    movl %eax, %ecx
389 ; SSE3-NEXT:    shrl %ecx
390 ; SSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
391 ; SSE3-NEXT:    subl %ecx, %eax
392 ; SSE3-NEXT:    movl %eax, %ecx
393 ; SSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
394 ; SSE3-NEXT:    shrl $2, %eax
395 ; SSE3-NEXT:    andl $13107, %eax # imm = 0x3333
396 ; SSE3-NEXT:    addl %ecx, %eax
397 ; SSE3-NEXT:    movl %eax, %ecx
398 ; SSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
399 ; SSE3-NEXT:    shrl $4, %ecx
400 ; SSE3-NEXT:    addl %eax, %ecx
401 ; SSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
402 ; SSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
403 ; SSE3-NEXT:    movzbl %ah, %eax # NOREX
404 ; SSE3-NEXT:    movd %eax, %xmm2
405 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
406 ; SSE3-NEXT:    pextrw $4, %xmm0, %eax
407 ; SSE3-NEXT:    movl %eax, %ecx
408 ; SSE3-NEXT:    shrl %ecx
409 ; SSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
410 ; SSE3-NEXT:    subl %ecx, %eax
411 ; SSE3-NEXT:    movl %eax, %ecx
412 ; SSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
413 ; SSE3-NEXT:    shrl $2, %eax
414 ; SSE3-NEXT:    andl $13107, %eax # imm = 0x3333
415 ; SSE3-NEXT:    addl %ecx, %eax
416 ; SSE3-NEXT:    movl %eax, %ecx
417 ; SSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
418 ; SSE3-NEXT:    shrl $4, %ecx
419 ; SSE3-NEXT:    addl %eax, %ecx
420 ; SSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
421 ; SSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
422 ; SSE3-NEXT:    movzbl %ah, %eax # NOREX
423 ; SSE3-NEXT:    movd %eax, %xmm3
424 ; SSE3-NEXT:    movd %xmm0, %eax
425 ; SSE3-NEXT:    movl %eax, %ecx
426 ; SSE3-NEXT:    shrl %ecx
427 ; SSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
428 ; SSE3-NEXT:    subl %ecx, %eax
429 ; SSE3-NEXT:    movl %eax, %ecx
430 ; SSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
431 ; SSE3-NEXT:    shrl $2, %eax
432 ; SSE3-NEXT:    andl $13107, %eax # imm = 0x3333
433 ; SSE3-NEXT:    addl %ecx, %eax
434 ; SSE3-NEXT:    movl %eax, %ecx
435 ; SSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
436 ; SSE3-NEXT:    shrl $4, %ecx
437 ; SSE3-NEXT:    addl %eax, %ecx
438 ; SSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
439 ; SSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
440 ; SSE3-NEXT:    movzbl %ah, %eax # NOREX
441 ; SSE3-NEXT:    movd %eax, %xmm0
442 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
443 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
444 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
445 ; SSE3-NEXT:    retq
446 ;
447 ; SSSE3-LABEL: testv8i16:
448 ; SSSE3:       # BB#0:
449 ; SSSE3-NEXT:    pextrw $7, %xmm0, %eax
450 ; SSSE3-NEXT:    movl %eax, %ecx
451 ; SSSE3-NEXT:    shrl %ecx
452 ; SSSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
453 ; SSSE3-NEXT:    subl %ecx, %eax
454 ; SSSE3-NEXT:    movl %eax, %ecx
455 ; SSSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
456 ; SSSE3-NEXT:    shrl $2, %eax
457 ; SSSE3-NEXT:    andl $13107, %eax # imm = 0x3333
458 ; SSSE3-NEXT:    addl %ecx, %eax
459 ; SSSE3-NEXT:    movl %eax, %ecx
460 ; SSSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
461 ; SSSE3-NEXT:    shrl $4, %ecx
462 ; SSSE3-NEXT:    addl %eax, %ecx
463 ; SSSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
464 ; SSSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
465 ; SSSE3-NEXT:    movzbl %ah, %eax # NOREX
466 ; SSSE3-NEXT:    movd %eax, %xmm1
467 ; SSSE3-NEXT:    pextrw $3, %xmm0, %eax
468 ; SSSE3-NEXT:    movl %eax, %ecx
469 ; SSSE3-NEXT:    shrl %ecx
470 ; SSSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
471 ; SSSE3-NEXT:    subl %ecx, %eax
472 ; SSSE3-NEXT:    movl %eax, %ecx
473 ; SSSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
474 ; SSSE3-NEXT:    shrl $2, %eax
475 ; SSSE3-NEXT:    andl $13107, %eax # imm = 0x3333
476 ; SSSE3-NEXT:    addl %ecx, %eax
477 ; SSSE3-NEXT:    movl %eax, %ecx
478 ; SSSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
479 ; SSSE3-NEXT:    shrl $4, %ecx
480 ; SSSE3-NEXT:    addl %eax, %ecx
481 ; SSSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
482 ; SSSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
483 ; SSSE3-NEXT:    movzbl %ah, %eax # NOREX
484 ; SSSE3-NEXT:    movd %eax, %xmm2
485 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
486 ; SSSE3-NEXT:    pextrw $5, %xmm0, %eax
487 ; SSSE3-NEXT:    movl %eax, %ecx
488 ; SSSE3-NEXT:    shrl %ecx
489 ; SSSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
490 ; SSSE3-NEXT:    subl %ecx, %eax
491 ; SSSE3-NEXT:    movl %eax, %ecx
492 ; SSSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
493 ; SSSE3-NEXT:    shrl $2, %eax
494 ; SSSE3-NEXT:    andl $13107, %eax # imm = 0x3333
495 ; SSSE3-NEXT:    addl %ecx, %eax
496 ; SSSE3-NEXT:    movl %eax, %ecx
497 ; SSSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
498 ; SSSE3-NEXT:    shrl $4, %ecx
499 ; SSSE3-NEXT:    addl %eax, %ecx
500 ; SSSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
501 ; SSSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
502 ; SSSE3-NEXT:    movzbl %ah, %eax # NOREX
503 ; SSSE3-NEXT:    movd %eax, %xmm3
504 ; SSSE3-NEXT:    pextrw $1, %xmm0, %eax
505 ; SSSE3-NEXT:    movl %eax, %ecx
506 ; SSSE3-NEXT:    shrl %ecx
507 ; SSSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
508 ; SSSE3-NEXT:    subl %ecx, %eax
509 ; SSSE3-NEXT:    movl %eax, %ecx
510 ; SSSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
511 ; SSSE3-NEXT:    shrl $2, %eax
512 ; SSSE3-NEXT:    andl $13107, %eax # imm = 0x3333
513 ; SSSE3-NEXT:    addl %ecx, %eax
514 ; SSSE3-NEXT:    movl %eax, %ecx
515 ; SSSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
516 ; SSSE3-NEXT:    shrl $4, %ecx
517 ; SSSE3-NEXT:    addl %eax, %ecx
518 ; SSSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
519 ; SSSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
520 ; SSSE3-NEXT:    movzbl %ah, %eax # NOREX
521 ; SSSE3-NEXT:    movd %eax, %xmm1
522 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
523 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
524 ; SSSE3-NEXT:    pextrw $6, %xmm0, %eax
525 ; SSSE3-NEXT:    movl %eax, %ecx
526 ; SSSE3-NEXT:    shrl %ecx
527 ; SSSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
528 ; SSSE3-NEXT:    subl %ecx, %eax
529 ; SSSE3-NEXT:    movl %eax, %ecx
530 ; SSSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
531 ; SSSE3-NEXT:    shrl $2, %eax
532 ; SSSE3-NEXT:    andl $13107, %eax # imm = 0x3333
533 ; SSSE3-NEXT:    addl %ecx, %eax
534 ; SSSE3-NEXT:    movl %eax, %ecx
535 ; SSSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
536 ; SSSE3-NEXT:    shrl $4, %ecx
537 ; SSSE3-NEXT:    addl %eax, %ecx
538 ; SSSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
539 ; SSSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
540 ; SSSE3-NEXT:    movzbl %ah, %eax # NOREX
541 ; SSSE3-NEXT:    movd %eax, %xmm3
542 ; SSSE3-NEXT:    pextrw $2, %xmm0, %eax
543 ; SSSE3-NEXT:    movl %eax, %ecx
544 ; SSSE3-NEXT:    shrl %ecx
545 ; SSSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
546 ; SSSE3-NEXT:    subl %ecx, %eax
547 ; SSSE3-NEXT:    movl %eax, %ecx
548 ; SSSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
549 ; SSSE3-NEXT:    shrl $2, %eax
550 ; SSSE3-NEXT:    andl $13107, %eax # imm = 0x3333
551 ; SSSE3-NEXT:    addl %ecx, %eax
552 ; SSSE3-NEXT:    movl %eax, %ecx
553 ; SSSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
554 ; SSSE3-NEXT:    shrl $4, %ecx
555 ; SSSE3-NEXT:    addl %eax, %ecx
556 ; SSSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
557 ; SSSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
558 ; SSSE3-NEXT:    movzbl %ah, %eax # NOREX
559 ; SSSE3-NEXT:    movd %eax, %xmm2
560 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
561 ; SSSE3-NEXT:    pextrw $4, %xmm0, %eax
562 ; SSSE3-NEXT:    movl %eax, %ecx
563 ; SSSE3-NEXT:    shrl %ecx
564 ; SSSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
565 ; SSSE3-NEXT:    subl %ecx, %eax
566 ; SSSE3-NEXT:    movl %eax, %ecx
567 ; SSSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
568 ; SSSE3-NEXT:    shrl $2, %eax
569 ; SSSE3-NEXT:    andl $13107, %eax # imm = 0x3333
570 ; SSSE3-NEXT:    addl %ecx, %eax
571 ; SSSE3-NEXT:    movl %eax, %ecx
572 ; SSSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
573 ; SSSE3-NEXT:    shrl $4, %ecx
574 ; SSSE3-NEXT:    addl %eax, %ecx
575 ; SSSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
576 ; SSSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
577 ; SSSE3-NEXT:    movzbl %ah, %eax # NOREX
578 ; SSSE3-NEXT:    movd %eax, %xmm3
579 ; SSSE3-NEXT:    movd %xmm0, %eax
580 ; SSSE3-NEXT:    movl %eax, %ecx
581 ; SSSE3-NEXT:    shrl %ecx
582 ; SSSE3-NEXT:    andl $21845, %ecx # imm = 0x5555
583 ; SSSE3-NEXT:    subl %ecx, %eax
584 ; SSSE3-NEXT:    movl %eax, %ecx
585 ; SSSE3-NEXT:    andl $13107, %ecx # imm = 0x3333
586 ; SSSE3-NEXT:    shrl $2, %eax
587 ; SSSE3-NEXT:    andl $13107, %eax # imm = 0x3333
588 ; SSSE3-NEXT:    addl %ecx, %eax
589 ; SSSE3-NEXT:    movl %eax, %ecx
590 ; SSSE3-NEXT:    andl $65520, %ecx # imm = 0xFFF0
591 ; SSSE3-NEXT:    shrl $4, %ecx
592 ; SSSE3-NEXT:    addl %eax, %ecx
593 ; SSSE3-NEXT:    andl $3855, %ecx # imm = 0xF0F
594 ; SSSE3-NEXT:    imull $257, %ecx, %eax # imm = 0x101
595 ; SSSE3-NEXT:    movzbl %ah, %eax # NOREX
596 ; SSSE3-NEXT:    movd %eax, %xmm0
597 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
598 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
599 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
600 ; SSSE3-NEXT:    retq
601 ;
602 ; SSE41-LABEL: testv8i16:
603 ; SSE41:       # BB#0:
604 ; SSE41-NEXT:    pextrw $1, %xmm0, %eax
605 ; SSE41-NEXT:    movl %eax, %ecx
606 ; SSE41-NEXT:    shrl %ecx
607 ; SSE41-NEXT:    andl $21845, %ecx # imm = 0x5555
608 ; SSE41-NEXT:    subl %ecx, %eax
609 ; SSE41-NEXT:    movl %eax, %ecx
610 ; SSE41-NEXT:    andl $13107, %ecx # imm = 0x3333
611 ; SSE41-NEXT:    shrl $2, %eax
612 ; SSE41-NEXT:    andl $13107, %eax # imm = 0x3333
613 ; SSE41-NEXT:    addl %ecx, %eax
614 ; SSE41-NEXT:    movl %eax, %ecx
615 ; SSE41-NEXT:    andl $65520, %ecx # imm = 0xFFF0
616 ; SSE41-NEXT:    shrl $4, %ecx
617 ; SSE41-NEXT:    addl %eax, %ecx
618 ; SSE41-NEXT:    andl $3855, %ecx # imm = 0xF0F
619 ; SSE41-NEXT:    imull $257, %ecx, %eax # imm = 0x101
620 ; SSE41-NEXT:    movzbl %ah, %eax # NOREX
621 ; SSE41-NEXT:    movd %xmm0, %ecx
622 ; SSE41-NEXT:    movl %ecx, %edx
623 ; SSE41-NEXT:    shrl %edx
624 ; SSE41-NEXT:    andl $21845, %edx # imm = 0x5555
625 ; SSE41-NEXT:    subl %edx, %ecx
626 ; SSE41-NEXT:    movl %ecx, %edx
627 ; SSE41-NEXT:    andl $13107, %edx # imm = 0x3333
628 ; SSE41-NEXT:    shrl $2, %ecx
629 ; SSE41-NEXT:    andl $13107, %ecx # imm = 0x3333
630 ; SSE41-NEXT:    addl %edx, %ecx
631 ; SSE41-NEXT:    movl %ecx, %edx
632 ; SSE41-NEXT:    andl $65520, %edx # imm = 0xFFF0
633 ; SSE41-NEXT:    shrl $4, %edx
634 ; SSE41-NEXT:    addl %ecx, %edx
635 ; SSE41-NEXT:    andl $3855, %edx # imm = 0xF0F
636 ; SSE41-NEXT:    imull $257, %edx, %ecx # imm = 0x101
637 ; SSE41-NEXT:    movzbl %ch, %ecx # NOREX
638 ; SSE41-NEXT:    movd %ecx, %xmm1
639 ; SSE41-NEXT:    pinsrw $1, %eax, %xmm1
640 ; SSE41-NEXT:    pextrw $2, %xmm0, %eax
641 ; SSE41-NEXT:    movl %eax, %ecx
642 ; SSE41-NEXT:    shrl %ecx
643 ; SSE41-NEXT:    andl $21845, %ecx # imm = 0x5555
644 ; SSE41-NEXT:    subl %ecx, %eax
645 ; SSE41-NEXT:    movl %eax, %ecx
646 ; SSE41-NEXT:    andl $13107, %ecx # imm = 0x3333
647 ; SSE41-NEXT:    shrl $2, %eax
648 ; SSE41-NEXT:    andl $13107, %eax # imm = 0x3333
649 ; SSE41-NEXT:    addl %ecx, %eax
650 ; SSE41-NEXT:    movl %eax, %ecx
651 ; SSE41-NEXT:    andl $65520, %ecx # imm = 0xFFF0
652 ; SSE41-NEXT:    shrl $4, %ecx
653 ; SSE41-NEXT:    addl %eax, %ecx
654 ; SSE41-NEXT:    andl $3855, %ecx # imm = 0xF0F
655 ; SSE41-NEXT:    imull $257, %ecx, %eax # imm = 0x101
656 ; SSE41-NEXT:    movzbl %ah, %eax # NOREX
657 ; SSE41-NEXT:    pinsrw $2, %eax, %xmm1
658 ; SSE41-NEXT:    pextrw $3, %xmm0, %eax
659 ; SSE41-NEXT:    movl %eax, %ecx
660 ; SSE41-NEXT:    shrl %ecx
661 ; SSE41-NEXT:    andl $21845, %ecx # imm = 0x5555
662 ; SSE41-NEXT:    subl %ecx, %eax
663 ; SSE41-NEXT:    movl %eax, %ecx
664 ; SSE41-NEXT:    andl $13107, %ecx # imm = 0x3333
665 ; SSE41-NEXT:    shrl $2, %eax
666 ; SSE41-NEXT:    andl $13107, %eax # imm = 0x3333
667 ; SSE41-NEXT:    addl %ecx, %eax
668 ; SSE41-NEXT:    movl %eax, %ecx
669 ; SSE41-NEXT:    andl $65520, %ecx # imm = 0xFFF0
670 ; SSE41-NEXT:    shrl $4, %ecx
671 ; SSE41-NEXT:    addl %eax, %ecx
672 ; SSE41-NEXT:    andl $3855, %ecx # imm = 0xF0F
673 ; SSE41-NEXT:    imull $257, %ecx, %eax # imm = 0x101
674 ; SSE41-NEXT:    movzbl %ah, %eax # NOREX
675 ; SSE41-NEXT:    pinsrw $3, %eax, %xmm1
676 ; SSE41-NEXT:    pextrw $4, %xmm0, %eax
677 ; SSE41-NEXT:    movl %eax, %ecx
678 ; SSE41-NEXT:    shrl %ecx
679 ; SSE41-NEXT:    andl $21845, %ecx # imm = 0x5555
680 ; SSE41-NEXT:    subl %ecx, %eax
681 ; SSE41-NEXT:    movl %eax, %ecx
682 ; SSE41-NEXT:    andl $13107, %ecx # imm = 0x3333
683 ; SSE41-NEXT:    shrl $2, %eax
684 ; SSE41-NEXT:    andl $13107, %eax # imm = 0x3333
685 ; SSE41-NEXT:    addl %ecx, %eax
686 ; SSE41-NEXT:    movl %eax, %ecx
687 ; SSE41-NEXT:    andl $65520, %ecx # imm = 0xFFF0
688 ; SSE41-NEXT:    shrl $4, %ecx
689 ; SSE41-NEXT:    addl %eax, %ecx
690 ; SSE41-NEXT:    andl $3855, %ecx # imm = 0xF0F
691 ; SSE41-NEXT:    imull $257, %ecx, %eax # imm = 0x101
692 ; SSE41-NEXT:    movzbl %ah, %eax # NOREX
693 ; SSE41-NEXT:    pinsrw $4, %eax, %xmm1
694 ; SSE41-NEXT:    pextrw $5, %xmm0, %eax
695 ; SSE41-NEXT:    movl %eax, %ecx
696 ; SSE41-NEXT:    shrl %ecx
697 ; SSE41-NEXT:    andl $21845, %ecx # imm = 0x5555
698 ; SSE41-NEXT:    subl %ecx, %eax
699 ; SSE41-NEXT:    movl %eax, %ecx
700 ; SSE41-NEXT:    andl $13107, %ecx # imm = 0x3333
701 ; SSE41-NEXT:    shrl $2, %eax
702 ; SSE41-NEXT:    andl $13107, %eax # imm = 0x3333
703 ; SSE41-NEXT:    addl %ecx, %eax
704 ; SSE41-NEXT:    movl %eax, %ecx
705 ; SSE41-NEXT:    andl $65520, %ecx # imm = 0xFFF0
706 ; SSE41-NEXT:    shrl $4, %ecx
707 ; SSE41-NEXT:    addl %eax, %ecx
708 ; SSE41-NEXT:    andl $3855, %ecx # imm = 0xF0F
709 ; SSE41-NEXT:    imull $257, %ecx, %eax # imm = 0x101
710 ; SSE41-NEXT:    movzbl %ah, %eax # NOREX
711 ; SSE41-NEXT:    pinsrw $5, %eax, %xmm1
712 ; SSE41-NEXT:    pextrw $6, %xmm0, %eax
713 ; SSE41-NEXT:    movl %eax, %ecx
714 ; SSE41-NEXT:    shrl %ecx
715 ; SSE41-NEXT:    andl $21845, %ecx # imm = 0x5555
716 ; SSE41-NEXT:    subl %ecx, %eax
717 ; SSE41-NEXT:    movl %eax, %ecx
718 ; SSE41-NEXT:    andl $13107, %ecx # imm = 0x3333
719 ; SSE41-NEXT:    shrl $2, %eax
720 ; SSE41-NEXT:    andl $13107, %eax # imm = 0x3333
721 ; SSE41-NEXT:    addl %ecx, %eax
722 ; SSE41-NEXT:    movl %eax, %ecx
723 ; SSE41-NEXT:    andl $65520, %ecx # imm = 0xFFF0
724 ; SSE41-NEXT:    shrl $4, %ecx
725 ; SSE41-NEXT:    addl %eax, %ecx
726 ; SSE41-NEXT:    andl $3855, %ecx # imm = 0xF0F
727 ; SSE41-NEXT:    imull $257, %ecx, %eax # imm = 0x101
728 ; SSE41-NEXT:    movzbl %ah, %eax # NOREX
729 ; SSE41-NEXT:    pinsrw $6, %eax, %xmm1
730 ; SSE41-NEXT:    pextrw $7, %xmm0, %eax
731 ; SSE41-NEXT:    movl %eax, %ecx
732 ; SSE41-NEXT:    shrl %ecx
733 ; SSE41-NEXT:    andl $21845, %ecx # imm = 0x5555
734 ; SSE41-NEXT:    subl %ecx, %eax
735 ; SSE41-NEXT:    movl %eax, %ecx
736 ; SSE41-NEXT:    andl $13107, %ecx # imm = 0x3333
737 ; SSE41-NEXT:    shrl $2, %eax
738 ; SSE41-NEXT:    andl $13107, %eax # imm = 0x3333
739 ; SSE41-NEXT:    addl %ecx, %eax
740 ; SSE41-NEXT:    movl %eax, %ecx
741 ; SSE41-NEXT:    andl $65520, %ecx # imm = 0xFFF0
742 ; SSE41-NEXT:    shrl $4, %ecx
743 ; SSE41-NEXT:    addl %eax, %ecx
744 ; SSE41-NEXT:    andl $3855, %ecx # imm = 0xF0F
745 ; SSE41-NEXT:    imull $257, %ecx, %eax # imm = 0x101
746 ; SSE41-NEXT:    movzbl %ah, %eax # NOREX
747 ; SSE41-NEXT:    pinsrw $7, %eax, %xmm1
748 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
749 ; SSE41-NEXT:    retq
750 ;
751 ; AVX-LABEL: testv8i16:
752 ; AVX:       # BB#0:
753 ; AVX-NEXT:    vpextrw $1, %xmm0, %eax
754 ; AVX-NEXT:    movl %eax, %ecx
755 ; AVX-NEXT:    shrl %ecx
756 ; AVX-NEXT:    andl $21845, %ecx # imm = 0x5555
757 ; AVX-NEXT:    subl %ecx, %eax
758 ; AVX-NEXT:    movl %eax, %ecx
759 ; AVX-NEXT:    andl $13107, %ecx # imm = 0x3333
760 ; AVX-NEXT:    shrl $2, %eax
761 ; AVX-NEXT:    andl $13107, %eax # imm = 0x3333
762 ; AVX-NEXT:    addl %ecx, %eax
763 ; AVX-NEXT:    movl %eax, %ecx
764 ; AVX-NEXT:    andl $65520, %ecx # imm = 0xFFF0
765 ; AVX-NEXT:    shrl $4, %ecx
766 ; AVX-NEXT:    addl %eax, %ecx
767 ; AVX-NEXT:    andl $3855, %ecx # imm = 0xF0F
768 ; AVX-NEXT:    imull $257, %ecx, %eax # imm = 0x101
769 ; AVX-NEXT:    movzbl %ah, %eax # NOREX
770 ; AVX-NEXT:    vmovd %xmm0, %ecx
771 ; AVX-NEXT:    movl %ecx, %edx
772 ; AVX-NEXT:    shrl %edx
773 ; AVX-NEXT:    andl $21845, %edx # imm = 0x5555
774 ; AVX-NEXT:    subl %edx, %ecx
775 ; AVX-NEXT:    movl %ecx, %edx
776 ; AVX-NEXT:    andl $13107, %edx # imm = 0x3333
777 ; AVX-NEXT:    shrl $2, %ecx
778 ; AVX-NEXT:    andl $13107, %ecx # imm = 0x3333
779 ; AVX-NEXT:    addl %edx, %ecx
780 ; AVX-NEXT:    movl %ecx, %edx
781 ; AVX-NEXT:    andl $65520, %edx # imm = 0xFFF0
782 ; AVX-NEXT:    shrl $4, %edx
783 ; AVX-NEXT:    addl %ecx, %edx
784 ; AVX-NEXT:    andl $3855, %edx # imm = 0xF0F
785 ; AVX-NEXT:    imull $257, %edx, %ecx # imm = 0x101
786 ; AVX-NEXT:    movzbl %ch, %ecx # NOREX
787 ; AVX-NEXT:    vmovd %ecx, %xmm1
788 ; AVX-NEXT:    vpinsrw $1, %eax, %xmm1, %xmm1
789 ; AVX-NEXT:    vpextrw $2, %xmm0, %eax
790 ; AVX-NEXT:    movl %eax, %ecx
791 ; AVX-NEXT:    shrl %ecx
792 ; AVX-NEXT:    andl $21845, %ecx # imm = 0x5555
793 ; AVX-NEXT:    subl %ecx, %eax
794 ; AVX-NEXT:    movl %eax, %ecx
795 ; AVX-NEXT:    andl $13107, %ecx # imm = 0x3333
796 ; AVX-NEXT:    shrl $2, %eax
797 ; AVX-NEXT:    andl $13107, %eax # imm = 0x3333
798 ; AVX-NEXT:    addl %ecx, %eax
799 ; AVX-NEXT:    movl %eax, %ecx
800 ; AVX-NEXT:    andl $65520, %ecx # imm = 0xFFF0
801 ; AVX-NEXT:    shrl $4, %ecx
802 ; AVX-NEXT:    addl %eax, %ecx
803 ; AVX-NEXT:    andl $3855, %ecx # imm = 0xF0F
804 ; AVX-NEXT:    imull $257, %ecx, %eax # imm = 0x101
805 ; AVX-NEXT:    movzbl %ah, %eax # NOREX
806 ; AVX-NEXT:    vpinsrw $2, %eax, %xmm1, %xmm1
807 ; AVX-NEXT:    vpextrw $3, %xmm0, %eax
808 ; AVX-NEXT:    movl %eax, %ecx
809 ; AVX-NEXT:    shrl %ecx
810 ; AVX-NEXT:    andl $21845, %ecx # imm = 0x5555
811 ; AVX-NEXT:    subl %ecx, %eax
812 ; AVX-NEXT:    movl %eax, %ecx
813 ; AVX-NEXT:    andl $13107, %ecx # imm = 0x3333
814 ; AVX-NEXT:    shrl $2, %eax
815 ; AVX-NEXT:    andl $13107, %eax # imm = 0x3333
816 ; AVX-NEXT:    addl %ecx, %eax
817 ; AVX-NEXT:    movl %eax, %ecx
818 ; AVX-NEXT:    andl $65520, %ecx # imm = 0xFFF0
819 ; AVX-NEXT:    shrl $4, %ecx
820 ; AVX-NEXT:    addl %eax, %ecx
821 ; AVX-NEXT:    andl $3855, %ecx # imm = 0xF0F
822 ; AVX-NEXT:    imull $257, %ecx, %eax # imm = 0x101
823 ; AVX-NEXT:    movzbl %ah, %eax # NOREX
824 ; AVX-NEXT:    vpinsrw $3, %eax, %xmm1, %xmm1
825 ; AVX-NEXT:    vpextrw $4, %xmm0, %eax
826 ; AVX-NEXT:    movl %eax, %ecx
827 ; AVX-NEXT:    shrl %ecx
828 ; AVX-NEXT:    andl $21845, %ecx # imm = 0x5555
829 ; AVX-NEXT:    subl %ecx, %eax
830 ; AVX-NEXT:    movl %eax, %ecx
831 ; AVX-NEXT:    andl $13107, %ecx # imm = 0x3333
832 ; AVX-NEXT:    shrl $2, %eax
833 ; AVX-NEXT:    andl $13107, %eax # imm = 0x3333
834 ; AVX-NEXT:    addl %ecx, %eax
835 ; AVX-NEXT:    movl %eax, %ecx
836 ; AVX-NEXT:    andl $65520, %ecx # imm = 0xFFF0
837 ; AVX-NEXT:    shrl $4, %ecx
838 ; AVX-NEXT:    addl %eax, %ecx
839 ; AVX-NEXT:    andl $3855, %ecx # imm = 0xF0F
840 ; AVX-NEXT:    imull $257, %ecx, %eax # imm = 0x101
841 ; AVX-NEXT:    movzbl %ah, %eax # NOREX
842 ; AVX-NEXT:    vpinsrw $4, %eax, %xmm1, %xmm1
843 ; AVX-NEXT:    vpextrw $5, %xmm0, %eax
844 ; AVX-NEXT:    movl %eax, %ecx
845 ; AVX-NEXT:    shrl %ecx
846 ; AVX-NEXT:    andl $21845, %ecx # imm = 0x5555
847 ; AVX-NEXT:    subl %ecx, %eax
848 ; AVX-NEXT:    movl %eax, %ecx
849 ; AVX-NEXT:    andl $13107, %ecx # imm = 0x3333
850 ; AVX-NEXT:    shrl $2, %eax
851 ; AVX-NEXT:    andl $13107, %eax # imm = 0x3333
852 ; AVX-NEXT:    addl %ecx, %eax
853 ; AVX-NEXT:    movl %eax, %ecx
854 ; AVX-NEXT:    andl $65520, %ecx # imm = 0xFFF0
855 ; AVX-NEXT:    shrl $4, %ecx
856 ; AVX-NEXT:    addl %eax, %ecx
857 ; AVX-NEXT:    andl $3855, %ecx # imm = 0xF0F
858 ; AVX-NEXT:    imull $257, %ecx, %eax # imm = 0x101
859 ; AVX-NEXT:    movzbl %ah, %eax # NOREX
860 ; AVX-NEXT:    vpinsrw $5, %eax, %xmm1, %xmm1
861 ; AVX-NEXT:    vpextrw $6, %xmm0, %eax
862 ; AVX-NEXT:    movl %eax, %ecx
863 ; AVX-NEXT:    shrl %ecx
864 ; AVX-NEXT:    andl $21845, %ecx # imm = 0x5555
865 ; AVX-NEXT:    subl %ecx, %eax
866 ; AVX-NEXT:    movl %eax, %ecx
867 ; AVX-NEXT:    andl $13107, %ecx # imm = 0x3333
868 ; AVX-NEXT:    shrl $2, %eax
869 ; AVX-NEXT:    andl $13107, %eax # imm = 0x3333
870 ; AVX-NEXT:    addl %ecx, %eax
871 ; AVX-NEXT:    movl %eax, %ecx
872 ; AVX-NEXT:    andl $65520, %ecx # imm = 0xFFF0
873 ; AVX-NEXT:    shrl $4, %ecx
874 ; AVX-NEXT:    addl %eax, %ecx
875 ; AVX-NEXT:    andl $3855, %ecx # imm = 0xF0F
876 ; AVX-NEXT:    imull $257, %ecx, %eax # imm = 0x101
877 ; AVX-NEXT:    movzbl %ah, %eax # NOREX
878 ; AVX-NEXT:    vpinsrw $6, %eax, %xmm1, %xmm1
879 ; AVX-NEXT:    vpextrw $7, %xmm0, %eax
880 ; AVX-NEXT:    movl %eax, %ecx
881 ; AVX-NEXT:    shrl %ecx
882 ; AVX-NEXT:    andl $21845, %ecx # imm = 0x5555
883 ; AVX-NEXT:    subl %ecx, %eax
884 ; AVX-NEXT:    movl %eax, %ecx
885 ; AVX-NEXT:    andl $13107, %ecx # imm = 0x3333
886 ; AVX-NEXT:    shrl $2, %eax
887 ; AVX-NEXT:    andl $13107, %eax # imm = 0x3333
888 ; AVX-NEXT:    addl %ecx, %eax
889 ; AVX-NEXT:    movl %eax, %ecx
890 ; AVX-NEXT:    andl $65520, %ecx # imm = 0xFFF0
891 ; AVX-NEXT:    shrl $4, %ecx
892 ; AVX-NEXT:    addl %eax, %ecx
893 ; AVX-NEXT:    andl $3855, %ecx # imm = 0xF0F
894 ; AVX-NEXT:    imull $257, %ecx, %eax # imm = 0x101
895 ; AVX-NEXT:    movzbl %ah, %eax # NOREX
896 ; AVX-NEXT:    vpinsrw $7, %eax, %xmm1, %xmm0
897 ; AVX-NEXT:    retq
898   %out = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %in)
899   ret <8 x i16> %out
900 }
901
902 define <16 x i8> @testv16i8(<16 x i8> %in) {
903 ; SSE2-LABEL: testv16i8:
904 ; SSE2:       # BB#0:
905 ; SSE2-NEXT:    pushq %rbp
906 ; SSE2-NEXT:  .Ltmp0:
907 ; SSE2-NEXT:    .cfi_def_cfa_offset 16
908 ; SSE2-NEXT:    pushq %rbx
909 ; SSE2-NEXT:  .Ltmp1:
910 ; SSE2-NEXT:    .cfi_def_cfa_offset 24
911 ; SSE2-NEXT:  .Ltmp2:
912 ; SSE2-NEXT:    .cfi_offset %rbx, -24
913 ; SSE2-NEXT:  .Ltmp3:
914 ; SSE2-NEXT:    .cfi_offset %rbp, -16
915 ; SSE2-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
916 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
917 ; SSE2-NEXT:    movb %al, %cl
918 ; SSE2-NEXT:    shrb %cl
919 ; SSE2-NEXT:    andb $85, %cl
920 ; SSE2-NEXT:    subb %cl, %al
921 ; SSE2-NEXT:    movb %al, %cl
922 ; SSE2-NEXT:    andb $51, %cl
923 ; SSE2-NEXT:    shrb $2, %al
924 ; SSE2-NEXT:    andb $51, %al
925 ; SSE2-NEXT:    addb %cl, %al
926 ; SSE2-NEXT:    movb %al, %cl
927 ; SSE2-NEXT:    shrb $4, %cl
928 ; SSE2-NEXT:    addb %al, %cl
929 ; SSE2-NEXT:    andb $15, %cl
930 ; SSE2-NEXT:    movzbl %cl, %eax
931 ; SSE2-NEXT:    movd %eax, %xmm0
932 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %r10b
933 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %cl
934 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %dil
935 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %dl
936 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %r9b
937 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %bpl
938 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %sil
939 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %bl
940 ; SSE2-NEXT:    movb %bl, %al
941 ; SSE2-NEXT:    shrb %al
942 ; SSE2-NEXT:    andb $85, %al
943 ; SSE2-NEXT:    subb %al, %bl
944 ; SSE2-NEXT:    movb %bl, %al
945 ; SSE2-NEXT:    andb $51, %al
946 ; SSE2-NEXT:    shrb $2, %bl
947 ; SSE2-NEXT:    andb $51, %bl
948 ; SSE2-NEXT:    addb %al, %bl
949 ; SSE2-NEXT:    movb %bl, %al
950 ; SSE2-NEXT:    shrb $4, %al
951 ; SSE2-NEXT:    addb %bl, %al
952 ; SSE2-NEXT:    andb $15, %al
953 ; SSE2-NEXT:    movzbl %al, %eax
954 ; SSE2-NEXT:    movd %eax, %xmm1
955 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
956 ; SSE2-NEXT:    movb %dl, %al
957 ; SSE2-NEXT:    shrb %al
958 ; SSE2-NEXT:    andb $85, %al
959 ; SSE2-NEXT:    subb %al, %dl
960 ; SSE2-NEXT:    movb %dl, %al
961 ; SSE2-NEXT:    andb $51, %al
962 ; SSE2-NEXT:    shrb $2, %dl
963 ; SSE2-NEXT:    andb $51, %dl
964 ; SSE2-NEXT:    addb %al, %dl
965 ; SSE2-NEXT:    movb %dl, %al
966 ; SSE2-NEXT:    shrb $4, %al
967 ; SSE2-NEXT:    addb %dl, %al
968 ; SSE2-NEXT:    andb $15, %al
969 ; SSE2-NEXT:    movzbl %al, %eax
970 ; SSE2-NEXT:    movd %eax, %xmm2
971 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %r11b
972 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %dl
973 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %r8b
974 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
975 ; SSE2-NEXT:    movb %al, %bl
976 ; SSE2-NEXT:    shrb %bl
977 ; SSE2-NEXT:    andb $85, %bl
978 ; SSE2-NEXT:    subb %bl, %al
979 ; SSE2-NEXT:    movb %al, %bl
980 ; SSE2-NEXT:    andb $51, %bl
981 ; SSE2-NEXT:    shrb $2, %al
982 ; SSE2-NEXT:    andb $51, %al
983 ; SSE2-NEXT:    addb %bl, %al
984 ; SSE2-NEXT:    movb %al, %bl
985 ; SSE2-NEXT:    shrb $4, %bl
986 ; SSE2-NEXT:    addb %al, %bl
987 ; SSE2-NEXT:    andb $15, %bl
988 ; SSE2-NEXT:    movzbl %bl, %eax
989 ; SSE2-NEXT:    movd %eax, %xmm0
990 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
991 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
992 ; SSE2-NEXT:    movb %cl, %al
993 ; SSE2-NEXT:    shrb %al
994 ; SSE2-NEXT:    andb $85, %al
995 ; SSE2-NEXT:    subb %al, %cl
996 ; SSE2-NEXT:    movb %cl, %al
997 ; SSE2-NEXT:    andb $51, %al
998 ; SSE2-NEXT:    shrb $2, %cl
999 ; SSE2-NEXT:    andb $51, %cl
1000 ; SSE2-NEXT:    addb %al, %cl
1001 ; SSE2-NEXT:    movb %cl, %al
1002 ; SSE2-NEXT:    shrb $4, %al
1003 ; SSE2-NEXT:    addb %cl, %al
1004 ; SSE2-NEXT:    andb $15, %al
1005 ; SSE2-NEXT:    movzbl %al, %eax
1006 ; SSE2-NEXT:    movd %eax, %xmm1
1007 ; SSE2-NEXT:    movb %dl, %al
1008 ; SSE2-NEXT:    shrb %al
1009 ; SSE2-NEXT:    andb $85, %al
1010 ; SSE2-NEXT:    subb %al, %dl
1011 ; SSE2-NEXT:    movb %dl, %al
1012 ; SSE2-NEXT:    andb $51, %al
1013 ; SSE2-NEXT:    shrb $2, %dl
1014 ; SSE2-NEXT:    andb $51, %dl
1015 ; SSE2-NEXT:    addb %al, %dl
1016 ; SSE2-NEXT:    movb %dl, %al
1017 ; SSE2-NEXT:    shrb $4, %al
1018 ; SSE2-NEXT:    addb %dl, %al
1019 ; SSE2-NEXT:    andb $15, %al
1020 ; SSE2-NEXT:    movzbl %al, %eax
1021 ; SSE2-NEXT:    movd %eax, %xmm2
1022 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1023 ; SSE2-NEXT:    movb %bpl, %al
1024 ; SSE2-NEXT:    shrb %al
1025 ; SSE2-NEXT:    andb $85, %al
1026 ; SSE2-NEXT:    subb %al, %bpl
1027 ; SSE2-NEXT:    movb %bpl, %al
1028 ; SSE2-NEXT:    andb $51, %al
1029 ; SSE2-NEXT:    shrb $2, %bpl
1030 ; SSE2-NEXT:    andb $51, %bpl
1031 ; SSE2-NEXT:    addb %al, %bpl
1032 ; SSE2-NEXT:    movb %bpl, %al
1033 ; SSE2-NEXT:    shrb $4, %al
1034 ; SSE2-NEXT:    addb %bpl, %al
1035 ; SSE2-NEXT:    andb $15, %al
1036 ; SSE2-NEXT:    movzbl %al, %eax
1037 ; SSE2-NEXT:    movd %eax, %xmm3
1038 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1039 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %cl
1040 ; SSE2-NEXT:    movb %cl, %dl
1041 ; SSE2-NEXT:    shrb %dl
1042 ; SSE2-NEXT:    andb $85, %dl
1043 ; SSE2-NEXT:    subb %dl, %cl
1044 ; SSE2-NEXT:    movb %cl, %dl
1045 ; SSE2-NEXT:    andb $51, %dl
1046 ; SSE2-NEXT:    shrb $2, %cl
1047 ; SSE2-NEXT:    andb $51, %cl
1048 ; SSE2-NEXT:    addb %dl, %cl
1049 ; SSE2-NEXT:    movb %cl, %dl
1050 ; SSE2-NEXT:    shrb $4, %dl
1051 ; SSE2-NEXT:    addb %cl, %dl
1052 ; SSE2-NEXT:    andb $15, %dl
1053 ; SSE2-NEXT:    movzbl %dl, %ecx
1054 ; SSE2-NEXT:    movd %ecx, %xmm1
1055 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1056 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1057 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1058 ; SSE2-NEXT:    movb %r10b, %cl
1059 ; SSE2-NEXT:    shrb %cl
1060 ; SSE2-NEXT:    andb $85, %cl
1061 ; SSE2-NEXT:    subb %cl, %r10b
1062 ; SSE2-NEXT:    movb %r10b, %cl
1063 ; SSE2-NEXT:    andb $51, %cl
1064 ; SSE2-NEXT:    shrb $2, %r10b
1065 ; SSE2-NEXT:    andb $51, %r10b
1066 ; SSE2-NEXT:    addb %cl, %r10b
1067 ; SSE2-NEXT:    movb %r10b, %cl
1068 ; SSE2-NEXT:    shrb $4, %cl
1069 ; SSE2-NEXT:    addb %r10b, %cl
1070 ; SSE2-NEXT:    andb $15, %cl
1071 ; SSE2-NEXT:    movzbl %cl, %ecx
1072 ; SSE2-NEXT:    movd %ecx, %xmm2
1073 ; SSE2-NEXT:    movb %r11b, %cl
1074 ; SSE2-NEXT:    shrb %cl
1075 ; SSE2-NEXT:    andb $85, %cl
1076 ; SSE2-NEXT:    subb %cl, %r11b
1077 ; SSE2-NEXT:    movb %r11b, %cl
1078 ; SSE2-NEXT:    andb $51, %cl
1079 ; SSE2-NEXT:    shrb $2, %r11b
1080 ; SSE2-NEXT:    andb $51, %r11b
1081 ; SSE2-NEXT:    addb %cl, %r11b
1082 ; SSE2-NEXT:    movb %r11b, %cl
1083 ; SSE2-NEXT:    shrb $4, %cl
1084 ; SSE2-NEXT:    addb %r11b, %cl
1085 ; SSE2-NEXT:    andb $15, %cl
1086 ; SSE2-NEXT:    movzbl %cl, %ecx
1087 ; SSE2-NEXT:    movd %ecx, %xmm0
1088 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1089 ; SSE2-NEXT:    movb %r9b, %cl
1090 ; SSE2-NEXT:    shrb %cl
1091 ; SSE2-NEXT:    andb $85, %cl
1092 ; SSE2-NEXT:    subb %cl, %r9b
1093 ; SSE2-NEXT:    movb %r9b, %cl
1094 ; SSE2-NEXT:    andb $51, %cl
1095 ; SSE2-NEXT:    shrb $2, %r9b
1096 ; SSE2-NEXT:    andb $51, %r9b
1097 ; SSE2-NEXT:    addb %cl, %r9b
1098 ; SSE2-NEXT:    movb %r9b, %cl
1099 ; SSE2-NEXT:    shrb $4, %cl
1100 ; SSE2-NEXT:    addb %r9b, %cl
1101 ; SSE2-NEXT:    andb $15, %cl
1102 ; SSE2-NEXT:    movzbl %cl, %ecx
1103 ; SSE2-NEXT:    movd %ecx, %xmm3
1104 ; SSE2-NEXT:    movb %al, %cl
1105 ; SSE2-NEXT:    shrb %cl
1106 ; SSE2-NEXT:    andb $85, %cl
1107 ; SSE2-NEXT:    subb %cl, %al
1108 ; SSE2-NEXT:    movb %al, %cl
1109 ; SSE2-NEXT:    andb $51, %cl
1110 ; SSE2-NEXT:    shrb $2, %al
1111 ; SSE2-NEXT:    andb $51, %al
1112 ; SSE2-NEXT:    addb %cl, %al
1113 ; SSE2-NEXT:    movb %al, %cl
1114 ; SSE2-NEXT:    shrb $4, %cl
1115 ; SSE2-NEXT:    addb %al, %cl
1116 ; SSE2-NEXT:    andb $15, %cl
1117 ; SSE2-NEXT:    movzbl %cl, %eax
1118 ; SSE2-NEXT:    movd %eax, %xmm2
1119 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
1120 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1121 ; SSE2-NEXT:    movb %dil, %al
1122 ; SSE2-NEXT:    shrb %al
1123 ; SSE2-NEXT:    andb $85, %al
1124 ; SSE2-NEXT:    subb %al, %dil
1125 ; SSE2-NEXT:    movb %dil, %al
1126 ; SSE2-NEXT:    andb $51, %al
1127 ; SSE2-NEXT:    shrb $2, %dil
1128 ; SSE2-NEXT:    andb $51, %dil
1129 ; SSE2-NEXT:    addb %al, %dil
1130 ; SSE2-NEXT:    movb %dil, %al
1131 ; SSE2-NEXT:    shrb $4, %al
1132 ; SSE2-NEXT:    addb %dil, %al
1133 ; SSE2-NEXT:    andb $15, %al
1134 ; SSE2-NEXT:    movzbl %al, %eax
1135 ; SSE2-NEXT:    movd %eax, %xmm0
1136 ; SSE2-NEXT:    movb %r8b, %al
1137 ; SSE2-NEXT:    shrb %al
1138 ; SSE2-NEXT:    andb $85, %al
1139 ; SSE2-NEXT:    subb %al, %r8b
1140 ; SSE2-NEXT:    movb %r8b, %al
1141 ; SSE2-NEXT:    andb $51, %al
1142 ; SSE2-NEXT:    shrb $2, %r8b
1143 ; SSE2-NEXT:    andb $51, %r8b
1144 ; SSE2-NEXT:    addb %al, %r8b
1145 ; SSE2-NEXT:    movb %r8b, %al
1146 ; SSE2-NEXT:    shrb $4, %al
1147 ; SSE2-NEXT:    addb %r8b, %al
1148 ; SSE2-NEXT:    andb $15, %al
1149 ; SSE2-NEXT:    movzbl %al, %eax
1150 ; SSE2-NEXT:    movd %eax, %xmm3
1151 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1152 ; SSE2-NEXT:    movb %sil, %al
1153 ; SSE2-NEXT:    shrb %al
1154 ; SSE2-NEXT:    andb $85, %al
1155 ; SSE2-NEXT:    subb %al, %sil
1156 ; SSE2-NEXT:    movb %sil, %al
1157 ; SSE2-NEXT:    andb $51, %al
1158 ; SSE2-NEXT:    shrb $2, %sil
1159 ; SSE2-NEXT:    andb $51, %sil
1160 ; SSE2-NEXT:    addb %al, %sil
1161 ; SSE2-NEXT:    movb %sil, %al
1162 ; SSE2-NEXT:    shrb $4, %al
1163 ; SSE2-NEXT:    addb %sil, %al
1164 ; SSE2-NEXT:    andb $15, %al
1165 ; SSE2-NEXT:    movzbl %al, %eax
1166 ; SSE2-NEXT:    movd %eax, %xmm4
1167 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1168 ; SSE2-NEXT:    movb %al, %cl
1169 ; SSE2-NEXT:    shrb %cl
1170 ; SSE2-NEXT:    andb $85, %cl
1171 ; SSE2-NEXT:    subb %cl, %al
1172 ; SSE2-NEXT:    movb %al, %cl
1173 ; SSE2-NEXT:    andb $51, %cl
1174 ; SSE2-NEXT:    shrb $2, %al
1175 ; SSE2-NEXT:    andb $51, %al
1176 ; SSE2-NEXT:    addb %cl, %al
1177 ; SSE2-NEXT:    movb %al, %cl
1178 ; SSE2-NEXT:    shrb $4, %cl
1179 ; SSE2-NEXT:    addb %al, %cl
1180 ; SSE2-NEXT:    andb $15, %cl
1181 ; SSE2-NEXT:    movzbl %cl, %eax
1182 ; SSE2-NEXT:    movd %eax, %xmm0
1183 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1184 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1185 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1186 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1187 ; SSE2-NEXT:    popq %rbx
1188 ; SSE2-NEXT:    popq %rbp
1189 ; SSE2-NEXT:    retq
1190 ;
1191 ; SSE3-LABEL: testv16i8:
1192 ; SSE3:       # BB#0:
1193 ; SSE3-NEXT:    pushq %rbp
1194 ; SSE3-NEXT:  .Ltmp0:
1195 ; SSE3-NEXT:    .cfi_def_cfa_offset 16
1196 ; SSE3-NEXT:    pushq %rbx
1197 ; SSE3-NEXT:  .Ltmp1:
1198 ; SSE3-NEXT:    .cfi_def_cfa_offset 24
1199 ; SSE3-NEXT:  .Ltmp2:
1200 ; SSE3-NEXT:    .cfi_offset %rbx, -24
1201 ; SSE3-NEXT:  .Ltmp3:
1202 ; SSE3-NEXT:    .cfi_offset %rbp, -16
1203 ; SSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1204 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1205 ; SSE3-NEXT:    movb %al, %cl
1206 ; SSE3-NEXT:    shrb %cl
1207 ; SSE3-NEXT:    andb $85, %cl
1208 ; SSE3-NEXT:    subb %cl, %al
1209 ; SSE3-NEXT:    movb %al, %cl
1210 ; SSE3-NEXT:    andb $51, %cl
1211 ; SSE3-NEXT:    shrb $2, %al
1212 ; SSE3-NEXT:    andb $51, %al
1213 ; SSE3-NEXT:    addb %cl, %al
1214 ; SSE3-NEXT:    movb %al, %cl
1215 ; SSE3-NEXT:    shrb $4, %cl
1216 ; SSE3-NEXT:    addb %al, %cl
1217 ; SSE3-NEXT:    andb $15, %cl
1218 ; SSE3-NEXT:    movzbl %cl, %eax
1219 ; SSE3-NEXT:    movd %eax, %xmm0
1220 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %r10b
1221 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %cl
1222 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %dil
1223 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %dl
1224 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %r9b
1225 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %bpl
1226 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %sil
1227 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %bl
1228 ; SSE3-NEXT:    movb %bl, %al
1229 ; SSE3-NEXT:    shrb %al
1230 ; SSE3-NEXT:    andb $85, %al
1231 ; SSE3-NEXT:    subb %al, %bl
1232 ; SSE3-NEXT:    movb %bl, %al
1233 ; SSE3-NEXT:    andb $51, %al
1234 ; SSE3-NEXT:    shrb $2, %bl
1235 ; SSE3-NEXT:    andb $51, %bl
1236 ; SSE3-NEXT:    addb %al, %bl
1237 ; SSE3-NEXT:    movb %bl, %al
1238 ; SSE3-NEXT:    shrb $4, %al
1239 ; SSE3-NEXT:    addb %bl, %al
1240 ; SSE3-NEXT:    andb $15, %al
1241 ; SSE3-NEXT:    movzbl %al, %eax
1242 ; SSE3-NEXT:    movd %eax, %xmm1
1243 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1244 ; SSE3-NEXT:    movb %dl, %al
1245 ; SSE3-NEXT:    shrb %al
1246 ; SSE3-NEXT:    andb $85, %al
1247 ; SSE3-NEXT:    subb %al, %dl
1248 ; SSE3-NEXT:    movb %dl, %al
1249 ; SSE3-NEXT:    andb $51, %al
1250 ; SSE3-NEXT:    shrb $2, %dl
1251 ; SSE3-NEXT:    andb $51, %dl
1252 ; SSE3-NEXT:    addb %al, %dl
1253 ; SSE3-NEXT:    movb %dl, %al
1254 ; SSE3-NEXT:    shrb $4, %al
1255 ; SSE3-NEXT:    addb %dl, %al
1256 ; SSE3-NEXT:    andb $15, %al
1257 ; SSE3-NEXT:    movzbl %al, %eax
1258 ; SSE3-NEXT:    movd %eax, %xmm2
1259 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %r11b
1260 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %dl
1261 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %r8b
1262 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1263 ; SSE3-NEXT:    movb %al, %bl
1264 ; SSE3-NEXT:    shrb %bl
1265 ; SSE3-NEXT:    andb $85, %bl
1266 ; SSE3-NEXT:    subb %bl, %al
1267 ; SSE3-NEXT:    movb %al, %bl
1268 ; SSE3-NEXT:    andb $51, %bl
1269 ; SSE3-NEXT:    shrb $2, %al
1270 ; SSE3-NEXT:    andb $51, %al
1271 ; SSE3-NEXT:    addb %bl, %al
1272 ; SSE3-NEXT:    movb %al, %bl
1273 ; SSE3-NEXT:    shrb $4, %bl
1274 ; SSE3-NEXT:    addb %al, %bl
1275 ; SSE3-NEXT:    andb $15, %bl
1276 ; SSE3-NEXT:    movzbl %bl, %eax
1277 ; SSE3-NEXT:    movd %eax, %xmm0
1278 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1279 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1280 ; SSE3-NEXT:    movb %cl, %al
1281 ; SSE3-NEXT:    shrb %al
1282 ; SSE3-NEXT:    andb $85, %al
1283 ; SSE3-NEXT:    subb %al, %cl
1284 ; SSE3-NEXT:    movb %cl, %al
1285 ; SSE3-NEXT:    andb $51, %al
1286 ; SSE3-NEXT:    shrb $2, %cl
1287 ; SSE3-NEXT:    andb $51, %cl
1288 ; SSE3-NEXT:    addb %al, %cl
1289 ; SSE3-NEXT:    movb %cl, %al
1290 ; SSE3-NEXT:    shrb $4, %al
1291 ; SSE3-NEXT:    addb %cl, %al
1292 ; SSE3-NEXT:    andb $15, %al
1293 ; SSE3-NEXT:    movzbl %al, %eax
1294 ; SSE3-NEXT:    movd %eax, %xmm1
1295 ; SSE3-NEXT:    movb %dl, %al
1296 ; SSE3-NEXT:    shrb %al
1297 ; SSE3-NEXT:    andb $85, %al
1298 ; SSE3-NEXT:    subb %al, %dl
1299 ; SSE3-NEXT:    movb %dl, %al
1300 ; SSE3-NEXT:    andb $51, %al
1301 ; SSE3-NEXT:    shrb $2, %dl
1302 ; SSE3-NEXT:    andb $51, %dl
1303 ; SSE3-NEXT:    addb %al, %dl
1304 ; SSE3-NEXT:    movb %dl, %al
1305 ; SSE3-NEXT:    shrb $4, %al
1306 ; SSE3-NEXT:    addb %dl, %al
1307 ; SSE3-NEXT:    andb $15, %al
1308 ; SSE3-NEXT:    movzbl %al, %eax
1309 ; SSE3-NEXT:    movd %eax, %xmm2
1310 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1311 ; SSE3-NEXT:    movb %bpl, %al
1312 ; SSE3-NEXT:    shrb %al
1313 ; SSE3-NEXT:    andb $85, %al
1314 ; SSE3-NEXT:    subb %al, %bpl
1315 ; SSE3-NEXT:    movb %bpl, %al
1316 ; SSE3-NEXT:    andb $51, %al
1317 ; SSE3-NEXT:    shrb $2, %bpl
1318 ; SSE3-NEXT:    andb $51, %bpl
1319 ; SSE3-NEXT:    addb %al, %bpl
1320 ; SSE3-NEXT:    movb %bpl, %al
1321 ; SSE3-NEXT:    shrb $4, %al
1322 ; SSE3-NEXT:    addb %bpl, %al
1323 ; SSE3-NEXT:    andb $15, %al
1324 ; SSE3-NEXT:    movzbl %al, %eax
1325 ; SSE3-NEXT:    movd %eax, %xmm3
1326 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1327 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %cl
1328 ; SSE3-NEXT:    movb %cl, %dl
1329 ; SSE3-NEXT:    shrb %dl
1330 ; SSE3-NEXT:    andb $85, %dl
1331 ; SSE3-NEXT:    subb %dl, %cl
1332 ; SSE3-NEXT:    movb %cl, %dl
1333 ; SSE3-NEXT:    andb $51, %dl
1334 ; SSE3-NEXT:    shrb $2, %cl
1335 ; SSE3-NEXT:    andb $51, %cl
1336 ; SSE3-NEXT:    addb %dl, %cl
1337 ; SSE3-NEXT:    movb %cl, %dl
1338 ; SSE3-NEXT:    shrb $4, %dl
1339 ; SSE3-NEXT:    addb %cl, %dl
1340 ; SSE3-NEXT:    andb $15, %dl
1341 ; SSE3-NEXT:    movzbl %dl, %ecx
1342 ; SSE3-NEXT:    movd %ecx, %xmm1
1343 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1344 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1345 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1346 ; SSE3-NEXT:    movb %r10b, %cl
1347 ; SSE3-NEXT:    shrb %cl
1348 ; SSE3-NEXT:    andb $85, %cl
1349 ; SSE3-NEXT:    subb %cl, %r10b
1350 ; SSE3-NEXT:    movb %r10b, %cl
1351 ; SSE3-NEXT:    andb $51, %cl
1352 ; SSE3-NEXT:    shrb $2, %r10b
1353 ; SSE3-NEXT:    andb $51, %r10b
1354 ; SSE3-NEXT:    addb %cl, %r10b
1355 ; SSE3-NEXT:    movb %r10b, %cl
1356 ; SSE3-NEXT:    shrb $4, %cl
1357 ; SSE3-NEXT:    addb %r10b, %cl
1358 ; SSE3-NEXT:    andb $15, %cl
1359 ; SSE3-NEXT:    movzbl %cl, %ecx
1360 ; SSE3-NEXT:    movd %ecx, %xmm2
1361 ; SSE3-NEXT:    movb %r11b, %cl
1362 ; SSE3-NEXT:    shrb %cl
1363 ; SSE3-NEXT:    andb $85, %cl
1364 ; SSE3-NEXT:    subb %cl, %r11b
1365 ; SSE3-NEXT:    movb %r11b, %cl
1366 ; SSE3-NEXT:    andb $51, %cl
1367 ; SSE3-NEXT:    shrb $2, %r11b
1368 ; SSE3-NEXT:    andb $51, %r11b
1369 ; SSE3-NEXT:    addb %cl, %r11b
1370 ; SSE3-NEXT:    movb %r11b, %cl
1371 ; SSE3-NEXT:    shrb $4, %cl
1372 ; SSE3-NEXT:    addb %r11b, %cl
1373 ; SSE3-NEXT:    andb $15, %cl
1374 ; SSE3-NEXT:    movzbl %cl, %ecx
1375 ; SSE3-NEXT:    movd %ecx, %xmm0
1376 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1377 ; SSE3-NEXT:    movb %r9b, %cl
1378 ; SSE3-NEXT:    shrb %cl
1379 ; SSE3-NEXT:    andb $85, %cl
1380 ; SSE3-NEXT:    subb %cl, %r9b
1381 ; SSE3-NEXT:    movb %r9b, %cl
1382 ; SSE3-NEXT:    andb $51, %cl
1383 ; SSE3-NEXT:    shrb $2, %r9b
1384 ; SSE3-NEXT:    andb $51, %r9b
1385 ; SSE3-NEXT:    addb %cl, %r9b
1386 ; SSE3-NEXT:    movb %r9b, %cl
1387 ; SSE3-NEXT:    shrb $4, %cl
1388 ; SSE3-NEXT:    addb %r9b, %cl
1389 ; SSE3-NEXT:    andb $15, %cl
1390 ; SSE3-NEXT:    movzbl %cl, %ecx
1391 ; SSE3-NEXT:    movd %ecx, %xmm3
1392 ; SSE3-NEXT:    movb %al, %cl
1393 ; SSE3-NEXT:    shrb %cl
1394 ; SSE3-NEXT:    andb $85, %cl
1395 ; SSE3-NEXT:    subb %cl, %al
1396 ; SSE3-NEXT:    movb %al, %cl
1397 ; SSE3-NEXT:    andb $51, %cl
1398 ; SSE3-NEXT:    shrb $2, %al
1399 ; SSE3-NEXT:    andb $51, %al
1400 ; SSE3-NEXT:    addb %cl, %al
1401 ; SSE3-NEXT:    movb %al, %cl
1402 ; SSE3-NEXT:    shrb $4, %cl
1403 ; SSE3-NEXT:    addb %al, %cl
1404 ; SSE3-NEXT:    andb $15, %cl
1405 ; SSE3-NEXT:    movzbl %cl, %eax
1406 ; SSE3-NEXT:    movd %eax, %xmm2
1407 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
1408 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1409 ; SSE3-NEXT:    movb %dil, %al
1410 ; SSE3-NEXT:    shrb %al
1411 ; SSE3-NEXT:    andb $85, %al
1412 ; SSE3-NEXT:    subb %al, %dil
1413 ; SSE3-NEXT:    movb %dil, %al
1414 ; SSE3-NEXT:    andb $51, %al
1415 ; SSE3-NEXT:    shrb $2, %dil
1416 ; SSE3-NEXT:    andb $51, %dil
1417 ; SSE3-NEXT:    addb %al, %dil
1418 ; SSE3-NEXT:    movb %dil, %al
1419 ; SSE3-NEXT:    shrb $4, %al
1420 ; SSE3-NEXT:    addb %dil, %al
1421 ; SSE3-NEXT:    andb $15, %al
1422 ; SSE3-NEXT:    movzbl %al, %eax
1423 ; SSE3-NEXT:    movd %eax, %xmm0
1424 ; SSE3-NEXT:    movb %r8b, %al
1425 ; SSE3-NEXT:    shrb %al
1426 ; SSE3-NEXT:    andb $85, %al
1427 ; SSE3-NEXT:    subb %al, %r8b
1428 ; SSE3-NEXT:    movb %r8b, %al
1429 ; SSE3-NEXT:    andb $51, %al
1430 ; SSE3-NEXT:    shrb $2, %r8b
1431 ; SSE3-NEXT:    andb $51, %r8b
1432 ; SSE3-NEXT:    addb %al, %r8b
1433 ; SSE3-NEXT:    movb %r8b, %al
1434 ; SSE3-NEXT:    shrb $4, %al
1435 ; SSE3-NEXT:    addb %r8b, %al
1436 ; SSE3-NEXT:    andb $15, %al
1437 ; SSE3-NEXT:    movzbl %al, %eax
1438 ; SSE3-NEXT:    movd %eax, %xmm3
1439 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1440 ; SSE3-NEXT:    movb %sil, %al
1441 ; SSE3-NEXT:    shrb %al
1442 ; SSE3-NEXT:    andb $85, %al
1443 ; SSE3-NEXT:    subb %al, %sil
1444 ; SSE3-NEXT:    movb %sil, %al
1445 ; SSE3-NEXT:    andb $51, %al
1446 ; SSE3-NEXT:    shrb $2, %sil
1447 ; SSE3-NEXT:    andb $51, %sil
1448 ; SSE3-NEXT:    addb %al, %sil
1449 ; SSE3-NEXT:    movb %sil, %al
1450 ; SSE3-NEXT:    shrb $4, %al
1451 ; SSE3-NEXT:    addb %sil, %al
1452 ; SSE3-NEXT:    andb $15, %al
1453 ; SSE3-NEXT:    movzbl %al, %eax
1454 ; SSE3-NEXT:    movd %eax, %xmm4
1455 ; SSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1456 ; SSE3-NEXT:    movb %al, %cl
1457 ; SSE3-NEXT:    shrb %cl
1458 ; SSE3-NEXT:    andb $85, %cl
1459 ; SSE3-NEXT:    subb %cl, %al
1460 ; SSE3-NEXT:    movb %al, %cl
1461 ; SSE3-NEXT:    andb $51, %cl
1462 ; SSE3-NEXT:    shrb $2, %al
1463 ; SSE3-NEXT:    andb $51, %al
1464 ; SSE3-NEXT:    addb %cl, %al
1465 ; SSE3-NEXT:    movb %al, %cl
1466 ; SSE3-NEXT:    shrb $4, %cl
1467 ; SSE3-NEXT:    addb %al, %cl
1468 ; SSE3-NEXT:    andb $15, %cl
1469 ; SSE3-NEXT:    movzbl %cl, %eax
1470 ; SSE3-NEXT:    movd %eax, %xmm0
1471 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1472 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1473 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1474 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1475 ; SSE3-NEXT:    popq %rbx
1476 ; SSE3-NEXT:    popq %rbp
1477 ; SSE3-NEXT:    retq
1478 ;
1479 ; SSSE3-LABEL: testv16i8:
1480 ; SSSE3:       # BB#0:
1481 ; SSSE3-NEXT:    pushq %rbp
1482 ; SSSE3-NEXT:  .Ltmp0:
1483 ; SSSE3-NEXT:    .cfi_def_cfa_offset 16
1484 ; SSSE3-NEXT:    pushq %rbx
1485 ; SSSE3-NEXT:  .Ltmp1:
1486 ; SSSE3-NEXT:    .cfi_def_cfa_offset 24
1487 ; SSSE3-NEXT:  .Ltmp2:
1488 ; SSSE3-NEXT:    .cfi_offset %rbx, -24
1489 ; SSSE3-NEXT:  .Ltmp3:
1490 ; SSSE3-NEXT:    .cfi_offset %rbp, -16
1491 ; SSSE3-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1492 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1493 ; SSSE3-NEXT:    movb %al, %cl
1494 ; SSSE3-NEXT:    shrb %cl
1495 ; SSSE3-NEXT:    andb $85, %cl
1496 ; SSSE3-NEXT:    subb %cl, %al
1497 ; SSSE3-NEXT:    movb %al, %cl
1498 ; SSSE3-NEXT:    andb $51, %cl
1499 ; SSSE3-NEXT:    shrb $2, %al
1500 ; SSSE3-NEXT:    andb $51, %al
1501 ; SSSE3-NEXT:    addb %cl, %al
1502 ; SSSE3-NEXT:    movb %al, %cl
1503 ; SSSE3-NEXT:    shrb $4, %cl
1504 ; SSSE3-NEXT:    addb %al, %cl
1505 ; SSSE3-NEXT:    andb $15, %cl
1506 ; SSSE3-NEXT:    movzbl %cl, %eax
1507 ; SSSE3-NEXT:    movd %eax, %xmm0
1508 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %r10b
1509 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %cl
1510 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %dil
1511 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %dl
1512 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %r9b
1513 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %bpl
1514 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %sil
1515 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %bl
1516 ; SSSE3-NEXT:    movb %bl, %al
1517 ; SSSE3-NEXT:    shrb %al
1518 ; SSSE3-NEXT:    andb $85, %al
1519 ; SSSE3-NEXT:    subb %al, %bl
1520 ; SSSE3-NEXT:    movb %bl, %al
1521 ; SSSE3-NEXT:    andb $51, %al
1522 ; SSSE3-NEXT:    shrb $2, %bl
1523 ; SSSE3-NEXT:    andb $51, %bl
1524 ; SSSE3-NEXT:    addb %al, %bl
1525 ; SSSE3-NEXT:    movb %bl, %al
1526 ; SSSE3-NEXT:    shrb $4, %al
1527 ; SSSE3-NEXT:    addb %bl, %al
1528 ; SSSE3-NEXT:    andb $15, %al
1529 ; SSSE3-NEXT:    movzbl %al, %eax
1530 ; SSSE3-NEXT:    movd %eax, %xmm1
1531 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1532 ; SSSE3-NEXT:    movb %dl, %al
1533 ; SSSE3-NEXT:    shrb %al
1534 ; SSSE3-NEXT:    andb $85, %al
1535 ; SSSE3-NEXT:    subb %al, %dl
1536 ; SSSE3-NEXT:    movb %dl, %al
1537 ; SSSE3-NEXT:    andb $51, %al
1538 ; SSSE3-NEXT:    shrb $2, %dl
1539 ; SSSE3-NEXT:    andb $51, %dl
1540 ; SSSE3-NEXT:    addb %al, %dl
1541 ; SSSE3-NEXT:    movb %dl, %al
1542 ; SSSE3-NEXT:    shrb $4, %al
1543 ; SSSE3-NEXT:    addb %dl, %al
1544 ; SSSE3-NEXT:    andb $15, %al
1545 ; SSSE3-NEXT:    movzbl %al, %eax
1546 ; SSSE3-NEXT:    movd %eax, %xmm2
1547 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %r11b
1548 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %dl
1549 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %r8b
1550 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1551 ; SSSE3-NEXT:    movb %al, %bl
1552 ; SSSE3-NEXT:    shrb %bl
1553 ; SSSE3-NEXT:    andb $85, %bl
1554 ; SSSE3-NEXT:    subb %bl, %al
1555 ; SSSE3-NEXT:    movb %al, %bl
1556 ; SSSE3-NEXT:    andb $51, %bl
1557 ; SSSE3-NEXT:    shrb $2, %al
1558 ; SSSE3-NEXT:    andb $51, %al
1559 ; SSSE3-NEXT:    addb %bl, %al
1560 ; SSSE3-NEXT:    movb %al, %bl
1561 ; SSSE3-NEXT:    shrb $4, %bl
1562 ; SSSE3-NEXT:    addb %al, %bl
1563 ; SSSE3-NEXT:    andb $15, %bl
1564 ; SSSE3-NEXT:    movzbl %bl, %eax
1565 ; SSSE3-NEXT:    movd %eax, %xmm0
1566 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1567 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1568 ; SSSE3-NEXT:    movb %cl, %al
1569 ; SSSE3-NEXT:    shrb %al
1570 ; SSSE3-NEXT:    andb $85, %al
1571 ; SSSE3-NEXT:    subb %al, %cl
1572 ; SSSE3-NEXT:    movb %cl, %al
1573 ; SSSE3-NEXT:    andb $51, %al
1574 ; SSSE3-NEXT:    shrb $2, %cl
1575 ; SSSE3-NEXT:    andb $51, %cl
1576 ; SSSE3-NEXT:    addb %al, %cl
1577 ; SSSE3-NEXT:    movb %cl, %al
1578 ; SSSE3-NEXT:    shrb $4, %al
1579 ; SSSE3-NEXT:    addb %cl, %al
1580 ; SSSE3-NEXT:    andb $15, %al
1581 ; SSSE3-NEXT:    movzbl %al, %eax
1582 ; SSSE3-NEXT:    movd %eax, %xmm1
1583 ; SSSE3-NEXT:    movb %dl, %al
1584 ; SSSE3-NEXT:    shrb %al
1585 ; SSSE3-NEXT:    andb $85, %al
1586 ; SSSE3-NEXT:    subb %al, %dl
1587 ; SSSE3-NEXT:    movb %dl, %al
1588 ; SSSE3-NEXT:    andb $51, %al
1589 ; SSSE3-NEXT:    shrb $2, %dl
1590 ; SSSE3-NEXT:    andb $51, %dl
1591 ; SSSE3-NEXT:    addb %al, %dl
1592 ; SSSE3-NEXT:    movb %dl, %al
1593 ; SSSE3-NEXT:    shrb $4, %al
1594 ; SSSE3-NEXT:    addb %dl, %al
1595 ; SSSE3-NEXT:    andb $15, %al
1596 ; SSSE3-NEXT:    movzbl %al, %eax
1597 ; SSSE3-NEXT:    movd %eax, %xmm2
1598 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1599 ; SSSE3-NEXT:    movb %bpl, %al
1600 ; SSSE3-NEXT:    shrb %al
1601 ; SSSE3-NEXT:    andb $85, %al
1602 ; SSSE3-NEXT:    subb %al, %bpl
1603 ; SSSE3-NEXT:    movb %bpl, %al
1604 ; SSSE3-NEXT:    andb $51, %al
1605 ; SSSE3-NEXT:    shrb $2, %bpl
1606 ; SSSE3-NEXT:    andb $51, %bpl
1607 ; SSSE3-NEXT:    addb %al, %bpl
1608 ; SSSE3-NEXT:    movb %bpl, %al
1609 ; SSSE3-NEXT:    shrb $4, %al
1610 ; SSSE3-NEXT:    addb %bpl, %al
1611 ; SSSE3-NEXT:    andb $15, %al
1612 ; SSSE3-NEXT:    movzbl %al, %eax
1613 ; SSSE3-NEXT:    movd %eax, %xmm3
1614 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1615 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %cl
1616 ; SSSE3-NEXT:    movb %cl, %dl
1617 ; SSSE3-NEXT:    shrb %dl
1618 ; SSSE3-NEXT:    andb $85, %dl
1619 ; SSSE3-NEXT:    subb %dl, %cl
1620 ; SSSE3-NEXT:    movb %cl, %dl
1621 ; SSSE3-NEXT:    andb $51, %dl
1622 ; SSSE3-NEXT:    shrb $2, %cl
1623 ; SSSE3-NEXT:    andb $51, %cl
1624 ; SSSE3-NEXT:    addb %dl, %cl
1625 ; SSSE3-NEXT:    movb %cl, %dl
1626 ; SSSE3-NEXT:    shrb $4, %dl
1627 ; SSSE3-NEXT:    addb %cl, %dl
1628 ; SSSE3-NEXT:    andb $15, %dl
1629 ; SSSE3-NEXT:    movzbl %dl, %ecx
1630 ; SSSE3-NEXT:    movd %ecx, %xmm1
1631 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1632 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1633 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1634 ; SSSE3-NEXT:    movb %r10b, %cl
1635 ; SSSE3-NEXT:    shrb %cl
1636 ; SSSE3-NEXT:    andb $85, %cl
1637 ; SSSE3-NEXT:    subb %cl, %r10b
1638 ; SSSE3-NEXT:    movb %r10b, %cl
1639 ; SSSE3-NEXT:    andb $51, %cl
1640 ; SSSE3-NEXT:    shrb $2, %r10b
1641 ; SSSE3-NEXT:    andb $51, %r10b
1642 ; SSSE3-NEXT:    addb %cl, %r10b
1643 ; SSSE3-NEXT:    movb %r10b, %cl
1644 ; SSSE3-NEXT:    shrb $4, %cl
1645 ; SSSE3-NEXT:    addb %r10b, %cl
1646 ; SSSE3-NEXT:    andb $15, %cl
1647 ; SSSE3-NEXT:    movzbl %cl, %ecx
1648 ; SSSE3-NEXT:    movd %ecx, %xmm2
1649 ; SSSE3-NEXT:    movb %r11b, %cl
1650 ; SSSE3-NEXT:    shrb %cl
1651 ; SSSE3-NEXT:    andb $85, %cl
1652 ; SSSE3-NEXT:    subb %cl, %r11b
1653 ; SSSE3-NEXT:    movb %r11b, %cl
1654 ; SSSE3-NEXT:    andb $51, %cl
1655 ; SSSE3-NEXT:    shrb $2, %r11b
1656 ; SSSE3-NEXT:    andb $51, %r11b
1657 ; SSSE3-NEXT:    addb %cl, %r11b
1658 ; SSSE3-NEXT:    movb %r11b, %cl
1659 ; SSSE3-NEXT:    shrb $4, %cl
1660 ; SSSE3-NEXT:    addb %r11b, %cl
1661 ; SSSE3-NEXT:    andb $15, %cl
1662 ; SSSE3-NEXT:    movzbl %cl, %ecx
1663 ; SSSE3-NEXT:    movd %ecx, %xmm0
1664 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1665 ; SSSE3-NEXT:    movb %r9b, %cl
1666 ; SSSE3-NEXT:    shrb %cl
1667 ; SSSE3-NEXT:    andb $85, %cl
1668 ; SSSE3-NEXT:    subb %cl, %r9b
1669 ; SSSE3-NEXT:    movb %r9b, %cl
1670 ; SSSE3-NEXT:    andb $51, %cl
1671 ; SSSE3-NEXT:    shrb $2, %r9b
1672 ; SSSE3-NEXT:    andb $51, %r9b
1673 ; SSSE3-NEXT:    addb %cl, %r9b
1674 ; SSSE3-NEXT:    movb %r9b, %cl
1675 ; SSSE3-NEXT:    shrb $4, %cl
1676 ; SSSE3-NEXT:    addb %r9b, %cl
1677 ; SSSE3-NEXT:    andb $15, %cl
1678 ; SSSE3-NEXT:    movzbl %cl, %ecx
1679 ; SSSE3-NEXT:    movd %ecx, %xmm3
1680 ; SSSE3-NEXT:    movb %al, %cl
1681 ; SSSE3-NEXT:    shrb %cl
1682 ; SSSE3-NEXT:    andb $85, %cl
1683 ; SSSE3-NEXT:    subb %cl, %al
1684 ; SSSE3-NEXT:    movb %al, %cl
1685 ; SSSE3-NEXT:    andb $51, %cl
1686 ; SSSE3-NEXT:    shrb $2, %al
1687 ; SSSE3-NEXT:    andb $51, %al
1688 ; SSSE3-NEXT:    addb %cl, %al
1689 ; SSSE3-NEXT:    movb %al, %cl
1690 ; SSSE3-NEXT:    shrb $4, %cl
1691 ; SSSE3-NEXT:    addb %al, %cl
1692 ; SSSE3-NEXT:    andb $15, %cl
1693 ; SSSE3-NEXT:    movzbl %cl, %eax
1694 ; SSSE3-NEXT:    movd %eax, %xmm2
1695 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
1696 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1697 ; SSSE3-NEXT:    movb %dil, %al
1698 ; SSSE3-NEXT:    shrb %al
1699 ; SSSE3-NEXT:    andb $85, %al
1700 ; SSSE3-NEXT:    subb %al, %dil
1701 ; SSSE3-NEXT:    movb %dil, %al
1702 ; SSSE3-NEXT:    andb $51, %al
1703 ; SSSE3-NEXT:    shrb $2, %dil
1704 ; SSSE3-NEXT:    andb $51, %dil
1705 ; SSSE3-NEXT:    addb %al, %dil
1706 ; SSSE3-NEXT:    movb %dil, %al
1707 ; SSSE3-NEXT:    shrb $4, %al
1708 ; SSSE3-NEXT:    addb %dil, %al
1709 ; SSSE3-NEXT:    andb $15, %al
1710 ; SSSE3-NEXT:    movzbl %al, %eax
1711 ; SSSE3-NEXT:    movd %eax, %xmm0
1712 ; SSSE3-NEXT:    movb %r8b, %al
1713 ; SSSE3-NEXT:    shrb %al
1714 ; SSSE3-NEXT:    andb $85, %al
1715 ; SSSE3-NEXT:    subb %al, %r8b
1716 ; SSSE3-NEXT:    movb %r8b, %al
1717 ; SSSE3-NEXT:    andb $51, %al
1718 ; SSSE3-NEXT:    shrb $2, %r8b
1719 ; SSSE3-NEXT:    andb $51, %r8b
1720 ; SSSE3-NEXT:    addb %al, %r8b
1721 ; SSSE3-NEXT:    movb %r8b, %al
1722 ; SSSE3-NEXT:    shrb $4, %al
1723 ; SSSE3-NEXT:    addb %r8b, %al
1724 ; SSSE3-NEXT:    andb $15, %al
1725 ; SSSE3-NEXT:    movzbl %al, %eax
1726 ; SSSE3-NEXT:    movd %eax, %xmm3
1727 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1728 ; SSSE3-NEXT:    movb %sil, %al
1729 ; SSSE3-NEXT:    shrb %al
1730 ; SSSE3-NEXT:    andb $85, %al
1731 ; SSSE3-NEXT:    subb %al, %sil
1732 ; SSSE3-NEXT:    movb %sil, %al
1733 ; SSSE3-NEXT:    andb $51, %al
1734 ; SSSE3-NEXT:    shrb $2, %sil
1735 ; SSSE3-NEXT:    andb $51, %sil
1736 ; SSSE3-NEXT:    addb %al, %sil
1737 ; SSSE3-NEXT:    movb %sil, %al
1738 ; SSSE3-NEXT:    shrb $4, %al
1739 ; SSSE3-NEXT:    addb %sil, %al
1740 ; SSSE3-NEXT:    andb $15, %al
1741 ; SSSE3-NEXT:    movzbl %al, %eax
1742 ; SSSE3-NEXT:    movd %eax, %xmm4
1743 ; SSSE3-NEXT:    movb -{{[0-9]+}}(%rsp), %al
1744 ; SSSE3-NEXT:    movb %al, %cl
1745 ; SSSE3-NEXT:    shrb %cl
1746 ; SSSE3-NEXT:    andb $85, %cl
1747 ; SSSE3-NEXT:    subb %cl, %al
1748 ; SSSE3-NEXT:    movb %al, %cl
1749 ; SSSE3-NEXT:    andb $51, %cl
1750 ; SSSE3-NEXT:    shrb $2, %al
1751 ; SSSE3-NEXT:    andb $51, %al
1752 ; SSSE3-NEXT:    addb %cl, %al
1753 ; SSSE3-NEXT:    movb %al, %cl
1754 ; SSSE3-NEXT:    shrb $4, %cl
1755 ; SSSE3-NEXT:    addb %al, %cl
1756 ; SSSE3-NEXT:    andb $15, %cl
1757 ; SSSE3-NEXT:    movzbl %cl, %eax
1758 ; SSSE3-NEXT:    movd %eax, %xmm0
1759 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1760 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1761 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1762 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1763 ; SSSE3-NEXT:    popq %rbx
1764 ; SSSE3-NEXT:    popq %rbp
1765 ; SSSE3-NEXT:    retq
1766 ;
1767 ; SSE41-LABEL: testv16i8:
1768 ; SSE41:       # BB#0:
1769 ; SSE41-NEXT:    pextrb $1, %xmm0, %eax
1770 ; SSE41-NEXT:    movb %al, %cl
1771 ; SSE41-NEXT:    shrb %cl
1772 ; SSE41-NEXT:    andb $85, %cl
1773 ; SSE41-NEXT:    subb %cl, %al
1774 ; SSE41-NEXT:    movb %al, %cl
1775 ; SSE41-NEXT:    andb $51, %cl
1776 ; SSE41-NEXT:    shrb $2, %al
1777 ; SSE41-NEXT:    andb $51, %al
1778 ; SSE41-NEXT:    addb %cl, %al
1779 ; SSE41-NEXT:    movb %al, %cl
1780 ; SSE41-NEXT:    shrb $4, %cl
1781 ; SSE41-NEXT:    addb %al, %cl
1782 ; SSE41-NEXT:    andb $15, %cl
1783 ; SSE41-NEXT:    movzbl %cl, %eax
1784 ; SSE41-NEXT:    pextrb $0, %xmm0, %ecx
1785 ; SSE41-NEXT:    movb %cl, %dl
1786 ; SSE41-NEXT:    shrb %dl
1787 ; SSE41-NEXT:    andb $85, %dl
1788 ; SSE41-NEXT:    subb %dl, %cl
1789 ; SSE41-NEXT:    movb %cl, %dl
1790 ; SSE41-NEXT:    andb $51, %dl
1791 ; SSE41-NEXT:    shrb $2, %cl
1792 ; SSE41-NEXT:    andb $51, %cl
1793 ; SSE41-NEXT:    addb %dl, %cl
1794 ; SSE41-NEXT:    movb %cl, %dl
1795 ; SSE41-NEXT:    shrb $4, %dl
1796 ; SSE41-NEXT:    addb %cl, %dl
1797 ; SSE41-NEXT:    andb $15, %dl
1798 ; SSE41-NEXT:    movzbl %dl, %ecx
1799 ; SSE41-NEXT:    movd %ecx, %xmm1
1800 ; SSE41-NEXT:    pinsrb $1, %eax, %xmm1
1801 ; SSE41-NEXT:    pextrb $2, %xmm0, %eax
1802 ; SSE41-NEXT:    movb %al, %cl
1803 ; SSE41-NEXT:    shrb %cl
1804 ; SSE41-NEXT:    andb $85, %cl
1805 ; SSE41-NEXT:    subb %cl, %al
1806 ; SSE41-NEXT:    movb %al, %cl
1807 ; SSE41-NEXT:    andb $51, %cl
1808 ; SSE41-NEXT:    shrb $2, %al
1809 ; SSE41-NEXT:    andb $51, %al
1810 ; SSE41-NEXT:    addb %cl, %al
1811 ; SSE41-NEXT:    movb %al, %cl
1812 ; SSE41-NEXT:    shrb $4, %cl
1813 ; SSE41-NEXT:    addb %al, %cl
1814 ; SSE41-NEXT:    andb $15, %cl
1815 ; SSE41-NEXT:    movzbl %cl, %eax
1816 ; SSE41-NEXT:    pinsrb $2, %eax, %xmm1
1817 ; SSE41-NEXT:    pextrb $3, %xmm0, %eax
1818 ; SSE41-NEXT:    movb %al, %cl
1819 ; SSE41-NEXT:    shrb %cl
1820 ; SSE41-NEXT:    andb $85, %cl
1821 ; SSE41-NEXT:    subb %cl, %al
1822 ; SSE41-NEXT:    movb %al, %cl
1823 ; SSE41-NEXT:    andb $51, %cl
1824 ; SSE41-NEXT:    shrb $2, %al
1825 ; SSE41-NEXT:    andb $51, %al
1826 ; SSE41-NEXT:    addb %cl, %al
1827 ; SSE41-NEXT:    movb %al, %cl
1828 ; SSE41-NEXT:    shrb $4, %cl
1829 ; SSE41-NEXT:    addb %al, %cl
1830 ; SSE41-NEXT:    andb $15, %cl
1831 ; SSE41-NEXT:    movzbl %cl, %eax
1832 ; SSE41-NEXT:    pinsrb $3, %eax, %xmm1
1833 ; SSE41-NEXT:    pextrb $4, %xmm0, %eax
1834 ; SSE41-NEXT:    movb %al, %cl
1835 ; SSE41-NEXT:    shrb %cl
1836 ; SSE41-NEXT:    andb $85, %cl
1837 ; SSE41-NEXT:    subb %cl, %al
1838 ; SSE41-NEXT:    movb %al, %cl
1839 ; SSE41-NEXT:    andb $51, %cl
1840 ; SSE41-NEXT:    shrb $2, %al
1841 ; SSE41-NEXT:    andb $51, %al
1842 ; SSE41-NEXT:    addb %cl, %al
1843 ; SSE41-NEXT:    movb %al, %cl
1844 ; SSE41-NEXT:    shrb $4, %cl
1845 ; SSE41-NEXT:    addb %al, %cl
1846 ; SSE41-NEXT:    andb $15, %cl
1847 ; SSE41-NEXT:    movzbl %cl, %eax
1848 ; SSE41-NEXT:    pinsrb $4, %eax, %xmm1
1849 ; SSE41-NEXT:    pextrb $5, %xmm0, %eax
1850 ; SSE41-NEXT:    movb %al, %cl
1851 ; SSE41-NEXT:    shrb %cl
1852 ; SSE41-NEXT:    andb $85, %cl
1853 ; SSE41-NEXT:    subb %cl, %al
1854 ; SSE41-NEXT:    movb %al, %cl
1855 ; SSE41-NEXT:    andb $51, %cl
1856 ; SSE41-NEXT:    shrb $2, %al
1857 ; SSE41-NEXT:    andb $51, %al
1858 ; SSE41-NEXT:    addb %cl, %al
1859 ; SSE41-NEXT:    movb %al, %cl
1860 ; SSE41-NEXT:    shrb $4, %cl
1861 ; SSE41-NEXT:    addb %al, %cl
1862 ; SSE41-NEXT:    andb $15, %cl
1863 ; SSE41-NEXT:    movzbl %cl, %eax
1864 ; SSE41-NEXT:    pinsrb $5, %eax, %xmm1
1865 ; SSE41-NEXT:    pextrb $6, %xmm0, %eax
1866 ; SSE41-NEXT:    movb %al, %cl
1867 ; SSE41-NEXT:    shrb %cl
1868 ; SSE41-NEXT:    andb $85, %cl
1869 ; SSE41-NEXT:    subb %cl, %al
1870 ; SSE41-NEXT:    movb %al, %cl
1871 ; SSE41-NEXT:    andb $51, %cl
1872 ; SSE41-NEXT:    shrb $2, %al
1873 ; SSE41-NEXT:    andb $51, %al
1874 ; SSE41-NEXT:    addb %cl, %al
1875 ; SSE41-NEXT:    movb %al, %cl
1876 ; SSE41-NEXT:    shrb $4, %cl
1877 ; SSE41-NEXT:    addb %al, %cl
1878 ; SSE41-NEXT:    andb $15, %cl
1879 ; SSE41-NEXT:    movzbl %cl, %eax
1880 ; SSE41-NEXT:    pinsrb $6, %eax, %xmm1
1881 ; SSE41-NEXT:    pextrb $7, %xmm0, %eax
1882 ; SSE41-NEXT:    movb %al, %cl
1883 ; SSE41-NEXT:    shrb %cl
1884 ; SSE41-NEXT:    andb $85, %cl
1885 ; SSE41-NEXT:    subb %cl, %al
1886 ; SSE41-NEXT:    movb %al, %cl
1887 ; SSE41-NEXT:    andb $51, %cl
1888 ; SSE41-NEXT:    shrb $2, %al
1889 ; SSE41-NEXT:    andb $51, %al
1890 ; SSE41-NEXT:    addb %cl, %al
1891 ; SSE41-NEXT:    movb %al, %cl
1892 ; SSE41-NEXT:    shrb $4, %cl
1893 ; SSE41-NEXT:    addb %al, %cl
1894 ; SSE41-NEXT:    andb $15, %cl
1895 ; SSE41-NEXT:    movzbl %cl, %eax
1896 ; SSE41-NEXT:    pinsrb $7, %eax, %xmm1
1897 ; SSE41-NEXT:    pextrb $8, %xmm0, %eax
1898 ; SSE41-NEXT:    movb %al, %cl
1899 ; SSE41-NEXT:    shrb %cl
1900 ; SSE41-NEXT:    andb $85, %cl
1901 ; SSE41-NEXT:    subb %cl, %al
1902 ; SSE41-NEXT:    movb %al, %cl
1903 ; SSE41-NEXT:    andb $51, %cl
1904 ; SSE41-NEXT:    shrb $2, %al
1905 ; SSE41-NEXT:    andb $51, %al
1906 ; SSE41-NEXT:    addb %cl, %al
1907 ; SSE41-NEXT:    movb %al, %cl
1908 ; SSE41-NEXT:    shrb $4, %cl
1909 ; SSE41-NEXT:    addb %al, %cl
1910 ; SSE41-NEXT:    andb $15, %cl
1911 ; SSE41-NEXT:    movzbl %cl, %eax
1912 ; SSE41-NEXT:    pinsrb $8, %eax, %xmm1
1913 ; SSE41-NEXT:    pextrb $9, %xmm0, %eax
1914 ; SSE41-NEXT:    movb %al, %cl
1915 ; SSE41-NEXT:    shrb %cl
1916 ; SSE41-NEXT:    andb $85, %cl
1917 ; SSE41-NEXT:    subb %cl, %al
1918 ; SSE41-NEXT:    movb %al, %cl
1919 ; SSE41-NEXT:    andb $51, %cl
1920 ; SSE41-NEXT:    shrb $2, %al
1921 ; SSE41-NEXT:    andb $51, %al
1922 ; SSE41-NEXT:    addb %cl, %al
1923 ; SSE41-NEXT:    movb %al, %cl
1924 ; SSE41-NEXT:    shrb $4, %cl
1925 ; SSE41-NEXT:    addb %al, %cl
1926 ; SSE41-NEXT:    andb $15, %cl
1927 ; SSE41-NEXT:    movzbl %cl, %eax
1928 ; SSE41-NEXT:    pinsrb $9, %eax, %xmm1
1929 ; SSE41-NEXT:    pextrb $10, %xmm0, %eax
1930 ; SSE41-NEXT:    movb %al, %cl
1931 ; SSE41-NEXT:    shrb %cl
1932 ; SSE41-NEXT:    andb $85, %cl
1933 ; SSE41-NEXT:    subb %cl, %al
1934 ; SSE41-NEXT:    movb %al, %cl
1935 ; SSE41-NEXT:    andb $51, %cl
1936 ; SSE41-NEXT:    shrb $2, %al
1937 ; SSE41-NEXT:    andb $51, %al
1938 ; SSE41-NEXT:    addb %cl, %al
1939 ; SSE41-NEXT:    movb %al, %cl
1940 ; SSE41-NEXT:    shrb $4, %cl
1941 ; SSE41-NEXT:    addb %al, %cl
1942 ; SSE41-NEXT:    andb $15, %cl
1943 ; SSE41-NEXT:    movzbl %cl, %eax
1944 ; SSE41-NEXT:    pinsrb $10, %eax, %xmm1
1945 ; SSE41-NEXT:    pextrb $11, %xmm0, %eax
1946 ; SSE41-NEXT:    movb %al, %cl
1947 ; SSE41-NEXT:    shrb %cl
1948 ; SSE41-NEXT:    andb $85, %cl
1949 ; SSE41-NEXT:    subb %cl, %al
1950 ; SSE41-NEXT:    movb %al, %cl
1951 ; SSE41-NEXT:    andb $51, %cl
1952 ; SSE41-NEXT:    shrb $2, %al
1953 ; SSE41-NEXT:    andb $51, %al
1954 ; SSE41-NEXT:    addb %cl, %al
1955 ; SSE41-NEXT:    movb %al, %cl
1956 ; SSE41-NEXT:    shrb $4, %cl
1957 ; SSE41-NEXT:    addb %al, %cl
1958 ; SSE41-NEXT:    andb $15, %cl
1959 ; SSE41-NEXT:    movzbl %cl, %eax
1960 ; SSE41-NEXT:    pinsrb $11, %eax, %xmm1
1961 ; SSE41-NEXT:    pextrb $12, %xmm0, %eax
1962 ; SSE41-NEXT:    movb %al, %cl
1963 ; SSE41-NEXT:    shrb %cl
1964 ; SSE41-NEXT:    andb $85, %cl
1965 ; SSE41-NEXT:    subb %cl, %al
1966 ; SSE41-NEXT:    movb %al, %cl
1967 ; SSE41-NEXT:    andb $51, %cl
1968 ; SSE41-NEXT:    shrb $2, %al
1969 ; SSE41-NEXT:    andb $51, %al
1970 ; SSE41-NEXT:    addb %cl, %al
1971 ; SSE41-NEXT:    movb %al, %cl
1972 ; SSE41-NEXT:    shrb $4, %cl
1973 ; SSE41-NEXT:    addb %al, %cl
1974 ; SSE41-NEXT:    andb $15, %cl
1975 ; SSE41-NEXT:    movzbl %cl, %eax
1976 ; SSE41-NEXT:    pinsrb $12, %eax, %xmm1
1977 ; SSE41-NEXT:    pextrb $13, %xmm0, %eax
1978 ; SSE41-NEXT:    movb %al, %cl
1979 ; SSE41-NEXT:    shrb %cl
1980 ; SSE41-NEXT:    andb $85, %cl
1981 ; SSE41-NEXT:    subb %cl, %al
1982 ; SSE41-NEXT:    movb %al, %cl
1983 ; SSE41-NEXT:    andb $51, %cl
1984 ; SSE41-NEXT:    shrb $2, %al
1985 ; SSE41-NEXT:    andb $51, %al
1986 ; SSE41-NEXT:    addb %cl, %al
1987 ; SSE41-NEXT:    movb %al, %cl
1988 ; SSE41-NEXT:    shrb $4, %cl
1989 ; SSE41-NEXT:    addb %al, %cl
1990 ; SSE41-NEXT:    andb $15, %cl
1991 ; SSE41-NEXT:    movzbl %cl, %eax
1992 ; SSE41-NEXT:    pinsrb $13, %eax, %xmm1
1993 ; SSE41-NEXT:    pextrb $14, %xmm0, %eax
1994 ; SSE41-NEXT:    movb %al, %cl
1995 ; SSE41-NEXT:    shrb %cl
1996 ; SSE41-NEXT:    andb $85, %cl
1997 ; SSE41-NEXT:    subb %cl, %al
1998 ; SSE41-NEXT:    movb %al, %cl
1999 ; SSE41-NEXT:    andb $51, %cl
2000 ; SSE41-NEXT:    shrb $2, %al
2001 ; SSE41-NEXT:    andb $51, %al
2002 ; SSE41-NEXT:    addb %cl, %al
2003 ; SSE41-NEXT:    movb %al, %cl
2004 ; SSE41-NEXT:    shrb $4, %cl
2005 ; SSE41-NEXT:    addb %al, %cl
2006 ; SSE41-NEXT:    andb $15, %cl
2007 ; SSE41-NEXT:    movzbl %cl, %eax
2008 ; SSE41-NEXT:    pinsrb $14, %eax, %xmm1
2009 ; SSE41-NEXT:    pextrb $15, %xmm0, %eax
2010 ; SSE41-NEXT:    movb %al, %cl
2011 ; SSE41-NEXT:    shrb %cl
2012 ; SSE41-NEXT:    andb $85, %cl
2013 ; SSE41-NEXT:    subb %cl, %al
2014 ; SSE41-NEXT:    movb %al, %cl
2015 ; SSE41-NEXT:    andb $51, %cl
2016 ; SSE41-NEXT:    shrb $2, %al
2017 ; SSE41-NEXT:    andb $51, %al
2018 ; SSE41-NEXT:    addb %cl, %al
2019 ; SSE41-NEXT:    movb %al, %cl
2020 ; SSE41-NEXT:    shrb $4, %cl
2021 ; SSE41-NEXT:    addb %al, %cl
2022 ; SSE41-NEXT:    andb $15, %cl
2023 ; SSE41-NEXT:    movzbl %cl, %eax
2024 ; SSE41-NEXT:    pinsrb $15, %eax, %xmm1
2025 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
2026 ; SSE41-NEXT:    retq
2027 ;
2028 ; AVX-LABEL: testv16i8:
2029 ; AVX:       # BB#0:
2030 ; AVX-NEXT:    vpextrb $1, %xmm0, %eax
2031 ; AVX-NEXT:    movb %al, %cl
2032 ; AVX-NEXT:    shrb %cl
2033 ; AVX-NEXT:    andb $85, %cl
2034 ; AVX-NEXT:    subb %cl, %al
2035 ; AVX-NEXT:    movb %al, %cl
2036 ; AVX-NEXT:    andb $51, %cl
2037 ; AVX-NEXT:    shrb $2, %al
2038 ; AVX-NEXT:    andb $51, %al
2039 ; AVX-NEXT:    addb %cl, %al
2040 ; AVX-NEXT:    movb %al, %cl
2041 ; AVX-NEXT:    shrb $4, %cl
2042 ; AVX-NEXT:    addb %al, %cl
2043 ; AVX-NEXT:    andb $15, %cl
2044 ; AVX-NEXT:    movzbl %cl, %eax
2045 ; AVX-NEXT:    vpextrb $0, %xmm0, %ecx
2046 ; AVX-NEXT:    movb %cl, %dl
2047 ; AVX-NEXT:    shrb %dl
2048 ; AVX-NEXT:    andb $85, %dl
2049 ; AVX-NEXT:    subb %dl, %cl
2050 ; AVX-NEXT:    movb %cl, %dl
2051 ; AVX-NEXT:    andb $51, %dl
2052 ; AVX-NEXT:    shrb $2, %cl
2053 ; AVX-NEXT:    andb $51, %cl
2054 ; AVX-NEXT:    addb %dl, %cl
2055 ; AVX-NEXT:    movb %cl, %dl
2056 ; AVX-NEXT:    shrb $4, %dl
2057 ; AVX-NEXT:    addb %cl, %dl
2058 ; AVX-NEXT:    andb $15, %dl
2059 ; AVX-NEXT:    movzbl %dl, %ecx
2060 ; AVX-NEXT:    vmovd %ecx, %xmm1
2061 ; AVX-NEXT:    vpinsrb $1, %eax, %xmm1, %xmm1
2062 ; AVX-NEXT:    vpextrb $2, %xmm0, %eax
2063 ; AVX-NEXT:    movb %al, %cl
2064 ; AVX-NEXT:    shrb %cl
2065 ; AVX-NEXT:    andb $85, %cl
2066 ; AVX-NEXT:    subb %cl, %al
2067 ; AVX-NEXT:    movb %al, %cl
2068 ; AVX-NEXT:    andb $51, %cl
2069 ; AVX-NEXT:    shrb $2, %al
2070 ; AVX-NEXT:    andb $51, %al
2071 ; AVX-NEXT:    addb %cl, %al
2072 ; AVX-NEXT:    movb %al, %cl
2073 ; AVX-NEXT:    shrb $4, %cl
2074 ; AVX-NEXT:    addb %al, %cl
2075 ; AVX-NEXT:    andb $15, %cl
2076 ; AVX-NEXT:    movzbl %cl, %eax
2077 ; AVX-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1
2078 ; AVX-NEXT:    vpextrb $3, %xmm0, %eax
2079 ; AVX-NEXT:    movb %al, %cl
2080 ; AVX-NEXT:    shrb %cl
2081 ; AVX-NEXT:    andb $85, %cl
2082 ; AVX-NEXT:    subb %cl, %al
2083 ; AVX-NEXT:    movb %al, %cl
2084 ; AVX-NEXT:    andb $51, %cl
2085 ; AVX-NEXT:    shrb $2, %al
2086 ; AVX-NEXT:    andb $51, %al
2087 ; AVX-NEXT:    addb %cl, %al
2088 ; AVX-NEXT:    movb %al, %cl
2089 ; AVX-NEXT:    shrb $4, %cl
2090 ; AVX-NEXT:    addb %al, %cl
2091 ; AVX-NEXT:    andb $15, %cl
2092 ; AVX-NEXT:    movzbl %cl, %eax
2093 ; AVX-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm1
2094 ; AVX-NEXT:    vpextrb $4, %xmm0, %eax
2095 ; AVX-NEXT:    movb %al, %cl
2096 ; AVX-NEXT:    shrb %cl
2097 ; AVX-NEXT:    andb $85, %cl
2098 ; AVX-NEXT:    subb %cl, %al
2099 ; AVX-NEXT:    movb %al, %cl
2100 ; AVX-NEXT:    andb $51, %cl
2101 ; AVX-NEXT:    shrb $2, %al
2102 ; AVX-NEXT:    andb $51, %al
2103 ; AVX-NEXT:    addb %cl, %al
2104 ; AVX-NEXT:    movb %al, %cl
2105 ; AVX-NEXT:    shrb $4, %cl
2106 ; AVX-NEXT:    addb %al, %cl
2107 ; AVX-NEXT:    andb $15, %cl
2108 ; AVX-NEXT:    movzbl %cl, %eax
2109 ; AVX-NEXT:    vpinsrb $4, %eax, %xmm1, %xmm1
2110 ; AVX-NEXT:    vpextrb $5, %xmm0, %eax
2111 ; AVX-NEXT:    movb %al, %cl
2112 ; AVX-NEXT:    shrb %cl
2113 ; AVX-NEXT:    andb $85, %cl
2114 ; AVX-NEXT:    subb %cl, %al
2115 ; AVX-NEXT:    movb %al, %cl
2116 ; AVX-NEXT:    andb $51, %cl
2117 ; AVX-NEXT:    shrb $2, %al
2118 ; AVX-NEXT:    andb $51, %al
2119 ; AVX-NEXT:    addb %cl, %al
2120 ; AVX-NEXT:    movb %al, %cl
2121 ; AVX-NEXT:    shrb $4, %cl
2122 ; AVX-NEXT:    addb %al, %cl
2123 ; AVX-NEXT:    andb $15, %cl
2124 ; AVX-NEXT:    movzbl %cl, %eax
2125 ; AVX-NEXT:    vpinsrb $5, %eax, %xmm1, %xmm1
2126 ; AVX-NEXT:    vpextrb $6, %xmm0, %eax
2127 ; AVX-NEXT:    movb %al, %cl
2128 ; AVX-NEXT:    shrb %cl
2129 ; AVX-NEXT:    andb $85, %cl
2130 ; AVX-NEXT:    subb %cl, %al
2131 ; AVX-NEXT:    movb %al, %cl
2132 ; AVX-NEXT:    andb $51, %cl
2133 ; AVX-NEXT:    shrb $2, %al
2134 ; AVX-NEXT:    andb $51, %al
2135 ; AVX-NEXT:    addb %cl, %al
2136 ; AVX-NEXT:    movb %al, %cl
2137 ; AVX-NEXT:    shrb $4, %cl
2138 ; AVX-NEXT:    addb %al, %cl
2139 ; AVX-NEXT:    andb $15, %cl
2140 ; AVX-NEXT:    movzbl %cl, %eax
2141 ; AVX-NEXT:    vpinsrb $6, %eax, %xmm1, %xmm1
2142 ; AVX-NEXT:    vpextrb $7, %xmm0, %eax
2143 ; AVX-NEXT:    movb %al, %cl
2144 ; AVX-NEXT:    shrb %cl
2145 ; AVX-NEXT:    andb $85, %cl
2146 ; AVX-NEXT:    subb %cl, %al
2147 ; AVX-NEXT:    movb %al, %cl
2148 ; AVX-NEXT:    andb $51, %cl
2149 ; AVX-NEXT:    shrb $2, %al
2150 ; AVX-NEXT:    andb $51, %al
2151 ; AVX-NEXT:    addb %cl, %al
2152 ; AVX-NEXT:    movb %al, %cl
2153 ; AVX-NEXT:    shrb $4, %cl
2154 ; AVX-NEXT:    addb %al, %cl
2155 ; AVX-NEXT:    andb $15, %cl
2156 ; AVX-NEXT:    movzbl %cl, %eax
2157 ; AVX-NEXT:    vpinsrb $7, %eax, %xmm1, %xmm1
2158 ; AVX-NEXT:    vpextrb $8, %xmm0, %eax
2159 ; AVX-NEXT:    movb %al, %cl
2160 ; AVX-NEXT:    shrb %cl
2161 ; AVX-NEXT:    andb $85, %cl
2162 ; AVX-NEXT:    subb %cl, %al
2163 ; AVX-NEXT:    movb %al, %cl
2164 ; AVX-NEXT:    andb $51, %cl
2165 ; AVX-NEXT:    shrb $2, %al
2166 ; AVX-NEXT:    andb $51, %al
2167 ; AVX-NEXT:    addb %cl, %al
2168 ; AVX-NEXT:    movb %al, %cl
2169 ; AVX-NEXT:    shrb $4, %cl
2170 ; AVX-NEXT:    addb %al, %cl
2171 ; AVX-NEXT:    andb $15, %cl
2172 ; AVX-NEXT:    movzbl %cl, %eax
2173 ; AVX-NEXT:    vpinsrb $8, %eax, %xmm1, %xmm1
2174 ; AVX-NEXT:    vpextrb $9, %xmm0, %eax
2175 ; AVX-NEXT:    movb %al, %cl
2176 ; AVX-NEXT:    shrb %cl
2177 ; AVX-NEXT:    andb $85, %cl
2178 ; AVX-NEXT:    subb %cl, %al
2179 ; AVX-NEXT:    movb %al, %cl
2180 ; AVX-NEXT:    andb $51, %cl
2181 ; AVX-NEXT:    shrb $2, %al
2182 ; AVX-NEXT:    andb $51, %al
2183 ; AVX-NEXT:    addb %cl, %al
2184 ; AVX-NEXT:    movb %al, %cl
2185 ; AVX-NEXT:    shrb $4, %cl
2186 ; AVX-NEXT:    addb %al, %cl
2187 ; AVX-NEXT:    andb $15, %cl
2188 ; AVX-NEXT:    movzbl %cl, %eax
2189 ; AVX-NEXT:    vpinsrb $9, %eax, %xmm1, %xmm1
2190 ; AVX-NEXT:    vpextrb $10, %xmm0, %eax
2191 ; AVX-NEXT:    movb %al, %cl
2192 ; AVX-NEXT:    shrb %cl
2193 ; AVX-NEXT:    andb $85, %cl
2194 ; AVX-NEXT:    subb %cl, %al
2195 ; AVX-NEXT:    movb %al, %cl
2196 ; AVX-NEXT:    andb $51, %cl
2197 ; AVX-NEXT:    shrb $2, %al
2198 ; AVX-NEXT:    andb $51, %al
2199 ; AVX-NEXT:    addb %cl, %al
2200 ; AVX-NEXT:    movb %al, %cl
2201 ; AVX-NEXT:    shrb $4, %cl
2202 ; AVX-NEXT:    addb %al, %cl
2203 ; AVX-NEXT:    andb $15, %cl
2204 ; AVX-NEXT:    movzbl %cl, %eax
2205 ; AVX-NEXT:    vpinsrb $10, %eax, %xmm1, %xmm1
2206 ; AVX-NEXT:    vpextrb $11, %xmm0, %eax
2207 ; AVX-NEXT:    movb %al, %cl
2208 ; AVX-NEXT:    shrb %cl
2209 ; AVX-NEXT:    andb $85, %cl
2210 ; AVX-NEXT:    subb %cl, %al
2211 ; AVX-NEXT:    movb %al, %cl
2212 ; AVX-NEXT:    andb $51, %cl
2213 ; AVX-NEXT:    shrb $2, %al
2214 ; AVX-NEXT:    andb $51, %al
2215 ; AVX-NEXT:    addb %cl, %al
2216 ; AVX-NEXT:    movb %al, %cl
2217 ; AVX-NEXT:    shrb $4, %cl
2218 ; AVX-NEXT:    addb %al, %cl
2219 ; AVX-NEXT:    andb $15, %cl
2220 ; AVX-NEXT:    movzbl %cl, %eax
2221 ; AVX-NEXT:    vpinsrb $11, %eax, %xmm1, %xmm1
2222 ; AVX-NEXT:    vpextrb $12, %xmm0, %eax
2223 ; AVX-NEXT:    movb %al, %cl
2224 ; AVX-NEXT:    shrb %cl
2225 ; AVX-NEXT:    andb $85, %cl
2226 ; AVX-NEXT:    subb %cl, %al
2227 ; AVX-NEXT:    movb %al, %cl
2228 ; AVX-NEXT:    andb $51, %cl
2229 ; AVX-NEXT:    shrb $2, %al
2230 ; AVX-NEXT:    andb $51, %al
2231 ; AVX-NEXT:    addb %cl, %al
2232 ; AVX-NEXT:    movb %al, %cl
2233 ; AVX-NEXT:    shrb $4, %cl
2234 ; AVX-NEXT:    addb %al, %cl
2235 ; AVX-NEXT:    andb $15, %cl
2236 ; AVX-NEXT:    movzbl %cl, %eax
2237 ; AVX-NEXT:    vpinsrb $12, %eax, %xmm1, %xmm1
2238 ; AVX-NEXT:    vpextrb $13, %xmm0, %eax
2239 ; AVX-NEXT:    movb %al, %cl
2240 ; AVX-NEXT:    shrb %cl
2241 ; AVX-NEXT:    andb $85, %cl
2242 ; AVX-NEXT:    subb %cl, %al
2243 ; AVX-NEXT:    movb %al, %cl
2244 ; AVX-NEXT:    andb $51, %cl
2245 ; AVX-NEXT:    shrb $2, %al
2246 ; AVX-NEXT:    andb $51, %al
2247 ; AVX-NEXT:    addb %cl, %al
2248 ; AVX-NEXT:    movb %al, %cl
2249 ; AVX-NEXT:    shrb $4, %cl
2250 ; AVX-NEXT:    addb %al, %cl
2251 ; AVX-NEXT:    andb $15, %cl
2252 ; AVX-NEXT:    movzbl %cl, %eax
2253 ; AVX-NEXT:    vpinsrb $13, %eax, %xmm1, %xmm1
2254 ; AVX-NEXT:    vpextrb $14, %xmm0, %eax
2255 ; AVX-NEXT:    movb %al, %cl
2256 ; AVX-NEXT:    shrb %cl
2257 ; AVX-NEXT:    andb $85, %cl
2258 ; AVX-NEXT:    subb %cl, %al
2259 ; AVX-NEXT:    movb %al, %cl
2260 ; AVX-NEXT:    andb $51, %cl
2261 ; AVX-NEXT:    shrb $2, %al
2262 ; AVX-NEXT:    andb $51, %al
2263 ; AVX-NEXT:    addb %cl, %al
2264 ; AVX-NEXT:    movb %al, %cl
2265 ; AVX-NEXT:    shrb $4, %cl
2266 ; AVX-NEXT:    addb %al, %cl
2267 ; AVX-NEXT:    andb $15, %cl
2268 ; AVX-NEXT:    movzbl %cl, %eax
2269 ; AVX-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
2270 ; AVX-NEXT:    vpextrb $15, %xmm0, %eax
2271 ; AVX-NEXT:    movb %al, %cl
2272 ; AVX-NEXT:    shrb %cl
2273 ; AVX-NEXT:    andb $85, %cl
2274 ; AVX-NEXT:    subb %cl, %al
2275 ; AVX-NEXT:    movb %al, %cl
2276 ; AVX-NEXT:    andb $51, %cl
2277 ; AVX-NEXT:    shrb $2, %al
2278 ; AVX-NEXT:    andb $51, %al
2279 ; AVX-NEXT:    addb %cl, %al
2280 ; AVX-NEXT:    movb %al, %cl
2281 ; AVX-NEXT:    shrb $4, %cl
2282 ; AVX-NEXT:    addb %al, %cl
2283 ; AVX-NEXT:    andb $15, %cl
2284 ; AVX-NEXT:    movzbl %cl, %eax
2285 ; AVX-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm0
2286 ; AVX-NEXT:    retq
2287   %out = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %in)
2288   ret <16 x i8> %out
2289 }
2290
2291 declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)
2292 declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)
2293 declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)
2294 declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)