• Home
  • Raw
  • Download

Lines Matching +full:0 +full:x64

3 …llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,X64-SSE
4 …c < %s -mtriple=x86_64-unknown-unknown -mattr=+xop | FileCheck %s --check-prefixes=X64-AVX,X64-XOP
5 … < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=X64-AVX,X64-AVX2
6 …_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X64-AVX,X64-AVX512DQ
14 ; SSE: # %bb.0:
18 ; X64-AVX-LABEL: mul_v2i64_8:
19 ; X64-AVX: # %bb.0:
20 ; X64-AVX-NEXT: vpsllq $3, %xmm0, %xmm0
21 ; X64-AVX-NEXT: retq
28 ; SSE: # %bb.0:
32 ; X64-AVX-LABEL: mul_v4i32_8:
33 ; X64-AVX: # %bb.0:
34 ; X64-AVX-NEXT: vpslld $3, %xmm0, %xmm0
35 ; X64-AVX-NEXT: retq
42 ; SSE: # %bb.0:
46 ; X64-AVX-LABEL: mul_v8i16_8:
47 ; X64-AVX: # %bb.0:
48 ; X64-AVX-NEXT: vpsllw $3, %xmm0, %xmm0
49 ; X64-AVX-NEXT: retq
56 ; X86-SSE: # %bb.0:
61 ; X64-SSE-LABEL: mul_v16i8_32:
62 ; X64-SSE: # %bb.0:
63 ; X64-SSE-NEXT: psllw $5, %xmm0
64 ; X64-SSE-NEXT: pand {{.*}}(%rip), %xmm0
65 ; X64-SSE-NEXT: retq
67 ; X64-XOP-LABEL: mul_v16i8_32:
68 ; X64-XOP: # %bb.0:
69 ; X64-XOP-NEXT: vpshlb {{.*}}(%rip), %xmm0, %xmm0
70 ; X64-XOP-NEXT: retq
72 ; X64-AVX2-LABEL: mul_v16i8_32:
73 ; X64-AVX2: # %bb.0:
74 ; X64-AVX2-NEXT: vpsllw $5, %xmm0, %xmm0
75 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
76 ; X64-AVX2-NEXT: retq
78 ; X64-AVX512DQ-LABEL: mul_v16i8_32:
79 ; X64-AVX512DQ: # %bb.0:
80 ; X64-AVX512DQ-NEXT: vpsllw $5, %xmm0, %xmm0
81 ; X64-AVX512DQ-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
82 ; X64-AVX512DQ-NEXT: retq
93 ; SSE: # %bb.0:
97 ; SSE-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
100 ; X64-XOP-LABEL: mul_v2i64_32_8:
101 ; X64-XOP: # %bb.0:
102 ; X64-XOP-NEXT: vpshlq {{.*}}(%rip), %xmm0, %xmm0
103 ; X64-XOP-NEXT: retq
105 ; X64-AVX2-LABEL: mul_v2i64_32_8:
106 ; X64-AVX2: # %bb.0:
107 ; X64-AVX2-NEXT: vpsllvq {{.*}}(%rip), %xmm0, %xmm0
108 ; X64-AVX2-NEXT: retq
110 ; X64-AVX512DQ-LABEL: mul_v2i64_32_8:
111 ; X64-AVX512DQ: # %bb.0:
112 ; X64-AVX512DQ-NEXT: vpsllvq {{.*}}(%rip), %xmm0, %xmm0
113 ; X64-AVX512DQ-NEXT: retq
120 ; X86-SSE: # %bb.0:
124 ; X64-SSE-LABEL: mul_v4i32_1_2_4_8:
125 ; X64-SSE: # %bb.0:
126 ; X64-SSE-NEXT: pmulld {{.*}}(%rip), %xmm0
127 ; X64-SSE-NEXT: retq
129 ; X64-XOP-LABEL: mul_v4i32_1_2_4_8:
130 ; X64-XOP: # %bb.0:
131 ; X64-XOP-NEXT: vpshld {{.*}}(%rip), %xmm0, %xmm0
132 ; X64-XOP-NEXT: retq
134 ; X64-AVX2-LABEL: mul_v4i32_1_2_4_8:
135 ; X64-AVX2: # %bb.0:
136 ; X64-AVX2-NEXT: vpsllvd {{.*}}(%rip), %xmm0, %xmm0
137 ; X64-AVX2-NEXT: retq
139 ; X64-AVX512DQ-LABEL: mul_v4i32_1_2_4_8:
140 ; X64-AVX512DQ: # %bb.0:
141 ; X64-AVX512DQ-NEXT: vpsllvd {{.*}}(%rip), %xmm0, %xmm0
142 ; X64-AVX512DQ-NEXT: retq
149 ; X86-SSE: # %bb.0:
153 ; X64-SSE-LABEL: mul_v8i16_1_2_4_8_16_32_64_128:
154 ; X64-SSE: # %bb.0:
155 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm0
156 ; X64-SSE-NEXT: retq
158 ; X64-XOP-LABEL: mul_v8i16_1_2_4_8_16_32_64_128:
159 ; X64-XOP: # %bb.0:
160 ; X64-XOP-NEXT: vpshlw {{.*}}(%rip), %xmm0, %xmm0
161 ; X64-XOP-NEXT: retq
163 ; X64-AVX2-LABEL: mul_v8i16_1_2_4_8_16_32_64_128:
164 ; X64-AVX2: # %bb.0:
165 ; X64-AVX2-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
166 ; X64-AVX2-NEXT: retq
168 ; X64-AVX512DQ-LABEL: mul_v8i16_1_2_4_8_16_32_64_128:
169 ; X64-AVX512DQ: # %bb.0:
170 ; X64-AVX512DQ-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
171 ; X64-AVX512DQ-NEXT: retq
178 ; SSE: # %bb.0:
179 ; SSE-NEXT: pmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4]…
191 ; X64-XOP-LABEL: mul_v16i8_1_2_4_8_1_2_4_8_1_2_4_8_1_2_4_8:
192 ; X64-XOP: # %bb.0:
193 ; X64-XOP-NEXT: vpshlb {{.*}}(%rip), %xmm0, %xmm0
194 ; X64-XOP-NEXT: retq
196 ; X64-AVX2-LABEL: mul_v16i8_1_2_4_8_1_2_4_8_1_2_4_8_1_2_4_8:
197 ; X64-AVX2: # %bb.0:
198 ; X64-AVX2-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,x…
199 ; X64-AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
200 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
201 ; X64-AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
202 ; X64-AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
203 ; X64-AVX2-NEXT: vzeroupper
204 ; X64-AVX2-NEXT: retq
206 ; X64-AVX512DQ-LABEL: mul_v16i8_1_2_4_8_1_2_4_8_1_2_4_8_1_2_4_8:
207 ; X64-AVX512DQ: # %bb.0:
208 ; X64-AVX512DQ-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm…
209 ; X64-AVX512DQ-NEXT: vpsllvd {{.*}}(%rip), %zmm0, %zmm0
210 ; X64-AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0
211 ; X64-AVX512DQ-NEXT: vzeroupper
212 ; X64-AVX512DQ-NEXT: retq
223 ; SSE: # %bb.0:
230 ; X64-XOP-LABEL: mul_v2i64_17:
231 ; X64-XOP: # %bb.0:
232 ; X64-XOP-NEXT: vpsllq $4, %xmm0, %xmm1
233 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm1, %xmm0
234 ; X64-XOP-NEXT: retq
236 ; X64-AVX2-LABEL: mul_v2i64_17:
237 ; X64-AVX2: # %bb.0:
238 ; X64-AVX2-NEXT: vpsllq $4, %xmm0, %xmm1
239 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm1, %xmm0
240 ; X64-AVX2-NEXT: retq
242 ; X64-AVX512DQ-LABEL: mul_v2i64_17:
243 ; X64-AVX512DQ: # %bb.0:
244 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
245 ; X64-AVX512DQ-NEXT: retq
252 ; X86-SSE: # %bb.0:
256 ; X64-SSE-LABEL: mul_v4i32_17:
257 ; X64-SSE: # %bb.0:
258 ; X64-SSE-NEXT: pmulld {{.*}}(%rip), %xmm0
259 ; X64-SSE-NEXT: retq
261 ; X64-XOP-LABEL: mul_v4i32_17:
262 ; X64-XOP: # %bb.0:
263 ; X64-XOP-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0
264 ; X64-XOP-NEXT: retq
266 ; X64-AVX2-LABEL: mul_v4i32_17:
267 ; X64-AVX2: # %bb.0:
268 ; X64-AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
269 ; X64-AVX2-NEXT: vpmulld %xmm1, %xmm0, %xmm0
270 ; X64-AVX2-NEXT: retq
272 ; X64-AVX512DQ-LABEL: mul_v4i32_17:
273 ; X64-AVX512DQ: # %bb.0:
274 ; X64-AVX512DQ-NEXT: vpmulld {{.*}}(%rip){1to4}, %xmm0, %xmm0
275 ; X64-AVX512DQ-NEXT: retq
282 ; X86-SSE: # %bb.0:
286 ; X64-SSE-LABEL: mul_v8i16_17:
287 ; X64-SSE: # %bb.0:
288 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm0
289 ; X64-SSE-NEXT: retq
291 ; X64-AVX-LABEL: mul_v8i16_17:
292 ; X64-AVX: # %bb.0:
293 ; X64-AVX-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
294 ; X64-AVX-NEXT: retq
301 ; X86-SSE: # %bb.0:
309 ; X64-SSE-LABEL: mul_v16i8_17:
310 ; X64-SSE: # %bb.0:
311 ; X64-SSE-NEXT: movdqa %xmm0, %xmm1
312 ; X64-SSE-NEXT: psllw $4, %xmm1
313 ; X64-SSE-NEXT: pand {{.*}}(%rip), %xmm1
314 ; X64-SSE-NEXT: paddb %xmm0, %xmm1
315 ; X64-SSE-NEXT: movdqa %xmm1, %xmm0
316 ; X64-SSE-NEXT: retq
318 ; X64-XOP-LABEL: mul_v16i8_17:
319 ; X64-XOP: # %bb.0:
320 ; X64-XOP-NEXT: vpshlb {{.*}}(%rip), %xmm0, %xmm1
321 ; X64-XOP-NEXT: vpaddb %xmm0, %xmm1, %xmm0
322 ; X64-XOP-NEXT: retq
324 ; X64-AVX2-LABEL: mul_v16i8_17:
325 ; X64-AVX2: # %bb.0:
326 ; X64-AVX2-NEXT: vpsllw $4, %xmm0, %xmm1
327 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
328 ; X64-AVX2-NEXT: vpaddb %xmm0, %xmm1, %xmm0
329 ; X64-AVX2-NEXT: retq
331 ; X64-AVX512DQ-LABEL: mul_v16i8_17:
332 ; X64-AVX512DQ: # %bb.0:
333 ; X64-AVX512DQ-NEXT: vpsllw $4, %xmm0, %xmm1
334 ; X64-AVX512DQ-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
335 ; X64-AVX512DQ-NEXT: vpaddb %xmm0, %xmm1, %xmm0
336 ; X64-AVX512DQ-NEXT: retq
343 ; SSE: # %bb.0:
354 ; X64-XOP-LABEL: mul_v4i64_17:
355 ; X64-XOP: # %bb.0:
356 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm1
357 ; X64-XOP-NEXT: vpsllq $4, %xmm1, %xmm2
358 ; X64-XOP-NEXT: vpaddq %xmm1, %xmm2, %xmm1
359 ; X64-XOP-NEXT: vpsllq $4, %xmm0, %xmm2
360 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
361 ; X64-XOP-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
362 ; X64-XOP-NEXT: retq
364 ; X64-AVX2-LABEL: mul_v4i64_17:
365 ; X64-AVX2: # %bb.0:
366 ; X64-AVX2-NEXT: vpsllq $4, %ymm0, %ymm1
367 ; X64-AVX2-NEXT: vpaddq %ymm0, %ymm1, %ymm0
368 ; X64-AVX2-NEXT: retq
370 ; X64-AVX512DQ-LABEL: mul_v4i64_17:
371 ; X64-AVX512DQ: # %bb.0:
372 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip){1to4}, %ymm0, %ymm0
373 ; X64-AVX512DQ-NEXT: retq
380 ; SSE: # %bb.0:
386 ; X64-XOP-LABEL: mul_v8i32_17:
387 ; X64-XOP: # %bb.0:
388 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm1
389 ; X64-XOP-NEXT: vpslld $4, %xmm1, %xmm2
390 ; X64-XOP-NEXT: vpaddd %xmm1, %xmm2, %xmm1
391 ; X64-XOP-NEXT: vpslld $4, %xmm0, %xmm2
392 ; X64-XOP-NEXT: vpaddd %xmm0, %xmm2, %xmm0
393 ; X64-XOP-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
394 ; X64-XOP-NEXT: retq
396 ; X64-AVX2-LABEL: mul_v8i32_17:
397 ; X64-AVX2: # %bb.0:
398 ; X64-AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [17,17,17,17,17,17,17,17]
399 ; X64-AVX2-NEXT: vpmulld %ymm1, %ymm0, %ymm0
400 ; X64-AVX2-NEXT: retq
402 ; X64-AVX512DQ-LABEL: mul_v8i32_17:
403 ; X64-AVX512DQ: # %bb.0:
404 ; X64-AVX512DQ-NEXT: vpmulld {{.*}}(%rip){1to8}, %ymm0, %ymm0
405 ; X64-AVX512DQ-NEXT: retq
412 ; SSE: # %bb.0:
418 ; X64-XOP-LABEL: mul_v16i16_17:
419 ; X64-XOP: # %bb.0:
420 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm1
421 ; X64-XOP-NEXT: vpsllw $4, %xmm1, %xmm2
422 ; X64-XOP-NEXT: vpaddw %xmm1, %xmm2, %xmm1
423 ; X64-XOP-NEXT: vpsllw $4, %xmm0, %xmm2
424 ; X64-XOP-NEXT: vpaddw %xmm0, %xmm2, %xmm0
425 ; X64-XOP-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
426 ; X64-XOP-NEXT: retq
428 ; X64-AVX2-LABEL: mul_v16i16_17:
429 ; X64-AVX2: # %bb.0:
430 ; X64-AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
431 ; X64-AVX2-NEXT: retq
433 ; X64-AVX512DQ-LABEL: mul_v16i16_17:
434 ; X64-AVX512DQ: # %bb.0:
435 ; X64-AVX512DQ-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
436 ; X64-AVX512DQ-NEXT: retq
443 ; SSE: # %bb.0:
457 ; X64-XOP-LABEL: mul_v32i8_17:
458 ; X64-XOP: # %bb.0:
459 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm1
460 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm2 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
461 ; X64-XOP-NEXT: vpshlb %xmm2, %xmm1, %xmm3
462 ; X64-XOP-NEXT: vpaddb %xmm1, %xmm3, %xmm1
463 ; X64-XOP-NEXT: vpshlb %xmm2, %xmm0, %xmm2
464 ; X64-XOP-NEXT: vpaddb %xmm0, %xmm2, %xmm0
465 ; X64-XOP-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
466 ; X64-XOP-NEXT: retq
468 ; X64-AVX2-LABEL: mul_v32i8_17:
469 ; X64-AVX2: # %bb.0:
470 ; X64-AVX2-NEXT: vpsllw $4, %ymm0, %ymm1
471 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1
472 ; X64-AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0
473 ; X64-AVX2-NEXT: retq
475 ; X64-AVX512DQ-LABEL: mul_v32i8_17:
476 ; X64-AVX512DQ: # %bb.0:
477 ; X64-AVX512DQ-NEXT: vpsllw $4, %ymm0, %ymm1
478 ; X64-AVX512DQ-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1
479 ; X64-AVX512DQ-NEXT: vpaddb %ymm0, %ymm1, %ymm0
480 ; X64-AVX512DQ-NEXT: retq
491 ; SSE: # %bb.0:
499 ; X64-XOP-LABEL: mul_v2i64_neg1025:
500 ; X64-XOP: # %bb.0:
501 ; X64-XOP-NEXT: vpsllq $10, %xmm0, %xmm1
502 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm1, %xmm0
503 ; X64-XOP-NEXT: vpxor %xmm1, %xmm1, %xmm1
504 ; X64-XOP-NEXT: vpsubq %xmm0, %xmm1, %xmm0
505 ; X64-XOP-NEXT: retq
507 ; X64-AVX2-LABEL: mul_v2i64_neg1025:
508 ; X64-AVX2: # %bb.0:
509 ; X64-AVX2-NEXT: vpsllq $10, %xmm0, %xmm1
510 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm1, %xmm0
511 ; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
512 ; X64-AVX2-NEXT: vpsubq %xmm0, %xmm1, %xmm0
513 ; X64-AVX2-NEXT: retq
515 ; X64-AVX512DQ-LABEL: mul_v2i64_neg1025:
516 ; X64-AVX512DQ: # %bb.0:
517 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
518 ; X64-AVX512DQ-NEXT: retq
525 ; X86-SSE: # %bb.0:
529 ; X64-SSE-LABEL: mul_v4i32_neg33:
530 ; X64-SSE: # %bb.0:
531 ; X64-SSE-NEXT: pmulld {{.*}}(%rip), %xmm0
532 ; X64-SSE-NEXT: retq
534 ; X64-XOP-LABEL: mul_v4i32_neg33:
535 ; X64-XOP: # %bb.0:
536 ; X64-XOP-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0
537 ; X64-XOP-NEXT: retq
539 ; X64-AVX2-LABEL: mul_v4i32_neg33:
540 ; X64-AVX2: # %bb.0:
541 ; X64-AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [4294967263,4294967263,4294967263,4294967263]
542 ; X64-AVX2-NEXT: vpmulld %xmm1, %xmm0, %xmm0
543 ; X64-AVX2-NEXT: retq
545 ; X64-AVX512DQ-LABEL: mul_v4i32_neg33:
546 ; X64-AVX512DQ: # %bb.0:
547 ; X64-AVX512DQ-NEXT: vpmulld {{.*}}(%rip){1to4}, %xmm0, %xmm0
548 ; X64-AVX512DQ-NEXT: retq
555 ; X86-SSE: # %bb.0:
559 ; X64-SSE-LABEL: mul_v8i16_neg9:
560 ; X64-SSE: # %bb.0:
561 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm0
562 ; X64-SSE-NEXT: retq
564 ; X64-AVX-LABEL: mul_v8i16_neg9:
565 ; X64-AVX: # %bb.0:
566 ; X64-AVX-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
567 ; X64-AVX-NEXT: retq
574 ; X86-SSE: # %bb.0:
583 ; X64-SSE-LABEL: mul_v16i8_neg5:
584 ; X64-SSE: # %bb.0:
585 ; X64-SSE-NEXT: movdqa %xmm0, %xmm1
586 ; X64-SSE-NEXT: psllw $2, %xmm1
587 ; X64-SSE-NEXT: pand {{.*}}(%rip), %xmm1
588 ; X64-SSE-NEXT: paddb %xmm0, %xmm1
589 ; X64-SSE-NEXT: pxor %xmm0, %xmm0
590 ; X64-SSE-NEXT: psubb %xmm1, %xmm0
591 ; X64-SSE-NEXT: retq
593 ; X64-XOP-LABEL: mul_v16i8_neg5:
594 ; X64-XOP: # %bb.0:
595 ; X64-XOP-NEXT: vpshlb {{.*}}(%rip), %xmm0, %xmm1
596 ; X64-XOP-NEXT: vpaddb %xmm0, %xmm1, %xmm0
597 ; X64-XOP-NEXT: vpxor %xmm1, %xmm1, %xmm1
598 ; X64-XOP-NEXT: vpsubb %xmm0, %xmm1, %xmm0
599 ; X64-XOP-NEXT: retq
601 ; X64-AVX2-LABEL: mul_v16i8_neg5:
602 ; X64-AVX2: # %bb.0:
603 ; X64-AVX2-NEXT: vpsllw $2, %xmm0, %xmm1
604 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
605 ; X64-AVX2-NEXT: vpaddb %xmm0, %xmm1, %xmm0
606 ; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
607 ; X64-AVX2-NEXT: vpsubb %xmm0, %xmm1, %xmm0
608 ; X64-AVX2-NEXT: retq
610 ; X64-AVX512DQ-LABEL: mul_v16i8_neg5:
611 ; X64-AVX512DQ: # %bb.0:
612 ; X64-AVX512DQ-NEXT: vpsllw $2, %xmm0, %xmm1
613 ; X64-AVX512DQ-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
614 ; X64-AVX512DQ-NEXT: vpaddb %xmm0, %xmm1, %xmm0
615 ; X64-AVX512DQ-NEXT: vpxor %xmm1, %xmm1, %xmm1
616 ; X64-AVX512DQ-NEXT: vpsubb %xmm0, %xmm1, %xmm0
617 ; X64-AVX512DQ-NEXT: retq
624 ; SSE: # %bb.0:
638 ; X64-XOP-LABEL: mul_v4i64_neg1025:
639 ; X64-XOP: # %bb.0:
640 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm1
641 ; X64-XOP-NEXT: vpsllq $10, %xmm1, %xmm2
642 ; X64-XOP-NEXT: vpaddq %xmm1, %xmm2, %xmm1
643 ; X64-XOP-NEXT: vpxor %xmm2, %xmm2, %xmm2
644 ; X64-XOP-NEXT: vpsubq %xmm1, %xmm2, %xmm1
645 ; X64-XOP-NEXT: vpsllq $10, %xmm0, %xmm3
646 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm3, %xmm0
647 ; X64-XOP-NEXT: vpsubq %xmm0, %xmm2, %xmm0
648 ; X64-XOP-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
649 ; X64-XOP-NEXT: retq
651 ; X64-AVX2-LABEL: mul_v4i64_neg1025:
652 ; X64-AVX2: # %bb.0:
653 ; X64-AVX2-NEXT: vpsllq $10, %ymm0, %ymm1
654 ; X64-AVX2-NEXT: vpaddq %ymm0, %ymm1, %ymm0
655 ; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
656 ; X64-AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm0
657 ; X64-AVX2-NEXT: retq
659 ; X64-AVX512DQ-LABEL: mul_v4i64_neg1025:
660 ; X64-AVX512DQ: # %bb.0:
661 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip){1to4}, %ymm0, %ymm0
662 ; X64-AVX512DQ-NEXT: retq
669 ; SSE: # %bb.0:
675 ; X64-XOP-LABEL: mul_v8i32_neg33:
676 ; X64-XOP: # %bb.0:
677 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm1
678 ; X64-XOP-NEXT: vpslld $5, %xmm1, %xmm2
679 ; X64-XOP-NEXT: vpaddd %xmm1, %xmm2, %xmm1
680 ; X64-XOP-NEXT: vpxor %xmm2, %xmm2, %xmm2
681 ; X64-XOP-NEXT: vpsubd %xmm1, %xmm2, %xmm1
682 ; X64-XOP-NEXT: vpslld $5, %xmm0, %xmm3
683 ; X64-XOP-NEXT: vpaddd %xmm0, %xmm3, %xmm0
684 ; X64-XOP-NEXT: vpsubd %xmm0, %xmm2, %xmm0
685 ; X64-XOP-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
686 ; X64-XOP-NEXT: retq
688 ; X64-AVX2-LABEL: mul_v8i32_neg33:
689 ; X64-AVX2: # %bb.0:
690 ; X64-AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967263,4294967263,4294967263,4294967263,42949…
691 ; X64-AVX2-NEXT: vpmulld %ymm1, %ymm0, %ymm0
692 ; X64-AVX2-NEXT: retq
694 ; X64-AVX512DQ-LABEL: mul_v8i32_neg33:
695 ; X64-AVX512DQ: # %bb.0:
696 ; X64-AVX512DQ-NEXT: vpmulld {{.*}}(%rip){1to8}, %ymm0, %ymm0
697 ; X64-AVX512DQ-NEXT: retq
704 ; SSE: # %bb.0:
710 ; X64-XOP-LABEL: mul_v16i16_neg9:
711 ; X64-XOP: # %bb.0:
712 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm1
713 ; X64-XOP-NEXT: vpsllw $3, %xmm1, %xmm2
714 ; X64-XOP-NEXT: vpaddw %xmm1, %xmm2, %xmm1
715 ; X64-XOP-NEXT: vpxor %xmm2, %xmm2, %xmm2
716 ; X64-XOP-NEXT: vpsubw %xmm1, %xmm2, %xmm1
717 ; X64-XOP-NEXT: vpsllw $3, %xmm0, %xmm3
718 ; X64-XOP-NEXT: vpaddw %xmm0, %xmm3, %xmm0
719 ; X64-XOP-NEXT: vpsubw %xmm0, %xmm2, %xmm0
720 ; X64-XOP-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
721 ; X64-XOP-NEXT: retq
723 ; X64-AVX2-LABEL: mul_v16i16_neg9:
724 ; X64-AVX2: # %bb.0:
725 ; X64-AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
726 ; X64-AVX2-NEXT: retq
728 ; X64-AVX512DQ-LABEL: mul_v16i16_neg9:
729 ; X64-AVX512DQ: # %bb.0:
730 ; X64-AVX512DQ-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
731 ; X64-AVX512DQ-NEXT: retq
738 ; SSE: # %bb.0:
755 ; X64-XOP-LABEL: mul_v32i8_neg5:
756 ; X64-XOP: # %bb.0:
757 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm1
758 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
759 ; X64-XOP-NEXT: vpshlb %xmm2, %xmm1, %xmm3
760 ; X64-XOP-NEXT: vpaddb %xmm1, %xmm3, %xmm1
761 ; X64-XOP-NEXT: vpxor %xmm3, %xmm3, %xmm3
762 ; X64-XOP-NEXT: vpsubb %xmm1, %xmm3, %xmm1
763 ; X64-XOP-NEXT: vpshlb %xmm2, %xmm0, %xmm2
764 ; X64-XOP-NEXT: vpaddb %xmm0, %xmm2, %xmm0
765 ; X64-XOP-NEXT: vpsubb %xmm0, %xmm3, %xmm0
766 ; X64-XOP-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
767 ; X64-XOP-NEXT: retq
769 ; X64-AVX2-LABEL: mul_v32i8_neg5:
770 ; X64-AVX2: # %bb.0:
771 ; X64-AVX2-NEXT: vpsllw $2, %ymm0, %ymm1
772 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1
773 ; X64-AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0
774 ; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
775 ; X64-AVX2-NEXT: vpsubb %ymm0, %ymm1, %ymm0
776 ; X64-AVX2-NEXT: retq
778 ; X64-AVX512DQ-LABEL: mul_v32i8_neg5:
779 ; X64-AVX512DQ: # %bb.0:
780 ; X64-AVX512DQ-NEXT: vpsllw $2, %ymm0, %ymm1
781 ; X64-AVX512DQ-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1
782 ; X64-AVX512DQ-NEXT: vpaddb %ymm0, %ymm1, %ymm0
783 ; X64-AVX512DQ-NEXT: vpxor %xmm1, %xmm1, %xmm1
784 ; X64-AVX512DQ-NEXT: vpsubb %ymm0, %ymm1, %ymm0
785 ; X64-AVX512DQ-NEXT: retq
796 ; X86-SSE: # %bb.0:
797 ; X86-SSE-NEXT: movdqa {{.*#+}} xmm1 = [17,0,65,0]
806 ; X64-SSE-LABEL: mul_v2i64_17_65:
807 ; X64-SSE: # %bb.0:
808 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [17,65]
809 ; X64-SSE-NEXT: movdqa %xmm0, %xmm2
810 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm2
811 ; X64-SSE-NEXT: psrlq $32, %xmm0
812 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm0
813 ; X64-SSE-NEXT: psllq $32, %xmm0
814 ; X64-SSE-NEXT: paddq %xmm2, %xmm0
815 ; X64-SSE-NEXT: retq
817 ; X64-XOP-LABEL: mul_v2i64_17_65:
818 ; X64-XOP: # %bb.0:
819 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm1 = [17,65]
820 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
821 ; X64-XOP-NEXT: vpsrlq $32, %xmm0, %xmm0
822 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
823 ; X64-XOP-NEXT: vpsllq $32, %xmm0, %xmm0
824 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
825 ; X64-XOP-NEXT: retq
827 ; X64-AVX2-LABEL: mul_v2i64_17_65:
828 ; X64-AVX2: # %bb.0:
829 ; X64-AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [17,65]
830 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
831 ; X64-AVX2-NEXT: vpsrlq $32, %xmm0, %xmm0
832 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
833 ; X64-AVX2-NEXT: vpsllq $32, %xmm0, %xmm0
834 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
835 ; X64-AVX2-NEXT: retq
837 ; X64-AVX512DQ-LABEL: mul_v2i64_17_65:
838 ; X64-AVX512DQ: # %bb.0:
839 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
840 ; X64-AVX512DQ-NEXT: retq
847 ; X86-SSE: # %bb.0:
851 ; X64-SSE-LABEL: mul_v4i32_5_17_33_65:
852 ; X64-SSE: # %bb.0:
853 ; X64-SSE-NEXT: pmulld {{.*}}(%rip), %xmm0
854 ; X64-SSE-NEXT: retq
856 ; X64-AVX-LABEL: mul_v4i32_5_17_33_65:
857 ; X64-AVX: # %bb.0:
858 ; X64-AVX-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0
859 ; X64-AVX-NEXT: retq
866 ; X86-SSE: # %bb.0:
870 ; X64-SSE-LABEL: mul_v8i16_2_3_9_17_33_65_129_257:
871 ; X64-SSE: # %bb.0:
872 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm0
873 ; X64-SSE-NEXT: retq
875 ; X64-AVX-LABEL: mul_v8i16_2_3_9_17_33_65_129_257:
876 ; X64-AVX: # %bb.0:
877 ; X64-AVX-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
878 ; X64-AVX-NEXT: retq
885 ; X86-SSE: # %bb.0:
886 ; X86-SSE-NEXT: pmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm…
897 ; X64-SSE-LABEL: mul_v16i8_2_3_9_17_33_65_129_2_3_9_17_33_65_129_2_3:
898 ; X64-SSE: # %bb.0:
899 ; X64-SSE-NEXT: pmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm…
900 ; X64-SSE-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
901 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm0
902 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
903 ; X64-SSE-NEXT: pand %xmm2, %xmm0
904 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm1
905 ; X64-SSE-NEXT: pand %xmm2, %xmm1
906 ; X64-SSE-NEXT: packuswb %xmm0, %xmm1
907 ; X64-SSE-NEXT: movdqa %xmm1, %xmm0
908 ; X64-SSE-NEXT: retq
910 ; X64-XOP-LABEL: mul_v16i8_2_3_9_17_33_65_129_2_3_9_17_33_65_129_2_3:
911 ; X64-XOP: # %bb.0:
912 ; X64-XOP-NEXT: vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
913 ; X64-XOP-NEXT: vpmullw {{.*}}(%rip), %xmm1, %xmm1
914 ; X64-XOP-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xm…
915 ; X64-XOP-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
916 ; X64-XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14],xmm1[0,2,4,6,8,10,12,14]
917 ; X64-XOP-NEXT: retq
919 ; X64-AVX2-LABEL: mul_v16i8_2_3_9_17_33_65_129_2_3_9_17_33_65_129_2_3:
920 ; X64-AVX2: # %bb.0:
921 ; X64-AVX2-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,x…
922 ; X64-AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
923 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
924 ; X64-AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
925 ; X64-AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
926 ; X64-AVX2-NEXT: vzeroupper
927 ; X64-AVX2-NEXT: retq
929 ; X64-AVX512DQ-LABEL: mul_v16i8_2_3_9_17_33_65_129_2_3_9_17_33_65_129_2_3:
930 ; X64-AVX512DQ: # %bb.0:
931 ; X64-AVX512DQ-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],ze…
932 ; X64-AVX512DQ-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
933 ; X64-AVX512DQ-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],ze…
934 ; X64-AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0
935 ; X64-AVX512DQ-NEXT: vzeroupper
936 ; X64-AVX512DQ-NEXT: retq
947 ; SSE: # %bb.0:
954 ; X64-XOP-LABEL: mul_v2i64_7:
955 ; X64-XOP: # %bb.0:
956 ; X64-XOP-NEXT: vpsllq $3, %xmm0, %xmm1
957 ; X64-XOP-NEXT: vpsubq %xmm0, %xmm1, %xmm0
958 ; X64-XOP-NEXT: retq
960 ; X64-AVX2-LABEL: mul_v2i64_7:
961 ; X64-AVX2: # %bb.0:
962 ; X64-AVX2-NEXT: vpsllq $3, %xmm0, %xmm1
963 ; X64-AVX2-NEXT: vpsubq %xmm0, %xmm1, %xmm0
964 ; X64-AVX2-NEXT: retq
966 ; X64-AVX512DQ-LABEL: mul_v2i64_7:
967 ; X64-AVX512DQ: # %bb.0:
968 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
969 ; X64-AVX512DQ-NEXT: retq
976 ; X86-SSE: # %bb.0:
980 ; X64-SSE-LABEL: mul_v4i32_7:
981 ; X64-SSE: # %bb.0:
982 ; X64-SSE-NEXT: pmulld {{.*}}(%rip), %xmm0
983 ; X64-SSE-NEXT: retq
985 ; X64-XOP-LABEL: mul_v4i32_7:
986 ; X64-XOP: # %bb.0:
987 ; X64-XOP-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0
988 ; X64-XOP-NEXT: retq
990 ; X64-AVX2-LABEL: mul_v4i32_7:
991 ; X64-AVX2: # %bb.0:
992 ; X64-AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
993 ; X64-AVX2-NEXT: vpmulld %xmm1, %xmm0, %xmm0
994 ; X64-AVX2-NEXT: retq
996 ; X64-AVX512DQ-LABEL: mul_v4i32_7:
997 ; X64-AVX512DQ: # %bb.0:
998 ; X64-AVX512DQ-NEXT: vpmulld {{.*}}(%rip){1to4}, %xmm0, %xmm0
999 ; X64-AVX512DQ-NEXT: retq
1006 ; X86-SSE: # %bb.0:
1010 ; X64-SSE-LABEL: mul_v8i16_7:
1011 ; X64-SSE: # %bb.0:
1012 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm0
1013 ; X64-SSE-NEXT: retq
1015 ; X64-AVX-LABEL: mul_v8i16_7:
1016 ; X64-AVX: # %bb.0:
1017 ; X64-AVX-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
1018 ; X64-AVX-NEXT: retq
1025 ; X86-SSE: # %bb.0:
1033 ; X64-SSE-LABEL: mul_v16i8_31:
1034 ; X64-SSE: # %bb.0:
1035 ; X64-SSE-NEXT: movdqa %xmm0, %xmm1
1036 ; X64-SSE-NEXT: psllw $5, %xmm1
1037 ; X64-SSE-NEXT: pand {{.*}}(%rip), %xmm1
1038 ; X64-SSE-NEXT: psubb %xmm0, %xmm1
1039 ; X64-SSE-NEXT: movdqa %xmm1, %xmm0
1040 ; X64-SSE-NEXT: retq
1042 ; X64-XOP-LABEL: mul_v16i8_31:
1043 ; X64-XOP: # %bb.0:
1044 ; X64-XOP-NEXT: vpshlb {{.*}}(%rip), %xmm0, %xmm1
1045 ; X64-XOP-NEXT: vpsubb %xmm0, %xmm1, %xmm0
1046 ; X64-XOP-NEXT: retq
1048 ; X64-AVX2-LABEL: mul_v16i8_31:
1049 ; X64-AVX2: # %bb.0:
1050 ; X64-AVX2-NEXT: vpsllw $5, %xmm0, %xmm1
1051 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
1052 ; X64-AVX2-NEXT: vpsubb %xmm0, %xmm1, %xmm0
1053 ; X64-AVX2-NEXT: retq
1055 ; X64-AVX512DQ-LABEL: mul_v16i8_31:
1056 ; X64-AVX512DQ: # %bb.0:
1057 ; X64-AVX512DQ-NEXT: vpsllw $5, %xmm0, %xmm1
1058 ; X64-AVX512DQ-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
1059 ; X64-AVX512DQ-NEXT: vpsubb %xmm0, %xmm1, %xmm0
1060 ; X64-AVX512DQ-NEXT: retq
1071 ; SSE: # %bb.0:
1077 ; X64-XOP-LABEL: mul_v2i64_neg7:
1078 ; X64-XOP: # %bb.0:
1079 ; X64-XOP-NEXT: vpsllq $3, %xmm0, %xmm1
1080 ; X64-XOP-NEXT: vpsubq %xmm1, %xmm0, %xmm0
1081 ; X64-XOP-NEXT: retq
1083 ; X64-AVX2-LABEL: mul_v2i64_neg7:
1084 ; X64-AVX2: # %bb.0:
1085 ; X64-AVX2-NEXT: vpsllq $3, %xmm0, %xmm1
1086 ; X64-AVX2-NEXT: vpsubq %xmm1, %xmm0, %xmm0
1087 ; X64-AVX2-NEXT: retq
1089 ; X64-AVX512DQ-LABEL: mul_v2i64_neg7:
1090 ; X64-AVX512DQ: # %bb.0:
1091 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
1092 ; X64-AVX512DQ-NEXT: retq
1099 ; X86-SSE: # %bb.0:
1103 ; X64-SSE-LABEL: mul_v4i32_neg63:
1104 ; X64-SSE: # %bb.0:
1105 ; X64-SSE-NEXT: pmulld {{.*}}(%rip), %xmm0
1106 ; X64-SSE-NEXT: retq
1108 ; X64-XOP-LABEL: mul_v4i32_neg63:
1109 ; X64-XOP: # %bb.0:
1110 ; X64-XOP-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0
1111 ; X64-XOP-NEXT: retq
1113 ; X64-AVX2-LABEL: mul_v4i32_neg63:
1114 ; X64-AVX2: # %bb.0:
1115 ; X64-AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [4294967233,4294967233,4294967233,4294967233]
1116 ; X64-AVX2-NEXT: vpmulld %xmm1, %xmm0, %xmm0
1117 ; X64-AVX2-NEXT: retq
1119 ; X64-AVX512DQ-LABEL: mul_v4i32_neg63:
1120 ; X64-AVX512DQ: # %bb.0:
1121 ; X64-AVX512DQ-NEXT: vpmulld {{.*}}(%rip){1to4}, %xmm0, %xmm0
1122 ; X64-AVX512DQ-NEXT: retq
1129 ; X86-SSE: # %bb.0:
1133 ; X64-SSE-LABEL: mul_v8i16_neg31:
1134 ; X64-SSE: # %bb.0:
1135 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm0
1136 ; X64-SSE-NEXT: retq
1138 ; X64-AVX-LABEL: mul_v8i16_neg31:
1139 ; X64-AVX: # %bb.0:
1140 ; X64-AVX-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
1141 ; X64-AVX-NEXT: retq
1148 ; X86-SSE: # %bb.0:
1155 ; X64-SSE-LABEL: mul_v16i8_neg15:
1156 ; X64-SSE: # %bb.0:
1157 ; X64-SSE-NEXT: movdqa %xmm0, %xmm1
1158 ; X64-SSE-NEXT: psllw $4, %xmm1
1159 ; X64-SSE-NEXT: pand {{.*}}(%rip), %xmm1
1160 ; X64-SSE-NEXT: psubb %xmm1, %xmm0
1161 ; X64-SSE-NEXT: retq
1163 ; X64-XOP-LABEL: mul_v16i8_neg15:
1164 ; X64-XOP: # %bb.0:
1165 ; X64-XOP-NEXT: vpshlb {{.*}}(%rip), %xmm0, %xmm1
1166 ; X64-XOP-NEXT: vpsubb %xmm1, %xmm0, %xmm0
1167 ; X64-XOP-NEXT: retq
1169 ; X64-AVX2-LABEL: mul_v16i8_neg15:
1170 ; X64-AVX2: # %bb.0:
1171 ; X64-AVX2-NEXT: vpsllw $4, %xmm0, %xmm1
1172 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
1173 ; X64-AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm0
1174 ; X64-AVX2-NEXT: retq
1176 ; X64-AVX512DQ-LABEL: mul_v16i8_neg15:
1177 ; X64-AVX512DQ: # %bb.0:
1178 ; X64-AVX512DQ-NEXT: vpsllw $4, %xmm0, %xmm1
1179 ; X64-AVX512DQ-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1
1180 ; X64-AVX512DQ-NEXT: vpsubb %xmm1, %xmm0, %xmm0
1181 ; X64-AVX512DQ-NEXT: retq
1192 ; X86-SSE: # %bb.0:
1193 ; X86-SSE-NEXT: movdqa {{.*#+}} xmm1 = [15,0,63,0]
1202 ; X64-SSE-LABEL: mul_v2i64_15_63:
1203 ; X64-SSE: # %bb.0:
1204 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [15,63]
1205 ; X64-SSE-NEXT: movdqa %xmm0, %xmm2
1206 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm2
1207 ; X64-SSE-NEXT: psrlq $32, %xmm0
1208 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm0
1209 ; X64-SSE-NEXT: psllq $32, %xmm0
1210 ; X64-SSE-NEXT: paddq %xmm2, %xmm0
1211 ; X64-SSE-NEXT: retq
1213 ; X64-XOP-LABEL: mul_v2i64_15_63:
1214 ; X64-XOP: # %bb.0:
1215 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm1 = [15,63]
1216 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1217 ; X64-XOP-NEXT: vpsrlq $32, %xmm0, %xmm0
1218 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
1219 ; X64-XOP-NEXT: vpsllq $32, %xmm0, %xmm0
1220 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1221 ; X64-XOP-NEXT: retq
1223 ; X64-AVX2-LABEL: mul_v2i64_15_63:
1224 ; X64-AVX2: # %bb.0:
1225 ; X64-AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [15,63]
1226 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1227 ; X64-AVX2-NEXT: vpsrlq $32, %xmm0, %xmm0
1228 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
1229 ; X64-AVX2-NEXT: vpsllq $32, %xmm0, %xmm0
1230 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1231 ; X64-AVX2-NEXT: retq
1233 ; X64-AVX512DQ-LABEL: mul_v2i64_15_63:
1234 ; X64-AVX512DQ: # %bb.0:
1235 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
1236 ; X64-AVX512DQ-NEXT: retq
1243 ; X86-SSE: # %bb.0:
1256 ; X64-SSE-LABEL: mul_v2i64_neg_15_63:
1257 ; X64-SSE: # %bb.0:
1258 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [18446744073709551601,18446744073709551553]
1259 ; X64-SSE-NEXT: movdqa %xmm0, %xmm2
1260 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm2
1261 ; X64-SSE-NEXT: movdqa %xmm0, %xmm3
1262 ; X64-SSE-NEXT: psrlq $32, %xmm3
1263 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm3
1264 ; X64-SSE-NEXT: pmuludq {{.*}}(%rip), %xmm0
1265 ; X64-SSE-NEXT: paddq %xmm3, %xmm0
1266 ; X64-SSE-NEXT: psllq $32, %xmm0
1267 ; X64-SSE-NEXT: paddq %xmm2, %xmm0
1268 ; X64-SSE-NEXT: retq
1270 ; X64-XOP-LABEL: mul_v2i64_neg_15_63:
1271 ; X64-XOP: # %bb.0:
1272 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm1 = [18446744073709551601,18446744073709551553]
1273 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1274 ; X64-XOP-NEXT: vpsrlq $32, %xmm0, %xmm3
1275 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm3, %xmm1
1276 ; X64-XOP-NEXT: vpmuludq {{.*}}(%rip), %xmm0, %xmm0
1277 ; X64-XOP-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1278 ; X64-XOP-NEXT: vpsllq $32, %xmm0, %xmm0
1279 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1280 ; X64-XOP-NEXT: retq
1282 ; X64-AVX2-LABEL: mul_v2i64_neg_15_63:
1283 ; X64-AVX2: # %bb.0:
1284 ; X64-AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [18446744073709551601,18446744073709551553]
1285 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1286 ; X64-AVX2-NEXT: vpsrlq $32, %xmm0, %xmm3
1287 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm3, %xmm1
1288 ; X64-AVX2-NEXT: vpmuludq {{.*}}(%rip), %xmm0, %xmm0
1289 ; X64-AVX2-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1290 ; X64-AVX2-NEXT: vpsllq $32, %xmm0, %xmm0
1291 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1292 ; X64-AVX2-NEXT: retq
1294 ; X64-AVX512DQ-LABEL: mul_v2i64_neg_15_63:
1295 ; X64-AVX512DQ: # %bb.0:
1296 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
1297 ; X64-AVX512DQ-NEXT: retq
1304 ; X86-SSE: # %bb.0:
1317 ; X64-SSE-LABEL: mul_v2i64_neg_17_65:
1318 ; X64-SSE: # %bb.0:
1319 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [18446744073709551599,18446744073709551551]
1320 ; X64-SSE-NEXT: movdqa %xmm0, %xmm2
1321 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm2
1322 ; X64-SSE-NEXT: movdqa %xmm0, %xmm3
1323 ; X64-SSE-NEXT: psrlq $32, %xmm3
1324 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm3
1325 ; X64-SSE-NEXT: pmuludq {{.*}}(%rip), %xmm0
1326 ; X64-SSE-NEXT: paddq %xmm3, %xmm0
1327 ; X64-SSE-NEXT: psllq $32, %xmm0
1328 ; X64-SSE-NEXT: paddq %xmm2, %xmm0
1329 ; X64-SSE-NEXT: retq
1331 ; X64-XOP-LABEL: mul_v2i64_neg_17_65:
1332 ; X64-XOP: # %bb.0:
1333 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm1 = [18446744073709551599,18446744073709551551]
1334 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1335 ; X64-XOP-NEXT: vpsrlq $32, %xmm0, %xmm3
1336 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm3, %xmm1
1337 ; X64-XOP-NEXT: vpmuludq {{.*}}(%rip), %xmm0, %xmm0
1338 ; X64-XOP-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1339 ; X64-XOP-NEXT: vpsllq $32, %xmm0, %xmm0
1340 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1341 ; X64-XOP-NEXT: retq
1343 ; X64-AVX2-LABEL: mul_v2i64_neg_17_65:
1344 ; X64-AVX2: # %bb.0:
1345 ; X64-AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [18446744073709551599,18446744073709551551]
1346 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1347 ; X64-AVX2-NEXT: vpsrlq $32, %xmm0, %xmm3
1348 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm3, %xmm1
1349 ; X64-AVX2-NEXT: vpmuludq {{.*}}(%rip), %xmm0, %xmm0
1350 ; X64-AVX2-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1351 ; X64-AVX2-NEXT: vpsllq $32, %xmm0, %xmm0
1352 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1353 ; X64-AVX2-NEXT: retq
1355 ; X64-AVX512DQ-LABEL: mul_v2i64_neg_17_65:
1356 ; X64-AVX512DQ: # %bb.0:
1357 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
1358 ; X64-AVX512DQ-NEXT: retq
1365 ; SSE: # %bb.0:
1367 ; SSE-NEXT: blendps {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
1370 ; X64-AVX-LABEL: mul_v2i64_0_1:
1371 ; X64-AVX: # %bb.0:
1372 ; X64-AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1
1373 ; X64-AVX-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
1374 ; X64-AVX-NEXT: retq
1375 %1 = mul <2 x i64> %a0, <i64 0, i64 1>
1381 ; X86-SSE: # %bb.0:
1384 ; X86-SSE-NEXT: movdqa {{.*#+}} xmm2 = [0,0,4294967295,4294967295]
1395 ; X64-SSE-LABEL: mul_v2i64_neg_0_1:
1396 ; X64-SSE: # %bb.0:
1397 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255]
1398 ; X64-SSE-NEXT: movdqa %xmm0, %xmm2
1399 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm2
1400 ; X64-SSE-NEXT: movdqa %xmm0, %xmm3
1401 ; X64-SSE-NEXT: psrlq $32, %xmm3
1402 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm3
1403 ; X64-SSE-NEXT: pmuludq {{.*}}(%rip), %xmm0
1404 ; X64-SSE-NEXT: paddq %xmm3, %xmm0
1405 ; X64-SSE-NEXT: psllq $32, %xmm0
1406 ; X64-SSE-NEXT: paddq %xmm2, %xmm0
1407 ; X64-SSE-NEXT: retq
1409 ; X64-XOP-LABEL: mul_v2i64_neg_0_1:
1410 ; X64-XOP: # %bb.0:
1411 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm1 = [0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255]
1412 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1413 ; X64-XOP-NEXT: vpsrlq $32, %xmm0, %xmm3
1414 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm3, %xmm1
1415 ; X64-XOP-NEXT: vpmuludq {{.*}}(%rip), %xmm0, %xmm0
1416 ; X64-XOP-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1417 ; X64-XOP-NEXT: vpsllq $32, %xmm0, %xmm0
1418 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1419 ; X64-XOP-NEXT: retq
1421 ; X64-AVX2-LABEL: mul_v2i64_neg_0_1:
1422 ; X64-AVX2: # %bb.0:
1423 ; X64-AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255]
1424 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1425 ; X64-AVX2-NEXT: vpsrlq $32, %xmm0, %xmm3
1426 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm3, %xmm1
1427 ; X64-AVX2-NEXT: vpmuludq {{.*}}(%rip), %xmm0, %xmm0
1428 ; X64-AVX2-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1429 ; X64-AVX2-NEXT: vpsllq $32, %xmm0, %xmm0
1430 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1431 ; X64-AVX2-NEXT: retq
1433 ; X64-AVX512DQ-LABEL: mul_v2i64_neg_0_1:
1434 ; X64-AVX512DQ: # %bb.0:
1435 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
1436 ; X64-AVX512DQ-NEXT: retq
1437 %1 = mul <2 x i64> %a0, <i64 0, i64 -1>
1443 ; X86-SSE: # %bb.0:
1446 ; X86-SSE-NEXT: movdqa {{.*#+}} xmm2 = [15,0,4294967233,4294967295]
1457 ; X64-SSE-LABEL: mul_v2i64_15_neg_63:
1458 ; X64-SSE: # %bb.0:
1459 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [15,18446744073709551553]
1460 ; X64-SSE-NEXT: movdqa %xmm0, %xmm2
1461 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm2
1462 ; X64-SSE-NEXT: movdqa %xmm0, %xmm3
1463 ; X64-SSE-NEXT: psrlq $32, %xmm3
1464 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm3
1465 ; X64-SSE-NEXT: pmuludq {{.*}}(%rip), %xmm0
1466 ; X64-SSE-NEXT: paddq %xmm3, %xmm0
1467 ; X64-SSE-NEXT: psllq $32, %xmm0
1468 ; X64-SSE-NEXT: paddq %xmm2, %xmm0
1469 ; X64-SSE-NEXT: retq
1471 ; X64-XOP-LABEL: mul_v2i64_15_neg_63:
1472 ; X64-XOP: # %bb.0:
1473 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm1 = [15,18446744073709551553]
1474 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1475 ; X64-XOP-NEXT: vpsrlq $32, %xmm0, %xmm3
1476 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm3, %xmm1
1477 ; X64-XOP-NEXT: vpmuludq {{.*}}(%rip), %xmm0, %xmm0
1478 ; X64-XOP-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1479 ; X64-XOP-NEXT: vpsllq $32, %xmm0, %xmm0
1480 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1481 ; X64-XOP-NEXT: retq
1483 ; X64-AVX2-LABEL: mul_v2i64_15_neg_63:
1484 ; X64-AVX2: # %bb.0:
1485 ; X64-AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [15,18446744073709551553]
1486 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1487 ; X64-AVX2-NEXT: vpsrlq $32, %xmm0, %xmm3
1488 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm3, %xmm1
1489 ; X64-AVX2-NEXT: vpmuludq {{.*}}(%rip), %xmm0, %xmm0
1490 ; X64-AVX2-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1491 ; X64-AVX2-NEXT: vpsllq $32, %xmm0, %xmm0
1492 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1493 ; X64-AVX2-NEXT: retq
1495 ; X64-AVX512DQ-LABEL: mul_v2i64_15_neg_63:
1496 ; X64-AVX512DQ: # %bb.0:
1497 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
1498 ; X64-AVX512DQ-NEXT: retq
1505 ; X86-SSE: # %bb.0:
1509 ; X64-SSE-LABEL: mul_v4i32_0_15_31_7:
1510 ; X64-SSE: # %bb.0:
1511 ; X64-SSE-NEXT: pmulld {{.*}}(%rip), %xmm0
1512 ; X64-SSE-NEXT: retq
1514 ; X64-AVX-LABEL: mul_v4i32_0_15_31_7:
1515 ; X64-AVX: # %bb.0:
1516 ; X64-AVX-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0
1517 ; X64-AVX-NEXT: retq
1518 %1 = mul <4 x i32> %a0, <i32 0, i32 15, i32 31, i32 7>
1524 ; X86-SSE: # %bb.0:
1528 ; X64-SSE-LABEL: mul_v8i16_0_1_7_15_31_63_127_255:
1529 ; X64-SSE: # %bb.0:
1530 ; X64-SSE-NEXT: pmullw {{.*}}(%rip), %xmm0
1531 ; X64-SSE-NEXT: retq
1533 ; X64-AVX-LABEL: mul_v8i16_0_1_7_15_31_63_127_255:
1534 ; X64-AVX: # %bb.0:
1535 ; X64-AVX-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0
1536 ; X64-AVX-NEXT: retq
1537 %1 = mul <8 x i16> %a0, <i16 0, i16 1, i16 7, i16 15, i16 31, i16 63, i16 127, i16 255>
1543 ; SSE: # %bb.0:
1544 ; SSE-NEXT: pmovzxbw {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4]…
1546 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [0,1,3,7,15,31,63,127]
1556 ; X64-XOP-LABEL: mul_v16i8_0_1_3_7_15_31_63_127_0_1_3_7_15_31_63_127:
1557 ; X64-XOP: # %bb.0:
1558 ; X64-XOP-NEXT: vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
1559 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,3,7,15,31,63,127]
1560 ; X64-XOP-NEXT: vpmullw %xmm2, %xmm1, %xmm1
1561 ; X64-XOP-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xm…
1562 ; X64-XOP-NEXT: vpmullw %xmm2, %xmm0, %xmm0
1563 ; X64-XOP-NEXT: vpperm {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14],xmm1[0,2,4,6,8,10,12,14]
1564 ; X64-XOP-NEXT: retq
1566 ; X64-AVX2-LABEL: mul_v16i8_0_1_3_7_15_31_63_127_0_1_3_7_15_31_63_127:
1567 ; X64-AVX2: # %bb.0:
1568 ; X64-AVX2-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,x…
1569 ; X64-AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
1570 ; X64-AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
1571 ; X64-AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1572 ; X64-AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
1573 ; X64-AVX2-NEXT: vzeroupper
1574 ; X64-AVX2-NEXT: retq
1576 ; X64-AVX512DQ-LABEL: mul_v16i8_0_1_3_7_15_31_63_127_0_1_3_7_15_31_63_127:
1577 ; X64-AVX512DQ: # %bb.0:
1578 ; X64-AVX512DQ-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],ze…
1579 ; X64-AVX512DQ-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0
1580 ; X64-AVX512DQ-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],ze…
1581 ; X64-AVX512DQ-NEXT: vpmovdb %zmm0, %xmm0
1582 ; X64-AVX512DQ-NEXT: vzeroupper
1583 ; X64-AVX512DQ-NEXT: retq
1584 …%1 = mul <16 x i8> %a0, <i8 0, i8 1, i8 3, i8 7, i8 15, i8 31, i8 63, i8 127, i8 0, i8 1, i8 3, i8…
1590 ; X86-SSE: # %bb.0:
1591 ; X86-SSE-NEXT: movdqa {{.*#+}} xmm1 = [68,0,132,0]
1600 ; X64-SSE-LABEL: mul_v2i64_68_132:
1601 ; X64-SSE: # %bb.0:
1602 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [68,132]
1603 ; X64-SSE-NEXT: movdqa %xmm0, %xmm2
1604 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm2
1605 ; X64-SSE-NEXT: psrlq $32, %xmm0
1606 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm0
1607 ; X64-SSE-NEXT: psllq $32, %xmm0
1608 ; X64-SSE-NEXT: paddq %xmm2, %xmm0
1609 ; X64-SSE-NEXT: retq
1611 ; X64-XOP-LABEL: mul_v2i64_68_132:
1612 ; X64-XOP: # %bb.0:
1613 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm1 = [68,132]
1614 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1615 ; X64-XOP-NEXT: vpsrlq $32, %xmm0, %xmm0
1616 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
1617 ; X64-XOP-NEXT: vpsllq $32, %xmm0, %xmm0
1618 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1619 ; X64-XOP-NEXT: retq
1621 ; X64-AVX2-LABEL: mul_v2i64_68_132:
1622 ; X64-AVX2: # %bb.0:
1623 ; X64-AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [68,132]
1624 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1625 ; X64-AVX2-NEXT: vpsrlq $32, %xmm0, %xmm0
1626 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
1627 ; X64-AVX2-NEXT: vpsllq $32, %xmm0, %xmm0
1628 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1629 ; X64-AVX2-NEXT: retq
1631 ; X64-AVX512DQ-LABEL: mul_v2i64_68_132:
1632 ; X64-AVX512DQ: # %bb.0:
1633 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
1634 ; X64-AVX512DQ-NEXT: retq
1641 ; X86-SSE: # %bb.0:
1642 ; X86-SSE-NEXT: movdqa {{.*#+}} xmm1 = [60,0,124,0]
1651 ; X64-SSE-LABEL: mul_v2i64_60_120:
1652 ; X64-SSE: # %bb.0:
1653 ; X64-SSE-NEXT: movdqa {{.*#+}} xmm1 = [60,124]
1654 ; X64-SSE-NEXT: movdqa %xmm0, %xmm2
1655 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm2
1656 ; X64-SSE-NEXT: psrlq $32, %xmm0
1657 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm0
1658 ; X64-SSE-NEXT: psllq $32, %xmm0
1659 ; X64-SSE-NEXT: paddq %xmm2, %xmm0
1660 ; X64-SSE-NEXT: retq
1662 ; X64-XOP-LABEL: mul_v2i64_60_120:
1663 ; X64-XOP: # %bb.0:
1664 ; X64-XOP-NEXT: vmovdqa {{.*#+}} xmm1 = [60,124]
1665 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1666 ; X64-XOP-NEXT: vpsrlq $32, %xmm0, %xmm0
1667 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
1668 ; X64-XOP-NEXT: vpsllq $32, %xmm0, %xmm0
1669 ; X64-XOP-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1670 ; X64-XOP-NEXT: retq
1672 ; X64-AVX2-LABEL: mul_v2i64_60_120:
1673 ; X64-AVX2: # %bb.0:
1674 ; X64-AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [60,124]
1675 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm2
1676 ; X64-AVX2-NEXT: vpsrlq $32, %xmm0, %xmm0
1677 ; X64-AVX2-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
1678 ; X64-AVX2-NEXT: vpsllq $32, %xmm0, %xmm0
1679 ; X64-AVX2-NEXT: vpaddq %xmm0, %xmm2, %xmm0
1680 ; X64-AVX2-NEXT: retq
1682 ; X64-AVX512DQ-LABEL: mul_v2i64_60_120:
1683 ; X64-AVX512DQ: # %bb.0:
1684 ; X64-AVX512DQ-NEXT: vpmullq {{.*}}(%rip), %xmm0, %xmm0
1685 ; X64-AVX512DQ-NEXT: retq
1697 ; X86-SSE: # %bb.0:
1698 ; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax
1699 ; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx
1700 ; X86-SSE-NEXT: pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero
1701 ; X86-SSE-NEXT: pmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero
1705 ; X64-SSE-LABEL: mul_v2i64_zext_cross_bb:
1706 ; X64-SSE: # %bb.0:
1707 ; X64-SSE-NEXT: pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero
1708 ; X64-SSE-NEXT: pmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero
1709 ; X64-SSE-NEXT: pmuludq %xmm1, %xmm0
1710 ; X64-SSE-NEXT: retq
1712 ; X64-AVX-LABEL: mul_v2i64_zext_cross_bb:
1713 ; X64-AVX: # %bb.0:
1714 ; X64-AVX-NEXT: vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero
1715 ; X64-AVX-NEXT: vpmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero
1716 ; X64-AVX-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
1717 ; X64-AVX-NEXT: retq
1731 ; X86-SSE: # %bb.0:
1732 ; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax
1733 ; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx
1734 ; X86-SSE-NEXT: pmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero
1735 ; X86-SSE-NEXT: pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero
1736 ; X86-SSE-NEXT: pmovzxdq {{.*#+}} xmm2 = mem[0],zero,mem[1],zero
1738 ; X86-SSE-NEXT: pmovzxdq {{.*#+}} xmm2 = mem[0],zero,mem[1],zero
1742 ; X64-SSE-LABEL: mul_v4i64_zext_cross_bb:
1743 ; X64-SSE: # %bb.0:
1744 ; X64-SSE-NEXT: pmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero
1745 ; X64-SSE-NEXT: pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero
1746 ; X64-SSE-NEXT: pmovzxdq {{.*#+}} xmm2 = mem[0],zero,mem[1],zero
1747 ; X64-SSE-NEXT: pmuludq %xmm2, %xmm1
1748 ; X64-SSE-NEXT: pmovzxdq {{.*#+}} xmm2 = mem[0],zero,mem[1],zero
1749 ; X64-SSE-NEXT: pmuludq %xmm2, %xmm0
1750 ; X64-SSE-NEXT: retq
1752 ; X64-XOP-LABEL: mul_v4i64_zext_cross_bb:
1753 ; X64-XOP: # %bb.0:
1754 ; X64-XOP-NEXT: vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero
1755 ; X64-XOP-NEXT: vpmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero
1756 ; X64-XOP-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1757 ; X64-XOP-NEXT: vpmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero
1758 ; X64-XOP-NEXT: vpmovzxdq {{.*#+}} xmm2 = mem[0],zero,mem[1],zero
1759 ; X64-XOP-NEXT: vextractf128 $1, %ymm0, %xmm3
1760 ; X64-XOP-NEXT: vpmuludq %xmm2, %xmm3, %xmm2
1761 ; X64-XOP-NEXT: vpmuludq %xmm1, %xmm0, %xmm0
1762 ; X64-XOP-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1763 ; X64-XOP-NEXT: retq
1765 ; X64-AVX2-LABEL: mul_v4i64_zext_cross_bb:
1766 ; X64-AVX2: # %bb.0:
1767 ; X64-AVX2-NEXT: vpmovzxdq {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
1768 ; X64-AVX2-NEXT: vpmovzxdq {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
1769 ; X64-AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm0
1770 ; X64-AVX2-NEXT: retq
1772 ; X64-AVX512DQ-LABEL: mul_v4i64_zext_cross_bb:
1773 ; X64-AVX512DQ: # %bb.0:
1774 ; X64-AVX512DQ-NEXT: vpmovzxdq {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
1775 ; X64-AVX512DQ-NEXT: vpmovzxdq {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
1776 ; X64-AVX512DQ-NEXT: vpmuludq %ymm1, %ymm0, %ymm0
1777 ; X64-AVX512DQ-NEXT: retq