Home | History | Annotate | Download | only in X86

Lines Matching full:next

12 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
13 ; AVX1-NEXT: vpextrq $1, %xmm1, %rcx
14 ; AVX1-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
15 ; AVX1-NEXT: movq %rcx, %rax
16 ; AVX1-NEXT: mulq %rsi
17 ; AVX1-NEXT: subq %rdx, %rcx
18 ; AVX1-NEXT: shrq %rcx
19 ; AVX1-NEXT: addq %rdx, %rcx
20 ; AVX1-NEXT: shrq $2, %rcx
21 ; AVX1-NEXT: vmovq %rcx, %xmm2
22 ; AVX1-NEXT: vmovq %xmm1, %rcx
23 ; AVX1-NEXT: movq %rcx, %rax
24 ; AVX1-NEXT: mulq %rsi
25 ; AVX1-NEXT: subq %rdx, %rcx
26 ; AVX1-NEXT: shrq %rcx
27 ; AVX1-NEXT: addq %rdx, %rcx
28 ; AVX1-NEXT: shrq $2, %rcx
29 ; AVX1-NEXT: vmovq %rcx, %xmm1
30 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
31 ; AVX1-NEXT: vpextrq $1, %xmm0, %rcx
32 ; AVX1-NEXT: movq %rcx, %rax
33 ; AVX1-NEXT: mulq %rsi
34 ; AVX1-NEXT: subq %rdx, %rcx
35 ; AVX1-NEXT: shrq %rcx
36 ; AVX1-NEXT: addq %rdx, %rcx
37 ; AVX1-NEXT: shrq $2, %rcx
38 ; AVX1-NEXT: vmovq %rcx, %xmm2
39 ; AVX1-NEXT: vmovq %xmm0, %rcx
40 ; AVX1-NEXT: movq %rcx, %rax
41 ; AVX1-NEXT: mulq %rsi
42 ; AVX1-NEXT: subq %rdx, %rcx
43 ; AVX1-NEXT: shrq %rcx
44 ; AVX1-NEXT: addq %rdx, %rcx
45 ; AVX1-NEXT: shrq $2, %rcx
46 ; AVX1-NEXT: vmovq %rcx, %xmm0
47 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
48 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
49 ; AVX1-NEXT: retq
53 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
54 ; AVX2-NEXT: vpextrq $1, %xmm1, %rcx
55 ; AVX2-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
56 ; AVX2-NEXT: movq %rcx, %rax
57 ; AVX2-NEXT: mulq %rsi
58 ; AVX2-NEXT: subq %rdx, %rcx
59 ; AVX2-NEXT: shrq %rcx
60 ; AVX2-NEXT: addq %rdx, %rcx
61 ; AVX2-NEXT: shrq $2, %rcx
62 ; AVX2-NEXT: vmovq %rcx, %xmm2
63 ; AVX2-NEXT: vmovq %xmm1, %rcx
64 ; AVX2-NEXT: movq %rcx, %rax
65 ; AVX2-NEXT: mulq %rsi
66 ; AVX2-NEXT: subq %rdx, %rcx
67 ; AVX2-NEXT: shrq %rcx
68 ; AVX2-NEXT: addq %rdx, %rcx
69 ; AVX2-NEXT: shrq $2, %rcx
70 ; AVX2-NEXT: vmovq %rcx, %xmm1
71 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
72 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
73 ; AVX2-NEXT: movq %rcx, %rax
74 ; AVX2-NEXT: mulq %rsi
75 ; AVX2-NEXT: subq %rdx, %rcx
76 ; AVX2-NEXT: shrq %rcx
77 ; AVX2-NEXT: addq %rdx, %rcx
78 ; AVX2-NEXT: shrq $2, %rcx
79 ; AVX2-NEXT: vmovq %rcx, %xmm2
80 ; AVX2-NEXT: vmovq %xmm0, %rcx
81 ; AVX2-NEXT: movq %rcx, %rax
82 ; AVX2-NEXT: mulq %rsi
83 ; AVX2-NEXT: subq %rdx, %rcx
84 ; AVX2-NEXT: shrq %rcx
85 ; AVX2-NEXT: addq %rdx, %rcx
86 ; AVX2-NEXT: shrq $2, %rcx
87 ; AVX2-NEXT: vmovq %rcx, %xmm0
88 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
89 ; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
90 ; AVX2-NEXT: retq
98 ; AVX1-NEXT: vmovdqa {{.*#+}} ymm1 = [613566757,613566757,613566757,613566757,613566757,613566757,613566757,613566757]
99 ; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
100 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
101 ; AVX1-NEXT: vpmuludq %xmm2, %xmm3, %xmm2
102 ; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm3
103 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
104 ; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1],xmm2[2,3],xmm3[4,5],xmm2[6,7]
105 ; AVX1-NEXT: vpsubd %xmm2, %xmm0, %xmm3
106 ; AVX1-NEXT: vpsrld $1, %xmm3, %xmm3
107 ; AVX1-NEXT: vpaddd %xmm2, %xmm3, %xmm2
108 ; AVX1-NEXT: vpsrld $2, %xmm2, %xmm2
109 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
110 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]
111 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
112 ; AVX1-NEXT: vpshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
113 ; AVX1-NEXT: vpmuludq %xmm3, %xmm4, %xmm3
114 ; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm1
115 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
116 ; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]
117 ; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm0
118 ; AVX1-NEXT: vpsrld $1, %xmm0, %xmm0
119 ; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0
120 ; AVX1-NEXT: vpsrld $2, %xmm0, %xmm0
121 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
122 ; AVX1-NEXT: retq
126 ; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm1
127 ; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm1[1,1,3,3,5,5,7,7]
128 ; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm0[1,1,3,3,5,5,7,7]
129 ; AVX2-NEXT: vpmuludq %ymm2, %ymm3, %ymm2
130 ; AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm1
131 ; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[1,1,3,3,5,5,7,7]
132 ; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0],ymm2[1],ymm1[2],ymm2[3],ymm1[4],ymm2[5],ymm1[6],ymm2[7]
133 ; AVX2-NEXT: vpsubd %ymm1, %ymm0, %ymm0
134 ; AVX2-NEXT: vpsrld $1, %ymm0, %ymm0
135 ; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0
136 ; AVX2-NEXT: vpsrld $2, %ymm0, %ymm0
137 ; AVX2-NEXT: retq
145 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9363,9363,9363,9363,9363,9363,9363,9363]
146 ; AVX1-NEXT: vpmulhuw %xmm1, %xmm0, %xmm2
147 ; AVX1-NEXT: vpsubw %xmm2, %xmm0, %xmm3
148 ; AVX1-NEXT: vpsrlw $1, %xmm3, %xmm3
149 ; AVX1-NEXT: vpaddw %xmm2, %xmm3, %xmm2
150 ; AVX1-NEXT: vpsrlw $2, %xmm2, %xmm2
151 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
152 ; AVX1-NEXT: vpmulhuw %xmm1, %xmm0, %xmm1
153 ; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm0
154 ; AVX1-NEXT: vpsrlw $1, %xmm0, %xmm0
155 ; AVX1-NEXT: vpaddw %xmm1, %xmm0, %xmm0
156 ; AVX1-NEXT: vpsrlw $2, %xmm0, %xmm0
157 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
158 ; AVX1-NEXT: retq
162 ; AVX2-NEXT: vpmulhuw {{.*}}(%rip), %ymm0, %ymm1
163 ; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm0
164 ; AVX2-NEXT: vpsrlw $1, %ymm0, %ymm0
165 ; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm0
166 ; AVX2-NEXT: vpsrlw $2, %ymm0, %ymm0
167 ; AVX2-NEXT: retq
175 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
176 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero
177 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm3 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
178 ; AVX1-NEXT: vpmullw %xmm3, %xmm2, %xmm2
179 ; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2
180 ; AVX1-NEXT: vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]
181 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm4 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero
182 ; AVX1-NEXT: vpmullw %xmm3, %xmm4, %xmm4
183 ; AVX1-NEXT: vpsrlw $8, %xmm4, %xmm4
184 ; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2
185 ; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm1
186 ; AVX1-NEXT: vpsrlw $1, %xmm1, %xmm1
187 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
188 ; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1
189 ; AVX1-NEXT: vpaddb %xmm2, %xmm1, %xmm1
190 ; AVX1-NEXT: vpsrlw $2, %xmm1, %xmm1
191 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
192 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm1
193 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm5 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
194 ; AVX1-NEXT: vpmullw %xmm3, %xmm5, %xmm5
195 ; AVX1-NEXT: vpsrlw $8, %xmm5, %xmm5
196 ; AVX1-NEXT: vpshufd {{.*#+}} xmm6 = xmm0[2,3,0,1]
197 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm6 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero,xmm6[4],zero,xmm6[5],zero,xmm6[6],zero,xmm6[7],zero
198 ; AVX1-NEXT: vpmullw %xmm3, %xmm6, %xmm3
199 ; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3
200 ; AVX1-NEXT: vpackuswb %xmm3, %xmm5, %xmm3
201 ; AVX1-NEXT: vpsubb %xmm3, %xmm0, %xmm0
202 ; AVX1-NEXT: vpsrlw $1, %xmm0, %xmm0
203 ; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0
204 ; AVX1-NEXT: vpaddb %xmm3, %xmm0, %xmm0
205 ; AVX1-NEXT: vpsrlw $2, %xmm0, %xmm0
206 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
207 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
208 ; AVX1-NEXT: retq
212 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37]
213 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
214 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero
215 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
216 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero
217 ; AVX2-NEXT: vpmullw %ymm2, %ymm3, %ymm2
218 ; AVX2-NEXT: vpsrlw $8, %ymm2, %ymm2
219 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero
220 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm3 = 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
221 ; AVX2-NEXT: vpmullw %ymm1, %ymm3, %ymm1
222 ; AVX2-NEXT: vpsrlw $8, %ymm1, %ymm1
223 ; AVX2-NEXT: vperm2i128 {{.*#+}} ymm3 = ymm1[2,3],ymm2[2,3]
224 ; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
225 ; AVX2-NEXT: vpackuswb %ymm3, %ymm1, %ymm1
226 ; AVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm0
227 ; AVX2-NEXT: vpsrlw $1, %ymm0, %ymm0
228 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
229 ; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm0
230 ; AVX2-NEXT: vpsrlw $2, %ymm0, %ymm0
231 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
232 ; AVX2-NEXT: retq
244 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
245 ; AVX1-NEXT: vpextrq $1, %xmm1, %rcx
246 ; AVX1-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
247 ; AVX1-NEXT: movq %rcx, %rax
248 ; AVX1-NEXT: mulq %rsi
249 ; AVX1-NEXT: movq %rcx, %rax
250 ; AVX1-NEXT: subq %rdx, %rax
251 ; AVX1-NEXT: shrq %rax
252 ; AVX1-NEXT: addq %rdx, %rax
253 ; AVX1-NEXT: shrq $2, %rax
254 ; AVX1-NEXT: leaq (,%rax,8), %rdx
255 ; AVX1-NEXT: subq %rax, %rdx
256 ; AVX1-NEXT: subq %rdx, %rcx
257 ; AVX1-NEXT: vmovq %rcx, %xmm2
258 ; AVX1-NEXT: vmovq %xmm1, %rcx
259 ; AVX1-NEXT: movq %rcx, %rax
260 ; AVX1-NEXT: mulq %rsi
261 ; AVX1-NEXT: movq %rcx, %rax
262 ; AVX1-NEXT: subq %rdx, %rax
263 ; AVX1-NEXT: shrq %rax
264 ; AVX1-NEXT: addq %rdx, %rax
265 ; AVX1-NEXT: shrq $2, %rax
266 ; AVX1-NEXT: leaq (,%rax,8), %rdx
267 ; AVX1-NEXT: subq %rax, %rdx
268 ; AVX1-NEXT: subq %rdx, %rcx
269 ; AVX1-NEXT: vmovq %rcx, %xmm1
270 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
271 ; AVX1-NEXT: vpextrq $1, %xmm0, %rcx
272 ; AVX1-NEXT: movq %rcx, %rax
273 ; AVX1-NEXT: mulq %rsi
274 ; AVX1-NEXT: movq %rcx, %rax
275 ; AVX1-NEXT: subq %rdx, %rax
276 ; AVX1-NEXT: shrq %rax
277 ; AVX1-NEXT: addq %rdx, %rax
278 ; AVX1-NEXT: shrq $2, %rax
279 ; AVX1-NEXT: leaq (,%rax,8), %rdx
280 ; AVX1-NEXT: subq %rax, %rdx
281 ; AVX1-NEXT: subq %rdx, %rcx
282 ; AVX1-NEXT: vmovq %rcx, %xmm2
283 ; AVX1-NEXT: vmovq %xmm0, %rcx
284 ; AVX1-NEXT: movq %rcx, %rax
285 ; AVX1-NEXT: mulq %rsi
286 ; AVX1-NEXT: movq %rcx, %rax
287 ; AVX1-NEXT: subq %rdx, %rax
288 ; AVX1-NEXT: shrq %rax
289 ; AVX1-NEXT: addq %rdx, %rax
290 ; AVX1-NEXT: shrq $2, %rax
291 ; AVX1-NEXT: leaq (,%rax,8), %rdx
292 ; AVX1-NEXT: subq %rax, %rdx
293 ; AVX1-NEXT: subq %rdx, %rcx
294 ; AVX1-NEXT: vmovq %rcx, %xmm0
295 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
296 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
297 ; AVX1-NEXT: retq
301 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
302 ; AVX2-NEXT: vpextrq $1, %xmm1, %rcx
303 ; AVX2-NEXT: movabsq $2635249153387078803, %rsi # imm = 0x2492492492492493
304 ; AVX2-NEXT: movq %rcx, %rax
305 ; AVX2-NEXT: mulq %rsi
306 ; AVX2-NEXT: movq %rcx, %rax
307 ; AVX2-NEXT: subq %rdx, %rax
308 ; AVX2-NEXT: shrq %rax
309 ; AVX2-NEXT: addq %rdx, %rax
310 ; AVX2-NEXT: shrq $2, %rax
311 ; AVX2-NEXT: leaq (,%rax,8), %rdx
312 ; AVX2-NEXT: subq %rax, %rdx
313 ; AVX2-NEXT: subq %rdx, %rcx
314 ; AVX2-NEXT: vmovq %rcx, %xmm2
315 ; AVX2-NEXT: vmovq %xmm1, %rcx
316 ; AVX2-NEXT: movq %rcx, %rax
317 ; AVX2-NEXT: mulq %rsi
318 ; AVX2-NEXT: movq %rcx, %rax
319 ; AVX2-NEXT: subq %rdx, %rax
320 ; AVX2-NEXT: shrq %rax
321 ; AVX2-NEXT: addq %rdx, %rax
322 ; AVX2-NEXT: shrq $2, %rax
323 ; AVX2-NEXT: leaq (,%rax,8), %rdx
324 ; AVX2-NEXT: subq %rax, %rdx
325 ; AVX2-NEXT: subq %rdx, %rcx
326 ; AVX2-NEXT: vmovq %rcx, %xmm1
327 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
328 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
329 ; AVX2-NEXT: movq %rcx, %rax
330 ; AVX2-NEXT: mulq %rsi
331 ; AVX2-NEXT: movq %rcx, %rax
332 ; AVX2-NEXT: subq %rdx, %rax
333 ; AVX2-NEXT: shrq %rax
334 ; AVX2-NEXT: addq %rdx, %rax
335 ; AVX2-NEXT: shrq $2, %rax
336 ; AVX2-NEXT: leaq (,%rax,8), %rdx
337 ; AVX2-NEXT: subq %rax, %rdx
338 ; AVX2-NEXT: subq %rdx, %rcx
339 ; AVX2-NEXT: vmovq %rcx, %xmm2
340 ; AVX2-NEXT: vmovq %xmm0, %rcx
341 ; AVX2-NEXT: movq %rcx, %rax
342 ; AVX2-NEXT: mulq %rsi
343 ; AVX2-NEXT: movq %rcx, %rax
344 ; AVX2-NEXT: subq %rdx, %rax
345 ; AVX2-NEXT: shrq %rax
346 ; AVX2-NEXT: addq %rdx, %rax
347 ; AVX2-NEXT: shrq $2, %rax
348 ; AVX2-NEXT: leaq (,%rax,8), %rdx
349 ; AVX2-NEXT: subq %rax, %rdx
350 ; AVX2-NEXT: subq %rdx, %rcx
351 ; AVX2-NEXT: vmovq %rcx, %xmm0
352 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
353 ; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
354 ; AVX2-NEXT: retq
362 ; AVX1-NEXT: vmovaps {{.*#+}} ymm1 = [613566757,613566757,613566757,613566757,613566757,613566757,613566757,613566757]
363 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
364 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
365 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
366 ; AVX1-NEXT: vpshufd {{.*#+}} xmm5 = xmm4[1,1,3,3]
367 ; AVX1-NEXT: vpmuludq %xmm3, %xmm5, %xmm3
368 ; AVX1-NEXT: vpmuludq %xmm2, %xmm4, %xmm2
369 ; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
370 ; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm3[2,3],xmm2[4,5],xmm3[6,7]
371 ; AVX1-NEXT: vpsubd %xmm2, %xmm4, %xmm3
372 ; AVX1-NEXT: vpsrld $1, %xmm3, %xmm3
373 ; AVX1-NEXT: vpaddd %xmm2, %xmm3, %xmm2
374 ; AVX1-NEXT: vpsrld $2, %xmm2, %xmm2
375 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [7,7,7,7]
376 ; AVX1-NEXT: vpmulld %xmm3, %xmm2, %xmm2
377 ; AVX1-NEXT: vpsubd %xmm2, %xmm4, %xmm2
378 ; AVX1-NEXT: vpshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]
379 ; AVX1-NEXT: vpshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
380 ; AVX1-NEXT: vpmuludq %xmm4, %xmm5, %xmm4
381 ; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm1
382 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
383 ; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm4[2,3],xmm1[4,5],xmm4[6,7]
384 ; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm4
385 ; AVX1-NEXT: vpsrld $1, %xmm4, %xmm4
386 ; AVX1-NEXT: vpaddd %xmm1, %xmm4, %xmm1
387 ; AVX1-NEXT: vpsrld $2, %xmm1, %xmm1
388 ; AVX1-NEXT: vpmulld %xmm3, %xmm1, %xmm1
389 ; AVX1-NEXT
390 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
391 ; AVX1-NEXT: retq
395 ; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm1
396 ; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm1[1,1,3,3,5,5,7,7]
397 ; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm0[1,1,3,3,5,5,7,7]
398 ; AVX2-NEXT: vpmuludq %ymm2, %ymm3, %ymm2
399 ; AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm1
400 ; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[1,1,3,3,5,5,7,7]
401 ; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0],ymm2[1],ymm1[2],ymm2[3],ymm1[4],ymm2[5],ymm1[6],ymm2[7]
402 ; AVX2-NEXT: vpsubd %ymm1, %ymm0, %ymm2
403 ; AVX2-NEXT: vpsrld $1, %ymm2, %ymm2
404 ; AVX2-NEXT: vpaddd %ymm1, %ymm2, %ymm1
405 ; AVX2-NEXT: vpsrld $2, %ymm1, %ymm1
406 ; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm2
407 ; AVX2-NEXT: vpmulld %ymm2, %ymm1, %ymm1
408 ; AVX2-NEXT: vpsubd %ymm1, %ymm0, %ymm0
409 ; AVX2-NEXT: retq
417 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
418 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9363,9363,9363,9363,9363,9363,9363,9363]
419 ; AVX1-NEXT: vpmulhuw %xmm2, %xmm1, %xmm3
420 ; AVX1-NEXT: vpsubw %xmm3, %xmm1, %xmm4
421 ; AVX1-NEXT: vpsrlw $1, %xmm4, %xmm4
422 ; AVX1-NEXT: vpaddw %xmm3, %xmm4, %xmm3
423 ; AVX1-NEXT: vpsrlw $2, %xmm3, %xmm3
424 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [7,7,7,7,7,7,7,7]
425 ; AVX1-NEXT: vpmullw %xmm4, %xmm3, %xmm3
426 ; AVX1-NEXT: vpsubw %xmm3, %xmm1, %xmm1
427 ; AVX1-NEXT: vpmulhuw %xmm2, %xmm0, %xmm2
428 ; AVX1-NEXT: vpsubw %xmm2, %xmm0, %xmm3
429 ; AVX1-NEXT: vpsrlw $1, %xmm3, %xmm3
430 ; AVX1-NEXT: vpaddw %xmm2, %xmm3, %xmm2
431 ; AVX1-NEXT: vpsrlw $2, %xmm2, %xmm2
432 ; AVX1-NEXT: vpmullw %xmm4, %xmm2, %xmm2
433 ; AVX1-NEXT: vpsubw %xmm2, %xmm0, %xmm0
434 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
435 ; AVX1-NEXT: retq
439 ; AVX2-NEXT: vpmulhuw {{.*}}(%rip), %ymm0, %ymm1
440 ; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm2
441 ; AVX2-NEXT: vpsrlw $1, %ymm2, %ymm2
442 ; AVX2-NEXT: vpaddw %ymm1, %ymm2, %ymm1
443 ; AVX2-NEXT: vpsrlw $2, %ymm1, %ymm1
444 ; AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm1, %ymm1
445 ; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm0
446 ; AVX2-NEXT: retq
454 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
455 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm3 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero
456 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
457 ; AVX1-NEXT: vpmullw %xmm1, %xmm3, %xmm3
458 ; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3
459 ; AVX1-NEXT: vpshufd {{.*#+}} xmm4 = xmm2[2,3,0,1]
460 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm4 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero
461 ; AVX1-NEXT: vpmullw %xmm1, %xmm4, %xmm4
462 ; AVX1-NEXT: vpsrlw $8, %xmm4, %xmm4
463 ; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3
464 ; AVX1-NEXT: vpsubb %xmm3, %xmm2, %xmm4
465 ; AVX1-NEXT: vpsrlw $1, %xmm4, %xmm4
466 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
467 ; AVX1-NEXT: vpand %xmm8, %xmm4, %xmm4
468 ; AVX1-NEXT: vpaddb %xmm3, %xmm4, %xmm3
469 ; AVX1-NEXT: vpsrlw $2, %xmm3, %xmm3
470 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
471 ; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3
472 ; AVX1-NEXT: vpmovsxbw %xmm3, %xmm6
473 ; AVX1-NEXT: vpmovsxbw {{.*}}(%rip), %xmm7
474 ; AVX1-NEXT: vpmullw %xmm7, %xmm6, %xmm6
475 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255]
476 ; AVX1-NEXT: vpand %xmm5, %xmm6, %xmm6
477 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
478 ; AVX1-NEXT: vpmovsxbw %xmm3, %xmm3
479 ; AVX1-NEXT: vpmullw %xmm7, %xmm3, %xmm3
480 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
481 ; AVX1-NEXT: vpackuswb %xmm3, %xmm6, %xmm3
482 ; AVX1-NEXT: vpsubb %xmm3, %xmm2, %xmm2
483 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
484 ; AVX1-NEXT: vpmullw %xmm1, %xmm3, %xmm3
485 ; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3
486 ; AVX1-NEXT: vpshufd {{.*#+}} xmm6 = xmm0[2,3,0,1]
487 ; AVX1-NEXT: vpmovzxbw {{.*#+}} xmm6 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero,xmm6[4],zero,xmm6[5],zero,xmm6[6],zero,xmm6[7],zero
488 ; AVX1-NEXT: vpmullw %xmm1, %xmm6, %xmm1
489 ; AVX1-NEXT: vpsrlw $8, %xmm1, %xmm1
490 ; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1
491 ; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm3
492 ; AVX1-NEXT: vpsrlw $1, %xmm3, %xmm3
493 ; AVX1-NEXT: vpand %xmm8, %xmm3, %xmm3
494 ; AVX1-NEXT: vpaddb %xmm1, %xmm3, %xmm1
495 ; AVX1-NEXT: vpsrlw $2, %xmm1, %xmm1
496 ; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1
497 ; AVX1-NEXT: vpmovsxbw %xmm1, %xmm3
498 ; AVX1-NEXT: vpmullw %xmm7, %xmm3, %xmm3
499 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
500 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
501 ; AVX1-NEXT: vpmovsxbw %xmm1, %xmm1
502 ; AVX1-NEXT: vpmullw %xmm7, %xmm1, %xmm1
503 ; AVX1-NEXT: vpand %xmm5, %xmm1, %xmm1
504 ; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1
505 ; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm0
506 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
507 ; AVX1-NEXT: retq
511 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37]
512 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
513 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero
514 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
515 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero
516 ; AVX2-NEXT: vpmullw %ymm2, %ymm3, %ymm2
517 ; AVX2-NEXT: vpsrlw $8, %ymm2, %ymm2
518 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero
519 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm3 = 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
520 ; AVX2-NEXT: vpmullw %ymm1, %ymm3, %ymm1
521 ; AVX2-NEXT: vpsrlw $8, %ymm1, %ymm1
522 ; AVX2-NEXT: vperm2i128 {{.*#+}} ymm3 = ymm1[2,3],ymm2[2,3]
523 ; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
524 ; AVX2-NEXT: vpackuswb %ymm3, %ymm1, %ymm1
525 ; AVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm2
526 ; AVX2-NEXT: vpsrlw $1, %ymm2, %ymm2
527 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2
528 ; AVX2-NEXT: vpaddb %ymm1, %ymm2, %ymm1
529 ; AVX2-NEXT: vpsrlw $2, %ymm1, %ymm1
530 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1
531 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
532 ; AVX2-NEXT: vpmovsxbw %xmm2, %ymm2
533 ; AVX2-NEXT: vpmovsxbw {{.*}}(%rip), %ymm3
534 ; AVX2-NEXT: vpmullw %ymm3, %ymm2, %ymm2
535 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm4
536 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm5 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
537 ; AVX2-NEXT: vpshufb %xmm5, %xmm4, %xmm4
538 ; AVX2-NEXT: vpshufb %xmm5, %xmm2, %xmm2
539 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
540 ; AVX2-NEXT: vpmovsxbw %xmm1, %ymm1
541 ; AVX2-NEXT: vpmullw %ymm3, %ymm1, %ymm1
542 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
543 ; AVX2-NEXT: vpshufb %xmm5, %xmm3, %xmm3
544 ; AVX2-NEXT: vpshufb %xmm5, %xmm1, %xmm1
545 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
546 ; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
547 ; AVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm0
548 ; AVX2-NEXT: retq