Home | History | Annotate | Download | only in X86

Lines Matching full:next

14 ; SSE2-NEXT:    movd %xmm0, %rcx
15 ; SSE2-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
16 ; SSE2-NEXT: movq %rcx, %rax
17 ; SSE2-NEXT: mulq %rsi
18 ; SSE2-NEXT: subq %rdx, %rcx
19 ; SSE2-NEXT: shrq %rcx
20 ; SSE2-NEXT: addq %rdx, %rcx
21 ; SSE2-NEXT: shrq $2, %rcx
22 ; SSE2-NEXT: movd %rcx, %xmm1
23 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
24 ; SSE2-NEXT: movd %xmm0, %rcx
25 ; SSE2-NEXT: movq %rcx, %rax
26 ; SSE2-NEXT: mulq %rsi
27 ; SSE2-NEXT: subq %rdx, %rcx
28 ; SSE2-NEXT: shrq %rcx
29 ; SSE2-NEXT: addq %rdx, %rcx
30 ; SSE2-NEXT: shrq $2, %rcx
31 ; SSE2-NEXT: movd %rcx, %xmm0
32 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
33 ; SSE2-NEXT: movdqa %xmm1, %xmm0
34 ; SSE2-NEXT: retq
38 ; SSE41-NEXT: pextrq $1, %xmm0, %rcx
39 ; SSE41-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
40 ; SSE41-NEXT: movq %rcx, %rax
41 ; SSE41-NEXT: mulq %rsi
42 ; SSE41-NEXT: subq %rdx, %rcx
43 ; SSE41-NEXT: shrq %rcx
44 ; SSE41-NEXT: addq %rdx, %rcx
45 ; SSE41-NEXT: shrq $2, %rcx
46 ; SSE41-NEXT: movd %rcx, %xmm1
47 ; SSE41-NEXT: movd %xmm0, %rcx
48 ; SSE41-NEXT: movq %rcx, %rax
49 ; SSE41-NEXT: mulq %rsi
50 ; SSE41-NEXT: subq %rdx, %rcx
51 ; SSE41-NEXT: shrq %rcx
52 ; SSE41-NEXT: addq %rdx, %rcx
53 ; SSE41-NEXT: shrq $2, %rcx
54 ; SSE41-NEXT: movd %rcx, %xmm0
55 ; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
56 ; SSE41-NEXT: retq
60 ; AVX-NEXT: vpextrq $1, %xmm0, %rcx
61 ; AVX-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
62 ; AVX-NEXT: movq %rcx, %rax
63 ; AVX-NEXT: mulq %rsi
64 ; AVX-NEXT: subq %rdx, %rcx
65 ; AVX-NEXT: shrq %rcx
66 ; AVX-NEXT: addq %rdx, %rcx
67 ; AVX-NEXT: shrq $2, %rcx
68 ; AVX-NEXT: vmovq %rcx, %xmm1
69 ; AVX-NEXT: vmovq %xmm0, %rcx
70 ; AVX-NEXT: movq %rcx, %rax
71 ; AVX-NEXT: mulq %rsi
72 ; AVX-NEXT: subq %rdx, %rcx
73 ; AVX-NEXT: shrq %rcx
74 ; AVX-NEXT: addq %rdx, %rcx
75 ; AVX-NEXT: shrq $2, %rcx
76 ; AVX-NEXT: vmovq %rcx, %xmm0
77 ; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
78 ; AVX-NEXT: retq
86 ; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]
87 ; SSE2-NEXT: movdqa %xmm0, %xmm2
88 ; SSE2-NEXT: pmuludq %xmm1, %xmm2
89 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]
90 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
91 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
92 ; SSE2-NEXT: pmuludq %xmm1, %xmm3
93 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3]
94 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
95 ; SSE2-NEXT: psubd %xmm2, %xmm0
96 ; SSE2-NEXT: psrld $1, %xmm0
97 ; SSE2-NEXT: paddd %xmm2, %xmm0
98 ; SSE2-NEXT: psrld $2, %xmm0
99 ; SSE2-NEXT: retq
103 ; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]
104 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
105 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
106 ; SSE41-NEXT: pmuludq %xmm2, %xmm3
107 ; SSE41-NEXT: pmuludq %xmm0, %xmm1
108 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
109 ; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]
110 ; SSE41-NEXT: psubd %xmm1, %xmm0
111 ; SSE41-NEXT: psrld $1, %xmm0
112 ; SSE41-NEXT: paddd %xmm1, %xmm0
113 ; SSE41-NEXT: psrld $2, %xmm0
114 ; SSE41-NEXT: retq
118 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]
119 ; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
120 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
121 ; AVX1-NEXT: vpmuludq %xmm2, %xmm3, %xmm2
122 ; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm1
123 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
124 ; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
125 ; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm0
126 ; AVX1-NEXT: vpsrld $1, %xmm0, %xmm0
127 ; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0
128 ; AVX1-NEXT: vpsrld $2, %xmm0, %xmm0
129 ; AVX1-NEXT: retq
133 ; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %xmm1
134 ; AVX2-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
135 ; AVX2-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
136 ; AVX2-NEXT: vpmuludq %xmm2, %xmm3, %xmm2
137 ; AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm1
138 ; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
139 ; AVX2-NEXT: vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]
140 ; AVX2-NEXT: vpsubd %xmm1, %xmm0, %xmm0
141 ; AVX2-NEXT: vpsrld $1, %xmm0, %xmm0
142 ; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
143 ; AVX2-NEXT: vpsrld $2, %xmm0, %xmm0
144 ; AVX2-NEXT: retq
152 ; SSE-NEXT: movdqa {{.*#+}} xmm1 = [9363,9363,9363,9363,9363,9363,9363,9363]
153 ; SSE-NEXT: pmulhuw %xmm0, %xmm1
154 ; SSE-NEXT: psubw %xmm1, %xmm0
155 ; SSE-NEXT: psrlw $1, %xmm0
156 ; SSE-NEXT: paddw %xmm1, %xmm0
157 ; SSE-NEXT: psrlw $2, %xmm0
158 ; SSE-NEXT: retq
162 ; AVX-NEXT: vpmulhuw {{.*}}(%rip), %xmm0, %xmm1
163 ; AVX-NEXT: vpsubw %xmm1, %xmm0, %xmm0
164 ; AVX-NEXT: vpsrlw $1, %xmm0, %xmm0
165 ; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
166 ; AVX-NEXT: vpsrlw $2, %xmm0, %xmm0
167 ; AVX-NEXT: retq
175 ; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37]
176 ; SSE2-NEXT: psrlw $8, %xmm1
177 ; SSE2-NEXT: movdqa %xmm0, %xmm2
178 ; SSE2-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
179 ; SSE2-NEXT: psrlw $8, %xmm2
180 ; SSE2-NEXT: pmullw %xmm1, %xmm2
181 ; SSE2-NEXT: psrlw $8, %xmm2
182 ; SSE2-NEXT: movdqa %xmm0, %xmm3
183 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
184 ; SSE2-NEXT: psrlw $8, %xmm3
185 ; SSE2-NEXT: pmullw %xmm1, %xmm3
186 ; SSE2-NEXT: psrlw $8, %xmm3
187 ; SSE2-NEXT: packuswb %xmm2, %xmm3
188 ; SSE2-NEXT: psubb %xmm3, %xmm0
189 ; SSE2-NEXT: psrlw $1, %xmm0
190 ; SSE2-NEXT: pand {{.*}}(%rip), %xmm0
191 ; SSE2-NEXT: paddb %xmm3, %xmm0
192 ; SSE2-NEXT: psrlw $2, %xmm0
193 ; SSE2-NEXT: pand {{.*}}(%rip), %xmm0
194 ; SSE2-NEXT: retq
198 ; SSE41-NEXT: pmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
199 ; SSE41-NEXT: pmovzxbw {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
200 ; SSE41-NEXT: pmullw %xmm2, %xmm1
201 ; SSE41-NEXT: psrlw $8, %xmm1
202 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]
203 ; SSE41-NEXT: pmovzxbw {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero
204 ; SSE41-NEXT: pmullw %xmm2, %xmm3
205 ; SSE41-NEXT: psrlw $8, %xmm3
206 ; SSE41-NEXT: packuswb %xmm3, %xmm1
207 ; SSE41-NEXT: psubb %xmm1, %xmm0
208 ; SSE41-NEXT: psrlw $1, %xmm0
209 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm0
210 ; SSE41-NEXT: paddb %xmm1, %xmm0
211 ; SSE41-NEXT: psrlw $2, %xmm0
212 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm0
213 ; SSE41-NEXT: retq
217 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
218 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
219 ; AVX1-NEXT: vpmullw %xmm2, %xmm1, %xmm1
220 ; AVX1-NEXT: vpsrlw $8, %xmm1, %xmm1
221 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]
222 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero
223 ; AVX1-NEXT: vpmullw %xmm2, %xmm3, %xmm2
224 ; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2
225 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
226 ; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm0
227 ; AVX1-NEXT: vpsrlw $1, %xmm0, %xmm0
228 ; AVX1-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
229 ; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm0
230 ; AVX1-NEXT: vpsrlw $2, %xmm0, %xmm0
231 ; AVX1-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
232 ; AVX1-NEXT: retq
236 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
237 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero
238 ; AVX2-NEXT: vpmullw %ymm2, %ymm1, %ymm1
239 ; AVX2-NEXT: vpsrlw $8, %ymm1, %ymm1
240 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
241 ; AVX2-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
242 ; AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm0
243 ; AVX2-NEXT: vpsrlw $1, %xmm0, %xmm0
244 ; AVX2-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
245 ; AVX2-NEXT: vpaddb %xmm1, %xmm0, %xmm0
246 ; AVX2-NEXT: vpsrlw $2, %xmm0, %xmm0
247 ; AVX2-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
248 ; AVX2-NEXT: vzeroupper
249 ; AVX2-NEXT: retq
261 ; SSE2-NEXT: movd %xmm0, %rcx
262 ; SSE2-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
263 ; SSE2-NEXT: movq %rcx, %rax
264 ; SSE2-NEXT: mulq %rsi
265 ; SSE2-NEXT: movq %rcx, %rax
266 ; SSE2-NEXT: subq %rdx, %rax
267 ; SSE2-NEXT: shrq %rax
268 ; SSE2-NEXT: addq %rdx, %rax
269 ; SSE2-NEXT: shrq $2, %rax
270 ; SSE2-NEXT: leaq (,%rax,8), %rdx
271 ; SSE2-NEXT: subq %rax, %rdx
272 ; SSE2-NEXT: subq %rdx, %rcx
273 ; SSE2-NEXT: movd %rcx, %xmm1
274 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
275 ; SSE2-NEXT: movd %xmm0, %rcx
276 ; SSE2-NEXT: movq %rcx, %rax
277 ; SSE2-NEXT: mulq %rsi
278 ; SSE2-NEXT: movq %rcx, %rax
279 ; SSE2-NEXT: subq %rdx, %rax
280 ; SSE2-NEXT: shrq %rax
281 ; SSE2-NEXT: addq %rdx, %rax
282 ; SSE2-NEXT: shrq $2, %rax
283 ; SSE2-NEXT: leaq (,%rax,8), %rdx
284 ; SSE2-NEXT: subq %rax, %rdx
285 ; SSE2-NEXT: subq %rdx, %rcx
286 ; SSE2-NEXT: movd %rcx, %xmm0
287 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
288 ; SSE2-NEXT: movdqa %xmm1, %xmm0
289 ; SSE2-NEXT: retq
293 ; SSE41-NEXT: pextrq $1, %xmm0, %rcx
294 ; SSE41-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
295 ; SSE41-NEXT: movq %rcx, %rax
296 ; SSE41-NEXT: mulq %rsi
297 ; SSE41-NEXT: movq %rcx, %rax
298 ; SSE41-NEXT: subq %rdx, %rax
299 ; SSE41-NEXT: shrq %rax
300 ; SSE41-NEXT: addq %rdx, %rax
301 ; SSE41-NEXT: shrq $2, %rax
302 ; SSE41-NEXT: leaq (,%rax,8), %rdx
303 ; SSE41-NEXT: subq %rax, %rdx
304 ; SSE41-NEXT: subq %rdx, %rcx
305 ; SSE41-NEXT: movd %rcx, %xmm1
306 ; SSE41-NEXT: movd %xmm0, %rcx
307 ; SSE41-NEXT: movq %rcx, %rax
308 ; SSE41-NEXT: mulq %rsi
309 ; SSE41-NEXT: movq %rcx, %rax
310 ; SSE41-NEXT: subq %rdx, %rax
311 ; SSE41-NEXT: shrq %rax
312 ; SSE41-NEXT: addq %rdx, %rax
313 ; SSE41-NEXT: shrq $2, %rax
314 ; SSE41-NEXT: leaq (,%rax,8), %rdx
315 ; SSE41-NEXT: subq %rax, %rdx
316 ; SSE41-NEXT: subq %rdx, %rcx
317 ; SSE41-NEXT: movd %rcx, %xmm0
318 ; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
319 ; SSE41-NEXT: retq
323 ; AVX-NEXT: vpextrq $1, %xmm0, %rcx
324 ; AVX-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
325 ; AVX-NEXT: movq %rcx, %rax
326 ; AVX-NEXT: mulq %rsi
327 ; AVX-NEXT: movq %rcx, %rax
328 ; AVX-NEXT: subq %rdx, %rax
329 ; AVX-NEXT: shrq %rax
330 ; AVX-NEXT: addq %rdx, %rax
331 ; AVX-NEXT: shrq $2, %rax
332 ; AVX-NEXT: leaq (,%rax,8), %rdx
333 ; AVX-NEXT: subq %rax, %rdx
334 ; AVX-NEXT: subq %rdx, %rcx
335 ; AVX-NEXT: vmovq %rcx, %xmm1
336 ; AVX-NEXT: vmovq %xmm0, %rcx
337 ; AVX-NEXT: movq %rcx, %rax
338 ; AVX-NEXT: mulq %rsi
339 ; AVX-NEXT: movq %rcx, %rax
340 ; AVX-NEXT: subq %rdx, %rax
341 ; AVX-NEXT: shrq %rax
342 ; AVX-NEXT: addq %rdx, %rax
343 ; AVX-NEXT: shrq $2, %rax
344 ; AVX-NEXT: leaq (,%rax,8), %rdx
345 ; AVX-NEXT: subq %rax, %rdx
346 ; AVX-NEXT: subq %rdx, %rcx
347 ; AVX-NEXT: vmovq %rcx, %xmm0
348 ; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
349 ; AVX-NEXT: retq
357 ; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]
358 ; SSE2-NEXT: movdqa %xmm0, %xmm2
359 ; SSE2-NEXT: pmuludq %xmm1, %xmm2
360 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,3,2,3]
361 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
362 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
363 ; SSE2-NEXT: pmuludq %xmm1, %xmm3
364 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3]
365 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
366 ; SSE2-NEXT: movdqa %xmm0, %xmm1
367 ; SSE2-NEXT: psubd %xmm2, %xmm1
368 ; SSE2-NEXT: psrld $1, %xmm1
369 ; SSE2-NEXT: paddd %xmm2, %xmm1
370 ; SSE2-NEXT: psrld $2, %xmm1
371 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [7,7,7,7]
372 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]
373 ; SSE2-NEXT: pmuludq %xmm2, %xmm1
374 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
375 ; SSE2-NEXT: pmuludq %xmm2, %xmm3
376 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[0,2,2,3]
377 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
378 ; SSE2-NEXT: psubd %xmm1, %xmm0
379 ; SSE2-NEXT: retq
383 ; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]
384 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
385 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
386 ; SSE41-NEXT: pmuludq %xmm2, %xmm3
387 ; SSE41-NEXT: pmuludq %xmm0, %xmm1
388 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
389 ; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]
390 ; SSE41-NEXT: movdqa %xmm0, %xmm2
391 ; SSE41-NEXT: psubd %xmm1, %xmm2
392 ; SSE41-NEXT: psrld $1, %xmm2
393 ; SSE41-NEXT: paddd %xmm1, %xmm2
394 ; SSE41-NEXT: psrld $2, %xmm2
395 ; SSE41-NEXT: pmulld {{.*}}(%rip), %xmm2
396 ; SSE41-NEXT: psubd %xmm2, %xmm0
397 ; SSE41-NEXT: retq
401 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [613566757,613566757,613566757,613566757]
402 ; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
403 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
404 ; AVX1-NEXT: vpmuludq %xmm2, %xmm3, %xmm2
405 ; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm1
406 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
407 ; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
408 ; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm2
409 ; AVX1-NEXT: vpsrld $1, %xmm2, %xmm2
410 ; AVX1-NEXT: vpaddd %xmm1, %xmm2, %xmm1
411 ; AVX1-NEXT: vpsrld $2, %xmm1, %xmm1
412 ; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm1, %xmm1
413 ; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm0
414 ; AVX1-NEXT: retq
418 ; AVX2-NEXT
419 ; AVX2-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
420 ; AVX2-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
421 ; AVX2-NEXT: vpmuludq %xmm2, %xmm3, %xmm2
422 ; AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm1
423 ; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
424 ; AVX2-NEXT: vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]
425 ; AVX2-NEXT: vpsubd %xmm1, %xmm0, %xmm2
426 ; AVX2-NEXT: vpsrld $1, %xmm2, %xmm2
427 ; AVX2-NEXT: vpaddd %xmm1, %xmm2, %xmm1
428 ; AVX2-NEXT: vpsrld $2, %xmm1, %xmm1
429 ; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %xmm2
430 ; AVX2-NEXT: vpmulld %xmm2, %xmm1, %xmm1
431 ; AVX2-NEXT: vpsubd %xmm1, %xmm0, %xmm0
432 ; AVX2-NEXT: retq
440 ; SSE-NEXT: movdqa {{.*#+}} xmm1 = [9363,9363,9363,9363,9363,9363,9363,9363]
441 ; SSE-NEXT: pmulhuw %xmm0, %xmm1
442 ; SSE-NEXT: movdqa %xmm0, %xmm2
443 ; SSE-NEXT: psubw %xmm1, %xmm2
444 ; SSE-NEXT: psrlw $1, %xmm2
445 ; SSE-NEXT: paddw %xmm1, %xmm2
446 ; SSE-NEXT: psrlw $2, %xmm2
447 ; SSE-NEXT: pmullw {{.*}}(%rip), %xmm2
448 ; SSE-NEXT: psubw %xmm2, %xmm0
449 ; SSE-NEXT: retq
453 ; AVX-NEXT: vpmulhuw {{.*}}(%rip), %xmm0, %xmm1
454 ; AVX-NEXT: vpsubw %xmm1, %xmm0, %xmm2
455 ; AVX-NEXT: vpsrlw $1, %xmm2, %xmm2
456 ; AVX-NEXT: vpaddw %xmm1, %xmm2, %xmm1
457 ; AVX-NEXT: vpsrlw $2, %xmm1, %xmm1
458 ; AVX-NEXT: vpmullw {{.*}}(%rip), %xmm1, %xmm1
459 ; AVX-NEXT: vpsubw %xmm1, %xmm0, %xmm0
460 ; AVX-NEXT: retq
468 ; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37]
469 ; SSE2-NEXT: psrlw $8, %xmm1
470 ; SSE2-NEXT: movdqa %xmm0, %xmm2
471 ; SSE2-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
472 ; SSE2-NEXT: psrlw $8, %xmm2
473 ; SSE2-NEXT: pmullw %xmm1, %xmm2
474 ; SSE2-NEXT: psrlw $8, %xmm2
475 ; SSE2-NEXT: movdqa %xmm0, %xmm3
476 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
477 ; SSE2-NEXT: psrlw $8, %xmm3
478 ; SSE2-NEXT: pmullw %xmm1, %xmm3
479 ; SSE2-NEXT: psrlw $8, %xmm3
480 ; SSE2-NEXT: packuswb %xmm2, %xmm3
481 ; SSE2-NEXT: movdqa %xmm0, %xmm1
482 ; SSE2-NEXT: psubb %xmm3, %xmm1
483 ; SSE2-NEXT: psrlw $1, %xmm1
484 ; SSE2-NEXT: pand {{.*}}(%rip), %xmm1
485 ; SSE2-NEXT: paddb %xmm3, %xmm1
486 ; SSE2-NEXT: psrlw $2, %xmm1
487 ; SSE2-NEXT: pand {{.*}}(%rip), %xmm1
488 ; SSE2-NEXT: movdqa %xmm1, %xmm2
489 ; SSE2-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
490 ; SSE2-NEXT: psraw $8, %xmm2
491 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
492 ; SSE2-NEXT: psraw $8, %xmm3
493 ; SSE2-NEXT: pmullw %xmm3, %xmm2
494 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]
495 ; SSE2-NEXT: pand %xmm4, %xmm2
496 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
497 ; SSE2-NEXT: psraw $8, %xmm1
498 ; SSE2-NEXT: pmullw %xmm3, %xmm1
499 ; SSE2-NEXT: pand %xmm4, %xmm1
500 ; SSE2-NEXT: packuswb %xmm2, %xmm1
501 ; SSE2-NEXT: psubb %xmm1, %xmm0
502 ; SSE2-NEXT: retq
506 ; SSE41-NEXT: pmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
507 ; SSE41-NEXT: pmovzxbw {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
508 ; SSE41-NEXT: pmullw %xmm2, %xmm1
509 ; SSE41-NEXT: psrlw $8, %xmm1
510 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]
511 ; SSE41-NEXT: pmovzxbw {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero
512 ; SSE41-NEXT: pmullw %xmm2, %xmm3
513 ; SSE41-NEXT: psrlw $8, %xmm3
514 ; SSE41-NEXT: packuswb %xmm3, %xmm1
515 ; SSE41-NEXT: movdqa %xmm0, %xmm2
516 ; SSE41-NEXT: psubb %xmm1, %xmm2
517 ; SSE41-NEXT: psrlw $1, %xmm2
518 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm2
519 ; SSE41-NEXT: paddb %xmm1, %xmm2
520 ; SSE41-NEXT: psrlw $2, %xmm2
521 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm2
522 ; SSE41-NEXT: pmovsxbw %xmm2, %xmm1
523 ; SSE41-NEXT: pmovsxbw {{.*}}(%rip), %xmm3
524 ; SSE41-NEXT: pmullw %xmm3, %xmm1
525 ; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]
526 ; SSE41-NEXT: pand %xmm4, %xmm1
527 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]
528 ; SSE41-NEXT: pmovsxbw %xmm2, %xmm2
529 ; SSE41-NEXT: pmullw %xmm3, %xmm2
530 ; SSE41-NEXT: pand %xmm4, %xmm2
531 ; SSE41-NEXT: packuswb %xmm2, %xmm1
532 ; SSE41-NEXT: psubb %xmm1, %xmm0
533 ; SSE41-NEXT: retq
537 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
538 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
539 ; AVX1-NEXT: vpmullw %xmm2, %xmm1, %xmm1
540 ; AVX1-NEXT: vpsrlw $8, %xmm1, %xmm1
541 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1]
542 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero
543 ; AVX1-NEXT: vpmullw %xmm2, %xmm3, %xmm2
544 ; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2
545 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
546 ; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm2
547 ; AVX1-NEXT: vpsrlw $1, %xmm2, %xmm2
548 ; AVX1-NEXT: vpand {{.*}}(%rip), %xmm2, %xmm2
549 ; AVX1-NEXT: vpaddb %xmm1, %xmm2, %xmm1
550 ; AVX1-NEXT: vpsrlw $2, %xmm1, %xmm1
551 ; AVX1-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
552 ; AVX1-NEXT: vpmovsxbw %xmm1, %xmm2
553 ; AVX1-NEXT: vpmovsxbw {{.*}}(%rip), %xmm3
554 ; AVX1-NEXT: vpmullw %xmm3, %xmm2, %xmm2
555 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]
556 ; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2
557 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
558 ; AVX1-NEXT: vpmovsxbw %xmm1, %xmm1
559 ; AVX1-NEXT: vpmullw %xmm3, %xmm1, %xmm1
560 ; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1
561 ; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1
562 ; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm0
563 ; AVX1-NEXT: retq
567 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
568 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero
569 ; AVX2-NEXT: vpmullw %ymm2, %ymm1, %ymm1
570 ; AVX2-NEXT: vpsrlw $8, %ymm1, %ymm1
571 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
572 ; AVX2-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
573 ; AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm2
574 ; AVX2-NEXT: vpsrlw $1, %xmm2, %xmm2
575 ; AVX2-NEXT: vpand {{.*}}(%rip), %xmm2, %xmm2
576 ; AVX2-NEXT: vpaddb %xmm1, %xmm2, %xmm1
577 ; AVX2-NEXT: vpsrlw $2, %xmm1, %xmm1
578 ; AVX2-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
579 ; AVX2-NEXT: vpmovsxbw %xmm1, %ymm1
580 ; AVX2-NEXT: vpmovsxbw {{.*}}(%rip), %ymm2
581 ; AVX2-NEXT: vpmullw %ymm2, %ymm1, %ymm1
582 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
583 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
584 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
585 ; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1
586 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
587 ; AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm0
588 ; AVX2-NEXT: vzeroupper
589 ; AVX2-NEXT: retq