Lines Matching refs:X64

2 … -mtriple=x86_64-unknown-unknown               | FileCheck %s --check-prefixes=X64,X64-SSE,X64-SSE2
3 …-mtriple=x86_64-unknown-unknown -mattr=sse4.1 | FileCheck %s --check-prefixes=X64,X64-SSE,X64-SSE41
4 … -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX1
5 … -mtriple=x86_64-unknown-unknown -mattr=avx2 | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX2
6 …nknown-unknown -mattr=avx512bw,+prefer-256-bit | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX2
7 …-mattr=avx512bw,-prefer-256-bit | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX512,X64-AVX512BW
8 …avx512f,+prefer-256-bit,-prefer-mask-registers | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX2
9 …r-256-bit,-prefer-mask-registers | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX512,X64-AVX512F
10 …+prefer-256-bit,+prefer-mask-registers | FileCheck %s --check-prefixes=X64,X64-MIC-AVX,X64-MIC-AVX2
11 …efer-256-bit,+prefer-mask-registers | FileCheck %s --check-prefixes=X64,X64-MIC-AVX,X64-MIC-AVX512F
21 ; X64-LABEL: length0:
22 ; X64: # %bb.0:
23 ; X64-NEXT: xorl %eax, %eax
24 ; X64-NEXT: retq
30 ; X64-LABEL: length0_eq:
31 ; X64: # %bb.0:
32 ; X64-NEXT: movb $1, %al
33 ; X64-NEXT: retq
40 ; X64-LABEL: length0_lt:
41 ; X64: # %bb.0:
42 ; X64-NEXT: xorl %eax, %eax
43 ; X64-NEXT: retq
50 ; X64-LABEL: length2:
51 ; X64: # %bb.0:
52 ; X64-NEXT: movzwl (%rdi), %eax
53 ; X64-NEXT: movzwl (%rsi), %ecx
54 ; X64-NEXT: rolw $8, %ax
55 ; X64-NEXT: rolw $8, %cx
56 ; X64-NEXT: movzwl %ax, %eax
57 ; X64-NEXT: movzwl %cx, %ecx
58 ; X64-NEXT: subl %ecx, %eax
59 ; X64-NEXT: retq
65 ; X64-LABEL: length2_const:
66 ; X64: # %bb.0:
67 ; X64-NEXT: movzwl (%rdi), %eax
68 ; X64-NEXT: rolw $8, %ax
69 ; X64-NEXT: movzwl %ax, %eax
70 ; X64-NEXT: addl $-12594, %eax # imm = 0xCECE
71 ; X64-NEXT: retq
77 ; X64-LABEL: length2_gt_const:
78 ; X64: # %bb.0:
79 ; X64-NEXT: movzwl (%rdi), %eax
80 ; X64-NEXT: rolw $8, %ax
81 ; X64-NEXT: movzwl %ax, %eax
82 ; X64-NEXT: addl $-12594, %eax # imm = 0xCECE
83 ; X64-NEXT: testl %eax, %eax
84 ; X64-NEXT: setg %al
85 ; X64-NEXT: retq
92 ; X64-LABEL: length2_eq:
93 ; X64: # %bb.0:
94 ; X64-NEXT: movzwl (%rdi), %eax
95 ; X64-NEXT: cmpw (%rsi), %ax
96 ; X64-NEXT: sete %al
97 ; X64-NEXT: retq
104 ; X64-LABEL: length2_lt:
105 ; X64: # %bb.0:
106 ; X64-NEXT: movzwl (%rdi), %eax
107 ; X64-NEXT: movzwl (%rsi), %ecx
108 ; X64-NEXT: rolw $8, %ax
109 ; X64-NEXT: rolw $8, %cx
110 ; X64-NEXT: movzwl %ax, %eax
111 ; X64-NEXT: movzwl %cx, %ecx
112 ; X64-NEXT: subl %ecx, %eax
113 ; X64-NEXT: shrl $31, %eax
114 ; X64-NEXT: # kill: def $al killed $al killed $eax
115 ; X64-NEXT: retq
122 ; X64-LABEL: length2_gt:
123 ; X64: # %bb.0:
124 ; X64-NEXT: movzwl (%rdi), %eax
125 ; X64-NEXT: movzwl (%rsi), %ecx
126 ; X64-NEXT: rolw $8, %ax
127 ; X64-NEXT: rolw $8, %cx
128 ; X64-NEXT: movzwl %ax, %eax
129 ; X64-NEXT: movzwl %cx, %ecx
130 ; X64-NEXT: subl %ecx, %eax
131 ; X64-NEXT: testl %eax, %eax
132 ; X64-NEXT: setg %al
133 ; X64-NEXT: retq
140 ; X64-LABEL: length2_eq_const:
141 ; X64: # %bb.0:
142 ; X64-NEXT: movzwl (%rdi), %eax
143 ; X64-NEXT: cmpl $12849, %eax # imm = 0x3231
144 ; X64-NEXT: setne %al
145 ; X64-NEXT: retq
152 ; X64-LABEL: length2_eq_nobuiltin_attr:
153 ; X64: # %bb.0:
154 ; X64-NEXT: pushq %rax
155 ; X64-NEXT: movl $2, %edx
156 ; X64-NEXT: callq memcmp
157 ; X64-NEXT: testl %eax, %eax
158 ; X64-NEXT: sete %al
159 ; X64-NEXT: popq %rcx
160 ; X64-NEXT: retq
167 ; X64-LABEL: length3:
168 ; X64: # %bb.0:
169 ; X64-NEXT: movzwl (%rdi), %eax
170 ; X64-NEXT: movzwl (%rsi), %ecx
171 ; X64-NEXT: rolw $8, %ax
172 ; X64-NEXT: rolw $8, %cx
173 ; X64-NEXT: cmpw %cx, %ax
174 ; X64-NEXT: jne .LBB11_3
175 ; X64-NEXT: # %bb.1: # %loadbb1
176 ; X64-NEXT: movzbl 2(%rdi), %eax
177 ; X64-NEXT: movzbl 2(%rsi), %ecx
178 ; X64-NEXT: subl %ecx, %eax
179 ; X64-NEXT: retq
180 ; X64-NEXT: .LBB11_3: # %res_block
181 ; X64-NEXT: setae %al
182 ; X64-NEXT: movzbl %al, %eax
183 ; X64-NEXT: leal -1(%rax,%rax), %eax
184 ; X64-NEXT: retq
190 ; X64-LABEL: length3_eq:
191 ; X64: # %bb.0:
192 ; X64-NEXT: movzwl (%rdi), %eax
193 ; X64-NEXT: xorw (%rsi), %ax
194 ; X64-NEXT: movzbl 2(%rdi), %ecx
195 ; X64-NEXT: xorb 2(%rsi), %cl
196 ; X64-NEXT: movzbl %cl, %ecx
197 ; X64-NEXT: orw %ax, %cx
198 ; X64-NEXT: setne %al
199 ; X64-NEXT: retq
206 ; X64-LABEL: length4:
207 ; X64: # %bb.0:
208 ; X64-NEXT: movl (%rdi), %ecx
209 ; X64-NEXT: movl (%rsi), %edx
210 ; X64-NEXT: bswapl %ecx
211 ; X64-NEXT: bswapl %edx
212 ; X64-NEXT: xorl %eax, %eax
213 ; X64-NEXT: cmpl %edx, %ecx
214 ; X64-NEXT: seta %al
215 ; X64-NEXT: sbbl $0, %eax
216 ; X64-NEXT: retq
222 ; X64-LABEL: length4_eq:
223 ; X64: # %bb.0:
224 ; X64-NEXT: movl (%rdi), %eax
225 ; X64-NEXT: cmpl (%rsi), %eax
226 ; X64-NEXT: setne %al
227 ; X64-NEXT: retq
234 ; X64-LABEL: length4_lt:
235 ; X64: # %bb.0:
236 ; X64-NEXT: movl (%rdi), %ecx
237 ; X64-NEXT: movl (%rsi), %edx
238 ; X64-NEXT: bswapl %ecx
239 ; X64-NEXT: bswapl %edx
240 ; X64-NEXT: xorl %eax, %eax
241 ; X64-NEXT: cmpl %edx, %ecx
242 ; X64-NEXT: seta %al
243 ; X64-NEXT: sbbl $0, %eax
244 ; X64-NEXT: shrl $31, %eax
245 ; X64-NEXT: # kill: def $al killed $al killed $eax
246 ; X64-NEXT: retq
253 ; X64-LABEL: length4_gt:
254 ; X64: # %bb.0:
255 ; X64-NEXT: movl (%rdi), %eax
256 ; X64-NEXT: movl (%rsi), %ecx
257 ; X64-NEXT: bswapl %eax
258 ; X64-NEXT: bswapl %ecx
259 ; X64-NEXT: xorl %edx, %edx
260 ; X64-NEXT: cmpl %ecx, %eax
261 ; X64-NEXT: seta %dl
262 ; X64-NEXT: sbbl $0, %edx
263 ; X64-NEXT: testl %edx, %edx
264 ; X64-NEXT: setg %al
265 ; X64-NEXT: retq
272 ; X64-LABEL: length4_eq_const:
273 ; X64: # %bb.0:
274 ; X64-NEXT: cmpl $875770417, (%rdi) # imm = 0x34333231
275 ; X64-NEXT: sete %al
276 ; X64-NEXT: retq
283 ; X64-LABEL: length5:
284 ; X64: # %bb.0:
285 ; X64-NEXT: movl (%rdi), %eax
286 ; X64-NEXT: movl (%rsi), %ecx
287 ; X64-NEXT: bswapl %eax
288 ; X64-NEXT: bswapl %ecx
289 ; X64-NEXT: cmpl %ecx, %eax
290 ; X64-NEXT: jne .LBB18_3
291 ; X64-NEXT: # %bb.1: # %loadbb1
292 ; X64-NEXT: movzbl 4(%rdi), %eax
293 ; X64-NEXT: movzbl 4(%rsi), %ecx
294 ; X64-NEXT: subl %ecx, %eax
295 ; X64-NEXT: retq
296 ; X64-NEXT: .LBB18_3: # %res_block
297 ; X64-NEXT: setae %al
298 ; X64-NEXT: movzbl %al, %eax
299 ; X64-NEXT: leal -1(%rax,%rax), %eax
300 ; X64-NEXT: retq
306 ; X64-LABEL: length5_eq:
307 ; X64: # %bb.0:
308 ; X64-NEXT: movl (%rdi), %eax
309 ; X64-NEXT: xorl (%rsi), %eax
310 ; X64-NEXT: movzbl 4(%rdi), %ecx
311 ; X64-NEXT: xorb 4(%rsi), %cl
312 ; X64-NEXT: movzbl %cl, %ecx
313 ; X64-NEXT: orl %eax, %ecx
314 ; X64-NEXT: setne %al
315 ; X64-NEXT: retq
322 ; X64-LABEL: length5_lt:
323 ; X64: # %bb.0:
324 ; X64-NEXT: movl (%rdi), %eax
325 ; X64-NEXT: movl (%rsi), %ecx
326 ; X64-NEXT: bswapl %eax
327 ; X64-NEXT: bswapl %ecx
328 ; X64-NEXT: cmpl %ecx, %eax
329 ; X64-NEXT: jne .LBB20_3
330 ; X64-NEXT: # %bb.1: # %loadbb1
331 ; X64-NEXT: movzbl 4(%rdi), %eax
332 ; X64-NEXT: movzbl 4(%rsi), %ecx
333 ; X64-NEXT: subl %ecx, %eax
334 ; X64-NEXT: shrl $31, %eax
335 ; X64-NEXT: # kill: def $al killed $al killed $eax
336 ; X64-NEXT: retq
337 ; X64-NEXT: .LBB20_3: # %res_block
338 ; X64-NEXT: setae %al
339 ; X64-NEXT: movzbl %al, %eax
340 ; X64-NEXT: leal -1(%rax,%rax), %eax
341 ; X64-NEXT: shrl $31, %eax
342 ; X64-NEXT: # kill: def $al killed $al killed $eax
343 ; X64-NEXT: retq
350 ; X64-LABEL: length7:
351 ; X64: # %bb.0:
352 ; X64-NEXT: movl (%rdi), %ecx
353 ; X64-NEXT: movl (%rsi), %edx
354 ; X64-NEXT: bswapl %ecx
355 ; X64-NEXT: bswapl %edx
356 ; X64-NEXT: cmpl %edx, %ecx
357 ; X64-NEXT: jne .LBB21_2
358 ; X64-NEXT: # %bb.1: # %loadbb1
359 ; X64-NEXT: movl 3(%rdi), %ecx
360 ; X64-NEXT: movl 3(%rsi), %edx
361 ; X64-NEXT: bswapl %ecx
362 ; X64-NEXT: bswapl %edx
363 ; X64-NEXT: xorl %eax, %eax
364 ; X64-NEXT: cmpl %edx, %ecx
365 ; X64-NEXT: je .LBB21_3
366 ; X64-NEXT: .LBB21_2: # %res_block
367 ; X64-NEXT: xorl %eax, %eax
368 ; X64-NEXT: cmpl %edx, %ecx
369 ; X64-NEXT: setae %al
370 ; X64-NEXT: leal -1(%rax,%rax), %eax
371 ; X64-NEXT: .LBB21_3: # %endblock
372 ; X64-NEXT: retq
378 ; X64-LABEL: length7_lt:
379 ; X64: # %bb.0:
380 ; X64-NEXT: movl (%rdi), %ecx
381 ; X64-NEXT: movl (%rsi), %edx
382 ; X64-NEXT: bswapl %ecx
383 ; X64-NEXT: bswapl %edx
384 ; X64-NEXT: cmpl %edx, %ecx
385 ; X64-NEXT: jne .LBB22_2
386 ; X64-NEXT: # %bb.1: # %loadbb1
387 ; X64-NEXT: movl 3(%rdi), %ecx
388 ; X64-NEXT: movl 3(%rsi), %edx
389 ; X64-NEXT: bswapl %ecx
390 ; X64-NEXT: bswapl %edx
391 ; X64-NEXT: xorl %eax, %eax
392 ; X64-NEXT: cmpl %edx, %ecx
393 ; X64-NEXT: je .LBB22_3
394 ; X64-NEXT: .LBB22_2: # %res_block
395 ; X64-NEXT: xorl %eax, %eax
396 ; X64-NEXT: cmpl %edx, %ecx
397 ; X64-NEXT: setae %al
398 ; X64-NEXT: leal -1(%rax,%rax), %eax
399 ; X64-NEXT: .LBB22_3: # %endblock
400 ; X64-NEXT: shrl $31, %eax
401 ; X64-NEXT: # kill: def $al killed $al killed $eax
402 ; X64-NEXT: retq
409 ; X64-LABEL: length7_eq:
410 ; X64: # %bb.0:
411 ; X64-NEXT: movl (%rdi), %eax
412 ; X64-NEXT: movl 3(%rdi), %ecx
413 ; X64-NEXT: xorl (%rsi), %eax
414 ; X64-NEXT: xorl 3(%rsi), %ecx
415 ; X64-NEXT: orl %eax, %ecx
416 ; X64-NEXT: setne %al
417 ; X64-NEXT: retq
424 ; X64-LABEL: length8:
425 ; X64: # %bb.0:
426 ; X64-NEXT: movq (%rdi), %rcx
427 ; X64-NEXT: movq (%rsi), %rdx
428 ; X64-NEXT: bswapq %rcx
429 ; X64-NEXT: bswapq %rdx
430 ; X64-NEXT: xorl %eax, %eax
431 ; X64-NEXT: cmpq %rdx, %rcx
432 ; X64-NEXT: seta %al
433 ; X64-NEXT: sbbl $0, %eax
434 ; X64-NEXT: retq
440 ; X64-LABEL: length8_eq:
441 ; X64: # %bb.0:
442 ; X64-NEXT: movq (%rdi), %rax
443 ; X64-NEXT: cmpq (%rsi), %rax
444 ; X64-NEXT: sete %al
445 ; X64-NEXT: retq
452 ; X64-LABEL: length8_eq_const:
453 ; X64: # %bb.0:
454 ; X64-NEXT: movabsq $3978425819141910832, %rax # imm = 0x3736353433323130
455 ; X64-NEXT: cmpq %rax, (%rdi)
456 ; X64-NEXT: setne %al
457 ; X64-NEXT: retq
464 ; X64-LABEL: length9_eq:
465 ; X64: # %bb.0:
466 ; X64-NEXT: movq (%rdi), %rax
467 ; X64-NEXT: xorq (%rsi), %rax
468 ; X64-NEXT: movzbl 8(%rdi), %ecx
469 ; X64-NEXT: xorb 8(%rsi), %cl
470 ; X64-NEXT: movzbl %cl, %ecx
471 ; X64-NEXT: orq %rax, %rcx
472 ; X64-NEXT: sete %al
473 ; X64-NEXT: retq
480 ; X64-LABEL: length10_eq:
481 ; X64: # %bb.0:
482 ; X64-NEXT: movq (%rdi), %rax
483 ; X64-NEXT: xorq (%rsi), %rax
484 ; X64-NEXT: movzwl 8(%rdi), %ecx
485 ; X64-NEXT: xorw 8(%rsi), %cx
486 ; X64-NEXT: movzwl %cx, %ecx
487 ; X64-NEXT: orq %rax, %rcx
488 ; X64-NEXT: sete %al
489 ; X64-NEXT: retq
496 ; X64-LABEL: length11_eq:
497 ; X64: # %bb.0:
498 ; X64-NEXT: movq (%rdi), %rax
499 ; X64-NEXT: movq 3(%rdi), %rcx
500 ; X64-NEXT: xorq (%rsi), %rax
501 ; X64-NEXT: xorq 3(%rsi), %rcx
502 ; X64-NEXT: orq %rax, %rcx
503 ; X64-NEXT: sete %al
504 ; X64-NEXT: retq
511 ; X64-LABEL: length12_eq:
512 ; X64: # %bb.0:
513 ; X64-NEXT: movq (%rdi), %rax
514 ; X64-NEXT: xorq (%rsi), %rax
515 ; X64-NEXT: movl 8(%rdi), %ecx
516 ; X64-NEXT: xorl 8(%rsi), %ecx
517 ; X64-NEXT: orq %rax, %rcx
518 ; X64-NEXT: setne %al
519 ; X64-NEXT: retq
526 ; X64-LABEL: length12:
527 ; X64: # %bb.0:
528 ; X64-NEXT: movq (%rdi), %rcx
529 ; X64-NEXT: movq (%rsi), %rdx
530 ; X64-NEXT: bswapq %rcx
531 ; X64-NEXT: bswapq %rdx
532 ; X64-NEXT: cmpq %rdx, %rcx
533 ; X64-NEXT: jne .LBB31_2
534 ; X64-NEXT: # %bb.1: # %loadbb1
535 ; X64-NEXT: movl 8(%rdi), %ecx
536 ; X64-NEXT: movl 8(%rsi), %edx
537 ; X64-NEXT: bswapl %ecx
538 ; X64-NEXT: bswapl %edx
539 ; X64-NEXT: xorl %eax, %eax
540 ; X64-NEXT: cmpq %rdx, %rcx
541 ; X64-NEXT: je .LBB31_3
542 ; X64-NEXT: .LBB31_2: # %res_block
543 ; X64-NEXT: xorl %eax, %eax
544 ; X64-NEXT: cmpq %rdx, %rcx
545 ; X64-NEXT: setae %al
546 ; X64-NEXT: leal -1(%rax,%rax), %eax
547 ; X64-NEXT: .LBB31_3: # %endblock
548 ; X64-NEXT: retq
554 ; X64-LABEL: length13_eq:
555 ; X64: # %bb.0:
556 ; X64-NEXT: movq (%rdi), %rax
557 ; X64-NEXT: movq 5(%rdi), %rcx
558 ; X64-NEXT: xorq (%rsi), %rax
559 ; X64-NEXT: xorq 5(%rsi), %rcx
560 ; X64-NEXT: orq %rax, %rcx
561 ; X64-NEXT: sete %al
562 ; X64-NEXT: retq
569 ; X64-LABEL: length14_eq:
570 ; X64: # %bb.0:
571 ; X64-NEXT: movq (%rdi), %rax
572 ; X64-NEXT: movq 6(%rdi), %rcx
573 ; X64-NEXT: xorq (%rsi), %rax
574 ; X64-NEXT: xorq 6(%rsi), %rcx
575 ; X64-NEXT: orq %rax, %rcx
576 ; X64-NEXT: sete %al
577 ; X64-NEXT: retq
584 ; X64-LABEL: length15:
585 ; X64: # %bb.0:
586 ; X64-NEXT: movq (%rdi), %rcx
587 ; X64-NEXT: movq (%rsi), %rdx
588 ; X64-NEXT: bswapq %rcx
589 ; X64-NEXT: bswapq %rdx
590 ; X64-NEXT: cmpq %rdx, %rcx
591 ; X64-NEXT: jne .LBB34_2
592 ; X64-NEXT: # %bb.1: # %loadbb1
593 ; X64-NEXT: movq 7(%rdi), %rcx
594 ; X64-NEXT: movq 7(%rsi), %rdx
595 ; X64-NEXT: bswapq %rcx
596 ; X64-NEXT: bswapq %rdx
597 ; X64-NEXT: xorl %eax, %eax
598 ; X64-NEXT: cmpq %rdx, %rcx
599 ; X64-NEXT: je .LBB34_3
600 ; X64-NEXT: .LBB34_2: # %res_block
601 ; X64-NEXT: xorl %eax, %eax
602 ; X64-NEXT: cmpq %rdx, %rcx
603 ; X64-NEXT: setae %al
604 ; X64-NEXT: leal -1(%rax,%rax), %eax
605 ; X64-NEXT: .LBB34_3: # %endblock
606 ; X64-NEXT: retq
612 ; X64-LABEL: length15_lt:
613 ; X64: # %bb.0:
614 ; X64-NEXT: movq (%rdi), %rcx
615 ; X64-NEXT: movq (%rsi), %rdx
616 ; X64-NEXT: bswapq %rcx
617 ; X64-NEXT: bswapq %rdx
618 ; X64-NEXT: cmpq %rdx, %rcx
619 ; X64-NEXT: jne .LBB35_2
620 ; X64-NEXT: # %bb.1: # %loadbb1
621 ; X64-NEXT: movq 7(%rdi), %rcx
622 ; X64-NEXT: movq 7(%rsi), %rdx
623 ; X64-NEXT: bswapq %rcx
624 ; X64-NEXT: bswapq %rdx
625 ; X64-NEXT: xorl %eax, %eax
626 ; X64-NEXT: cmpq %rdx, %rcx
627 ; X64-NEXT: je .LBB35_3
628 ; X64-NEXT: .LBB35_2: # %res_block
629 ; X64-NEXT: xorl %eax, %eax
630 ; X64-NEXT: cmpq %rdx, %rcx
631 ; X64-NEXT: setae %al
632 ; X64-NEXT: leal -1(%rax,%rax), %eax
633 ; X64-NEXT: .LBB35_3: # %endblock
634 ; X64-NEXT: shrl $31, %eax
635 ; X64-NEXT: # kill: def $al killed $al killed $eax
636 ; X64-NEXT: retq
643 ; X64-LABEL: length15_const:
644 ; X64: # %bb.0:
645 ; X64-NEXT: movabsq $3544952156018063160, %rcx # imm = 0x3132333435363738
646 ; X64-NEXT: movq (%rdi), %rdx
647 ; X64-NEXT: bswapq %rdx
648 ; X64-NEXT: cmpq %rcx, %rdx
649 ; X64-NEXT: jne .LBB36_2
650 ; X64-NEXT: # %bb.1: # %loadbb1
651 ; X64-NEXT: movabsq $4051322327650219061, %rcx # imm = 0x3839303132333435
652 ; X64-NEXT: movq 7(%rdi), %rdx
653 ; X64-NEXT: bswapq %rdx
654 ; X64-NEXT: xorl %eax, %eax
655 ; X64-NEXT: cmpq %rcx, %rdx
656 ; X64-NEXT: je .LBB36_3
657 ; X64-NEXT: .LBB36_2: # %res_block
658 ; X64-NEXT: xorl %eax, %eax
659 ; X64-NEXT: cmpq %rcx, %rdx
660 ; X64-NEXT: setae %al
661 ; X64-NEXT: leal -1(%rax,%rax), %eax
662 ; X64-NEXT: .LBB36_3: # %endblock
663 ; X64-NEXT: retq
669 ; X64-LABEL: length15_eq:
670 ; X64: # %bb.0:
671 ; X64-NEXT: movq (%rdi), %rax
672 ; X64-NEXT: movq 7(%rdi), %rcx
673 ; X64-NEXT: xorq (%rsi), %rax
674 ; X64-NEXT: xorq 7(%rsi), %rcx
675 ; X64-NEXT: orq %rax, %rcx
676 ; X64-NEXT: sete %al
677 ; X64-NEXT: retq
684 ; X64-LABEL: length15_gt_const:
685 ; X64: # %bb.0:
686 ; X64-NEXT: movabsq $3544952156018063160, %rax # imm = 0x3132333435363738
687 ; X64-NEXT: movq (%rdi), %rcx
688 ; X64-NEXT: bswapq %rcx
689 ; X64-NEXT: cmpq %rax, %rcx
690 ; X64-NEXT: jne .LBB38_2
691 ; X64-NEXT: # %bb.1: # %loadbb1
692 ; X64-NEXT: movabsq $4051322327650219061, %rax # imm = 0x3839303132333435
693 ; X64-NEXT: movq 7(%rdi), %rcx
694 ; X64-NEXT: bswapq %rcx
695 ; X64-NEXT: xorl %edx, %edx
696 ; X64-NEXT: cmpq %rax, %rcx
697 ; X64-NEXT: je .LBB38_3
698 ; X64-NEXT: .LBB38_2: # %res_block
699 ; X64-NEXT: xorl %edx, %edx
700 ; X64-NEXT: cmpq %rax, %rcx
701 ; X64-NEXT: setae %dl
702 ; X64-NEXT: leal -1(%rdx,%rdx), %edx
703 ; X64-NEXT: .LBB38_3: # %endblock
704 ; X64-NEXT: testl %edx, %edx
705 ; X64-NEXT: setg %al
706 ; X64-NEXT: retq
715 ; X64-LABEL: length16:
716 ; X64: # %bb.0:
717 ; X64-NEXT: movq (%rdi), %rcx
718 ; X64-NEXT: movq (%rsi), %rdx
719 ; X64-NEXT: bswapq %rcx
720 ; X64-NEXT: bswapq %rdx
721 ; X64-NEXT: cmpq %rdx, %rcx
722 ; X64-NEXT: jne .LBB39_2
723 ; X64-NEXT: # %bb.1: # %loadbb1
724 ; X64-NEXT: movq 8(%rdi), %rcx
725 ; X64-NEXT: movq 8(%rsi), %rdx
726 ; X64-NEXT: bswapq %rcx
727 ; X64-NEXT: bswapq %rdx
728 ; X64-NEXT: xorl %eax, %eax
729 ; X64-NEXT: cmpq %rdx, %rcx
730 ; X64-NEXT: je .LBB39_3
731 ; X64-NEXT: .LBB39_2: # %res_block
732 ; X64-NEXT: xorl %eax, %eax
733 ; X64-NEXT: cmpq %rdx, %rcx
734 ; X64-NEXT: setae %al
735 ; X64-NEXT: leal -1(%rax,%rax), %eax
736 ; X64-NEXT: .LBB39_3: # %endblock
737 ; X64-NEXT: retq
743 ; X64-SSE2-LABEL: length16_eq:
744 ; X64-SSE2: # %bb.0:
745 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
746 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm1
747 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm1
748 ; X64-SSE2-NEXT: pmovmskb %xmm1, %eax
749 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
750 ; X64-SSE2-NEXT: setne %al
751 ; X64-SSE2-NEXT: retq
753 ; X64-SSE41-LABEL: length16_eq:
754 ; X64-SSE41: # %bb.0:
755 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
756 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm1
757 ; X64-SSE41-NEXT: pxor %xmm0, %xmm1
758 ; X64-SSE41-NEXT: ptest %xmm1, %xmm1
759 ; X64-SSE41-NEXT: setne %al
760 ; X64-SSE41-NEXT: retq
762 ; X64-AVX-LABEL: length16_eq:
763 ; X64-AVX: # %bb.0:
764 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
765 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
766 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
767 ; X64-AVX-NEXT: setne %al
768 ; X64-AVX-NEXT: retq
770 ; X64-MIC-AVX-LABEL: length16_eq:
771 ; X64-MIC-AVX: # %bb.0:
772 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
773 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm1
774 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k0
775 ; X64-MIC-AVX-NEXT: kortestw %k0, %k0
776 ; X64-MIC-AVX-NEXT: setne %al
777 ; X64-MIC-AVX-NEXT: vzeroupper
778 ; X64-MIC-AVX-NEXT: retq
785 ; X64-LABEL: length16_lt:
786 ; X64: # %bb.0:
787 ; X64-NEXT: movq (%rdi), %rcx
788 ; X64-NEXT: movq (%rsi), %rdx
789 ; X64-NEXT: bswapq %rcx
790 ; X64-NEXT: bswapq %rdx
791 ; X64-NEXT: cmpq %rdx, %rcx
792 ; X64-NEXT: jne .LBB41_2
793 ; X64-NEXT: # %bb.1: # %loadbb1
794 ; X64-NEXT: movq 8(%rdi), %rcx
795 ; X64-NEXT: movq 8(%rsi), %rdx
796 ; X64-NEXT: bswapq %rcx
797 ; X64-NEXT: bswapq %rdx
798 ; X64-NEXT: xorl %eax, %eax
799 ; X64-NEXT: cmpq %rdx, %rcx
800 ; X64-NEXT: je .LBB41_3
801 ; X64-NEXT: .LBB41_2: # %res_block
802 ; X64-NEXT: xorl %eax, %eax
803 ; X64-NEXT: cmpq %rdx, %rcx
804 ; X64-NEXT: setae %al
805 ; X64-NEXT: leal -1(%rax,%rax), %eax
806 ; X64-NEXT: .LBB41_3: # %endblock
807 ; X64-NEXT: shrl $31, %eax
808 ; X64-NEXT: # kill: def $al killed $al killed $eax
809 ; X64-NEXT: retq
816 ; X64-LABEL: length16_gt:
817 ; X64: # %bb.0:
818 ; X64-NEXT: movq (%rdi), %rax
819 ; X64-NEXT: movq (%rsi), %rcx
820 ; X64-NEXT: bswapq %rax
821 ; X64-NEXT: bswapq %rcx
822 ; X64-NEXT: cmpq %rcx, %rax
823 ; X64-NEXT: jne .LBB42_2
824 ; X64-NEXT: # %bb.1: # %loadbb1
825 ; X64-NEXT: movq 8(%rdi), %rax
826 ; X64-NEXT: movq 8(%rsi), %rcx
827 ; X64-NEXT: bswapq %rax
828 ; X64-NEXT: bswapq %rcx
829 ; X64-NEXT: xorl %edx, %edx
830 ; X64-NEXT: cmpq %rcx, %rax
831 ; X64-NEXT: je .LBB42_3
832 ; X64-NEXT: .LBB42_2: # %res_block
833 ; X64-NEXT: xorl %edx, %edx
834 ; X64-NEXT: cmpq %rcx, %rax
835 ; X64-NEXT: setae %dl
836 ; X64-NEXT: leal -1(%rdx,%rdx), %edx
837 ; X64-NEXT: .LBB42_3: # %endblock
838 ; X64-NEXT: testl %edx, %edx
839 ; X64-NEXT: setg %al
840 ; X64-NEXT: retq
847 ; X64-SSE2-LABEL: length16_eq_const:
848 ; X64-SSE2: # %bb.0:
849 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
850 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
851 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
852 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
853 ; X64-SSE2-NEXT: sete %al
854 ; X64-SSE2-NEXT: retq
856 ; X64-SSE41-LABEL: length16_eq_const:
857 ; X64-SSE41: # %bb.0:
858 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
859 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
860 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
861 ; X64-SSE41-NEXT: sete %al
862 ; X64-SSE41-NEXT: retq
864 ; X64-AVX-LABEL: length16_eq_const:
865 ; X64-AVX: # %bb.0:
866 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
867 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
868 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
869 ; X64-AVX-NEXT: sete %al
870 ; X64-AVX-NEXT: retq
872 ; X64-MIC-AVX-LABEL: length16_eq_const:
873 ; X64-MIC-AVX: # %bb.0:
874 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
875 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [858927408,926299444,825243960,892613426]
876 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k0
877 ; X64-MIC-AVX-NEXT: kortestw %k0, %k0
878 ; X64-MIC-AVX-NEXT: sete %al
879 ; X64-MIC-AVX-NEXT: vzeroupper
880 ; X64-MIC-AVX-NEXT: retq
889 ; X64-LABEL: length24:
890 ; X64: # %bb.0:
891 ; X64-NEXT: movl $24, %edx
892 ; X64-NEXT: jmp memcmp # TAILCALL
898 ; X64-SSE2-LABEL: length24_eq:
899 ; X64-SSE2: # %bb.0:
900 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
901 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm1
902 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm1
903 ; X64-SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
904 ; X64-SSE2-NEXT: movq {{.*#+}} xmm2 = mem[0],zero
905 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
906 ; X64-SSE2-NEXT: pand %xmm1, %xmm2
907 ; X64-SSE2-NEXT: pmovmskb %xmm2, %eax
908 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
909 ; X64-SSE2-NEXT: sete %al
910 ; X64-SSE2-NEXT: retq
912 ; X64-SSE41-LABEL: length24_eq:
913 ; X64-SSE41: # %bb.0:
914 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
915 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm1
916 ; X64-SSE41-NEXT: pxor %xmm0, %xmm1
917 ; X64-SSE41-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
918 ; X64-SSE41-NEXT: movq {{.*#+}} xmm2 = mem[0],zero
919 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
920 ; X64-SSE41-NEXT: por %xmm1, %xmm2
921 ; X64-SSE41-NEXT: ptest %xmm2, %xmm2
922 ; X64-SSE41-NEXT: sete %al
923 ; X64-SSE41-NEXT: retq
925 ; X64-AVX-LABEL: length24_eq:
926 ; X64-AVX: # %bb.0:
927 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
928 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
929 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
930 ; X64-AVX-NEXT: vpxor %xmm2, %xmm1, %xmm1
931 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
932 ; X64-AVX-NEXT: vpor %xmm0, %xmm1, %xmm0
933 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
934 ; X64-AVX-NEXT: sete %al
935 ; X64-AVX-NEXT: retq
937 ; X64-MIC-AVX-LABEL: length24_eq:
938 ; X64-MIC-AVX: # %bb.0:
939 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
940 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm1
941 ; X64-MIC-AVX-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
942 ; X64-MIC-AVX-NEXT: vmovq {{.*#+}} xmm3 = mem[0],zero
943 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm2, %k0
944 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
945 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
946 ; X64-MIC-AVX-NEXT: sete %al
947 ; X64-MIC-AVX-NEXT: vzeroupper
948 ; X64-MIC-AVX-NEXT: retq
955 ; X64-LABEL: length24_lt:
956 ; X64: # %bb.0:
957 ; X64-NEXT: pushq %rax
958 ; X64-NEXT: movl $24, %edx
959 ; X64-NEXT: callq memcmp
960 ; X64-NEXT: shrl $31, %eax
961 ; X64-NEXT: # kill: def $al killed $al killed $eax
962 ; X64-NEXT: popq %rcx
963 ; X64-NEXT: retq
970 ; X64-LABEL: length24_gt:
971 ; X64: # %bb.0:
972 ; X64-NEXT: pushq %rax
973 ; X64-NEXT: movl $24, %edx
974 ; X64-NEXT: callq memcmp
975 ; X64-NEXT: testl %eax, %eax
976 ; X64-NEXT: setg %al
977 ; X64-NEXT: popq %rcx
978 ; X64-NEXT: retq
985 ; X64-SSE2-LABEL: length24_eq_const:
986 ; X64-SSE2: # %bb.0:
987 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
988 ; X64-SSE2-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
989 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
990 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
991 ; X64-SSE2-NEXT: pand %xmm1, %xmm0
992 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
993 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
994 ; X64-SSE2-NEXT: setne %al
995 ; X64-SSE2-NEXT: retq
997 ; X64-SSE41-LABEL: length24_eq_const:
998 ; X64-SSE41: # %bb.0:
999 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1000 ; X64-SSE41-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1001 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1002 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1003 ; X64-SSE41-NEXT: por %xmm1, %xmm0
1004 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1005 ; X64-SSE41-NEXT: setne %al
1006 ; X64-SSE41-NEXT: retq
1008 ; X64-AVX-LABEL: length24_eq_const:
1009 ; X64-AVX: # %bb.0:
1010 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1011 ; X64-AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1012 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
1013 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1014 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1015 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1016 ; X64-AVX-NEXT: setne %al
1017 ; X64-AVX-NEXT: retq
1019 ; X64-MIC-AVX-LABEL: length24_eq_const:
1020 ; X64-MIC-AVX: # %bb.0:
1021 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1022 ; X64-MIC-AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1023 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [959985462,858927408,0,0]
1024 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
1025 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [858927408,926299444,825243960,892613426]
1026 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1027 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1028 ; X64-MIC-AVX-NEXT: setne %al
1029 ; X64-MIC-AVX-NEXT: vzeroupper
1030 ; X64-MIC-AVX-NEXT: retq
1037 ; X64-LABEL: length31:
1038 ; X64: # %bb.0:
1039 ; X64-NEXT: movl $31, %edx
1040 ; X64-NEXT: jmp memcmp # TAILCALL
1046 ; X64-SSE2-LABEL: length31_eq:
1047 ; X64-SSE2: # %bb.0:
1048 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1049 ; X64-SSE2-NEXT: movdqu 15(%rdi), %xmm1
1050 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
1051 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
1052 ; X64-SSE2-NEXT: movdqu 15(%rsi), %xmm0
1053 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
1054 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
1055 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1056 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1057 ; X64-SSE2-NEXT: sete %al
1058 ; X64-SSE2-NEXT: retq
1060 ; X64-SSE41-LABEL: length31_eq:
1061 ; X64-SSE41: # %bb.0:
1062 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1063 ; X64-SSE41-NEXT: movdqu 15(%rdi), %xmm1
1064 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm2
1065 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
1066 ; X64-SSE41-NEXT: movdqu 15(%rsi), %xmm0
1067 ; X64-SSE41-NEXT: pxor %xmm1, %xmm0
1068 ; X64-SSE41-NEXT: por %xmm2, %xmm0
1069 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1070 ; X64-SSE41-NEXT: sete %al
1071 ; X64-SSE41-NEXT: retq
1073 ; X64-AVX-LABEL: length31_eq:
1074 ; X64-AVX: # %bb.0:
1075 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1076 ; X64-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1077 ; X64-AVX-NEXT: vpxor 15(%rsi), %xmm1, %xmm1
1078 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
1079 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1080 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1081 ; X64-AVX-NEXT: sete %al
1082 ; X64-AVX-NEXT: retq
1084 ; X64-MIC-AVX-LABEL: length31_eq:
1085 ; X64-MIC-AVX: # %bb.0:
1086 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1087 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1088 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm2
1089 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rsi), %xmm3
1090 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1091 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1092 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1093 ; X64-MIC-AVX-NEXT: sete %al
1094 ; X64-MIC-AVX-NEXT: vzeroupper
1095 ; X64-MIC-AVX-NEXT: retq
1102 ; X64-LABEL: length31_lt:
1103 ; X64: # %bb.0:
1104 ; X64-NEXT: pushq %rax
1105 ; X64-NEXT: movl $31, %edx
1106 ; X64-NEXT: callq memcmp
1107 ; X64-NEXT: shrl $31, %eax
1108 ; X64-NEXT: # kill: def $al killed $al killed $eax
1109 ; X64-NEXT: popq %rcx
1110 ; X64-NEXT: retq
1117 ; X64-LABEL: length31_gt:
1118 ; X64: # %bb.0:
1119 ; X64-NEXT: pushq %rax
1120 ; X64-NEXT: movl $31, %edx
1121 ; X64-NEXT: callq memcmp
1122 ; X64-NEXT: testl %eax, %eax
1123 ; X64-NEXT: setg %al
1124 ; X64-NEXT: popq %rcx
1125 ; X64-NEXT: retq
1132 ; X64-SSE2-LABEL: length31_eq_prefer128:
1133 ; X64-SSE2: # %bb.0:
1134 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1135 ; X64-SSE2-NEXT: movdqu 15(%rdi), %xmm1
1136 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
1137 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
1138 ; X64-SSE2-NEXT: movdqu 15(%rsi), %xmm0
1139 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
1140 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
1141 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1142 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1143 ; X64-SSE2-NEXT: sete %al
1144 ; X64-SSE2-NEXT: retq
1146 ; X64-SSE41-LABEL: length31_eq_prefer128:
1147 ; X64-SSE41: # %bb.0:
1148 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1149 ; X64-SSE41-NEXT: movdqu 15(%rdi), %xmm1
1150 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm2
1151 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
1152 ; X64-SSE41-NEXT: movdqu 15(%rsi), %xmm0
1153 ; X64-SSE41-NEXT: pxor %xmm1, %xmm0
1154 ; X64-SSE41-NEXT: por %xmm2, %xmm0
1155 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1156 ; X64-SSE41-NEXT: sete %al
1157 ; X64-SSE41-NEXT: retq
1159 ; X64-AVX-LABEL: length31_eq_prefer128:
1160 ; X64-AVX: # %bb.0:
1161 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1162 ; X64-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1163 ; X64-AVX-NEXT: vpxor 15(%rsi), %xmm1, %xmm1
1164 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
1165 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1166 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1167 ; X64-AVX-NEXT: sete %al
1168 ; X64-AVX-NEXT: retq
1170 ; X64-MIC-AVX-LABEL: length31_eq_prefer128:
1171 ; X64-MIC-AVX: # %bb.0:
1172 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1173 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1174 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm2
1175 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rsi), %xmm3
1176 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1177 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1178 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1179 ; X64-MIC-AVX-NEXT: sete %al
1180 ; X64-MIC-AVX-NEXT: vzeroupper
1181 ; X64-MIC-AVX-NEXT: retq
1188 ; X64-SSE2-LABEL: length31_eq_const:
1189 ; X64-SSE2: # %bb.0:
1190 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1191 ; X64-SSE2-NEXT: movdqu 15(%rdi), %xmm1
1192 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1193 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1194 ; X64-SSE2-NEXT: pand %xmm1, %xmm0
1195 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1196 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1197 ; X64-SSE2-NEXT: setne %al
1198 ; X64-SSE2-NEXT: retq
1200 ; X64-SSE41-LABEL: length31_eq_const:
1201 ; X64-SSE41: # %bb.0:
1202 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1203 ; X64-SSE41-NEXT: movdqu 15(%rdi), %xmm1
1204 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1205 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1206 ; X64-SSE41-NEXT: por %xmm1, %xmm0
1207 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1208 ; X64-SSE41-NEXT: setne %al
1209 ; X64-SSE41-NEXT: retq
1211 ; X64-AVX-LABEL: length31_eq_const:
1212 ; X64-AVX: # %bb.0:
1213 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1214 ; X64-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1215 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
1216 ; X64-AVX-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1217 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1218 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1219 ; X64-AVX-NEXT: setne %al
1220 ; X64-AVX-NEXT: retq
1222 ; X64-MIC-AVX-LABEL: length31_eq_const:
1223 ; X64-MIC-AVX: # %bb.0:
1224 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1225 ; X64-MIC-AVX-NEXT: vmovdqu 15(%rdi), %xmm1
1226 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [943142453,842084409,909456435,809056311]
1227 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
1228 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [858927408,926299444,825243960,892613426]
1229 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1230 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1231 ; X64-MIC-AVX-NEXT: setne %al
1232 ; X64-MIC-AVX-NEXT: vzeroupper
1233 ; X64-MIC-AVX-NEXT: retq
1240 ; X64-LABEL: length32:
1241 ; X64: # %bb.0:
1242 ; X64-NEXT: movl $32, %edx
1243 ; X64-NEXT: jmp memcmp # TAILCALL
1251 ; X64-SSE2-LABEL: length32_eq:
1252 ; X64-SSE2: # %bb.0:
1253 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1254 ; X64-SSE2-NEXT: movdqu 16(%rdi), %xmm1
1255 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
1256 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
1257 ; X64-SSE2-NEXT: movdqu 16(%rsi), %xmm0
1258 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
1259 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
1260 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1261 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1262 ; X64-SSE2-NEXT: sete %al
1263 ; X64-SSE2-NEXT: retq
1265 ; X64-SSE41-LABEL: length32_eq:
1266 ; X64-SSE41: # %bb.0:
1267 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1268 ; X64-SSE41-NEXT: movdqu 16(%rdi), %xmm1
1269 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm2
1270 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
1271 ; X64-SSE41-NEXT: movdqu 16(%rsi), %xmm0
1272 ; X64-SSE41-NEXT: pxor %xmm1, %xmm0
1273 ; X64-SSE41-NEXT: por %xmm2, %xmm0
1274 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1275 ; X64-SSE41-NEXT: sete %al
1276 ; X64-SSE41-NEXT: retq
1278 ; X64-AVX1-LABEL: length32_eq:
1279 ; X64-AVX1: # %bb.0:
1280 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1281 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
1282 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1283 ; X64-AVX1-NEXT: sete %al
1284 ; X64-AVX1-NEXT: vzeroupper
1285 ; X64-AVX1-NEXT: retq
1287 ; X64-AVX2-LABEL: length32_eq:
1288 ; X64-AVX2: # %bb.0:
1289 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1290 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
1291 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1292 ; X64-AVX2-NEXT: sete %al
1293 ; X64-AVX2-NEXT: vzeroupper
1294 ; X64-AVX2-NEXT: retq
1296 ; X64-AVX512-LABEL: length32_eq:
1297 ; X64-AVX512: # %bb.0:
1298 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1299 ; X64-AVX512-NEXT: vpxor (%rsi), %ymm0, %ymm0
1300 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1301 ; X64-AVX512-NEXT: sete %al
1302 ; X64-AVX512-NEXT: vzeroupper
1303 ; X64-AVX512-NEXT: retq
1305 ; X64-MIC-AVX-LABEL: length32_eq:
1306 ; X64-MIC-AVX: # %bb.0:
1307 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1308 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %ymm1
1309 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k0
1310 ; X64-MIC-AVX-NEXT: kortestw %k0, %k0
1311 ; X64-MIC-AVX-NEXT: sete %al
1312 ; X64-MIC-AVX-NEXT: vzeroupper
1313 ; X64-MIC-AVX-NEXT: retq
1320 ; X64-LABEL: length32_lt:
1321 ; X64: # %bb.0:
1322 ; X64-NEXT: pushq %rax
1323 ; X64-NEXT: movl $32, %edx
1324 ; X64-NEXT: callq memcmp
1325 ; X64-NEXT: shrl $31, %eax
1326 ; X64-NEXT: # kill: def $al killed $al killed $eax
1327 ; X64-NEXT: popq %rcx
1328 ; X64-NEXT: retq
1335 ; X64-LABEL: length32_gt:
1336 ; X64: # %bb.0:
1337 ; X64-NEXT: pushq %rax
1338 ; X64-NEXT: movl $32, %edx
1339 ; X64-NEXT: callq memcmp
1340 ; X64-NEXT: testl %eax, %eax
1341 ; X64-NEXT: setg %al
1342 ; X64-NEXT: popq %rcx
1343 ; X64-NEXT: retq
1350 ; X64-SSE2-LABEL: length32_eq_prefer128:
1351 ; X64-SSE2: # %bb.0:
1352 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1353 ; X64-SSE2-NEXT: movdqu 16(%rdi), %xmm1
1354 ; X64-SSE2-NEXT: movdqu (%rsi), %xmm2
1355 ; X64-SSE2-NEXT: pcmpeqb %xmm0, %xmm2
1356 ; X64-SSE2-NEXT: movdqu 16(%rsi), %xmm0
1357 ; X64-SSE2-NEXT: pcmpeqb %xmm1, %xmm0
1358 ; X64-SSE2-NEXT: pand %xmm2, %xmm0
1359 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1360 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1361 ; X64-SSE2-NEXT: sete %al
1362 ; X64-SSE2-NEXT: retq
1364 ; X64-SSE41-LABEL: length32_eq_prefer128:
1365 ; X64-SSE41: # %bb.0:
1366 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1367 ; X64-SSE41-NEXT: movdqu 16(%rdi), %xmm1
1368 ; X64-SSE41-NEXT: movdqu (%rsi), %xmm2
1369 ; X64-SSE41-NEXT: pxor %xmm0, %xmm2
1370 ; X64-SSE41-NEXT: movdqu 16(%rsi), %xmm0
1371 ; X64-SSE41-NEXT: pxor %xmm1, %xmm0
1372 ; X64-SSE41-NEXT: por %xmm2, %xmm0
1373 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1374 ; X64-SSE41-NEXT: sete %al
1375 ; X64-SSE41-NEXT: retq
1377 ; X64-AVX-LABEL: length32_eq_prefer128:
1378 ; X64-AVX: # %bb.0:
1379 ; X64-AVX-NEXT: vmovdqu (%rdi), %xmm0
1380 ; X64-AVX-NEXT: vmovdqu 16(%rdi), %xmm1
1381 ; X64-AVX-NEXT: vpxor 16(%rsi), %xmm1, %xmm1
1382 ; X64-AVX-NEXT: vpxor (%rsi), %xmm0, %xmm0
1383 ; X64-AVX-NEXT: vpor %xmm1, %xmm0, %xmm0
1384 ; X64-AVX-NEXT: vptest %xmm0, %xmm0
1385 ; X64-AVX-NEXT: sete %al
1386 ; X64-AVX-NEXT: retq
1388 ; X64-MIC-AVX-LABEL: length32_eq_prefer128:
1389 ; X64-MIC-AVX: # %bb.0:
1390 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %xmm0
1391 ; X64-MIC-AVX-NEXT: vmovdqu 16(%rdi), %xmm1
1392 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %xmm2
1393 ; X64-MIC-AVX-NEXT: vmovdqu 16(%rsi), %xmm3
1394 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1395 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1396 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1397 ; X64-MIC-AVX-NEXT: sete %al
1398 ; X64-MIC-AVX-NEXT: vzeroupper
1399 ; X64-MIC-AVX-NEXT: retq
1406 ; X64-SSE2-LABEL: length32_eq_const:
1407 ; X64-SSE2: # %bb.0:
1408 ; X64-SSE2-NEXT: movdqu (%rdi), %xmm0
1409 ; X64-SSE2-NEXT: movdqu 16(%rdi), %xmm1
1410 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1411 ; X64-SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1412 ; X64-SSE2-NEXT: pand %xmm1, %xmm0
1413 ; X64-SSE2-NEXT: pmovmskb %xmm0, %eax
1414 ; X64-SSE2-NEXT: cmpl $65535, %eax # imm = 0xFFFF
1415 ; X64-SSE2-NEXT: setne %al
1416 ; X64-SSE2-NEXT: retq
1418 ; X64-SSE41-LABEL: length32_eq_const:
1419 ; X64-SSE41: # %bb.0:
1420 ; X64-SSE41-NEXT: movdqu (%rdi), %xmm0
1421 ; X64-SSE41-NEXT: movdqu 16(%rdi), %xmm1
1422 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1423 ; X64-SSE41-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1424 ; X64-SSE41-NEXT: por %xmm1, %xmm0
1425 ; X64-SSE41-NEXT: ptest %xmm0, %xmm0
1426 ; X64-SSE41-NEXT: setne %al
1427 ; X64-SSE41-NEXT: retq
1429 ; X64-AVX1-LABEL: length32_eq_const:
1430 ; X64-AVX1: # %bb.0:
1431 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1432 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1433 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1434 ; X64-AVX1-NEXT: setne %al
1435 ; X64-AVX1-NEXT: vzeroupper
1436 ; X64-AVX1-NEXT: retq
1438 ; X64-AVX2-LABEL: length32_eq_const:
1439 ; X64-AVX2: # %bb.0:
1440 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1441 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1442 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1443 ; X64-AVX2-NEXT: setne %al
1444 ; X64-AVX2-NEXT: vzeroupper
1445 ; X64-AVX2-NEXT: retq
1447 ; X64-AVX512-LABEL: length32_eq_const:
1448 ; X64-AVX512: # %bb.0:
1449 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1450 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1451 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1452 ; X64-AVX512-NEXT: setne %al
1453 ; X64-AVX512-NEXT: vzeroupper
1454 ; X64-AVX512-NEXT: retq
1456 ; X64-MIC-AVX-LABEL: length32_eq_const:
1457 ; X64-MIC-AVX: # %bb.0:
1458 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1459 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm1 = [858927408,926299444,825243960,892613426,959985462,8…
1460 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k0
1461 ; X64-MIC-AVX-NEXT: kortestw %k0, %k0
1462 ; X64-MIC-AVX-NEXT: setne %al
1463 ; X64-MIC-AVX-NEXT: vzeroupper
1464 ; X64-MIC-AVX-NEXT: retq
1471 ; X64-LABEL: length48:
1472 ; X64: # %bb.0:
1473 ; X64-NEXT: movl $48, %edx
1474 ; X64-NEXT: jmp memcmp # TAILCALL
1480 ; X64-SSE-LABEL: length48_eq:
1481 ; X64-SSE: # %bb.0:
1482 ; X64-SSE-NEXT: pushq %rax
1483 ; X64-SSE-NEXT: movl $48, %edx
1484 ; X64-SSE-NEXT: callq memcmp
1485 ; X64-SSE-NEXT: testl %eax, %eax
1486 ; X64-SSE-NEXT: sete %al
1487 ; X64-SSE-NEXT: popq %rcx
1488 ; X64-SSE-NEXT: retq
1490 ; X64-AVX1-LABEL: length48_eq:
1491 ; X64-AVX1: # %bb.0:
1492 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1493 ; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1
1494 ; X64-AVX1-NEXT: vmovups 32(%rsi), %xmm2
1495 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
1496 ; X64-AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm1
1497 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1498 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1499 ; X64-AVX1-NEXT: sete %al
1500 ; X64-AVX1-NEXT: vzeroupper
1501 ; X64-AVX1-NEXT: retq
1503 ; X64-AVX2-LABEL: length48_eq:
1504 ; X64-AVX2: # %bb.0:
1505 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1506 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %xmm1
1507 ; X64-AVX2-NEXT: vmovdqu 32(%rsi), %xmm2
1508 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
1509 ; X64-AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
1510 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1511 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1512 ; X64-AVX2-NEXT: sete %al
1513 ; X64-AVX2-NEXT: vzeroupper
1514 ; X64-AVX2-NEXT: retq
1516 ; X64-AVX512-LABEL: length48_eq:
1517 ; X64-AVX512: # %bb.0:
1518 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1519 ; X64-AVX512-NEXT: vmovdqu 32(%rdi), %xmm1
1520 ; X64-AVX512-NEXT: vmovdqu 32(%rsi), %xmm2
1521 ; X64-AVX512-NEXT: vpxor (%rsi), %ymm0, %ymm0
1522 ; X64-AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm1
1523 ; X64-AVX512-NEXT: vpor %ymm1, %ymm0, %ymm0
1524 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1525 ; X64-AVX512-NEXT: sete %al
1526 ; X64-AVX512-NEXT: vzeroupper
1527 ; X64-AVX512-NEXT: retq
1529 ; X64-MIC-AVX-LABEL: length48_eq:
1530 ; X64-MIC-AVX: # %bb.0:
1531 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1532 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %ymm1
1533 ; X64-MIC-AVX-NEXT: vmovdqu 32(%rdi), %xmm2
1534 ; X64-MIC-AVX-NEXT: vmovdqu 32(%rsi), %xmm3
1535 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm2, %k0
1536 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1537 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1538 ; X64-MIC-AVX-NEXT: sete %al
1539 ; X64-MIC-AVX-NEXT: vzeroupper
1540 ; X64-MIC-AVX-NEXT: retq
1547 ; X64-LABEL: length48_lt:
1548 ; X64: # %bb.0:
1549 ; X64-NEXT: pushq %rax
1550 ; X64-NEXT: movl $48, %edx
1551 ; X64-NEXT: callq memcmp
1552 ; X64-NEXT: shrl $31, %eax
1553 ; X64-NEXT: # kill: def $al killed $al killed $eax
1554 ; X64-NEXT: popq %rcx
1555 ; X64-NEXT: retq
1562 ; X64-LABEL: length48_gt:
1563 ; X64: # %bb.0:
1564 ; X64-NEXT: pushq %rax
1565 ; X64-NEXT: movl $48, %edx
1566 ; X64-NEXT: callq memcmp
1567 ; X64-NEXT: testl %eax, %eax
1568 ; X64-NEXT: setg %al
1569 ; X64-NEXT: popq %rcx
1570 ; X64-NEXT: retq
1577 ; X64-LABEL: length48_eq_prefer128:
1578 ; X64: # %bb.0:
1579 ; X64-NEXT: pushq %rax
1580 ; X64-NEXT: movl $48, %edx
1581 ; X64-NEXT: callq memcmp
1582 ; X64-NEXT: testl %eax, %eax
1583 ; X64-NEXT: sete %al
1584 ; X64-NEXT: popq %rcx
1585 ; X64-NEXT: retq
1592 ; X64-SSE-LABEL: length48_eq_const:
1593 ; X64-SSE: # %bb.0:
1594 ; X64-SSE-NEXT: pushq %rax
1595 ; X64-SSE-NEXT: movl $.L.str, %esi
1596 ; X64-SSE-NEXT: movl $48, %edx
1597 ; X64-SSE-NEXT: callq memcmp
1598 ; X64-SSE-NEXT: testl %eax, %eax
1599 ; X64-SSE-NEXT: setne %al
1600 ; X64-SSE-NEXT: popq %rcx
1601 ; X64-SSE-NEXT: retq
1603 ; X64-AVX1-LABEL: length48_eq_const:
1604 ; X64-AVX1: # %bb.0:
1605 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1606 ; X64-AVX1-NEXT: vmovups 32(%rdi), %xmm1
1607 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1608 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1609 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1610 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1611 ; X64-AVX1-NEXT: setne %al
1612 ; X64-AVX1-NEXT: vzeroupper
1613 ; X64-AVX1-NEXT: retq
1615 ; X64-AVX2-LABEL: length48_eq_const:
1616 ; X64-AVX2: # %bb.0:
1617 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1618 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %xmm1
1619 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1620 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1621 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1622 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1623 ; X64-AVX2-NEXT: setne %al
1624 ; X64-AVX2-NEXT: vzeroupper
1625 ; X64-AVX2-NEXT: retq
1627 ; X64-AVX512-LABEL: length48_eq_const:
1628 ; X64-AVX512: # %bb.0:
1629 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1630 ; X64-AVX512-NEXT: vmovdqu 32(%rdi), %xmm1
1631 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1632 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1633 ; X64-AVX512-NEXT: vpor %ymm1, %ymm0, %ymm0
1634 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1635 ; X64-AVX512-NEXT: setne %al
1636 ; X64-AVX512-NEXT: vzeroupper
1637 ; X64-AVX512-NEXT: retq
1639 ; X64-MIC-AVX-LABEL: length48_eq_const:
1640 ; X64-MIC-AVX: # %bb.0:
1641 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1642 ; X64-MIC-AVX-NEXT: vmovdqu 32(%rdi), %xmm1
1643 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm2 = [892613426,959985462,858927408,926299444,0,0,0,0]
1644 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
1645 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm1 = [858927408,926299444,825243960,892613426,959985462,8…
1646 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1647 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1648 ; X64-MIC-AVX-NEXT: setne %al
1649 ; X64-MIC-AVX-NEXT: vzeroupper
1650 ; X64-MIC-AVX-NEXT: retq
1657 ; X64-LABEL: length63:
1658 ; X64: # %bb.0:
1659 ; X64-NEXT: movl $63, %edx
1660 ; X64-NEXT: jmp memcmp # TAILCALL
1666 ; X64-SSE-LABEL: length63_eq:
1667 ; X64-SSE: # %bb.0:
1668 ; X64-SSE-NEXT: pushq %rax
1669 ; X64-SSE-NEXT: movl $63, %edx
1670 ; X64-SSE-NEXT: callq memcmp
1671 ; X64-SSE-NEXT: testl %eax, %eax
1672 ; X64-SSE-NEXT: setne %al
1673 ; X64-SSE-NEXT: popq %rcx
1674 ; X64-SSE-NEXT: retq
1676 ; X64-AVX1-LABEL: length63_eq:
1677 ; X64-AVX1: # %bb.0:
1678 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1679 ; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1
1680 ; X64-AVX1-NEXT: vxorps 31(%rsi), %ymm1, %ymm1
1681 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
1682 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1683 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1684 ; X64-AVX1-NEXT: setne %al
1685 ; X64-AVX1-NEXT: vzeroupper
1686 ; X64-AVX1-NEXT: retq
1688 ; X64-AVX2-LABEL: length63_eq:
1689 ; X64-AVX2: # %bb.0:
1690 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1691 ; X64-AVX2-NEXT: vmovdqu 31(%rdi), %ymm1
1692 ; X64-AVX2-NEXT: vpxor 31(%rsi), %ymm1, %ymm1
1693 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
1694 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1695 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1696 ; X64-AVX2-NEXT: setne %al
1697 ; X64-AVX2-NEXT: vzeroupper
1698 ; X64-AVX2-NEXT: retq
1700 ; X64-AVX512-LABEL: length63_eq:
1701 ; X64-AVX512: # %bb.0:
1702 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1703 ; X64-AVX512-NEXT: vmovdqu 31(%rdi), %ymm1
1704 ; X64-AVX512-NEXT: vpxor 31(%rsi), %ymm1, %ymm1
1705 ; X64-AVX512-NEXT: vpxor (%rsi), %ymm0, %ymm0
1706 ; X64-AVX512-NEXT: vpor %ymm1, %ymm0, %ymm0
1707 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1708 ; X64-AVX512-NEXT: setne %al
1709 ; X64-AVX512-NEXT: vzeroupper
1710 ; X64-AVX512-NEXT: retq
1712 ; X64-MIC-AVX-LABEL: length63_eq:
1713 ; X64-MIC-AVX: # %bb.0:
1714 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1715 ; X64-MIC-AVX-NEXT: vmovdqu 31(%rdi), %ymm1
1716 ; X64-MIC-AVX-NEXT: vmovdqu (%rsi), %ymm2
1717 ; X64-MIC-AVX-NEXT: vmovdqu 31(%rsi), %ymm3
1718 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1719 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1720 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1721 ; X64-MIC-AVX-NEXT: setne %al
1722 ; X64-MIC-AVX-NEXT: vzeroupper
1723 ; X64-MIC-AVX-NEXT: retq
1730 ; X64-LABEL: length63_lt:
1731 ; X64: # %bb.0:
1732 ; X64-NEXT: pushq %rax
1733 ; X64-NEXT: movl $63, %edx
1734 ; X64-NEXT: callq memcmp
1735 ; X64-NEXT: shrl $31, %eax
1736 ; X64-NEXT: # kill: def $al killed $al killed $eax
1737 ; X64-NEXT: popq %rcx
1738 ; X64-NEXT: retq
1745 ; X64-LABEL: length63_gt:
1746 ; X64: # %bb.0:
1747 ; X64-NEXT: pushq %rax
1748 ; X64-NEXT: movl $63, %edx
1749 ; X64-NEXT: callq memcmp
1750 ; X64-NEXT: testl %eax, %eax
1751 ; X64-NEXT: setg %al
1752 ; X64-NEXT: popq %rcx
1753 ; X64-NEXT: retq
1760 ; X64-SSE-LABEL: length63_eq_const:
1761 ; X64-SSE: # %bb.0:
1762 ; X64-SSE-NEXT: pushq %rax
1763 ; X64-SSE-NEXT: movl $.L.str, %esi
1764 ; X64-SSE-NEXT: movl $63, %edx
1765 ; X64-SSE-NEXT: callq memcmp
1766 ; X64-SSE-NEXT: testl %eax, %eax
1767 ; X64-SSE-NEXT: sete %al
1768 ; X64-SSE-NEXT: popq %rcx
1769 ; X64-SSE-NEXT: retq
1771 ; X64-AVX1-LABEL: length63_eq_const:
1772 ; X64-AVX1: # %bb.0:
1773 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1774 ; X64-AVX1-NEXT: vmovups 31(%rdi), %ymm1
1775 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1776 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1777 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1778 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1779 ; X64-AVX1-NEXT: sete %al
1780 ; X64-AVX1-NEXT: vzeroupper
1781 ; X64-AVX1-NEXT: retq
1783 ; X64-AVX2-LABEL: length63_eq_const:
1784 ; X64-AVX2: # %bb.0:
1785 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1786 ; X64-AVX2-NEXT: vmovdqu 31(%rdi), %ymm1
1787 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1788 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1789 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1790 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1791 ; X64-AVX2-NEXT: sete %al
1792 ; X64-AVX2-NEXT: vzeroupper
1793 ; X64-AVX2-NEXT: retq
1795 ; X64-AVX512-LABEL: length63_eq_const:
1796 ; X64-AVX512: # %bb.0:
1797 ; X64-AVX512-NEXT: vmovdqu (%rdi), %ymm0
1798 ; X64-AVX512-NEXT: vmovdqu 31(%rdi), %ymm1
1799 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1800 ; X64-AVX512-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1801 ; X64-AVX512-NEXT: vpor %ymm1, %ymm0, %ymm0
1802 ; X64-AVX512-NEXT: vptest %ymm0, %ymm0
1803 ; X64-AVX512-NEXT: sete %al
1804 ; X64-AVX512-NEXT: vzeroupper
1805 ; X64-AVX512-NEXT: retq
1807 ; X64-MIC-AVX-LABEL: length63_eq_const:
1808 ; X64-MIC-AVX: # %bb.0:
1809 ; X64-MIC-AVX-NEXT: vmovdqu (%rdi), %ymm0
1810 ; X64-MIC-AVX-NEXT: vmovdqu 31(%rdi), %ymm1
1811 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm2 = [875770417,943142453,842084409,909456435,809056311,8…
1812 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
1813 ; X64-MIC-AVX-NEXT: vmovdqa {{.*#+}} ymm1 = [858927408,926299444,825243960,892613426,959985462,8…
1814 ; X64-MIC-AVX-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
1815 ; X64-MIC-AVX-NEXT: kortestw %k0, %k1
1816 ; X64-MIC-AVX-NEXT: sete %al
1817 ; X64-MIC-AVX-NEXT: vzeroupper
1818 ; X64-MIC-AVX-NEXT: retq
1825 ; X64-LABEL: length64:
1826 ; X64: # %bb.0:
1827 ; X64-NEXT: movl $64, %edx
1828 ; X64-NEXT: jmp memcmp # TAILCALL
1834 ; X64-SSE-LABEL: length64_eq:
1835 ; X64-SSE: # %bb.0:
1836 ; X64-SSE-NEXT: pushq %rax
1837 ; X64-SSE-NEXT: movl $64, %edx
1838 ; X64-SSE-NEXT: callq memcmp
1839 ; X64-SSE-NEXT: testl %eax, %eax
1840 ; X64-SSE-NEXT: setne %al
1841 ; X64-SSE-NEXT: popq %rcx
1842 ; X64-SSE-NEXT: retq
1844 ; X64-AVX1-LABEL: length64_eq:
1845 ; X64-AVX1: # %bb.0:
1846 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1847 ; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
1848 ; X64-AVX1-NEXT: vxorps 32(%rsi), %ymm1, %ymm1
1849 ; X64-AVX1-NEXT: vxorps (%rsi), %ymm0, %ymm0
1850 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1851 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1852 ; X64-AVX1-NEXT: setne %al
1853 ; X64-AVX1-NEXT: vzeroupper
1854 ; X64-AVX1-NEXT: retq
1856 ; X64-AVX2-LABEL: length64_eq:
1857 ; X64-AVX2: # %bb.0:
1858 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1859 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
1860 ; X64-AVX2-NEXT: vpxor 32(%rsi), %ymm1, %ymm1
1861 ; X64-AVX2-NEXT: vpxor (%rsi), %ymm0, %ymm0
1862 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1863 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1864 ; X64-AVX2-NEXT: setne %al
1865 ; X64-AVX2-NEXT: vzeroupper
1866 ; X64-AVX2-NEXT: retq
1868 ; X64-AVX512BW-LABEL: length64_eq:
1869 ; X64-AVX512BW: # %bb.0:
1870 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
1871 ; X64-AVX512BW-NEXT: vpcmpneqb (%rsi), %zmm0, %k0
1872 ; X64-AVX512BW-NEXT: kortestq %k0, %k0
1873 ; X64-AVX512BW-NEXT: setne %al
1874 ; X64-AVX512BW-NEXT: vzeroupper
1875 ; X64-AVX512BW-NEXT: retq
1877 ; X64-AVX512F-LABEL: length64_eq:
1878 ; X64-AVX512F: # %bb.0:
1879 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
1880 ; X64-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k0
1881 ; X64-AVX512F-NEXT: kortestw %k0, %k0
1882 ; X64-AVX512F-NEXT: setne %al
1883 ; X64-AVX512F-NEXT: vzeroupper
1884 ; X64-AVX512F-NEXT: retq
1886 ; X64-MIC-AVX2-LABEL: length64_eq:
1887 ; X64-MIC-AVX2: # %bb.0:
1888 ; X64-MIC-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1889 ; X64-MIC-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
1890 ; X64-MIC-AVX2-NEXT: vmovdqu (%rsi), %ymm2
1891 ; X64-MIC-AVX2-NEXT: vmovdqu 32(%rsi), %ymm3
1892 ; X64-MIC-AVX2-NEXT: vpcmpneqd %zmm3, %zmm1, %k0
1893 ; X64-MIC-AVX2-NEXT: vpcmpneqd %zmm2, %zmm0, %k1
1894 ; X64-MIC-AVX2-NEXT: kortestw %k0, %k1
1895 ; X64-MIC-AVX2-NEXT: setne %al
1896 ; X64-MIC-AVX2-NEXT: vzeroupper
1897 ; X64-MIC-AVX2-NEXT: retq
1899 ; X64-MIC-AVX512F-LABEL: length64_eq:
1900 ; X64-MIC-AVX512F: # %bb.0:
1901 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
1902 ; X64-MIC-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k0
1903 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k0
1904 ; X64-MIC-AVX512F-NEXT: setne %al
1905 ; X64-MIC-AVX512F-NEXT: vzeroupper
1906 ; X64-MIC-AVX512F-NEXT: retq
1913 ; X64-LABEL: length64_lt:
1914 ; X64: # %bb.0:
1915 ; X64-NEXT: pushq %rax
1916 ; X64-NEXT: movl $64, %edx
1917 ; X64-NEXT: callq memcmp
1918 ; X64-NEXT: shrl $31, %eax
1919 ; X64-NEXT: # kill: def $al killed $al killed $eax
1920 ; X64-NEXT: popq %rcx
1921 ; X64-NEXT: retq
1928 ; X64-LABEL: length64_gt:
1929 ; X64: # %bb.0:
1930 ; X64-NEXT: pushq %rax
1931 ; X64-NEXT: movl $64, %edx
1932 ; X64-NEXT: callq memcmp
1933 ; X64-NEXT: testl %eax, %eax
1934 ; X64-NEXT: setg %al
1935 ; X64-NEXT: popq %rcx
1936 ; X64-NEXT: retq
1943 ; X64-SSE-LABEL: length64_eq_const:
1944 ; X64-SSE: # %bb.0:
1945 ; X64-SSE-NEXT: pushq %rax
1946 ; X64-SSE-NEXT: movl $.L.str, %esi
1947 ; X64-SSE-NEXT: movl $64, %edx
1948 ; X64-SSE-NEXT: callq memcmp
1949 ; X64-SSE-NEXT: testl %eax, %eax
1950 ; X64-SSE-NEXT: sete %al
1951 ; X64-SSE-NEXT: popq %rcx
1952 ; X64-SSE-NEXT: retq
1954 ; X64-AVX1-LABEL: length64_eq_const:
1955 ; X64-AVX1: # %bb.0:
1956 ; X64-AVX1-NEXT: vmovups (%rdi), %ymm0
1957 ; X64-AVX1-NEXT: vmovups 32(%rdi), %ymm1
1958 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1959 ; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1960 ; X64-AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1961 ; X64-AVX1-NEXT: vptest %ymm0, %ymm0
1962 ; X64-AVX1-NEXT: sete %al
1963 ; X64-AVX1-NEXT: vzeroupper
1964 ; X64-AVX1-NEXT: retq
1966 ; X64-AVX2-LABEL: length64_eq_const:
1967 ; X64-AVX2: # %bb.0:
1968 ; X64-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1969 ; X64-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
1970 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
1971 ; X64-AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1972 ; X64-AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1973 ; X64-AVX2-NEXT: vptest %ymm0, %ymm0
1974 ; X64-AVX2-NEXT: sete %al
1975 ; X64-AVX2-NEXT: vzeroupper
1976 ; X64-AVX2-NEXT: retq
1978 ; X64-AVX512BW-LABEL: length64_eq_const:
1979 ; X64-AVX512BW: # %bb.0:
1980 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
1981 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str(%rip), %zmm0, %k0
1982 ; X64-AVX512BW-NEXT: kortestq %k0, %k0
1983 ; X64-AVX512BW-NEXT: sete %al
1984 ; X64-AVX512BW-NEXT: vzeroupper
1985 ; X64-AVX512BW-NEXT: retq
1987 ; X64-AVX512F-LABEL: length64_eq_const:
1988 ; X64-AVX512F: # %bb.0:
1989 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
1990 ; X64-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k0
1991 ; X64-AVX512F-NEXT: kortestw %k0, %k0
1992 ; X64-AVX512F-NEXT: sete %al
1993 ; X64-AVX512F-NEXT: vzeroupper
1994 ; X64-AVX512F-NEXT: retq
1996 ; X64-MIC-AVX2-LABEL: length64_eq_const:
1997 ; X64-MIC-AVX2: # %bb.0:
1998 ; X64-MIC-AVX2-NEXT: vmovdqu (%rdi), %ymm0
1999 ; X64-MIC-AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
2000 ; X64-MIC-AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [892613426,959985462,858927408,926299444,825243960,…
2001 ; X64-MIC-AVX2-NEXT: vpcmpneqd %zmm2, %zmm1, %k0
2002 ; X64-MIC-AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [858927408,926299444,825243960,892613426,959985462,…
2003 ; X64-MIC-AVX2-NEXT: vpcmpneqd %zmm1, %zmm0, %k1
2004 ; X64-MIC-AVX2-NEXT: kortestw %k0, %k1
2005 ; X64-MIC-AVX2-NEXT: sete %al
2006 ; X64-MIC-AVX2-NEXT: vzeroupper
2007 ; X64-MIC-AVX2-NEXT: retq
2009 ; X64-MIC-AVX512F-LABEL: length64_eq_const:
2010 ; X64-MIC-AVX512F: # %bb.0:
2011 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2012 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k0
2013 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k0
2014 ; X64-MIC-AVX512F-NEXT: sete %al
2015 ; X64-MIC-AVX512F-NEXT: vzeroupper
2016 ; X64-MIC-AVX512F-NEXT: retq
2023 ; X64-LABEL: length96:
2024 ; X64: # %bb.0:
2025 ; X64-NEXT: movl $96, %edx
2026 ; X64-NEXT: jmp memcmp # TAILCALL
2032 ; X64-SSE-LABEL: length96_eq:
2033 ; X64-SSE: # %bb.0:
2034 ; X64-SSE-NEXT: pushq %rax
2035 ; X64-SSE-NEXT: movl $96, %edx
2036 ; X64-SSE-NEXT: callq memcmp
2037 ; X64-SSE-NEXT: testl %eax, %eax
2038 ; X64-SSE-NEXT: setne %al
2039 ; X64-SSE-NEXT: popq %rcx
2040 ; X64-SSE-NEXT: retq
2042 ; X64-AVX1-LABEL: length96_eq:
2043 ; X64-AVX1: # %bb.0:
2044 ; X64-AVX1-NEXT: pushq %rax
2045 ; X64-AVX1-NEXT: movl $96, %edx
2046 ; X64-AVX1-NEXT: callq memcmp
2047 ; X64-AVX1-NEXT: testl %eax, %eax
2048 ; X64-AVX1-NEXT: setne %al
2049 ; X64-AVX1-NEXT: popq %rcx
2050 ; X64-AVX1-NEXT: retq
2052 ; X64-AVX2-LABEL: length96_eq:
2053 ; X64-AVX2: # %bb.0:
2054 ; X64-AVX2-NEXT: pushq %rax
2055 ; X64-AVX2-NEXT: movl $96, %edx
2056 ; X64-AVX2-NEXT: callq memcmp
2057 ; X64-AVX2-NEXT: testl %eax, %eax
2058 ; X64-AVX2-NEXT: setne %al
2059 ; X64-AVX2-NEXT: popq %rcx
2060 ; X64-AVX2-NEXT: retq
2062 ; X64-AVX512BW-LABEL: length96_eq:
2063 ; X64-AVX512BW: # %bb.0:
2064 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2065 ; X64-AVX512BW-NEXT: vmovdqu 64(%rdi), %ymm1
2066 ; X64-AVX512BW-NEXT: vmovdqu 64(%rsi), %ymm2
2067 ; X64-AVX512BW-NEXT: vpcmpneqb (%rsi), %zmm0, %k0
2068 ; X64-AVX512BW-NEXT: vpcmpneqb %zmm2, %zmm1, %k1
2069 ; X64-AVX512BW-NEXT: kortestq %k1, %k0
2070 ; X64-AVX512BW-NEXT: setne %al
2071 ; X64-AVX512BW-NEXT: vzeroupper
2072 ; X64-AVX512BW-NEXT: retq
2074 ; X64-AVX512F-LABEL: length96_eq:
2075 ; X64-AVX512F: # %bb.0:
2076 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2077 ; X64-AVX512F-NEXT: vmovdqu 64(%rdi), %ymm1
2078 ; X64-AVX512F-NEXT: vmovdqu 64(%rsi), %ymm2
2079 ; X64-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k0
2080 ; X64-AVX512F-NEXT: vpcmpneqd %zmm2, %zmm1, %k1
2081 ; X64-AVX512F-NEXT: kortestw %k1, %k0
2082 ; X64-AVX512F-NEXT: setne %al
2083 ; X64-AVX512F-NEXT: vzeroupper
2084 ; X64-AVX512F-NEXT: retq
2086 ; X64-MIC-AVX2-LABEL: length96_eq:
2087 ; X64-MIC-AVX2: # %bb.0:
2088 ; X64-MIC-AVX2-NEXT: pushq %rax
2089 ; X64-MIC-AVX2-NEXT: movl $96, %edx
2090 ; X64-MIC-AVX2-NEXT: callq memcmp
2091 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2092 ; X64-MIC-AVX2-NEXT: setne %al
2093 ; X64-MIC-AVX2-NEXT: popq %rcx
2094 ; X64-MIC-AVX2-NEXT: retq
2096 ; X64-MIC-AVX512F-LABEL: length96_eq:
2097 ; X64-MIC-AVX512F: # %bb.0:
2098 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2099 ; X64-MIC-AVX512F-NEXT: vmovdqu 64(%rdi), %ymm1
2100 ; X64-MIC-AVX512F-NEXT: vmovdqu 64(%rsi), %ymm2
2101 ; X64-MIC-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k0
2102 ; X64-MIC-AVX512F-NEXT: vpcmpneqd %zmm2, %zmm1, %k1
2103 ; X64-MIC-AVX512F-NEXT: kortestw %k1, %k0
2104 ; X64-MIC-AVX512F-NEXT: setne %al
2105 ; X64-MIC-AVX512F-NEXT: vzeroupper
2106 ; X64-MIC-AVX512F-NEXT: retq
2113 ; X64-LABEL: length96_lt:
2114 ; X64: # %bb.0:
2115 ; X64-NEXT: pushq %rax
2116 ; X64-NEXT: movl $96, %edx
2117 ; X64-NEXT: callq memcmp
2118 ; X64-NEXT: shrl $31, %eax
2119 ; X64-NEXT: # kill: def $al killed $al killed $eax
2120 ; X64-NEXT: popq %rcx
2121 ; X64-NEXT: retq
2128 ; X64-LABEL: length96_gt:
2129 ; X64: # %bb.0:
2130 ; X64-NEXT: pushq %rax
2131 ; X64-NEXT: movl $96, %edx
2132 ; X64-NEXT: callq memcmp
2133 ; X64-NEXT: testl %eax, %eax
2134 ; X64-NEXT: setg %al
2135 ; X64-NEXT: popq %rcx
2136 ; X64-NEXT: retq
2143 ; X64-SSE-LABEL: length96_eq_const:
2144 ; X64-SSE: # %bb.0:
2145 ; X64-SSE-NEXT: pushq %rax
2146 ; X64-SSE-NEXT: movl $.L.str, %esi
2147 ; X64-SSE-NEXT: movl $96, %edx
2148 ; X64-SSE-NEXT: callq memcmp
2149 ; X64-SSE-NEXT: testl %eax, %eax
2150 ; X64-SSE-NEXT: sete %al
2151 ; X64-SSE-NEXT: popq %rcx
2152 ; X64-SSE-NEXT: retq
2154 ; X64-AVX1-LABEL: length96_eq_const:
2155 ; X64-AVX1: # %bb.0:
2156 ; X64-AVX1-NEXT: pushq %rax
2157 ; X64-AVX1-NEXT: movl $.L.str, %esi
2158 ; X64-AVX1-NEXT: movl $96, %edx
2159 ; X64-AVX1-NEXT: callq memcmp
2160 ; X64-AVX1-NEXT: testl %eax, %eax
2161 ; X64-AVX1-NEXT: sete %al
2162 ; X64-AVX1-NEXT: popq %rcx
2163 ; X64-AVX1-NEXT: retq
2165 ; X64-AVX2-LABEL: length96_eq_const:
2166 ; X64-AVX2: # %bb.0:
2167 ; X64-AVX2-NEXT: pushq %rax
2168 ; X64-AVX2-NEXT: movl $.L.str, %esi
2169 ; X64-AVX2-NEXT: movl $96, %edx
2170 ; X64-AVX2-NEXT: callq memcmp
2171 ; X64-AVX2-NEXT: testl %eax, %eax
2172 ; X64-AVX2-NEXT: sete %al
2173 ; X64-AVX2-NEXT: popq %rcx
2174 ; X64-AVX2-NEXT: retq
2176 ; X64-AVX512BW-LABEL: length96_eq_const:
2177 ; X64-AVX512BW: # %bb.0:
2178 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2179 ; X64-AVX512BW-NEXT: vmovdqu 64(%rdi), %ymm1
2180 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str(%rip), %zmm0, %k0
2181 ; X64-AVX512BW-NEXT: vpcmpneqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %k1
2182 ; X64-AVX512BW-NEXT: kortestq %k1, %k0
2183 ; X64-AVX512BW-NEXT: sete %al
2184 ; X64-AVX512BW-NEXT: vzeroupper
2185 ; X64-AVX512BW-NEXT: retq
2187 ; X64-AVX512F-LABEL: length96_eq_const:
2188 ; X64-AVX512F: # %bb.0:
2189 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2190 ; X64-AVX512F-NEXT: vmovdqu 64(%rdi), %ymm1
2191 ; X64-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k0
2192 ; X64-AVX512F-NEXT: vpcmpneqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %k1
2193 ; X64-AVX512F-NEXT: kortestw %k1, %k0
2194 ; X64-AVX512F-NEXT: sete %al
2195 ; X64-AVX512F-NEXT: vzeroupper
2196 ; X64-AVX512F-NEXT: retq
2198 ; X64-MIC-AVX2-LABEL: length96_eq_const:
2199 ; X64-MIC-AVX2: # %bb.0:
2200 ; X64-MIC-AVX2-NEXT: pushq %rax
2201 ; X64-MIC-AVX2-NEXT: movl $.L.str, %esi
2202 ; X64-MIC-AVX2-NEXT: movl $96, %edx
2203 ; X64-MIC-AVX2-NEXT: callq memcmp
2204 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2205 ; X64-MIC-AVX2-NEXT: sete %al
2206 ; X64-MIC-AVX2-NEXT: popq %rcx
2207 ; X64-MIC-AVX2-NEXT: retq
2209 ; X64-MIC-AVX512F-LABEL: length96_eq_const:
2210 ; X64-MIC-AVX512F: # %bb.0:
2211 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2212 ; X64-MIC-AVX512F-NEXT: vmovdqu 64(%rdi), %ymm1
2213 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k0
2214 ; X64-MIC-AVX512F-NEXT: vpcmpneqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %k1
2215 ; X64-MIC-AVX512F-NEXT: kortestw %k1, %k0
2216 ; X64-MIC-AVX512F-NEXT: sete %al
2217 ; X64-MIC-AVX512F-NEXT: vzeroupper
2218 ; X64-MIC-AVX512F-NEXT: retq
2225 ; X64-LABEL: length127:
2226 ; X64: # %bb.0:
2227 ; X64-NEXT: movl $127, %edx
2228 ; X64-NEXT: jmp memcmp # TAILCALL
2234 ; X64-SSE-LABEL: length127_eq:
2235 ; X64-SSE: # %bb.0:
2236 ; X64-SSE-NEXT: pushq %rax
2237 ; X64-SSE-NEXT: movl $127, %edx
2238 ; X64-SSE-NEXT: callq memcmp
2239 ; X64-SSE-NEXT: testl %eax, %eax
2240 ; X64-SSE-NEXT: setne %al
2241 ; X64-SSE-NEXT: popq %rcx
2242 ; X64-SSE-NEXT: retq
2244 ; X64-AVX1-LABEL: length127_eq:
2245 ; X64-AVX1: # %bb.0:
2246 ; X64-AVX1-NEXT: pushq %rax
2247 ; X64-AVX1-NEXT: movl $127, %edx
2248 ; X64-AVX1-NEXT: callq memcmp
2249 ; X64-AVX1-NEXT: testl %eax, %eax
2250 ; X64-AVX1-NEXT: setne %al
2251 ; X64-AVX1-NEXT: popq %rcx
2252 ; X64-AVX1-NEXT: retq
2254 ; X64-AVX2-LABEL: length127_eq:
2255 ; X64-AVX2: # %bb.0:
2256 ; X64-AVX2-NEXT: pushq %rax
2257 ; X64-AVX2-NEXT: movl $127, %edx
2258 ; X64-AVX2-NEXT: callq memcmp
2259 ; X64-AVX2-NEXT: testl %eax, %eax
2260 ; X64-AVX2-NEXT: setne %al
2261 ; X64-AVX2-NEXT: popq %rcx
2262 ; X64-AVX2-NEXT: retq
2264 ; X64-AVX512BW-LABEL: length127_eq:
2265 ; X64-AVX512BW: # %bb.0:
2266 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2267 ; X64-AVX512BW-NEXT: vmovdqu64 63(%rdi), %zmm1
2268 ; X64-AVX512BW-NEXT: vpcmpneqb 63(%rsi), %zmm1, %k0
2269 ; X64-AVX512BW-NEXT: vpcmpneqb (%rsi), %zmm0, %k1
2270 ; X64-AVX512BW-NEXT: kortestq %k0, %k1
2271 ; X64-AVX512BW-NEXT: setne %al
2272 ; X64-AVX512BW-NEXT: vzeroupper
2273 ; X64-AVX512BW-NEXT: retq
2275 ; X64-AVX512F-LABEL: length127_eq:
2276 ; X64-AVX512F: # %bb.0:
2277 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2278 ; X64-AVX512F-NEXT: vmovdqu64 63(%rdi), %zmm1
2279 ; X64-AVX512F-NEXT: vpcmpneqd 63(%rsi), %zmm1, %k0
2280 ; X64-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k1
2281 ; X64-AVX512F-NEXT: kortestw %k0, %k1
2282 ; X64-AVX512F-NEXT: setne %al
2283 ; X64-AVX512F-NEXT: vzeroupper
2284 ; X64-AVX512F-NEXT: retq
2286 ; X64-MIC-AVX2-LABEL: length127_eq:
2287 ; X64-MIC-AVX2: # %bb.0:
2288 ; X64-MIC-AVX2-NEXT: pushq %rax
2289 ; X64-MIC-AVX2-NEXT: movl $127, %edx
2290 ; X64-MIC-AVX2-NEXT: callq memcmp
2291 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2292 ; X64-MIC-AVX2-NEXT: setne %al
2293 ; X64-MIC-AVX2-NEXT: popq %rcx
2294 ; X64-MIC-AVX2-NEXT: retq
2296 ; X64-MIC-AVX512F-LABEL: length127_eq:
2297 ; X64-MIC-AVX512F: # %bb.0:
2298 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2299 ; X64-MIC-AVX512F-NEXT: vmovdqu64 63(%rdi), %zmm1
2300 ; X64-MIC-AVX512F-NEXT: vpcmpneqd 63(%rsi), %zmm1, %k0
2301 ; X64-MIC-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k1
2302 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k1
2303 ; X64-MIC-AVX512F-NEXT: setne %al
2304 ; X64-MIC-AVX512F-NEXT: vzeroupper
2305 ; X64-MIC-AVX512F-NEXT: retq
2312 ; X64-LABEL: length127_lt:
2313 ; X64: # %bb.0:
2314 ; X64-NEXT: pushq %rax
2315 ; X64-NEXT: movl $127, %edx
2316 ; X64-NEXT: callq memcmp
2317 ; X64-NEXT: shrl $31, %eax
2318 ; X64-NEXT: # kill: def $al killed $al killed $eax
2319 ; X64-NEXT: popq %rcx
2320 ; X64-NEXT: retq
2327 ; X64-LABEL: length127_gt:
2328 ; X64: # %bb.0:
2329 ; X64-NEXT: pushq %rax
2330 ; X64-NEXT: movl $127, %edx
2331 ; X64-NEXT: callq memcmp
2332 ; X64-NEXT: testl %eax, %eax
2333 ; X64-NEXT: setg %al
2334 ; X64-NEXT: popq %rcx
2335 ; X64-NEXT: retq
2342 ; X64-SSE-LABEL: length127_eq_const:
2343 ; X64-SSE: # %bb.0:
2344 ; X64-SSE-NEXT: pushq %rax
2345 ; X64-SSE-NEXT: movl $.L.str, %esi
2346 ; X64-SSE-NEXT: movl $127, %edx
2347 ; X64-SSE-NEXT: callq memcmp
2348 ; X64-SSE-NEXT: testl %eax, %eax
2349 ; X64-SSE-NEXT: sete %al
2350 ; X64-SSE-NEXT: popq %rcx
2351 ; X64-SSE-NEXT: retq
2353 ; X64-AVX1-LABEL: length127_eq_const:
2354 ; X64-AVX1: # %bb.0:
2355 ; X64-AVX1-NEXT: pushq %rax
2356 ; X64-AVX1-NEXT: movl $.L.str, %esi
2357 ; X64-AVX1-NEXT: movl $127, %edx
2358 ; X64-AVX1-NEXT: callq memcmp
2359 ; X64-AVX1-NEXT: testl %eax, %eax
2360 ; X64-AVX1-NEXT: sete %al
2361 ; X64-AVX1-NEXT: popq %rcx
2362 ; X64-AVX1-NEXT: retq
2364 ; X64-AVX2-LABEL: length127_eq_const:
2365 ; X64-AVX2: # %bb.0:
2366 ; X64-AVX2-NEXT: pushq %rax
2367 ; X64-AVX2-NEXT: movl $.L.str, %esi
2368 ; X64-AVX2-NEXT: movl $127, %edx
2369 ; X64-AVX2-NEXT: callq memcmp
2370 ; X64-AVX2-NEXT: testl %eax, %eax
2371 ; X64-AVX2-NEXT: sete %al
2372 ; X64-AVX2-NEXT: popq %rcx
2373 ; X64-AVX2-NEXT: retq
2375 ; X64-AVX512BW-LABEL: length127_eq_const:
2376 ; X64-AVX512BW: # %bb.0:
2377 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2378 ; X64-AVX512BW-NEXT: vmovdqu64 63(%rdi), %zmm1
2379 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str+63(%rip), %zmm1, %k0
2380 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str(%rip), %zmm0, %k1
2381 ; X64-AVX512BW-NEXT: kortestq %k0, %k1
2382 ; X64-AVX512BW-NEXT: sete %al
2383 ; X64-AVX512BW-NEXT: vzeroupper
2384 ; X64-AVX512BW-NEXT: retq
2386 ; X64-AVX512F-LABEL: length127_eq_const:
2387 ; X64-AVX512F: # %bb.0:
2388 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2389 ; X64-AVX512F-NEXT: vmovdqu64 63(%rdi), %zmm1
2390 ; X64-AVX512F-NEXT: vpcmpneqd .L.str+63(%rip), %zmm1, %k0
2391 ; X64-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k1
2392 ; X64-AVX512F-NEXT: kortestw %k0, %k1
2393 ; X64-AVX512F-NEXT: sete %al
2394 ; X64-AVX512F-NEXT: vzeroupper
2395 ; X64-AVX512F-NEXT: retq
2397 ; X64-MIC-AVX2-LABEL: length127_eq_const:
2398 ; X64-MIC-AVX2: # %bb.0:
2399 ; X64-MIC-AVX2-NEXT: pushq %rax
2400 ; X64-MIC-AVX2-NEXT: movl $.L.str, %esi
2401 ; X64-MIC-AVX2-NEXT: movl $127, %edx
2402 ; X64-MIC-AVX2-NEXT: callq memcmp
2403 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2404 ; X64-MIC-AVX2-NEXT: sete %al
2405 ; X64-MIC-AVX2-NEXT: popq %rcx
2406 ; X64-MIC-AVX2-NEXT: retq
2408 ; X64-MIC-AVX512F-LABEL: length127_eq_const:
2409 ; X64-MIC-AVX512F: # %bb.0:
2410 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2411 ; X64-MIC-AVX512F-NEXT: vmovdqu64 63(%rdi), %zmm1
2412 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str+63(%rip), %zmm1, %k0
2413 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k1
2414 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k1
2415 ; X64-MIC-AVX512F-NEXT: sete %al
2416 ; X64-MIC-AVX512F-NEXT: vzeroupper
2417 ; X64-MIC-AVX512F-NEXT: retq
2424 ; X64-LABEL: length128:
2425 ; X64: # %bb.0:
2426 ; X64-NEXT: movl $128, %edx
2427 ; X64-NEXT: jmp memcmp # TAILCALL
2433 ; X64-SSE-LABEL: length128_eq:
2434 ; X64-SSE: # %bb.0:
2435 ; X64-SSE-NEXT: pushq %rax
2436 ; X64-SSE-NEXT: movl $128, %edx
2437 ; X64-SSE-NEXT: callq memcmp
2438 ; X64-SSE-NEXT: testl %eax, %eax
2439 ; X64-SSE-NEXT: setne %al
2440 ; X64-SSE-NEXT: popq %rcx
2441 ; X64-SSE-NEXT: retq
2443 ; X64-AVX1-LABEL: length128_eq:
2444 ; X64-AVX1: # %bb.0:
2445 ; X64-AVX1-NEXT: pushq %rax
2446 ; X64-AVX1-NEXT: movl $128, %edx
2447 ; X64-AVX1-NEXT: callq memcmp
2448 ; X64-AVX1-NEXT: testl %eax, %eax
2449 ; X64-AVX1-NEXT: setne %al
2450 ; X64-AVX1-NEXT: popq %rcx
2451 ; X64-AVX1-NEXT: retq
2453 ; X64-AVX2-LABEL: length128_eq:
2454 ; X64-AVX2: # %bb.0:
2455 ; X64-AVX2-NEXT: pushq %rax
2456 ; X64-AVX2-NEXT: movl $128, %edx
2457 ; X64-AVX2-NEXT: callq memcmp
2458 ; X64-AVX2-NEXT: testl %eax, %eax
2459 ; X64-AVX2-NEXT: setne %al
2460 ; X64-AVX2-NEXT: popq %rcx
2461 ; X64-AVX2-NEXT: retq
2463 ; X64-AVX512BW-LABEL: length128_eq:
2464 ; X64-AVX512BW: # %bb.0:
2465 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2466 ; X64-AVX512BW-NEXT: vmovdqu64 64(%rdi), %zmm1
2467 ; X64-AVX512BW-NEXT: vpcmpneqb 64(%rsi), %zmm1, %k0
2468 ; X64-AVX512BW-NEXT: vpcmpneqb (%rsi), %zmm0, %k1
2469 ; X64-AVX512BW-NEXT: kortestq %k0, %k1
2470 ; X64-AVX512BW-NEXT: setne %al
2471 ; X64-AVX512BW-NEXT: vzeroupper
2472 ; X64-AVX512BW-NEXT: retq
2474 ; X64-AVX512F-LABEL: length128_eq:
2475 ; X64-AVX512F: # %bb.0:
2476 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2477 ; X64-AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1
2478 ; X64-AVX512F-NEXT: vpcmpneqd 64(%rsi), %zmm1, %k0
2479 ; X64-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k1
2480 ; X64-AVX512F-NEXT: kortestw %k0, %k1
2481 ; X64-AVX512F-NEXT: setne %al
2482 ; X64-AVX512F-NEXT: vzeroupper
2483 ; X64-AVX512F-NEXT: retq
2485 ; X64-MIC-AVX2-LABEL: length128_eq:
2486 ; X64-MIC-AVX2: # %bb.0:
2487 ; X64-MIC-AVX2-NEXT: pushq %rax
2488 ; X64-MIC-AVX2-NEXT: movl $128, %edx
2489 ; X64-MIC-AVX2-NEXT: callq memcmp
2490 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2491 ; X64-MIC-AVX2-NEXT: setne %al
2492 ; X64-MIC-AVX2-NEXT: popq %rcx
2493 ; X64-MIC-AVX2-NEXT: retq
2495 ; X64-MIC-AVX512F-LABEL: length128_eq:
2496 ; X64-MIC-AVX512F: # %bb.0:
2497 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2498 ; X64-MIC-AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1
2499 ; X64-MIC-AVX512F-NEXT: vpcmpneqd 64(%rsi), %zmm1, %k0
2500 ; X64-MIC-AVX512F-NEXT: vpcmpneqd (%rsi), %zmm0, %k1
2501 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k1
2502 ; X64-MIC-AVX512F-NEXT: setne %al
2503 ; X64-MIC-AVX512F-NEXT: vzeroupper
2504 ; X64-MIC-AVX512F-NEXT: retq
2511 ; X64-LABEL: length128_lt:
2512 ; X64: # %bb.0:
2513 ; X64-NEXT: pushq %rax
2514 ; X64-NEXT: movl $128, %edx
2515 ; X64-NEXT: callq memcmp
2516 ; X64-NEXT: shrl $31, %eax
2517 ; X64-NEXT: # kill: def $al killed $al killed $eax
2518 ; X64-NEXT: popq %rcx
2519 ; X64-NEXT: retq
2526 ; X64-LABEL: length128_gt:
2527 ; X64: # %bb.0:
2528 ; X64-NEXT: pushq %rax
2529 ; X64-NEXT: movl $128, %edx
2530 ; X64-NEXT: callq memcmp
2531 ; X64-NEXT: testl %eax, %eax
2532 ; X64-NEXT: setg %al
2533 ; X64-NEXT: popq %rcx
2534 ; X64-NEXT: retq
2541 ; X64-SSE-LABEL: length128_eq_const:
2542 ; X64-SSE: # %bb.0:
2543 ; X64-SSE-NEXT: pushq %rax
2544 ; X64-SSE-NEXT: movl $.L.str, %esi
2545 ; X64-SSE-NEXT: movl $128, %edx
2546 ; X64-SSE-NEXT: callq memcmp
2547 ; X64-SSE-NEXT: testl %eax, %eax
2548 ; X64-SSE-NEXT: sete %al
2549 ; X64-SSE-NEXT: popq %rcx
2550 ; X64-SSE-NEXT: retq
2552 ; X64-AVX1-LABEL: length128_eq_const:
2553 ; X64-AVX1: # %bb.0:
2554 ; X64-AVX1-NEXT: pushq %rax
2555 ; X64-AVX1-NEXT: movl $.L.str, %esi
2556 ; X64-AVX1-NEXT: movl $128, %edx
2557 ; X64-AVX1-NEXT: callq memcmp
2558 ; X64-AVX1-NEXT: testl %eax, %eax
2559 ; X64-AVX1-NEXT: sete %al
2560 ; X64-AVX1-NEXT: popq %rcx
2561 ; X64-AVX1-NEXT: retq
2563 ; X64-AVX2-LABEL: length128_eq_const:
2564 ; X64-AVX2: # %bb.0:
2565 ; X64-AVX2-NEXT: pushq %rax
2566 ; X64-AVX2-NEXT: movl $.L.str, %esi
2567 ; X64-AVX2-NEXT: movl $128, %edx
2568 ; X64-AVX2-NEXT: callq memcmp
2569 ; X64-AVX2-NEXT: testl %eax, %eax
2570 ; X64-AVX2-NEXT: sete %al
2571 ; X64-AVX2-NEXT: popq %rcx
2572 ; X64-AVX2-NEXT: retq
2574 ; X64-AVX512BW-LABEL: length128_eq_const:
2575 ; X64-AVX512BW: # %bb.0:
2576 ; X64-AVX512BW-NEXT: vmovdqu64 (%rdi), %zmm0
2577 ; X64-AVX512BW-NEXT: vmovdqu64 64(%rdi), %zmm1
2578 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str+64(%rip), %zmm1, %k0
2579 ; X64-AVX512BW-NEXT: vpcmpneqb .L.str(%rip), %zmm0, %k1
2580 ; X64-AVX512BW-NEXT: kortestq %k0, %k1
2581 ; X64-AVX512BW-NEXT: sete %al
2582 ; X64-AVX512BW-NEXT: vzeroupper
2583 ; X64-AVX512BW-NEXT: retq
2585 ; X64-AVX512F-LABEL: length128_eq_const:
2586 ; X64-AVX512F: # %bb.0:
2587 ; X64-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2588 ; X64-AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1
2589 ; X64-AVX512F-NEXT: vpcmpneqd .L.str+64(%rip), %zmm1, %k0
2590 ; X64-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k1
2591 ; X64-AVX512F-NEXT: kortestw %k0, %k1
2592 ; X64-AVX512F-NEXT: sete %al
2593 ; X64-AVX512F-NEXT: vzeroupper
2594 ; X64-AVX512F-NEXT: retq
2596 ; X64-MIC-AVX2-LABEL: length128_eq_const:
2597 ; X64-MIC-AVX2: # %bb.0:
2598 ; X64-MIC-AVX2-NEXT: pushq %rax
2599 ; X64-MIC-AVX2-NEXT: movl $.L.str, %esi
2600 ; X64-MIC-AVX2-NEXT: movl $128, %edx
2601 ; X64-MIC-AVX2-NEXT: callq memcmp
2602 ; X64-MIC-AVX2-NEXT: testl %eax, %eax
2603 ; X64-MIC-AVX2-NEXT: sete %al
2604 ; X64-MIC-AVX2-NEXT: popq %rcx
2605 ; X64-MIC-AVX2-NEXT: retq
2607 ; X64-MIC-AVX512F-LABEL: length128_eq_const:
2608 ; X64-MIC-AVX512F: # %bb.0:
2609 ; X64-MIC-AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0
2610 ; X64-MIC-AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1
2611 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str+64(%rip), %zmm1, %k0
2612 ; X64-MIC-AVX512F-NEXT: vpcmpneqd .L.str(%rip), %zmm0, %k1
2613 ; X64-MIC-AVX512F-NEXT: kortestw %k0, %k1
2614 ; X64-MIC-AVX512F-NEXT: sete %al
2615 ; X64-MIC-AVX512F-NEXT: vzeroupper
2616 ; X64-MIC-AVX512F-NEXT: retq
2623 ; X64-LABEL: length192:
2624 ; X64: # %bb.0:
2625 ; X64-NEXT: movl $192, %edx
2626 ; X64-NEXT: jmp memcmp # TAILCALL
2632 ; X64-LABEL: length192_eq:
2633 ; X64: # %bb.0:
2634 ; X64-NEXT: pushq %rax
2635 ; X64-NEXT: movl $192, %edx
2636 ; X64-NEXT: callq memcmp
2637 ; X64-NEXT: testl %eax, %eax
2638 ; X64-NEXT: setne %al
2639 ; X64-NEXT: popq %rcx
2640 ; X64-NEXT: retq
2647 ; X64-LABEL: length192_lt:
2648 ; X64: # %bb.0:
2649 ; X64-NEXT: pushq %rax
2650 ; X64-NEXT: movl $192, %edx
2651 ; X64-NEXT: callq memcmp
2652 ; X64-NEXT: shrl $31, %eax
2653 ; X64-NEXT: # kill: def $al killed $al killed $eax
2654 ; X64-NEXT: popq %rcx
2655 ; X64-NEXT: retq
2662 ; X64-LABEL: length192_gt:
2663 ; X64: # %bb.0:
2664 ; X64-NEXT: pushq %rax
2665 ; X64-NEXT: movl $192, %edx
2666 ; X64-NEXT: callq memcmp
2667 ; X64-NEXT: testl %eax, %eax
2668 ; X64-NEXT: setg %al
2669 ; X64-NEXT: popq %rcx
2670 ; X64-NEXT: retq
2677 ; X64-LABEL: length192_eq_const:
2678 ; X64: # %bb.0:
2679 ; X64-NEXT: pushq %rax
2680 ; X64-NEXT: movl $.L.str, %esi
2681 ; X64-NEXT: movl $192, %edx
2682 ; X64-NEXT: callq memcmp
2683 ; X64-NEXT: testl %eax, %eax
2684 ; X64-NEXT: sete %al
2685 ; X64-NEXT: popq %rcx
2686 ; X64-NEXT: retq
2693 ; X64-LABEL: length255:
2694 ; X64: # %bb.0:
2695 ; X64-NEXT: movl $255, %edx
2696 ; X64-NEXT: jmp memcmp # TAILCALL
2702 ; X64-LABEL: length255_eq:
2703 ; X64: # %bb.0:
2704 ; X64-NEXT: pushq %rax
2705 ; X64-NEXT: movl $255, %edx
2706 ; X64-NEXT: callq memcmp
2707 ; X64-NEXT: testl %eax, %eax
2708 ; X64-NEXT: setne %al
2709 ; X64-NEXT: popq %rcx
2710 ; X64-NEXT: retq
2717 ; X64-LABEL: length255_lt:
2718 ; X64: # %bb.0:
2719 ; X64-NEXT: pushq %rax
2720 ; X64-NEXT: movl $255, %edx
2721 ; X64-NEXT: callq memcmp
2722 ; X64-NEXT: shrl $31, %eax
2723 ; X64-NEXT: # kill: def $al killed $al killed $eax
2724 ; X64-NEXT: popq %rcx
2725 ; X64-NEXT: retq
2732 ; X64-LABEL: length255_gt:
2733 ; X64: # %bb.0:
2734 ; X64-NEXT: pushq %rax
2735 ; X64-NEXT: movl $255, %edx
2736 ; X64-NEXT: callq memcmp
2737 ; X64-NEXT: testl %eax, %eax
2738 ; X64-NEXT: setg %al
2739 ; X64-NEXT: popq %rcx
2740 ; X64-NEXT: retq
2747 ; X64-LABEL: length255_eq_const:
2748 ; X64: # %bb.0:
2749 ; X64-NEXT: pushq %rax
2750 ; X64-NEXT: movl $.L.str, %esi
2751 ; X64-NEXT: movl $255, %edx
2752 ; X64-NEXT: callq memcmp
2753 ; X64-NEXT: testl %eax, %eax
2754 ; X64-NEXT: sete %al
2755 ; X64-NEXT: popq %rcx
2756 ; X64-NEXT: retq
2763 ; X64-LABEL: length256:
2764 ; X64: # %bb.0:
2765 ; X64-NEXT: movl $256, %edx # imm = 0x100
2766 ; X64-NEXT: jmp memcmp # TAILCALL
2772 ; X64-LABEL: length256_eq:
2773 ; X64: # %bb.0:
2774 ; X64-NEXT: pushq %rax
2775 ; X64-NEXT: movl $256, %edx # imm = 0x100
2776 ; X64-NEXT: callq memcmp
2777 ; X64-NEXT: testl %eax, %eax
2778 ; X64-NEXT: setne %al
2779 ; X64-NEXT: popq %rcx
2780 ; X64-NEXT: retq
2787 ; X64-LABEL: length256_lt:
2788 ; X64: # %bb.0:
2789 ; X64-NEXT: pushq %rax
2790 ; X64-NEXT: movl $256, %edx # imm = 0x100
2791 ; X64-NEXT: callq memcmp
2792 ; X64-NEXT: shrl $31, %eax
2793 ; X64-NEXT: # kill: def $al killed $al killed $eax
2794 ; X64-NEXT: popq %rcx
2795 ; X64-NEXT: retq
2802 ; X64-LABEL: length256_gt:
2803 ; X64: # %bb.0:
2804 ; X64-NEXT: pushq %rax
2805 ; X64-NEXT: movl $256, %edx # imm = 0x100
2806 ; X64-NEXT: callq memcmp
2807 ; X64-NEXT: testl %eax, %eax
2808 ; X64-NEXT: setg %al
2809 ; X64-NEXT: popq %rcx
2810 ; X64-NEXT: retq
2817 ; X64-LABEL: length256_eq_const:
2818 ; X64: # %bb.0:
2819 ; X64-NEXT: pushq %rax
2820 ; X64-NEXT: movl $.L.str, %esi
2821 ; X64-NEXT: movl $256, %edx # imm = 0x100
2822 ; X64-NEXT: callq memcmp
2823 ; X64-NEXT: testl %eax, %eax
2824 ; X64-NEXT: sete %al
2825 ; X64-NEXT: popq %rcx
2826 ; X64-NEXT: retq
2833 ; X64-LABEL: length384:
2834 ; X64: # %bb.0:
2835 ; X64-NEXT: movl $384, %edx # imm = 0x180
2836 ; X64-NEXT: jmp memcmp # TAILCALL
2842 ; X64-LABEL: length384_eq:
2843 ; X64: # %bb.0:
2844 ; X64-NEXT: pushq %rax
2845 ; X64-NEXT: movl $384, %edx # imm = 0x180
2846 ; X64-NEXT: callq memcmp
2847 ; X64-NEXT: testl %eax, %eax
2848 ; X64-NEXT: setne %al
2849 ; X64-NEXT: popq %rcx
2850 ; X64-NEXT: retq
2857 ; X64-LABEL: length384_lt:
2858 ; X64: # %bb.0:
2859 ; X64-NEXT: pushq %rax
2860 ; X64-NEXT: movl $384, %edx # imm = 0x180
2861 ; X64-NEXT: callq memcmp
2862 ; X64-NEXT: shrl $31, %eax
2863 ; X64-NEXT: # kill: def $al killed $al killed $eax
2864 ; X64-NEXT: popq %rcx
2865 ; X64-NEXT: retq
2872 ; X64-LABEL: length384_gt:
2873 ; X64: # %bb.0:
2874 ; X64-NEXT: pushq %rax
2875 ; X64-NEXT: movl $384, %edx # imm = 0x180
2876 ; X64-NEXT: callq memcmp
2877 ; X64-NEXT: testl %eax, %eax
2878 ; X64-NEXT: setg %al
2879 ; X64-NEXT: popq %rcx
2880 ; X64-NEXT: retq
2887 ; X64-LABEL: length384_eq_const:
2888 ; X64: # %bb.0:
2889 ; X64-NEXT: pushq %rax
2890 ; X64-NEXT: movl $.L.str, %esi
2891 ; X64-NEXT: movl $384, %edx # imm = 0x180
2892 ; X64-NEXT: callq memcmp
2893 ; X64-NEXT: testl %eax, %eax
2894 ; X64-NEXT: sete %al
2895 ; X64-NEXT: popq %rcx
2896 ; X64-NEXT: retq
2903 ; X64-LABEL: length511:
2904 ; X64: # %bb.0:
2905 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2906 ; X64-NEXT: jmp memcmp # TAILCALL
2912 ; X64-LABEL: length511_eq:
2913 ; X64: # %bb.0:
2914 ; X64-NEXT: pushq %rax
2915 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2916 ; X64-NEXT: callq memcmp
2917 ; X64-NEXT: testl %eax, %eax
2918 ; X64-NEXT: setne %al
2919 ; X64-NEXT: popq %rcx
2920 ; X64-NEXT: retq
2927 ; X64-LABEL: length511_lt:
2928 ; X64: # %bb.0:
2929 ; X64-NEXT: pushq %rax
2930 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2931 ; X64-NEXT: callq memcmp
2932 ; X64-NEXT: shrl $31, %eax
2933 ; X64-NEXT: # kill: def $al killed $al killed $eax
2934 ; X64-NEXT: popq %rcx
2935 ; X64-NEXT: retq
2942 ; X64-LABEL: length511_gt:
2943 ; X64: # %bb.0:
2944 ; X64-NEXT: pushq %rax
2945 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2946 ; X64-NEXT: callq memcmp
2947 ; X64-NEXT: testl %eax, %eax
2948 ; X64-NEXT: setg %al
2949 ; X64-NEXT: popq %rcx
2950 ; X64-NEXT: retq
2957 ; X64-LABEL: length511_eq_const:
2958 ; X64: # %bb.0:
2959 ; X64-NEXT: pushq %rax
2960 ; X64-NEXT: movl $.L.str, %esi
2961 ; X64-NEXT: movl $511, %edx # imm = 0x1FF
2962 ; X64-NEXT: callq memcmp
2963 ; X64-NEXT: testl %eax, %eax
2964 ; X64-NEXT: sete %al
2965 ; X64-NEXT: popq %rcx
2966 ; X64-NEXT: retq
2973 ; X64-LABEL: length512:
2974 ; X64: # %bb.0:
2975 ; X64-NEXT: movl $512, %edx # imm = 0x200
2976 ; X64-NEXT: jmp memcmp # TAILCALL
2982 ; X64-LABEL: length512_eq:
2983 ; X64: # %bb.0:
2984 ; X64-NEXT: pushq %rax
2985 ; X64-NEXT: movl $512, %edx # imm = 0x200
2986 ; X64-NEXT: callq memcmp
2987 ; X64-NEXT: testl %eax, %eax
2988 ; X64-NEXT: setne %al
2989 ; X64-NEXT: popq %rcx
2990 ; X64-NEXT: retq
2997 ; X64-LABEL: length512_lt:
2998 ; X64: # %bb.0:
2999 ; X64-NEXT: pushq %rax
3000 ; X64-NEXT: movl $512, %edx # imm = 0x200
3001 ; X64-NEXT: callq memcmp
3002 ; X64-NEXT: shrl $31, %eax
3003 ; X64-NEXT: # kill: def $al killed $al killed $eax
3004 ; X64-NEXT: popq %rcx
3005 ; X64-NEXT: retq
3012 ; X64-LABEL: length512_gt:
3013 ; X64: # %bb.0:
3014 ; X64-NEXT: pushq %rax
3015 ; X64-NEXT: movl $512, %edx # imm = 0x200
3016 ; X64-NEXT: callq memcmp
3017 ; X64-NEXT: testl %eax, %eax
3018 ; X64-NEXT: setg %al
3019 ; X64-NEXT: popq %rcx
3020 ; X64-NEXT: retq
3027 ; X64-LABEL: length512_eq_const:
3028 ; X64: # %bb.0:
3029 ; X64-NEXT: pushq %rax
3030 ; X64-NEXT: movl $.L.str, %esi
3031 ; X64-NEXT: movl $512, %edx # imm = 0x200
3032 ; X64-NEXT: callq memcmp
3033 ; X64-NEXT: testl %eax, %eax
3034 ; X64-NEXT: sete %al
3035 ; X64-NEXT: popq %rcx
3036 ; X64-NEXT: retq
3044 ; X64-LABEL: huge_length:
3045 ; X64: # %bb.0:
3046 ; X64-NEXT: movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF
3047 ; X64-NEXT: jmp memcmp # TAILCALL
3053 ; X64-LABEL: huge_length_eq:
3054 ; X64: # %bb.0:
3055 ; X64-NEXT: pushq %rax
3056 ; X64-NEXT: movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF
3057 ; X64-NEXT: callq memcmp
3058 ; X64-NEXT: testl %eax, %eax
3059 ; X64-NEXT: sete %al
3060 ; X64-NEXT: popq %rcx
3061 ; X64-NEXT: retq
3069 ; X64-LABEL: nonconst_length:
3070 ; X64: # %bb.0:
3071 ; X64-NEXT: jmp memcmp # TAILCALL
3077 ; X64-LABEL: nonconst_length_eq:
3078 ; X64: # %bb.0:
3079 ; X64-NEXT: pushq %rax
3080 ; X64-NEXT: callq memcmp
3081 ; X64-NEXT: testl %eax, %eax
3082 ; X64-NEXT: sete %al
3083 ; X64-NEXT: popq %rcx
3084 ; X64-NEXT: retq