Lines Matching +full:0 +full:x86

2 …u -mattr=-bmi,-tbm,-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=CHECK,X86,NOBMI,X86-NOBMI
3 …-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=CHECK,X86,BMI1,X86-BMI1,BMI1NOTBM,X86-BMI1N…
4 …,-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=CHECK,X86,BMI1,X86-BMI1,BMI1TBM,X86-BMI1TBM
5 … | FileCheck %s --check-prefixes=CHECK,X86,BMI1,X86-BMI1,BMI1BMI2,X86-BMI1BMI2,BMI1TBM,X86-BMI1TBM…
6 …extr < %s | FileCheck %s --check-prefixes=CHECK,X86,BMI1,X86-BMI1,BMI1BMI2,X86-BMI1BMI2,BMI1NOTBMB…
34 ; X86-NOBMI-LABEL: bextr32_a0:
35 ; X86-NOBMI: # %bb.0:
36 ; X86-NOBMI-NEXT: pushl %esi
37 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
38 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
39 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
40 ; X86-NOBMI-NEXT: shrl %cl, %esi
41 ; X86-NOBMI-NEXT: movl $1, %eax
42 ; X86-NOBMI-NEXT: movl %edx, %ecx
43 ; X86-NOBMI-NEXT: shll %cl, %eax
44 ; X86-NOBMI-NEXT: decl %eax
45 ; X86-NOBMI-NEXT: andl %esi, %eax
46 ; X86-NOBMI-NEXT: popl %esi
47 ; X86-NOBMI-NEXT: retl
49 ; X86-BMI1NOTBM-LABEL: bextr32_a0:
50 ; X86-BMI1NOTBM: # %bb.0:
51 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
52 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
53 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
54 ; X86-BMI1NOTBM-NEXT: orl %eax, %ecx
55 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %eax
56 ; X86-BMI1NOTBM-NEXT: retl
58 ; X86-BMI1BMI2-LABEL: bextr32_a0:
59 ; X86-BMI1BMI2: # %bb.0:
60 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
61 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
62 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %ecx
63 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
64 ; X86-BMI1BMI2-NEXT: retl
67 ; X64-NOBMI: # %bb.0:
79 ; X64-BMI1NOTBM: # %bb.0:
87 ; X64-BMI1BMI2: # %bb.0:
99 ; X86-NOBMI-LABEL: bextr32_a0_arithmetic:
100 ; X86-NOBMI: # %bb.0:
101 ; X86-NOBMI-NEXT: pushl %esi
102 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
103 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
104 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
105 ; X86-NOBMI-NEXT: sarl %cl, %esi
106 ; X86-NOBMI-NEXT: movl $1, %eax
107 ; X86-NOBMI-NEXT: movl %edx, %ecx
108 ; X86-NOBMI-NEXT: shll %cl, %eax
109 ; X86-NOBMI-NEXT: decl %eax
110 ; X86-NOBMI-NEXT: andl %esi, %eax
111 ; X86-NOBMI-NEXT: popl %esi
112 ; X86-NOBMI-NEXT: retl
114 ; X86-BMI1NOTBM-LABEL: bextr32_a0_arithmetic:
115 ; X86-BMI1NOTBM: # %bb.0:
116 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
117 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
118 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edx
119 ; X86-BMI1NOTBM-NEXT: sarl %cl, %edx
120 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
121 ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax
122 ; X86-BMI1NOTBM-NEXT: retl
124 ; X86-BMI1BMI2-LABEL: bextr32_a0_arithmetic:
125 ; X86-BMI1BMI2: # %bb.0:
126 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
127 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
128 ; X86-BMI1BMI2-NEXT: sarxl %ecx, {{[0-9]+}}(%esp), %ecx
129 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
130 ; X86-BMI1BMI2-NEXT: retl
133 ; X64-NOBMI: # %bb.0:
145 ; X64-BMI1NOTBM: # %bb.0:
154 ; X64-BMI1BMI2: # %bb.0:
166 ; X86-NOBMI-LABEL: bextr32_a1_indexzext:
167 ; X86-NOBMI: # %bb.0:
168 ; X86-NOBMI-NEXT: pushl %esi
169 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
170 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
171 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
172 ; X86-NOBMI-NEXT: shrl %cl, %esi
173 ; X86-NOBMI-NEXT: movl $1, %eax
174 ; X86-NOBMI-NEXT: movl %edx, %ecx
175 ; X86-NOBMI-NEXT: shll %cl, %eax
176 ; X86-NOBMI-NEXT: decl %eax
177 ; X86-NOBMI-NEXT: andl %esi, %eax
178 ; X86-NOBMI-NEXT: popl %esi
179 ; X86-NOBMI-NEXT: retl
181 ; X86-BMI1NOTBM-LABEL: bextr32_a1_indexzext:
182 ; X86-BMI1NOTBM: # %bb.0:
183 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
184 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
185 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
186 ; X86-BMI1NOTBM-NEXT: orl %eax, %ecx
187 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %eax
188 ; X86-BMI1NOTBM-NEXT: retl
190 ; X86-BMI1BMI2-LABEL: bextr32_a1_indexzext:
191 ; X86-BMI1BMI2: # %bb.0:
192 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
193 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
194 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %ecx
195 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
196 ; X86-BMI1BMI2-NEXT: retl
199 ; X64-NOBMI: # %bb.0:
211 ; X64-BMI1NOTBM: # %bb.0:
219 ; X64-BMI1BMI2: # %bb.0:
233 ; X86-NOBMI-LABEL: bextr32_a2_load:
234 ; X86-NOBMI: # %bb.0:
235 ; X86-NOBMI-NEXT: pushl %esi
236 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
237 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
238 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
239 ; X86-NOBMI-NEXT: movl (%eax), %esi
240 ; X86-NOBMI-NEXT: shrl %cl, %esi
241 ; X86-NOBMI-NEXT: movl $1, %eax
242 ; X86-NOBMI-NEXT: movl %edx, %ecx
243 ; X86-NOBMI-NEXT: shll %cl, %eax
244 ; X86-NOBMI-NEXT: decl %eax
245 ; X86-NOBMI-NEXT: andl %esi, %eax
246 ; X86-NOBMI-NEXT: popl %esi
247 ; X86-NOBMI-NEXT: retl
249 ; X86-BMI1NOTBM-LABEL: bextr32_a2_load:
250 ; X86-BMI1NOTBM: # %bb.0:
251 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
252 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
253 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
254 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %edx
255 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
256 ; X86-BMI1NOTBM-NEXT: bextrl %edx, (%eax), %eax
257 ; X86-BMI1NOTBM-NEXT: retl
259 ; X86-BMI1BMI2-LABEL: bextr32_a2_load:
260 ; X86-BMI1BMI2: # %bb.0:
261 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
262 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
263 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %dl
264 ; X86-BMI1BMI2-NEXT: shrxl %edx, (%ecx), %ecx
265 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
266 ; X86-BMI1BMI2-NEXT: retl
269 ; X64-NOBMI: # %bb.0:
282 ; X64-BMI1NOTBM: # %bb.0:
290 ; X64-BMI1BMI2: # %bb.0:
303 ; X86-NOBMI-LABEL: bextr32_a3_load_indexzext:
304 ; X86-NOBMI: # %bb.0:
305 ; X86-NOBMI-NEXT: pushl %esi
306 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
307 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
308 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
309 ; X86-NOBMI-NEXT: movl (%eax), %esi
310 ; X86-NOBMI-NEXT: shrl %cl, %esi
311 ; X86-NOBMI-NEXT: movl $1, %eax
312 ; X86-NOBMI-NEXT: movl %edx, %ecx
313 ; X86-NOBMI-NEXT: shll %cl, %eax
314 ; X86-NOBMI-NEXT: decl %eax
315 ; X86-NOBMI-NEXT: andl %esi, %eax
316 ; X86-NOBMI-NEXT: popl %esi
317 ; X86-NOBMI-NEXT: retl
319 ; X86-BMI1NOTBM-LABEL: bextr32_a3_load_indexzext:
320 ; X86-BMI1NOTBM: # %bb.0:
321 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
322 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
323 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
324 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %edx
325 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
326 ; X86-BMI1NOTBM-NEXT: bextrl %edx, (%eax), %eax
327 ; X86-BMI1NOTBM-NEXT: retl
329 ; X86-BMI1BMI2-LABEL: bextr32_a3_load_indexzext:
330 ; X86-BMI1BMI2: # %bb.0:
331 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
332 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
333 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %dl
334 ; X86-BMI1BMI2-NEXT: shrxl %edx, (%ecx), %ecx
335 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
336 ; X86-BMI1BMI2-NEXT: retl
339 ; X64-NOBMI: # %bb.0:
352 ; X64-BMI1NOTBM: # %bb.0:
360 ; X64-BMI1BMI2: # %bb.0:
375 ; X86-NOBMI-LABEL: bextr32_a4_commutative:
376 ; X86-NOBMI: # %bb.0:
377 ; X86-NOBMI-NEXT: pushl %esi
378 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
379 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
380 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
381 ; X86-NOBMI-NEXT: shrl %cl, %esi
382 ; X86-NOBMI-NEXT: movl $1, %eax
383 ; X86-NOBMI-NEXT: movl %edx, %ecx
384 ; X86-NOBMI-NEXT: shll %cl, %eax
385 ; X86-NOBMI-NEXT: decl %eax
386 ; X86-NOBMI-NEXT: andl %esi, %eax
387 ; X86-NOBMI-NEXT: popl %esi
388 ; X86-NOBMI-NEXT: retl
390 ; X86-BMI1NOTBM-LABEL: bextr32_a4_commutative:
391 ; X86-BMI1NOTBM: # %bb.0:
392 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
393 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
394 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
395 ; X86-BMI1NOTBM-NEXT: orl %eax, %ecx
396 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %eax
397 ; X86-BMI1NOTBM-NEXT: retl
399 ; X86-BMI1BMI2-LABEL: bextr32_a4_commutative:
400 ; X86-BMI1BMI2: # %bb.0:
401 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
402 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
403 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %ecx
404 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
405 ; X86-BMI1BMI2-NEXT: retl
408 ; X64-NOBMI: # %bb.0:
420 ; X64-BMI1NOTBM: # %bb.0:
428 ; X64-BMI1BMI2: # %bb.0:
440 ; X86-NOBMI-LABEL: bextr32_a5_skipextrauses:
441 ; X86-NOBMI: # %bb.0:
442 ; X86-NOBMI-NEXT: pushl %edi
443 ; X86-NOBMI-NEXT: pushl %esi
444 ; X86-NOBMI-NEXT: pushl %eax
445 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
446 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
447 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
448 ; X86-NOBMI-NEXT: movl %eax, %ecx
449 ; X86-NOBMI-NEXT: shrl %cl, %edi
450 ; X86-NOBMI-NEXT: movl $1, %esi
451 ; X86-NOBMI-NEXT: movl %edx, %ecx
452 ; X86-NOBMI-NEXT: shll %cl, %esi
453 ; X86-NOBMI-NEXT: decl %esi
454 ; X86-NOBMI-NEXT: andl %edi, %esi
455 ; X86-NOBMI-NEXT: movl %eax, (%esp)
456 ; X86-NOBMI-NEXT: calll use32
457 ; X86-NOBMI-NEXT: movl %esi, %eax
458 ; X86-NOBMI-NEXT: addl $4, %esp
459 ; X86-NOBMI-NEXT: popl %esi
460 ; X86-NOBMI-NEXT: popl %edi
461 ; X86-NOBMI-NEXT: retl
463 ; X86-BMI1NOTBM-LABEL: bextr32_a5_skipextrauses:
464 ; X86-BMI1NOTBM: # %bb.0:
465 ; X86-BMI1NOTBM-NEXT: pushl %esi
466 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
467 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
468 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
469 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
470 ; X86-BMI1NOTBM-NEXT: movzbl %al, %edx
471 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
472 ; X86-BMI1NOTBM-NEXT: bextrl %edx, {{[0-9]+}}(%esp), %esi
473 ; X86-BMI1NOTBM-NEXT: movl %eax, (%esp)
474 ; X86-BMI1NOTBM-NEXT: calll use32
475 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
476 ; X86-BMI1NOTBM-NEXT: addl $8, %esp
477 ; X86-BMI1NOTBM-NEXT: popl %esi
478 ; X86-BMI1NOTBM-NEXT: retl
480 ; X86-BMI1BMI2-LABEL: bextr32_a5_skipextrauses:
481 ; X86-BMI1BMI2: # %bb.0:
482 ; X86-BMI1BMI2-NEXT: pushl %esi
483 ; X86-BMI1BMI2-NEXT: subl $8, %esp
484 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
485 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
486 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %edx
487 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %esi
488 ; X86-BMI1BMI2-NEXT: movl %ecx, (%esp)
489 ; X86-BMI1BMI2-NEXT: calll use32
490 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
491 ; X86-BMI1BMI2-NEXT: addl $8, %esp
492 ; X86-BMI1BMI2-NEXT: popl %esi
493 ; X86-BMI1BMI2-NEXT: retl
496 ; X64-NOBMI: # %bb.0:
512 ; X64-BMI1NOTBM: # %bb.0:
525 ; X64-BMI1BMI2: # %bb.0:
545 ; X86-NOBMI-LABEL: bextr64_a0:
546 ; X86-NOBMI: # %bb.0:
547 ; X86-NOBMI-NEXT: pushl %edi
548 ; X86-NOBMI-NEXT: pushl %esi
549 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
550 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
551 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
552 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
553 ; X86-NOBMI-NEXT: movl %eax, %edi
554 ; X86-NOBMI-NEXT: shrl %cl, %edi
555 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
556 ; X86-NOBMI-NEXT: testb $32, %cl
557 ; X86-NOBMI-NEXT: je .LBB7_2
558 ; X86-NOBMI-NEXT: # %bb.1:
559 ; X86-NOBMI-NEXT: movl %edi, %esi
560 ; X86-NOBMI-NEXT: xorl %edi, %edi
561 ; X86-NOBMI-NEXT: .LBB7_2:
562 ; X86-NOBMI-NEXT: movl $1, %eax
563 ; X86-NOBMI-NEXT: xorl %edx, %edx
564 ; X86-NOBMI-NEXT: movb %ch, %cl
565 ; X86-NOBMI-NEXT: shldl %cl, %eax, %edx
566 ; X86-NOBMI-NEXT: shll %cl, %eax
567 ; X86-NOBMI-NEXT: testb $32, %ch
568 ; X86-NOBMI-NEXT: je .LBB7_4
569 ; X86-NOBMI-NEXT: # %bb.3:
570 ; X86-NOBMI-NEXT: movl %eax, %edx
571 ; X86-NOBMI-NEXT: xorl %eax, %eax
572 ; X86-NOBMI-NEXT: .LBB7_4:
573 ; X86-NOBMI-NEXT: addl $-1, %eax
574 ; X86-NOBMI-NEXT: adcl $-1, %edx
575 ; X86-NOBMI-NEXT: andl %esi, %eax
576 ; X86-NOBMI-NEXT: andl %edi, %edx
577 ; X86-NOBMI-NEXT: popl %esi
578 ; X86-NOBMI-NEXT: popl %edi
579 ; X86-NOBMI-NEXT: retl
581 ; X86-BMI1NOTBM-LABEL: bextr64_a0:
582 ; X86-BMI1NOTBM: # %bb.0:
583 ; X86-BMI1NOTBM-NEXT: pushl %edi
584 ; X86-BMI1NOTBM-NEXT: pushl %esi
585 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %ch
586 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
587 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
588 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
589 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
590 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
591 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
592 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
593 ; X86-BMI1NOTBM-NEXT: je .LBB7_2
594 ; X86-BMI1NOTBM-NEXT: # %bb.1:
595 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
596 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
597 ; X86-BMI1NOTBM-NEXT: .LBB7_2:
598 ; X86-BMI1NOTBM-NEXT: movl $1, %eax
599 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
600 ; X86-BMI1NOTBM-NEXT: movb %ch, %cl
601 ; X86-BMI1NOTBM-NEXT: shldl %cl, %eax, %edx
602 ; X86-BMI1NOTBM-NEXT: shll %cl, %eax
603 ; X86-BMI1NOTBM-NEXT: testb $32, %ch
604 ; X86-BMI1NOTBM-NEXT: je .LBB7_4
605 ; X86-BMI1NOTBM-NEXT: # %bb.3:
606 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
607 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
608 ; X86-BMI1NOTBM-NEXT: .LBB7_4:
609 ; X86-BMI1NOTBM-NEXT: addl $-1, %eax
610 ; X86-BMI1NOTBM-NEXT: adcl $-1, %edx
611 ; X86-BMI1NOTBM-NEXT: andl %esi, %eax
612 ; X86-BMI1NOTBM-NEXT: andl %edi, %edx
613 ; X86-BMI1NOTBM-NEXT: popl %esi
614 ; X86-BMI1NOTBM-NEXT: popl %edi
615 ; X86-BMI1NOTBM-NEXT: retl
617 ; X86-BMI1BMI2-LABEL: bextr64_a0:
618 ; X86-BMI1BMI2: # %bb.0:
619 ; X86-BMI1BMI2-NEXT: pushl %ebx
620 ; X86-BMI1BMI2-NEXT: pushl %edi
621 ; X86-BMI1BMI2-NEXT: pushl %esi
622 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
623 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
624 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
625 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
626 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
627 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
628 ; X86-BMI1BMI2-NEXT: testb $32, %cl
629 ; X86-BMI1BMI2-NEXT: je .LBB7_2
630 ; X86-BMI1BMI2-NEXT: # %bb.1:
631 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
632 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
633 ; X86-BMI1BMI2-NEXT: .LBB7_2:
634 ; X86-BMI1BMI2-NEXT: movl $1, %eax
635 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
636 ; X86-BMI1BMI2-NEXT: movl %ebx, %ecx
637 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %edx
638 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %eax, %eax
639 ; X86-BMI1BMI2-NEXT: testb $32, %bl
640 ; X86-BMI1BMI2-NEXT: je .LBB7_4
641 ; X86-BMI1BMI2-NEXT: # %bb.3:
642 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
643 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
644 ; X86-BMI1BMI2-NEXT: .LBB7_4:
645 ; X86-BMI1BMI2-NEXT: addl $-1, %eax
646 ; X86-BMI1BMI2-NEXT: adcl $-1, %edx
647 ; X86-BMI1BMI2-NEXT: andl %esi, %eax
648 ; X86-BMI1BMI2-NEXT: andl %edi, %edx
649 ; X86-BMI1BMI2-NEXT: popl %esi
650 ; X86-BMI1BMI2-NEXT: popl %edi
651 ; X86-BMI1BMI2-NEXT: popl %ebx
652 ; X86-BMI1BMI2-NEXT: retl
655 ; X64-NOBMI: # %bb.0:
667 ; X64-BMI1NOTBM: # %bb.0:
675 ; X64-BMI1BMI2: # %bb.0:
687 ; X86-NOBMI-LABEL: bextr64_a0_arithmetic:
688 ; X86-NOBMI: # %bb.0:
689 ; X86-NOBMI-NEXT: pushl %edi
690 ; X86-NOBMI-NEXT: pushl %esi
691 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
692 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
693 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
694 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
695 ; X86-NOBMI-NEXT: movl %eax, %esi
696 ; X86-NOBMI-NEXT: sarl %cl, %esi
697 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %edi
698 ; X86-NOBMI-NEXT: testb $32, %cl
699 ; X86-NOBMI-NEXT: je .LBB8_2
700 ; X86-NOBMI-NEXT: # %bb.1:
701 ; X86-NOBMI-NEXT: sarl $31, %eax
702 ; X86-NOBMI-NEXT: movl %esi, %edi
703 ; X86-NOBMI-NEXT: movl %eax, %esi
704 ; X86-NOBMI-NEXT: .LBB8_2:
705 ; X86-NOBMI-NEXT: movl $1, %eax
706 ; X86-NOBMI-NEXT: xorl %edx, %edx
707 ; X86-NOBMI-NEXT: movb %ch, %cl
708 ; X86-NOBMI-NEXT: shldl %cl, %eax, %edx
709 ; X86-NOBMI-NEXT: shll %cl, %eax
710 ; X86-NOBMI-NEXT: testb $32, %ch
711 ; X86-NOBMI-NEXT: je .LBB8_4
712 ; X86-NOBMI-NEXT: # %bb.3:
713 ; X86-NOBMI-NEXT: movl %eax, %edx
714 ; X86-NOBMI-NEXT: xorl %eax, %eax
715 ; X86-NOBMI-NEXT: .LBB8_4:
716 ; X86-NOBMI-NEXT: addl $-1, %eax
717 ; X86-NOBMI-NEXT: adcl $-1, %edx
718 ; X86-NOBMI-NEXT: andl %edi, %eax
719 ; X86-NOBMI-NEXT: andl %esi, %edx
720 ; X86-NOBMI-NEXT: popl %esi
721 ; X86-NOBMI-NEXT: popl %edi
722 ; X86-NOBMI-NEXT: retl
724 ; X86-BMI1NOTBM-LABEL: bextr64_a0_arithmetic:
725 ; X86-BMI1NOTBM: # %bb.0:
726 ; X86-BMI1NOTBM-NEXT: pushl %edi
727 ; X86-BMI1NOTBM-NEXT: pushl %esi
728 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %ch
729 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
730 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
731 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
732 ; X86-BMI1NOTBM-NEXT: movl %eax, %esi
733 ; X86-BMI1NOTBM-NEXT: sarl %cl, %esi
734 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %edi
735 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
736 ; X86-BMI1NOTBM-NEXT: je .LBB8_2
737 ; X86-BMI1NOTBM-NEXT: # %bb.1:
738 ; X86-BMI1NOTBM-NEXT: sarl $31, %eax
739 ; X86-BMI1NOTBM-NEXT: movl %esi, %edi
740 ; X86-BMI1NOTBM-NEXT: movl %eax, %esi
741 ; X86-BMI1NOTBM-NEXT: .LBB8_2:
742 ; X86-BMI1NOTBM-NEXT: movl $1, %eax
743 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
744 ; X86-BMI1NOTBM-NEXT: movb %ch, %cl
745 ; X86-BMI1NOTBM-NEXT: shldl %cl, %eax, %edx
746 ; X86-BMI1NOTBM-NEXT: shll %cl, %eax
747 ; X86-BMI1NOTBM-NEXT: testb $32, %ch
748 ; X86-BMI1NOTBM-NEXT: je .LBB8_4
749 ; X86-BMI1NOTBM-NEXT: # %bb.3:
750 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
751 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
752 ; X86-BMI1NOTBM-NEXT: .LBB8_4:
753 ; X86-BMI1NOTBM-NEXT: addl $-1, %eax
754 ; X86-BMI1NOTBM-NEXT: adcl $-1, %edx
755 ; X86-BMI1NOTBM-NEXT: andl %edi, %eax
756 ; X86-BMI1NOTBM-NEXT: andl %esi, %edx
757 ; X86-BMI1NOTBM-NEXT: popl %esi
758 ; X86-BMI1NOTBM-NEXT: popl %edi
759 ; X86-BMI1NOTBM-NEXT: retl
761 ; X86-BMI1BMI2-LABEL: bextr64_a0_arithmetic:
762 ; X86-BMI1BMI2: # %bb.0:
763 ; X86-BMI1BMI2-NEXT: pushl %ebx
764 ; X86-BMI1BMI2-NEXT: pushl %edi
765 ; X86-BMI1BMI2-NEXT: pushl %esi
766 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
767 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
768 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
769 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
770 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
771 ; X86-BMI1BMI2-NEXT: sarxl %ecx, %eax, %edi
772 ; X86-BMI1BMI2-NEXT: testb $32, %cl
773 ; X86-BMI1BMI2-NEXT: je .LBB8_2
774 ; X86-BMI1BMI2-NEXT: # %bb.1:
775 ; X86-BMI1BMI2-NEXT: sarl $31, %eax
776 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
777 ; X86-BMI1BMI2-NEXT: movl %eax, %edi
778 ; X86-BMI1BMI2-NEXT: .LBB8_2:
779 ; X86-BMI1BMI2-NEXT: movl $1, %eax
780 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
781 ; X86-BMI1BMI2-NEXT: movl %ebx, %ecx
782 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %edx
783 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %eax, %eax
784 ; X86-BMI1BMI2-NEXT: testb $32, %bl
785 ; X86-BMI1BMI2-NEXT: je .LBB8_4
786 ; X86-BMI1BMI2-NEXT: # %bb.3:
787 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
788 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
789 ; X86-BMI1BMI2-NEXT: .LBB8_4:
790 ; X86-BMI1BMI2-NEXT: addl $-1, %eax
791 ; X86-BMI1BMI2-NEXT: adcl $-1, %edx
792 ; X86-BMI1BMI2-NEXT: andl %esi, %eax
793 ; X86-BMI1BMI2-NEXT: andl %edi, %edx
794 ; X86-BMI1BMI2-NEXT: popl %esi
795 ; X86-BMI1BMI2-NEXT: popl %edi
796 ; X86-BMI1BMI2-NEXT: popl %ebx
797 ; X86-BMI1BMI2-NEXT: retl
800 ; X64-NOBMI: # %bb.0:
812 ; X64-BMI1NOTBM: # %bb.0:
821 ; X64-BMI1BMI2: # %bb.0:
833 ; X86-NOBMI-LABEL: bextr64_a1_indexzext:
834 ; X86-NOBMI: # %bb.0:
835 ; X86-NOBMI-NEXT: pushl %edi
836 ; X86-NOBMI-NEXT: pushl %esi
837 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
838 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
839 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
840 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
841 ; X86-NOBMI-NEXT: movl %eax, %edi
842 ; X86-NOBMI-NEXT: shrl %cl, %edi
843 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
844 ; X86-NOBMI-NEXT: testb $32, %cl
845 ; X86-NOBMI-NEXT: je .LBB9_2
846 ; X86-NOBMI-NEXT: # %bb.1:
847 ; X86-NOBMI-NEXT: movl %edi, %esi
848 ; X86-NOBMI-NEXT: xorl %edi, %edi
849 ; X86-NOBMI-NEXT: .LBB9_2:
850 ; X86-NOBMI-NEXT: movl $1, %eax
851 ; X86-NOBMI-NEXT: xorl %edx, %edx
852 ; X86-NOBMI-NEXT: movb %ch, %cl
853 ; X86-NOBMI-NEXT: shldl %cl, %eax, %edx
854 ; X86-NOBMI-NEXT: shll %cl, %eax
855 ; X86-NOBMI-NEXT: testb $32, %ch
856 ; X86-NOBMI-NEXT: je .LBB9_4
857 ; X86-NOBMI-NEXT: # %bb.3:
858 ; X86-NOBMI-NEXT: movl %eax, %edx
859 ; X86-NOBMI-NEXT: xorl %eax, %eax
860 ; X86-NOBMI-NEXT: .LBB9_4:
861 ; X86-NOBMI-NEXT: addl $-1, %eax
862 ; X86-NOBMI-NEXT: adcl $-1, %edx
863 ; X86-NOBMI-NEXT: andl %esi, %eax
864 ; X86-NOBMI-NEXT: andl %edi, %edx
865 ; X86-NOBMI-NEXT: popl %esi
866 ; X86-NOBMI-NEXT: popl %edi
867 ; X86-NOBMI-NEXT: retl
869 ; X86-BMI1NOTBM-LABEL: bextr64_a1_indexzext:
870 ; X86-BMI1NOTBM: # %bb.0:
871 ; X86-BMI1NOTBM-NEXT: pushl %edi
872 ; X86-BMI1NOTBM-NEXT: pushl %esi
873 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %ch
874 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
875 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
876 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
877 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
878 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
879 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
880 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
881 ; X86-BMI1NOTBM-NEXT: je .LBB9_2
882 ; X86-BMI1NOTBM-NEXT: # %bb.1:
883 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
884 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
885 ; X86-BMI1NOTBM-NEXT: .LBB9_2:
886 ; X86-BMI1NOTBM-NEXT: movl $1, %eax
887 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
888 ; X86-BMI1NOTBM-NEXT: movb %ch, %cl
889 ; X86-BMI1NOTBM-NEXT: shldl %cl, %eax, %edx
890 ; X86-BMI1NOTBM-NEXT: shll %cl, %eax
891 ; X86-BMI1NOTBM-NEXT: testb $32, %ch
892 ; X86-BMI1NOTBM-NEXT: je .LBB9_4
893 ; X86-BMI1NOTBM-NEXT: # %bb.3:
894 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
895 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
896 ; X86-BMI1NOTBM-NEXT: .LBB9_4:
897 ; X86-BMI1NOTBM-NEXT: addl $-1, %eax
898 ; X86-BMI1NOTBM-NEXT: adcl $-1, %edx
899 ; X86-BMI1NOTBM-NEXT: andl %esi, %eax
900 ; X86-BMI1NOTBM-NEXT: andl %edi, %edx
901 ; X86-BMI1NOTBM-NEXT: popl %esi
902 ; X86-BMI1NOTBM-NEXT: popl %edi
903 ; X86-BMI1NOTBM-NEXT: retl
905 ; X86-BMI1BMI2-LABEL: bextr64_a1_indexzext:
906 ; X86-BMI1BMI2: # %bb.0:
907 ; X86-BMI1BMI2-NEXT: pushl %ebx
908 ; X86-BMI1BMI2-NEXT: pushl %edi
909 ; X86-BMI1BMI2-NEXT: pushl %esi
910 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
911 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
912 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
913 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
914 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
915 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
916 ; X86-BMI1BMI2-NEXT: testb $32, %cl
917 ; X86-BMI1BMI2-NEXT: je .LBB9_2
918 ; X86-BMI1BMI2-NEXT: # %bb.1:
919 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
920 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
921 ; X86-BMI1BMI2-NEXT: .LBB9_2:
922 ; X86-BMI1BMI2-NEXT: movl $1, %eax
923 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
924 ; X86-BMI1BMI2-NEXT: movl %ebx, %ecx
925 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %edx
926 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %eax, %eax
927 ; X86-BMI1BMI2-NEXT: testb $32, %bl
928 ; X86-BMI1BMI2-NEXT: je .LBB9_4
929 ; X86-BMI1BMI2-NEXT: # %bb.3:
930 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
931 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
932 ; X86-BMI1BMI2-NEXT: .LBB9_4:
933 ; X86-BMI1BMI2-NEXT: addl $-1, %eax
934 ; X86-BMI1BMI2-NEXT: adcl $-1, %edx
935 ; X86-BMI1BMI2-NEXT: andl %esi, %eax
936 ; X86-BMI1BMI2-NEXT: andl %edi, %edx
937 ; X86-BMI1BMI2-NEXT: popl %esi
938 ; X86-BMI1BMI2-NEXT: popl %edi
939 ; X86-BMI1BMI2-NEXT: popl %ebx
940 ; X86-BMI1BMI2-NEXT: retl
943 ; X64-NOBMI: # %bb.0:
955 ; X64-BMI1NOTBM: # %bb.0:
963 ; X64-BMI1BMI2: # %bb.0:
979 ; X86-NOBMI-LABEL: bextr64_a2_load:
980 ; X86-NOBMI: # %bb.0:
981 ; X86-NOBMI-NEXT: pushl %edi
982 ; X86-NOBMI-NEXT: pushl %esi
983 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
984 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
985 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
986 ; X86-NOBMI-NEXT: movl (%eax), %esi
987 ; X86-NOBMI-NEXT: movl 4(%eax), %eax
988 ; X86-NOBMI-NEXT: movl %eax, %edi
989 ; X86-NOBMI-NEXT: shrl %cl, %edi
990 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
991 ; X86-NOBMI-NEXT: testb $32, %cl
992 ; X86-NOBMI-NEXT: je .LBB10_2
993 ; X86-NOBMI-NEXT: # %bb.1:
994 ; X86-NOBMI-NEXT: movl %edi, %esi
995 ; X86-NOBMI-NEXT: xorl %edi, %edi
996 ; X86-NOBMI-NEXT: .LBB10_2:
997 ; X86-NOBMI-NEXT: movl $1, %eax
998 ; X86-NOBMI-NEXT: xorl %edx, %edx
999 ; X86-NOBMI-NEXT: movb %ch, %cl
1000 ; X86-NOBMI-NEXT: shldl %cl, %eax, %edx
1001 ; X86-NOBMI-NEXT: shll %cl, %eax
1002 ; X86-NOBMI-NEXT: testb $32, %ch
1003 ; X86-NOBMI-NEXT: je .LBB10_4
1004 ; X86-NOBMI-NEXT: # %bb.3:
1005 ; X86-NOBMI-NEXT: movl %eax, %edx
1006 ; X86-NOBMI-NEXT: xorl %eax, %eax
1007 ; X86-NOBMI-NEXT: .LBB10_4:
1008 ; X86-NOBMI-NEXT: addl $-1, %eax
1009 ; X86-NOBMI-NEXT: adcl $-1, %edx
1010 ; X86-NOBMI-NEXT: andl %esi, %eax
1011 ; X86-NOBMI-NEXT: andl %edi, %edx
1012 ; X86-NOBMI-NEXT: popl %esi
1013 ; X86-NOBMI-NEXT: popl %edi
1014 ; X86-NOBMI-NEXT: retl
1016 ; X86-BMI1NOTBM-LABEL: bextr64_a2_load:
1017 ; X86-BMI1NOTBM: # %bb.0:
1018 ; X86-BMI1NOTBM-NEXT: pushl %edi
1019 ; X86-BMI1NOTBM-NEXT: pushl %esi
1020 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %ch
1021 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
1022 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
1023 ; X86-BMI1NOTBM-NEXT: movl (%eax), %esi
1024 ; X86-BMI1NOTBM-NEXT: movl 4(%eax), %eax
1025 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
1026 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
1027 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
1028 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
1029 ; X86-BMI1NOTBM-NEXT: je .LBB10_2
1030 ; X86-BMI1NOTBM-NEXT: # %bb.1:
1031 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
1032 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
1033 ; X86-BMI1NOTBM-NEXT: .LBB10_2:
1034 ; X86-BMI1NOTBM-NEXT: movl $1, %eax
1035 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
1036 ; X86-BMI1NOTBM-NEXT: movb %ch, %cl
1037 ; X86-BMI1NOTBM-NEXT: shldl %cl, %eax, %edx
1038 ; X86-BMI1NOTBM-NEXT: shll %cl, %eax
1039 ; X86-BMI1NOTBM-NEXT: testb $32, %ch
1040 ; X86-BMI1NOTBM-NEXT: je .LBB10_4
1041 ; X86-BMI1NOTBM-NEXT: # %bb.3:
1042 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
1043 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
1044 ; X86-BMI1NOTBM-NEXT: .LBB10_4:
1045 ; X86-BMI1NOTBM-NEXT: addl $-1, %eax
1046 ; X86-BMI1NOTBM-NEXT: adcl $-1, %edx
1047 ; X86-BMI1NOTBM-NEXT: andl %esi, %eax
1048 ; X86-BMI1NOTBM-NEXT: andl %edi, %edx
1049 ; X86-BMI1NOTBM-NEXT: popl %esi
1050 ; X86-BMI1NOTBM-NEXT: popl %edi
1051 ; X86-BMI1NOTBM-NEXT: retl
1053 ; X86-BMI1BMI2-LABEL: bextr64_a2_load:
1054 ; X86-BMI1BMI2: # %bb.0:
1055 ; X86-BMI1BMI2-NEXT: pushl %ebx
1056 ; X86-BMI1BMI2-NEXT: pushl %edi
1057 ; X86-BMI1BMI2-NEXT: pushl %esi
1058 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
1059 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
1060 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
1061 ; X86-BMI1BMI2-NEXT: movl (%eax), %esi
1062 ; X86-BMI1BMI2-NEXT: movl 4(%eax), %eax
1063 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
1064 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
1065 ; X86-BMI1BMI2-NEXT: testb $32, %cl
1066 ; X86-BMI1BMI2-NEXT: je .LBB10_2
1067 ; X86-BMI1BMI2-NEXT: # %bb.1:
1068 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
1069 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
1070 ; X86-BMI1BMI2-NEXT: .LBB10_2:
1071 ; X86-BMI1BMI2-NEXT: movl $1, %eax
1072 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
1073 ; X86-BMI1BMI2-NEXT: movl %ebx, %ecx
1074 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %edx
1075 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %eax, %eax
1076 ; X86-BMI1BMI2-NEXT: testb $32, %bl
1077 ; X86-BMI1BMI2-NEXT: je .LBB10_4
1078 ; X86-BMI1BMI2-NEXT: # %bb.3:
1079 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
1080 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
1081 ; X86-BMI1BMI2-NEXT: .LBB10_4:
1082 ; X86-BMI1BMI2-NEXT: addl $-1, %eax
1083 ; X86-BMI1BMI2-NEXT: adcl $-1, %edx
1084 ; X86-BMI1BMI2-NEXT: andl %esi, %eax
1085 ; X86-BMI1BMI2-NEXT: andl %edi, %edx
1086 ; X86-BMI1BMI2-NEXT: popl %esi
1087 ; X86-BMI1BMI2-NEXT: popl %edi
1088 ; X86-BMI1BMI2-NEXT: popl %ebx
1089 ; X86-BMI1BMI2-NEXT: retl
1092 ; X64-NOBMI: # %bb.0:
1105 ; X64-BMI1NOTBM: # %bb.0:
1113 ; X64-BMI1BMI2: # %bb.0:
1126 ; X86-NOBMI-LABEL: bextr64_a3_load_indexzext:
1127 ; X86-NOBMI: # %bb.0:
1128 ; X86-NOBMI-NEXT: pushl %edi
1129 ; X86-NOBMI-NEXT: pushl %esi
1130 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
1131 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
1132 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
1133 ; X86-NOBMI-NEXT: movl (%eax), %esi
1134 ; X86-NOBMI-NEXT: movl 4(%eax), %eax
1135 ; X86-NOBMI-NEXT: movl %eax, %edi
1136 ; X86-NOBMI-NEXT: shrl %cl, %edi
1137 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
1138 ; X86-NOBMI-NEXT: testb $32, %cl
1139 ; X86-NOBMI-NEXT: je .LBB11_2
1140 ; X86-NOBMI-NEXT: # %bb.1:
1141 ; X86-NOBMI-NEXT: movl %edi, %esi
1142 ; X86-NOBMI-NEXT: xorl %edi, %edi
1143 ; X86-NOBMI-NEXT: .LBB11_2:
1144 ; X86-NOBMI-NEXT: movl $1, %eax
1145 ; X86-NOBMI-NEXT: xorl %edx, %edx
1146 ; X86-NOBMI-NEXT: movb %ch, %cl
1147 ; X86-NOBMI-NEXT: shldl %cl, %eax, %edx
1148 ; X86-NOBMI-NEXT: shll %cl, %eax
1149 ; X86-NOBMI-NEXT: testb $32, %ch
1150 ; X86-NOBMI-NEXT: je .LBB11_4
1151 ; X86-NOBMI-NEXT: # %bb.3:
1152 ; X86-NOBMI-NEXT: movl %eax, %edx
1153 ; X86-NOBMI-NEXT: xorl %eax, %eax
1154 ; X86-NOBMI-NEXT: .LBB11_4:
1155 ; X86-NOBMI-NEXT: addl $-1, %eax
1156 ; X86-NOBMI-NEXT: adcl $-1, %edx
1157 ; X86-NOBMI-NEXT: andl %esi, %eax
1158 ; X86-NOBMI-NEXT: andl %edi, %edx
1159 ; X86-NOBMI-NEXT: popl %esi
1160 ; X86-NOBMI-NEXT: popl %edi
1161 ; X86-NOBMI-NEXT: retl
1163 ; X86-BMI1NOTBM-LABEL: bextr64_a3_load_indexzext:
1164 ; X86-BMI1NOTBM: # %bb.0:
1165 ; X86-BMI1NOTBM-NEXT: pushl %edi
1166 ; X86-BMI1NOTBM-NEXT: pushl %esi
1167 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %ch
1168 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
1169 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
1170 ; X86-BMI1NOTBM-NEXT: movl (%eax), %esi
1171 ; X86-BMI1NOTBM-NEXT: movl 4(%eax), %eax
1172 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
1173 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
1174 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
1175 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
1176 ; X86-BMI1NOTBM-NEXT: je .LBB11_2
1177 ; X86-BMI1NOTBM-NEXT: # %bb.1:
1178 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
1179 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
1180 ; X86-BMI1NOTBM-NEXT: .LBB11_2:
1181 ; X86-BMI1NOTBM-NEXT: movl $1, %eax
1182 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
1183 ; X86-BMI1NOTBM-NEXT: movb %ch, %cl
1184 ; X86-BMI1NOTBM-NEXT: shldl %cl, %eax, %edx
1185 ; X86-BMI1NOTBM-NEXT: shll %cl, %eax
1186 ; X86-BMI1NOTBM-NEXT: testb $32, %ch
1187 ; X86-BMI1NOTBM-NEXT: je .LBB11_4
1188 ; X86-BMI1NOTBM-NEXT: # %bb.3:
1189 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
1190 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
1191 ; X86-BMI1NOTBM-NEXT: .LBB11_4:
1192 ; X86-BMI1NOTBM-NEXT: addl $-1, %eax
1193 ; X86-BMI1NOTBM-NEXT: adcl $-1, %edx
1194 ; X86-BMI1NOTBM-NEXT: andl %esi, %eax
1195 ; X86-BMI1NOTBM-NEXT: andl %edi, %edx
1196 ; X86-BMI1NOTBM-NEXT: popl %esi
1197 ; X86-BMI1NOTBM-NEXT: popl %edi
1198 ; X86-BMI1NOTBM-NEXT: retl
1200 ; X86-BMI1BMI2-LABEL: bextr64_a3_load_indexzext:
1201 ; X86-BMI1BMI2: # %bb.0:
1202 ; X86-BMI1BMI2-NEXT: pushl %ebx
1203 ; X86-BMI1BMI2-NEXT: pushl %edi
1204 ; X86-BMI1BMI2-NEXT: pushl %esi
1205 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
1206 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
1207 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
1208 ; X86-BMI1BMI2-NEXT: movl (%eax), %esi
1209 ; X86-BMI1BMI2-NEXT: movl 4(%eax), %eax
1210 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
1211 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
1212 ; X86-BMI1BMI2-NEXT: testb $32, %cl
1213 ; X86-BMI1BMI2-NEXT: je .LBB11_2
1214 ; X86-BMI1BMI2-NEXT: # %bb.1:
1215 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
1216 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
1217 ; X86-BMI1BMI2-NEXT: .LBB11_2:
1218 ; X86-BMI1BMI2-NEXT: movl $1, %eax
1219 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
1220 ; X86-BMI1BMI2-NEXT: movl %ebx, %ecx
1221 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %edx
1222 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %eax, %eax
1223 ; X86-BMI1BMI2-NEXT: testb $32, %bl
1224 ; X86-BMI1BMI2-NEXT: je .LBB11_4
1225 ; X86-BMI1BMI2-NEXT: # %bb.3:
1226 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
1227 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
1228 ; X86-BMI1BMI2-NEXT: .LBB11_4:
1229 ; X86-BMI1BMI2-NEXT: addl $-1, %eax
1230 ; X86-BMI1BMI2-NEXT: adcl $-1, %edx
1231 ; X86-BMI1BMI2-NEXT: andl %esi, %eax
1232 ; X86-BMI1BMI2-NEXT: andl %edi, %edx
1233 ; X86-BMI1BMI2-NEXT: popl %esi
1234 ; X86-BMI1BMI2-NEXT: popl %edi
1235 ; X86-BMI1BMI2-NEXT: popl %ebx
1236 ; X86-BMI1BMI2-NEXT: retl
1239 ; X64-NOBMI: # %bb.0:
1252 ; X64-BMI1NOTBM: # %bb.0:
1260 ; X64-BMI1BMI2: # %bb.0:
1277 ; X86-NOBMI-LABEL: bextr64_a4_commutative:
1278 ; X86-NOBMI: # %bb.0:
1279 ; X86-NOBMI-NEXT: pushl %edi
1280 ; X86-NOBMI-NEXT: pushl %esi
1281 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
1282 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
1283 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
1284 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
1285 ; X86-NOBMI-NEXT: movl %esi, %edx
1286 ; X86-NOBMI-NEXT: shrl %cl, %edx
1287 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %eax
1288 ; X86-NOBMI-NEXT: testb $32, %cl
1289 ; X86-NOBMI-NEXT: je .LBB12_2
1290 ; X86-NOBMI-NEXT: # %bb.1:
1291 ; X86-NOBMI-NEXT: movl %edx, %eax
1292 ; X86-NOBMI-NEXT: xorl %edx, %edx
1293 ; X86-NOBMI-NEXT: .LBB12_2:
1294 ; X86-NOBMI-NEXT: movl $1, %esi
1295 ; X86-NOBMI-NEXT: xorl %edi, %edi
1296 ; X86-NOBMI-NEXT: movb %ch, %cl
1297 ; X86-NOBMI-NEXT: shldl %cl, %esi, %edi
1298 ; X86-NOBMI-NEXT: shll %cl, %esi
1299 ; X86-NOBMI-NEXT: testb $32, %ch
1300 ; X86-NOBMI-NEXT: je .LBB12_4
1301 ; X86-NOBMI-NEXT: # %bb.3:
1302 ; X86-NOBMI-NEXT: movl %esi, %edi
1303 ; X86-NOBMI-NEXT: xorl %esi, %esi
1304 ; X86-NOBMI-NEXT: .LBB12_4:
1305 ; X86-NOBMI-NEXT: addl $-1, %esi
1306 ; X86-NOBMI-NEXT: adcl $-1, %edi
1307 ; X86-NOBMI-NEXT: andl %esi, %eax
1308 ; X86-NOBMI-NEXT: andl %edi, %edx
1309 ; X86-NOBMI-NEXT: popl %esi
1310 ; X86-NOBMI-NEXT: popl %edi
1311 ; X86-NOBMI-NEXT: retl
1313 ; X86-BMI1NOTBM-LABEL: bextr64_a4_commutative:
1314 ; X86-BMI1NOTBM: # %bb.0:
1315 ; X86-BMI1NOTBM-NEXT: pushl %edi
1316 ; X86-BMI1NOTBM-NEXT: pushl %esi
1317 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %ch
1318 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
1319 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
1320 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
1321 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
1322 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
1323 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %esi, %eax
1324 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
1325 ; X86-BMI1NOTBM-NEXT: je .LBB12_2
1326 ; X86-BMI1NOTBM-NEXT: # %bb.1:
1327 ; X86-BMI1NOTBM-NEXT: movl %edx, %eax
1328 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
1329 ; X86-BMI1NOTBM-NEXT: .LBB12_2:
1330 ; X86-BMI1NOTBM-NEXT: movl $1, %esi
1331 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
1332 ; X86-BMI1NOTBM-NEXT: movb %ch, %cl
1333 ; X86-BMI1NOTBM-NEXT: shldl %cl, %esi, %edi
1334 ; X86-BMI1NOTBM-NEXT: shll %cl, %esi
1335 ; X86-BMI1NOTBM-NEXT: testb $32, %ch
1336 ; X86-BMI1NOTBM-NEXT: je .LBB12_4
1337 ; X86-BMI1NOTBM-NEXT: # %bb.3:
1338 ; X86-BMI1NOTBM-NEXT: movl %esi, %edi
1339 ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi
1340 ; X86-BMI1NOTBM-NEXT: .LBB12_4:
1341 ; X86-BMI1NOTBM-NEXT: addl $-1, %esi
1342 ; X86-BMI1NOTBM-NEXT: adcl $-1, %edi
1343 ; X86-BMI1NOTBM-NEXT: andl %esi, %eax
1344 ; X86-BMI1NOTBM-NEXT: andl %edi, %edx
1345 ; X86-BMI1NOTBM-NEXT: popl %esi
1346 ; X86-BMI1NOTBM-NEXT: popl %edi
1347 ; X86-BMI1NOTBM-NEXT: retl
1349 ; X86-BMI1BMI2-LABEL: bextr64_a4_commutative:
1350 ; X86-BMI1BMI2: # %bb.0:
1351 ; X86-BMI1BMI2-NEXT: pushl %ebx
1352 ; X86-BMI1BMI2-NEXT: pushl %edi
1353 ; X86-BMI1BMI2-NEXT: pushl %esi
1354 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
1355 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
1356 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
1357 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
1358 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
1359 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edx
1360 ; X86-BMI1BMI2-NEXT: testb $32, %cl
1361 ; X86-BMI1BMI2-NEXT: je .LBB12_2
1362 ; X86-BMI1BMI2-NEXT: # %bb.1:
1363 ; X86-BMI1BMI2-NEXT: movl %edx, %eax
1364 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
1365 ; X86-BMI1BMI2-NEXT: .LBB12_2:
1366 ; X86-BMI1BMI2-NEXT: movl $1, %edi
1367 ; X86-BMI1BMI2-NEXT: xorl %esi, %esi
1368 ; X86-BMI1BMI2-NEXT: movl %ebx, %ecx
1369 ; X86-BMI1BMI2-NEXT: shldl %cl, %edi, %esi
1370 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %edi, %ecx
1371 ; X86-BMI1BMI2-NEXT: testb $32, %bl
1372 ; X86-BMI1BMI2-NEXT: je .LBB12_4
1373 ; X86-BMI1BMI2-NEXT: # %bb.3:
1374 ; X86-BMI1BMI2-NEXT: movl %ecx, %esi
1375 ; X86-BMI1BMI2-NEXT: xorl %ecx, %ecx
1376 ; X86-BMI1BMI2-NEXT: .LBB12_4:
1377 ; X86-BMI1BMI2-NEXT: addl $-1, %ecx
1378 ; X86-BMI1BMI2-NEXT: adcl $-1, %esi
1379 ; X86-BMI1BMI2-NEXT: andl %ecx, %eax
1380 ; X86-BMI1BMI2-NEXT: andl %esi, %edx
1381 ; X86-BMI1BMI2-NEXT: popl %esi
1382 ; X86-BMI1BMI2-NEXT: popl %edi
1383 ; X86-BMI1BMI2-NEXT: popl %ebx
1384 ; X86-BMI1BMI2-NEXT: retl
1387 ; X64-NOBMI: # %bb.0:
1399 ; X64-BMI1NOTBM: # %bb.0:
1407 ; X64-BMI1BMI2: # %bb.0:
1419 ; X86-NOBMI-LABEL: bextr64_a5_skipextrauses:
1420 ; X86-NOBMI: # %bb.0:
1421 ; X86-NOBMI-NEXT: pushl %ebp
1422 ; X86-NOBMI-NEXT: pushl %ebx
1423 ; X86-NOBMI-NEXT: pushl %edi
1424 ; X86-NOBMI-NEXT: pushl %esi
1425 ; X86-NOBMI-NEXT: subl $12, %esp
1426 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
1427 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ebx
1428 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
1429 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
1430 ; X86-NOBMI-NEXT: movl %esi, %ebp
1431 ; X86-NOBMI-NEXT: movl %eax, %ecx
1432 ; X86-NOBMI-NEXT: shrl %cl, %ebp
1433 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %ebx
1434 ; X86-NOBMI-NEXT: testb $32, %al
1435 ; X86-NOBMI-NEXT: je .LBB13_2
1436 ; X86-NOBMI-NEXT: # %bb.1:
1437 ; X86-NOBMI-NEXT: movl %ebp, %ebx
1438 ; X86-NOBMI-NEXT: xorl %ebp, %ebp
1439 ; X86-NOBMI-NEXT: .LBB13_2:
1440 ; X86-NOBMI-NEXT: movl $1, %esi
1441 ; X86-NOBMI-NEXT: xorl %edi, %edi
1442 ; X86-NOBMI-NEXT: movl %edx, %ecx
1443 ; X86-NOBMI-NEXT: shldl %cl, %esi, %edi
1444 ; X86-NOBMI-NEXT: shll %cl, %esi
1445 ; X86-NOBMI-NEXT: testb $32, %dl
1446 ; X86-NOBMI-NEXT: je .LBB13_4
1447 ; X86-NOBMI-NEXT: # %bb.3:
1448 ; X86-NOBMI-NEXT: movl %esi, %edi
1449 ; X86-NOBMI-NEXT: xorl %esi, %esi
1450 ; X86-NOBMI-NEXT: .LBB13_4:
1451 ; X86-NOBMI-NEXT: addl $-1, %esi
1452 ; X86-NOBMI-NEXT: adcl $-1, %edi
1453 ; X86-NOBMI-NEXT: andl %ebx, %esi
1454 ; X86-NOBMI-NEXT: andl %ebp, %edi
1455 ; X86-NOBMI-NEXT: subl $8, %esp
1456 ; X86-NOBMI-NEXT: pushl {{[0-9]+}}(%esp)
1457 ; X86-NOBMI-NEXT: pushl %eax
1458 ; X86-NOBMI-NEXT: calll use64
1459 ; X86-NOBMI-NEXT: addl $16, %esp
1460 ; X86-NOBMI-NEXT: movl %esi, %eax
1461 ; X86-NOBMI-NEXT: movl %edi, %edx
1462 ; X86-NOBMI-NEXT: addl $12, %esp
1463 ; X86-NOBMI-NEXT: popl %esi
1464 ; X86-NOBMI-NEXT: popl %edi
1465 ; X86-NOBMI-NEXT: popl %ebx
1466 ; X86-NOBMI-NEXT: popl %ebp
1467 ; X86-NOBMI-NEXT: retl
1469 ; X86-BMI1NOTBM-LABEL: bextr64_a5_skipextrauses:
1470 ; X86-BMI1NOTBM: # %bb.0:
1471 ; X86-BMI1NOTBM-NEXT: pushl %ebp
1472 ; X86-BMI1NOTBM-NEXT: pushl %ebx
1473 ; X86-BMI1NOTBM-NEXT: pushl %edi
1474 ; X86-BMI1NOTBM-NEXT: pushl %esi
1475 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
1476 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %dl
1477 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %ebx
1478 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
1479 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
1480 ; X86-BMI1NOTBM-NEXT: movl %esi, %ebp
1481 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
1482 ; X86-BMI1NOTBM-NEXT: shrl %cl, %ebp
1483 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %esi, %ebx
1484 ; X86-BMI1NOTBM-NEXT: testb $32, %al
1485 ; X86-BMI1NOTBM-NEXT: je .LBB13_2
1486 ; X86-BMI1NOTBM-NEXT: # %bb.1:
1487 ; X86-BMI1NOTBM-NEXT: movl %ebp, %ebx
1488 ; X86-BMI1NOTBM-NEXT: xorl %ebp, %ebp
1489 ; X86-BMI1NOTBM-NEXT: .LBB13_2:
1490 ; X86-BMI1NOTBM-NEXT: movl $1, %esi
1491 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
1492 ; X86-BMI1NOTBM-NEXT: movl %edx, %ecx
1493 ; X86-BMI1NOTBM-NEXT: shldl %cl, %esi, %edi
1494 ; X86-BMI1NOTBM-NEXT: shll %cl, %esi
1495 ; X86-BMI1NOTBM-NEXT: testb $32, %dl
1496 ; X86-BMI1NOTBM-NEXT: je .LBB13_4
1497 ; X86-BMI1NOTBM-NEXT: # %bb.3:
1498 ; X86-BMI1NOTBM-NEXT: movl %esi, %edi
1499 ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi
1500 ; X86-BMI1NOTBM-NEXT: .LBB13_4:
1501 ; X86-BMI1NOTBM-NEXT: addl $-1, %esi
1502 ; X86-BMI1NOTBM-NEXT: adcl $-1, %edi
1503 ; X86-BMI1NOTBM-NEXT: andl %ebx, %esi
1504 ; X86-BMI1NOTBM-NEXT: andl %ebp, %edi
1505 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
1506 ; X86-BMI1NOTBM-NEXT: pushl {{[0-9]+}}(%esp)
1507 ; X86-BMI1NOTBM-NEXT: pushl %eax
1508 ; X86-BMI1NOTBM-NEXT: calll use64
1509 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
1510 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
1511 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
1512 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
1513 ; X86-BMI1NOTBM-NEXT: popl %esi
1514 ; X86-BMI1NOTBM-NEXT: popl %edi
1515 ; X86-BMI1NOTBM-NEXT: popl %ebx
1516 ; X86-BMI1NOTBM-NEXT: popl %ebp
1517 ; X86-BMI1NOTBM-NEXT: retl
1519 ; X86-BMI1BMI2-LABEL: bextr64_a5_skipextrauses:
1520 ; X86-BMI1BMI2: # %bb.0:
1521 ; X86-BMI1BMI2-NEXT: pushl %ebp
1522 ; X86-BMI1BMI2-NEXT: pushl %ebx
1523 ; X86-BMI1BMI2-NEXT: pushl %edi
1524 ; X86-BMI1BMI2-NEXT: pushl %esi
1525 ; X86-BMI1BMI2-NEXT: subl $12, %esp
1526 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %dl
1527 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ebx
1528 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
1529 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
1530 ; X86-BMI1BMI2-NEXT: movl %eax, %ecx
1531 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %ebx
1532 ; X86-BMI1BMI2-NEXT: shrxl %eax, %esi, %ebp
1533 ; X86-BMI1BMI2-NEXT: testb $32, %al
1534 ; X86-BMI1BMI2-NEXT: je .LBB13_2
1535 ; X86-BMI1BMI2-NEXT: # %bb.1:
1536 ; X86-BMI1BMI2-NEXT: movl %ebp, %ebx
1537 ; X86-BMI1BMI2-NEXT: xorl %ebp, %ebp
1538 ; X86-BMI1BMI2-NEXT: .LBB13_2:
1539 ; X86-BMI1BMI2-NEXT: movl $1, %edi
1540 ; X86-BMI1BMI2-NEXT: xorl %esi, %esi
1541 ; X86-BMI1BMI2-NEXT: movl %edx, %ecx
1542 ; X86-BMI1BMI2-NEXT: shldl %cl, %edi, %esi
1543 ; X86-BMI1BMI2-NEXT: shlxl %edx, %edi, %edi
1544 ; X86-BMI1BMI2-NEXT: testb $32, %dl
1545 ; X86-BMI1BMI2-NEXT: je .LBB13_4
1546 ; X86-BMI1BMI2-NEXT: # %bb.3:
1547 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
1548 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
1549 ; X86-BMI1BMI2-NEXT: .LBB13_4:
1550 ; X86-BMI1BMI2-NEXT: addl $-1, %edi
1551 ; X86-BMI1BMI2-NEXT: adcl $-1, %esi
1552 ; X86-BMI1BMI2-NEXT: andl %ebx, %edi
1553 ; X86-BMI1BMI2-NEXT: andl %ebp, %esi
1554 ; X86-BMI1BMI2-NEXT: subl $8, %esp
1555 ; X86-BMI1BMI2-NEXT: pushl {{[0-9]+}}(%esp)
1556 ; X86-BMI1BMI2-NEXT: pushl %eax
1557 ; X86-BMI1BMI2-NEXT: calll use64
1558 ; X86-BMI1BMI2-NEXT: addl $16, %esp
1559 ; X86-BMI1BMI2-NEXT: movl %edi, %eax
1560 ; X86-BMI1BMI2-NEXT: movl %esi, %edx
1561 ; X86-BMI1BMI2-NEXT: addl $12, %esp
1562 ; X86-BMI1BMI2-NEXT: popl %esi
1563 ; X86-BMI1BMI2-NEXT: popl %edi
1564 ; X86-BMI1BMI2-NEXT: popl %ebx
1565 ; X86-BMI1BMI2-NEXT: popl %ebp
1566 ; X86-BMI1BMI2-NEXT: retl
1569 ; X64-NOBMI: # %bb.0:
1585 ; X64-BMI1NOTBM: # %bb.0:
1598 ; X64-BMI1BMI2: # %bb.0:
1619 ; X86-NOBMI-LABEL: bextr64_32_a0:
1620 ; X86-NOBMI: # %bb.0:
1621 ; X86-NOBMI-NEXT: pushl %edi
1622 ; X86-NOBMI-NEXT: pushl %esi
1623 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
1624 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
1625 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
1626 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
1627 ; X86-NOBMI-NEXT: movl %edi, %esi
1628 ; X86-NOBMI-NEXT: shrl %cl, %esi
1629 ; X86-NOBMI-NEXT: shrdl %cl, %edi, %eax
1630 ; X86-NOBMI-NEXT: testb $32, %cl
1631 ; X86-NOBMI-NEXT: jne .LBB14_2
1632 ; X86-NOBMI-NEXT: # %bb.1:
1633 ; X86-NOBMI-NEXT: movl %eax, %esi
1634 ; X86-NOBMI-NEXT: .LBB14_2:
1635 ; X86-NOBMI-NEXT: movl $1, %edi
1636 ; X86-NOBMI-NEXT: movl %edx, %ecx
1637 ; X86-NOBMI-NEXT: shll %cl, %edi
1638 ; X86-NOBMI-NEXT: xorl %eax, %eax
1639 ; X86-NOBMI-NEXT: testb $32, %dl
1640 ; X86-NOBMI-NEXT: jne .LBB14_4
1641 ; X86-NOBMI-NEXT: # %bb.3:
1642 ; X86-NOBMI-NEXT: movl %edi, %eax
1643 ; X86-NOBMI-NEXT: .LBB14_4:
1644 ; X86-NOBMI-NEXT: decl %eax
1645 ; X86-NOBMI-NEXT: andl %esi, %eax
1646 ; X86-NOBMI-NEXT: popl %esi
1647 ; X86-NOBMI-NEXT: popl %edi
1648 ; X86-NOBMI-NEXT: retl
1650 ; X86-BMI1NOTBM-LABEL: bextr64_32_a0:
1651 ; X86-BMI1NOTBM: # %bb.0:
1652 ; X86-BMI1NOTBM-NEXT: pushl %edi
1653 ; X86-BMI1NOTBM-NEXT: pushl %esi
1654 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %dl
1655 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
1656 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
1657 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
1658 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
1659 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
1660 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %eax
1661 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
1662 ; X86-BMI1NOTBM-NEXT: jne .LBB14_2
1663 ; X86-BMI1NOTBM-NEXT: # %bb.1:
1664 ; X86-BMI1NOTBM-NEXT: movl %eax, %esi
1665 ; X86-BMI1NOTBM-NEXT: .LBB14_2:
1666 ; X86-BMI1NOTBM-NEXT: movl $1, %edi
1667 ; X86-BMI1NOTBM-NEXT: movl %edx, %ecx
1668 ; X86-BMI1NOTBM-NEXT: shll %cl, %edi
1669 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
1670 ; X86-BMI1NOTBM-NEXT: testb $32, %dl
1671 ; X86-BMI1NOTBM-NEXT: jne .LBB14_4
1672 ; X86-BMI1NOTBM-NEXT: # %bb.3:
1673 ; X86-BMI1NOTBM-NEXT: movl %edi, %eax
1674 ; X86-BMI1NOTBM-NEXT: .LBB14_4:
1675 ; X86-BMI1NOTBM-NEXT: decl %eax
1676 ; X86-BMI1NOTBM-NEXT: andl %esi, %eax
1677 ; X86-BMI1NOTBM-NEXT: popl %esi
1678 ; X86-BMI1NOTBM-NEXT: popl %edi
1679 ; X86-BMI1NOTBM-NEXT: retl
1681 ; X86-BMI1BMI2-LABEL: bextr64_32_a0:
1682 ; X86-BMI1BMI2: # %bb.0:
1683 ; X86-BMI1BMI2-NEXT: pushl %ebx
1684 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
1685 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
1686 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
1687 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
1688 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %edx
1689 ; X86-BMI1BMI2-NEXT: testb $32, %cl
1690 ; X86-BMI1BMI2-NEXT: je .LBB14_2
1691 ; X86-BMI1BMI2-NEXT: # %bb.1:
1692 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edx
1693 ; X86-BMI1BMI2-NEXT: .LBB14_2:
1694 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
1695 ; X86-BMI1BMI2-NEXT: testb $32, %bl
1696 ; X86-BMI1BMI2-NEXT: jne .LBB14_4
1697 ; X86-BMI1BMI2-NEXT: # %bb.3:
1698 ; X86-BMI1BMI2-NEXT: movl $1, %eax
1699 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %eax, %eax
1700 ; X86-BMI1BMI2-NEXT: .LBB14_4:
1701 ; X86-BMI1BMI2-NEXT: decl %eax
1702 ; X86-BMI1BMI2-NEXT: andl %edx, %eax
1703 ; X86-BMI1BMI2-NEXT: popl %ebx
1704 ; X86-BMI1BMI2-NEXT: retl
1707 ; X64-NOBMI: # %bb.0:
1720 ; X64-BMI1NOTBM: # %bb.0:
1729 ; X64-BMI1BMI2: # %bb.0:
1743 ; X86-NOBMI-LABEL: bextr64_32_a1:
1744 ; X86-NOBMI: # %bb.0:
1745 ; X86-NOBMI-NEXT: pushl %edi
1746 ; X86-NOBMI-NEXT: pushl %esi
1747 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
1748 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
1749 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
1750 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
1751 ; X86-NOBMI-NEXT: movl %edi, %esi
1752 ; X86-NOBMI-NEXT: shrl %cl, %esi
1753 ; X86-NOBMI-NEXT: shrdl %cl, %edi, %eax
1754 ; X86-NOBMI-NEXT: testb $32, %cl
1755 ; X86-NOBMI-NEXT: jne .LBB15_2
1756 ; X86-NOBMI-NEXT: # %bb.1:
1757 ; X86-NOBMI-NEXT: movl %eax, %esi
1758 ; X86-NOBMI-NEXT: .LBB15_2:
1759 ; X86-NOBMI-NEXT: movl $1, %eax
1760 ; X86-NOBMI-NEXT: movl %edx, %ecx
1761 ; X86-NOBMI-NEXT: shll %cl, %eax
1762 ; X86-NOBMI-NEXT: decl %eax
1763 ; X86-NOBMI-NEXT: andl %esi, %eax
1764 ; X86-NOBMI-NEXT: popl %esi
1765 ; X86-NOBMI-NEXT: popl %edi
1766 ; X86-NOBMI-NEXT: retl
1768 ; X86-BMI1NOTBM-LABEL: bextr64_32_a1:
1769 ; X86-BMI1NOTBM: # %bb.0:
1770 ; X86-BMI1NOTBM-NEXT: pushl %edi
1771 ; X86-BMI1NOTBM-NEXT: pushl %esi
1772 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
1773 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
1774 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
1775 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
1776 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
1777 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
1778 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
1779 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
1780 ; X86-BMI1NOTBM-NEXT: jne .LBB15_2
1781 ; X86-BMI1NOTBM-NEXT: # %bb.1:
1782 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
1783 ; X86-BMI1NOTBM-NEXT: .LBB15_2:
1784 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
1785 ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax
1786 ; X86-BMI1NOTBM-NEXT: popl %esi
1787 ; X86-BMI1NOTBM-NEXT: popl %edi
1788 ; X86-BMI1NOTBM-NEXT: retl
1790 ; X86-BMI1BMI2-LABEL: bextr64_32_a1:
1791 ; X86-BMI1BMI2: # %bb.0:
1792 ; X86-BMI1BMI2-NEXT: pushl %esi
1793 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
1794 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
1795 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
1796 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
1797 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
1798 ; X86-BMI1BMI2-NEXT: testb $32, %cl
1799 ; X86-BMI1BMI2-NEXT: je .LBB15_2
1800 ; X86-BMI1BMI2-NEXT: # %bb.1:
1801 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
1802 ; X86-BMI1BMI2-NEXT: .LBB15_2:
1803 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %eax
1804 ; X86-BMI1BMI2-NEXT: popl %esi
1805 ; X86-BMI1BMI2-NEXT: retl
1808 ; X64-NOBMI: # %bb.0:
1820 ; X64-BMI1NOTBM: # %bb.0:
1829 ; X64-BMI1BMI2: # %bb.0:
1844 ; X86-NOBMI-LABEL: bextr64_32_a1_trunc_extrause:
1845 ; X86-NOBMI: # %bb.0:
1846 ; X86-NOBMI-NEXT: pushl %ebx
1847 ; X86-NOBMI-NEXT: pushl %esi
1848 ; X86-NOBMI-NEXT: pushl %eax
1849 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %bl
1850 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
1851 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
1852 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
1853 ; X86-NOBMI-NEXT: movl %edx, %esi
1854 ; X86-NOBMI-NEXT: shrl %cl, %esi
1855 ; X86-NOBMI-NEXT: shrdl %cl, %edx, %eax
1856 ; X86-NOBMI-NEXT: testb $32, %cl
1857 ; X86-NOBMI-NEXT: jne .LBB16_2
1858 ; X86-NOBMI-NEXT: # %bb.1:
1859 ; X86-NOBMI-NEXT: movl %eax, %esi
1860 ; X86-NOBMI-NEXT: .LBB16_2:
1861 ; X86-NOBMI-NEXT: movl %esi, (%esp)
1862 ; X86-NOBMI-NEXT: calll use32
1863 ; X86-NOBMI-NEXT: movl $1, %eax
1864 ; X86-NOBMI-NEXT: movl %ebx, %ecx
1865 ; X86-NOBMI-NEXT: shll %cl, %eax
1866 ; X86-NOBMI-NEXT: decl %eax
1867 ; X86-NOBMI-NEXT: andl %esi, %eax
1868 ; X86-NOBMI-NEXT: addl $4, %esp
1869 ; X86-NOBMI-NEXT: popl %esi
1870 ; X86-NOBMI-NEXT: popl %ebx
1871 ; X86-NOBMI-NEXT: retl
1873 ; X86-BMI1NOTBM-LABEL: bextr64_32_a1_trunc_extrause:
1874 ; X86-BMI1NOTBM: # %bb.0:
1875 ; X86-BMI1NOTBM-NEXT: pushl %ebx
1876 ; X86-BMI1NOTBM-NEXT: pushl %esi
1877 ; X86-BMI1NOTBM-NEXT: pushl %eax
1878 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %bl
1879 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
1880 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
1881 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edx
1882 ; X86-BMI1NOTBM-NEXT: movl %edx, %esi
1883 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
1884 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %eax
1885 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
1886 ; X86-BMI1NOTBM-NEXT: jne .LBB16_2
1887 ; X86-BMI1NOTBM-NEXT: # %bb.1:
1888 ; X86-BMI1NOTBM-NEXT: movl %eax, %esi
1889 ; X86-BMI1NOTBM-NEXT: .LBB16_2:
1890 ; X86-BMI1NOTBM-NEXT: movl %esi, (%esp)
1891 ; X86-BMI1NOTBM-NEXT: calll use32
1892 ; X86-BMI1NOTBM-NEXT: shll $8, %ebx
1893 ; X86-BMI1NOTBM-NEXT: bextrl %ebx, %esi, %eax
1894 ; X86-BMI1NOTBM-NEXT: addl $4, %esp
1895 ; X86-BMI1NOTBM-NEXT: popl %esi
1896 ; X86-BMI1NOTBM-NEXT: popl %ebx
1897 ; X86-BMI1NOTBM-NEXT: retl
1899 ; X86-BMI1BMI2-LABEL: bextr64_32_a1_trunc_extrause:
1900 ; X86-BMI1BMI2: # %bb.0:
1901 ; X86-BMI1BMI2-NEXT: pushl %ebx
1902 ; X86-BMI1BMI2-NEXT: pushl %esi
1903 ; X86-BMI1BMI2-NEXT: pushl %eax
1904 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
1905 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
1906 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
1907 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
1908 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
1909 ; X86-BMI1BMI2-NEXT: testb $32, %cl
1910 ; X86-BMI1BMI2-NEXT: je .LBB16_2
1911 ; X86-BMI1BMI2-NEXT: # %bb.1:
1912 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %esi
1913 ; X86-BMI1BMI2-NEXT: .LBB16_2:
1914 ; X86-BMI1BMI2-NEXT: movl %esi, (%esp)
1915 ; X86-BMI1BMI2-NEXT: calll use32
1916 ; X86-BMI1BMI2-NEXT: bzhil %ebx, %esi, %eax
1917 ; X86-BMI1BMI2-NEXT: addl $4, %esp
1918 ; X86-BMI1BMI2-NEXT: popl %esi
1919 ; X86-BMI1BMI2-NEXT: popl %ebx
1920 ; X86-BMI1BMI2-NEXT: retl
1923 ; X64-NOBMI: # %bb.0:
1945 ; X64-BMI1NOTBM: # %bb.0:
1964 ; X64-BMI1BMI2: # %bb.0:
1989 ; X86-NOBMI-LABEL: bextr64_32_a2:
1990 ; X86-NOBMI: # %bb.0:
1991 ; X86-NOBMI-NEXT: pushl %edi
1992 ; X86-NOBMI-NEXT: pushl %esi
1993 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
1994 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
1995 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
1996 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
1997 ; X86-NOBMI-NEXT: movl %edi, %esi
1998 ; X86-NOBMI-NEXT: shrl %cl, %esi
1999 ; X86-NOBMI-NEXT: shrdl %cl, %edi, %eax
2000 ; X86-NOBMI-NEXT: testb $32, %cl
2001 ; X86-NOBMI-NEXT: jne .LBB17_2
2002 ; X86-NOBMI-NEXT: # %bb.1:
2003 ; X86-NOBMI-NEXT: movl %eax, %esi
2004 ; X86-NOBMI-NEXT: .LBB17_2:
2005 ; X86-NOBMI-NEXT: movl $1, %eax
2006 ; X86-NOBMI-NEXT: movl %edx, %ecx
2007 ; X86-NOBMI-NEXT: shll %cl, %eax
2008 ; X86-NOBMI-NEXT: decl %eax
2009 ; X86-NOBMI-NEXT: andl %esi, %eax
2010 ; X86-NOBMI-NEXT: popl %esi
2011 ; X86-NOBMI-NEXT: popl %edi
2012 ; X86-NOBMI-NEXT: retl
2014 ; X86-BMI1NOTBM-LABEL: bextr64_32_a2:
2015 ; X86-BMI1NOTBM: # %bb.0:
2016 ; X86-BMI1NOTBM-NEXT: pushl %edi
2017 ; X86-BMI1NOTBM-NEXT: pushl %esi
2018 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
2019 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
2020 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
2021 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
2022 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
2023 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
2024 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
2025 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
2026 ; X86-BMI1NOTBM-NEXT: jne .LBB17_2
2027 ; X86-BMI1NOTBM-NEXT: # %bb.1:
2028 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
2029 ; X86-BMI1NOTBM-NEXT: .LBB17_2:
2030 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
2031 ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax
2032 ; X86-BMI1NOTBM-NEXT: popl %esi
2033 ; X86-BMI1NOTBM-NEXT: popl %edi
2034 ; X86-BMI1NOTBM-NEXT: retl
2036 ; X86-BMI1BMI2-LABEL: bextr64_32_a2:
2037 ; X86-BMI1BMI2: # %bb.0:
2038 ; X86-BMI1BMI2-NEXT: pushl %esi
2039 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
2040 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
2041 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
2042 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
2043 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
2044 ; X86-BMI1BMI2-NEXT: testb $32, %cl
2045 ; X86-BMI1BMI2-NEXT: je .LBB17_2
2046 ; X86-BMI1BMI2-NEXT: # %bb.1:
2047 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
2048 ; X86-BMI1BMI2-NEXT: .LBB17_2:
2049 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %eax
2050 ; X86-BMI1BMI2-NEXT: popl %esi
2051 ; X86-BMI1BMI2-NEXT: retl
2054 ; X64-NOBMI: # %bb.0:
2066 ; X64-BMI1NOTBM: # %bb.0:
2075 ; X64-BMI1BMI2: # %bb.0:
2091 ; X86-NOBMI-LABEL: bextr64_32_a3:
2092 ; X86-NOBMI: # %bb.0:
2093 ; X86-NOBMI-NEXT: pushl %edi
2094 ; X86-NOBMI-NEXT: pushl %esi
2095 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
2096 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2097 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
2098 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
2099 ; X86-NOBMI-NEXT: movl %edi, %esi
2100 ; X86-NOBMI-NEXT: shrl %cl, %esi
2101 ; X86-NOBMI-NEXT: shrdl %cl, %edi, %eax
2102 ; X86-NOBMI-NEXT: testb $32, %cl
2103 ; X86-NOBMI-NEXT: jne .LBB18_2
2104 ; X86-NOBMI-NEXT: # %bb.1:
2105 ; X86-NOBMI-NEXT: movl %eax, %esi
2106 ; X86-NOBMI-NEXT: .LBB18_2:
2107 ; X86-NOBMI-NEXT: movl $1, %edi
2108 ; X86-NOBMI-NEXT: movl %edx, %ecx
2109 ; X86-NOBMI-NEXT: shll %cl, %edi
2110 ; X86-NOBMI-NEXT: xorl %eax, %eax
2111 ; X86-NOBMI-NEXT: testb $32, %dl
2112 ; X86-NOBMI-NEXT: jne .LBB18_4
2113 ; X86-NOBMI-NEXT: # %bb.3:
2114 ; X86-NOBMI-NEXT: movl %edi, %eax
2115 ; X86-NOBMI-NEXT: .LBB18_4:
2116 ; X86-NOBMI-NEXT: decl %eax
2117 ; X86-NOBMI-NEXT: andl %esi, %eax
2118 ; X86-NOBMI-NEXT: popl %esi
2119 ; X86-NOBMI-NEXT: popl %edi
2120 ; X86-NOBMI-NEXT: retl
2122 ; X86-BMI1NOTBM-LABEL: bextr64_32_a3:
2123 ; X86-BMI1NOTBM: # %bb.0:
2124 ; X86-BMI1NOTBM-NEXT: pushl %edi
2125 ; X86-BMI1NOTBM-NEXT: pushl %esi
2126 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %dl
2127 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
2128 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
2129 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
2130 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
2131 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
2132 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %eax
2133 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
2134 ; X86-BMI1NOTBM-NEXT: jne .LBB18_2
2135 ; X86-BMI1NOTBM-NEXT: # %bb.1:
2136 ; X86-BMI1NOTBM-NEXT: movl %eax, %esi
2137 ; X86-BMI1NOTBM-NEXT: .LBB18_2:
2138 ; X86-BMI1NOTBM-NEXT: movl $1, %edi
2139 ; X86-BMI1NOTBM-NEXT: movl %edx, %ecx
2140 ; X86-BMI1NOTBM-NEXT: shll %cl, %edi
2141 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
2142 ; X86-BMI1NOTBM-NEXT: testb $32, %dl
2143 ; X86-BMI1NOTBM-NEXT: jne .LBB18_4
2144 ; X86-BMI1NOTBM-NEXT: # %bb.3:
2145 ; X86-BMI1NOTBM-NEXT: movl %edi, %eax
2146 ; X86-BMI1NOTBM-NEXT: .LBB18_4:
2147 ; X86-BMI1NOTBM-NEXT: decl %eax
2148 ; X86-BMI1NOTBM-NEXT: andl %esi, %eax
2149 ; X86-BMI1NOTBM-NEXT: popl %esi
2150 ; X86-BMI1NOTBM-NEXT: popl %edi
2151 ; X86-BMI1NOTBM-NEXT: retl
2153 ; X86-BMI1BMI2-LABEL: bextr64_32_a3:
2154 ; X86-BMI1BMI2: # %bb.0:
2155 ; X86-BMI1BMI2-NEXT: pushl %ebx
2156 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
2157 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
2158 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
2159 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
2160 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %edx
2161 ; X86-BMI1BMI2-NEXT: testb $32, %cl
2162 ; X86-BMI1BMI2-NEXT: je .LBB18_2
2163 ; X86-BMI1BMI2-NEXT: # %bb.1:
2164 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edx
2165 ; X86-BMI1BMI2-NEXT: .LBB18_2:
2166 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
2167 ; X86-BMI1BMI2-NEXT: testb $32, %bl
2168 ; X86-BMI1BMI2-NEXT: jne .LBB18_4
2169 ; X86-BMI1BMI2-NEXT: # %bb.3:
2170 ; X86-BMI1BMI2-NEXT: movl $1, %eax
2171 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %eax, %eax
2172 ; X86-BMI1BMI2-NEXT: .LBB18_4:
2173 ; X86-BMI1BMI2-NEXT: decl %eax
2174 ; X86-BMI1BMI2-NEXT: andl %edx, %eax
2175 ; X86-BMI1BMI2-NEXT: popl %ebx
2176 ; X86-BMI1BMI2-NEXT: retl
2179 ; X64-NOBMI: # %bb.0:
2192 ; X64-BMI1NOTBM: # %bb.0:
2201 ; X64-BMI1BMI2: # %bb.0:
2218 ; X86-NOBMI-LABEL: bextr32_b0:
2219 ; X86-NOBMI: # %bb.0:
2220 ; X86-NOBMI-NEXT: pushl %esi
2221 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
2222 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2223 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
2224 ; X86-NOBMI-NEXT: shrl %cl, %esi
2225 ; X86-NOBMI-NEXT: movl $-1, %eax
2226 ; X86-NOBMI-NEXT: movl %edx, %ecx
2227 ; X86-NOBMI-NEXT: shll %cl, %eax
2228 ; X86-NOBMI-NEXT: notl %eax
2229 ; X86-NOBMI-NEXT: andl %esi, %eax
2230 ; X86-NOBMI-NEXT: popl %esi
2231 ; X86-NOBMI-NEXT: retl
2233 ; X86-BMI1NOTBM-LABEL: bextr32_b0:
2234 ; X86-BMI1NOTBM: # %bb.0:
2235 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
2236 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
2237 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
2238 ; X86-BMI1NOTBM-NEXT: orl %eax, %ecx
2239 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %eax
2240 ; X86-BMI1NOTBM-NEXT: retl
2242 ; X86-BMI1BMI2-LABEL: bextr32_b0:
2243 ; X86-BMI1BMI2: # %bb.0:
2244 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
2245 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
2246 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %ecx
2247 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
2248 ; X86-BMI1BMI2-NEXT: retl
2251 ; X64-NOBMI: # %bb.0:
2263 ; X64-BMI1NOTBM: # %bb.0:
2271 ; X64-BMI1BMI2: # %bb.0:
2283 ; X86-NOBMI-LABEL: bextr32_b1_indexzext:
2284 ; X86-NOBMI: # %bb.0:
2285 ; X86-NOBMI-NEXT: pushl %esi
2286 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
2287 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2288 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
2289 ; X86-NOBMI-NEXT: shrl %cl, %esi
2290 ; X86-NOBMI-NEXT: movl $-1, %eax
2291 ; X86-NOBMI-NEXT: movl %edx, %ecx
2292 ; X86-NOBMI-NEXT: shll %cl, %eax
2293 ; X86-NOBMI-NEXT: notl %eax
2294 ; X86-NOBMI-NEXT: andl %esi, %eax
2295 ; X86-NOBMI-NEXT: popl %esi
2296 ; X86-NOBMI-NEXT: retl
2298 ; X86-BMI1NOTBM-LABEL: bextr32_b1_indexzext:
2299 ; X86-BMI1NOTBM: # %bb.0:
2300 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
2301 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
2302 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
2303 ; X86-BMI1NOTBM-NEXT: orl %eax, %ecx
2304 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %eax
2305 ; X86-BMI1NOTBM-NEXT: retl
2307 ; X86-BMI1BMI2-LABEL: bextr32_b1_indexzext:
2308 ; X86-BMI1BMI2: # %bb.0:
2309 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
2310 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
2311 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %ecx
2312 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
2313 ; X86-BMI1BMI2-NEXT: retl
2316 ; X64-NOBMI: # %bb.0:
2328 ; X64-BMI1NOTBM: # %bb.0:
2336 ; X64-BMI1BMI2: # %bb.0:
2350 ; X86-NOBMI-LABEL: bextr32_b2_load:
2351 ; X86-NOBMI: # %bb.0:
2352 ; X86-NOBMI-NEXT: pushl %esi
2353 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
2354 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2355 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
2356 ; X86-NOBMI-NEXT: movl (%eax), %esi
2357 ; X86-NOBMI-NEXT: shrl %cl, %esi
2358 ; X86-NOBMI-NEXT: movl $-1, %eax
2359 ; X86-NOBMI-NEXT: movl %edx, %ecx
2360 ; X86-NOBMI-NEXT: shll %cl, %eax
2361 ; X86-NOBMI-NEXT: notl %eax
2362 ; X86-NOBMI-NEXT: andl %esi, %eax
2363 ; X86-NOBMI-NEXT: popl %esi
2364 ; X86-NOBMI-NEXT: retl
2366 ; X86-BMI1NOTBM-LABEL: bextr32_b2_load:
2367 ; X86-BMI1NOTBM: # %bb.0:
2368 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
2369 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
2370 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
2371 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %edx
2372 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
2373 ; X86-BMI1NOTBM-NEXT: bextrl %edx, (%eax), %eax
2374 ; X86-BMI1NOTBM-NEXT: retl
2376 ; X86-BMI1BMI2-LABEL: bextr32_b2_load:
2377 ; X86-BMI1BMI2: # %bb.0:
2378 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
2379 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
2380 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %dl
2381 ; X86-BMI1BMI2-NEXT: shrxl %edx, (%ecx), %ecx
2382 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
2383 ; X86-BMI1BMI2-NEXT: retl
2386 ; X64-NOBMI: # %bb.0:
2399 ; X64-BMI1NOTBM: # %bb.0:
2407 ; X64-BMI1BMI2: # %bb.0:
2420 ; X86-NOBMI-LABEL: bextr32_b3_load_indexzext:
2421 ; X86-NOBMI: # %bb.0:
2422 ; X86-NOBMI-NEXT: pushl %esi
2423 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
2424 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2425 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
2426 ; X86-NOBMI-NEXT: movl (%eax), %esi
2427 ; X86-NOBMI-NEXT: shrl %cl, %esi
2428 ; X86-NOBMI-NEXT: movl $-1, %eax
2429 ; X86-NOBMI-NEXT: movl %edx, %ecx
2430 ; X86-NOBMI-NEXT: shll %cl, %eax
2431 ; X86-NOBMI-NEXT: notl %eax
2432 ; X86-NOBMI-NEXT: andl %esi, %eax
2433 ; X86-NOBMI-NEXT: popl %esi
2434 ; X86-NOBMI-NEXT: retl
2436 ; X86-BMI1NOTBM-LABEL: bextr32_b3_load_indexzext:
2437 ; X86-BMI1NOTBM: # %bb.0:
2438 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
2439 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
2440 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
2441 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %edx
2442 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
2443 ; X86-BMI1NOTBM-NEXT: bextrl %edx, (%eax), %eax
2444 ; X86-BMI1NOTBM-NEXT: retl
2446 ; X86-BMI1BMI2-LABEL: bextr32_b3_load_indexzext:
2447 ; X86-BMI1BMI2: # %bb.0:
2448 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
2449 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
2450 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %dl
2451 ; X86-BMI1BMI2-NEXT: shrxl %edx, (%ecx), %ecx
2452 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
2453 ; X86-BMI1BMI2-NEXT: retl
2456 ; X64-NOBMI: # %bb.0:
2469 ; X64-BMI1NOTBM: # %bb.0:
2477 ; X64-BMI1BMI2: # %bb.0:
2492 ; X86-NOBMI-LABEL: bextr32_b4_commutative:
2493 ; X86-NOBMI: # %bb.0:
2494 ; X86-NOBMI-NEXT: pushl %esi
2495 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
2496 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2497 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
2498 ; X86-NOBMI-NEXT: shrl %cl, %esi
2499 ; X86-NOBMI-NEXT: movl $-1, %eax
2500 ; X86-NOBMI-NEXT: movl %edx, %ecx
2501 ; X86-NOBMI-NEXT: shll %cl, %eax
2502 ; X86-NOBMI-NEXT: notl %eax
2503 ; X86-NOBMI-NEXT: andl %esi, %eax
2504 ; X86-NOBMI-NEXT: popl %esi
2505 ; X86-NOBMI-NEXT: retl
2507 ; X86-BMI1NOTBM-LABEL: bextr32_b4_commutative:
2508 ; X86-BMI1NOTBM: # %bb.0:
2509 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
2510 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
2511 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
2512 ; X86-BMI1NOTBM-NEXT: orl %eax, %ecx
2513 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %eax
2514 ; X86-BMI1NOTBM-NEXT: retl
2516 ; X86-BMI1BMI2-LABEL: bextr32_b4_commutative:
2517 ; X86-BMI1BMI2: # %bb.0:
2518 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
2519 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
2520 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %ecx
2521 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
2522 ; X86-BMI1BMI2-NEXT: retl
2525 ; X64-NOBMI: # %bb.0:
2537 ; X64-BMI1NOTBM: # %bb.0:
2545 ; X64-BMI1BMI2: # %bb.0:
2557 ; X86-NOBMI-LABEL: bextr32_b5_skipextrauses:
2558 ; X86-NOBMI: # %bb.0:
2559 ; X86-NOBMI-NEXT: pushl %edi
2560 ; X86-NOBMI-NEXT: pushl %esi
2561 ; X86-NOBMI-NEXT: pushl %eax
2562 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
2563 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
2564 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
2565 ; X86-NOBMI-NEXT: movl %eax, %ecx
2566 ; X86-NOBMI-NEXT: shrl %cl, %edi
2567 ; X86-NOBMI-NEXT: movl $-1, %esi
2568 ; X86-NOBMI-NEXT: movl %edx, %ecx
2569 ; X86-NOBMI-NEXT: shll %cl, %esi
2570 ; X86-NOBMI-NEXT: notl %esi
2571 ; X86-NOBMI-NEXT: andl %edi, %esi
2572 ; X86-NOBMI-NEXT: movl %eax, (%esp)
2573 ; X86-NOBMI-NEXT: calll use32
2574 ; X86-NOBMI-NEXT: movl %esi, %eax
2575 ; X86-NOBMI-NEXT: addl $4, %esp
2576 ; X86-NOBMI-NEXT: popl %esi
2577 ; X86-NOBMI-NEXT: popl %edi
2578 ; X86-NOBMI-NEXT: retl
2580 ; X86-BMI1NOTBM-LABEL: bextr32_b5_skipextrauses:
2581 ; X86-BMI1NOTBM: # %bb.0:
2582 ; X86-BMI1NOTBM-NEXT: pushl %esi
2583 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
2584 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
2585 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
2586 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
2587 ; X86-BMI1NOTBM-NEXT: movzbl %al, %edx
2588 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
2589 ; X86-BMI1NOTBM-NEXT: bextrl %edx, {{[0-9]+}}(%esp), %esi
2590 ; X86-BMI1NOTBM-NEXT: movl %eax, (%esp)
2591 ; X86-BMI1NOTBM-NEXT: calll use32
2592 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
2593 ; X86-BMI1NOTBM-NEXT: addl $8, %esp
2594 ; X86-BMI1NOTBM-NEXT: popl %esi
2595 ; X86-BMI1NOTBM-NEXT: retl
2597 ; X86-BMI1BMI2-LABEL: bextr32_b5_skipextrauses:
2598 ; X86-BMI1BMI2: # %bb.0:
2599 ; X86-BMI1BMI2-NEXT: pushl %esi
2600 ; X86-BMI1BMI2-NEXT: subl $8, %esp
2601 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
2602 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
2603 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %edx
2604 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %esi
2605 ; X86-BMI1BMI2-NEXT: movl %ecx, (%esp)
2606 ; X86-BMI1BMI2-NEXT: calll use32
2607 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
2608 ; X86-BMI1BMI2-NEXT: addl $8, %esp
2609 ; X86-BMI1BMI2-NEXT: popl %esi
2610 ; X86-BMI1BMI2-NEXT: retl
2613 ; X64-NOBMI: # %bb.0:
2629 ; X64-BMI1NOTBM: # %bb.0:
2642 ; X64-BMI1BMI2: # %bb.0:
2662 ; X86-NOBMI-LABEL: bextr64_b0:
2663 ; X86-NOBMI: # %bb.0:
2664 ; X86-NOBMI-NEXT: pushl %ebx
2665 ; X86-NOBMI-NEXT: pushl %edi
2666 ; X86-NOBMI-NEXT: pushl %esi
2667 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
2668 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2669 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
2670 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
2671 ; X86-NOBMI-NEXT: movl %eax, %edi
2672 ; X86-NOBMI-NEXT: shrl %cl, %edi
2673 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
2674 ; X86-NOBMI-NEXT: xorl %eax, %eax
2675 ; X86-NOBMI-NEXT: testb $32, %cl
2676 ; X86-NOBMI-NEXT: je .LBB25_2
2677 ; X86-NOBMI-NEXT: # %bb.1:
2678 ; X86-NOBMI-NEXT: movl %edi, %esi
2679 ; X86-NOBMI-NEXT: xorl %edi, %edi
2680 ; X86-NOBMI-NEXT: .LBB25_2:
2681 ; X86-NOBMI-NEXT: movl $-1, %edx
2682 ; X86-NOBMI-NEXT: movl $-1, %ebx
2683 ; X86-NOBMI-NEXT: movb %ch, %cl
2684 ; X86-NOBMI-NEXT: shll %cl, %ebx
2685 ; X86-NOBMI-NEXT: testb $32, %ch
2686 ; X86-NOBMI-NEXT: jne .LBB25_3
2687 ; X86-NOBMI-NEXT: # %bb.4:
2688 ; X86-NOBMI-NEXT: movl %ebx, %eax
2689 ; X86-NOBMI-NEXT: jmp .LBB25_5
2690 ; X86-NOBMI-NEXT: .LBB25_3:
2691 ; X86-NOBMI-NEXT: movl %ebx, %edx
2692 ; X86-NOBMI-NEXT: .LBB25_5:
2693 ; X86-NOBMI-NEXT: notl %edx
2694 ; X86-NOBMI-NEXT: andl %edi, %edx
2695 ; X86-NOBMI-NEXT: notl %eax
2696 ; X86-NOBMI-NEXT: andl %esi, %eax
2697 ; X86-NOBMI-NEXT: popl %esi
2698 ; X86-NOBMI-NEXT: popl %edi
2699 ; X86-NOBMI-NEXT: popl %ebx
2700 ; X86-NOBMI-NEXT: retl
2702 ; X86-BMI1NOTBM-LABEL: bextr64_b0:
2703 ; X86-BMI1NOTBM: # %bb.0:
2704 ; X86-BMI1NOTBM-NEXT: pushl %ebx
2705 ; X86-BMI1NOTBM-NEXT: pushl %edi
2706 ; X86-BMI1NOTBM-NEXT: pushl %esi
2707 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
2708 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
2709 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
2710 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
2711 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
2712 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
2713 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
2714 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
2715 ; X86-BMI1NOTBM-NEXT: je .LBB25_2
2716 ; X86-BMI1NOTBM-NEXT: # %bb.1:
2717 ; X86-BMI1NOTBM-NEXT: movl %edx, %esi
2718 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
2719 ; X86-BMI1NOTBM-NEXT: .LBB25_2:
2720 ; X86-BMI1NOTBM-NEXT: movl $-1, %edi
2721 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
2722 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
2723 ; X86-BMI1NOTBM-NEXT: shll %cl, %ebx
2724 ; X86-BMI1NOTBM-NEXT: testb $32, %al
2725 ; X86-BMI1NOTBM-NEXT: je .LBB25_4
2726 ; X86-BMI1NOTBM-NEXT: # %bb.3:
2727 ; X86-BMI1NOTBM-NEXT: movl %ebx, %edi
2728 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
2729 ; X86-BMI1NOTBM-NEXT: .LBB25_4:
2730 ; X86-BMI1NOTBM-NEXT: andnl %edx, %edi, %edx
2731 ; X86-BMI1NOTBM-NEXT: andnl %esi, %ebx, %eax
2732 ; X86-BMI1NOTBM-NEXT: popl %esi
2733 ; X86-BMI1NOTBM-NEXT: popl %edi
2734 ; X86-BMI1NOTBM-NEXT: popl %ebx
2735 ; X86-BMI1NOTBM-NEXT: retl
2737 ; X86-BMI1BMI2-LABEL: bextr64_b0:
2738 ; X86-BMI1BMI2: # %bb.0:
2739 ; X86-BMI1BMI2-NEXT: pushl %ebx
2740 ; X86-BMI1BMI2-NEXT: pushl %esi
2741 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
2742 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
2743 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
2744 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
2745 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
2746 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edx
2747 ; X86-BMI1BMI2-NEXT: testb $32, %cl
2748 ; X86-BMI1BMI2-NEXT: je .LBB25_2
2749 ; X86-BMI1BMI2-NEXT: # %bb.1:
2750 ; X86-BMI1BMI2-NEXT: movl %edx, %eax
2751 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
2752 ; X86-BMI1BMI2-NEXT: .LBB25_2:
2753 ; X86-BMI1BMI2-NEXT: movl $-1, %esi
2754 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %esi, %ecx
2755 ; X86-BMI1BMI2-NEXT: testb $32, %bl
2756 ; X86-BMI1BMI2-NEXT: je .LBB25_4
2757 ; X86-BMI1BMI2-NEXT: # %bb.3:
2758 ; X86-BMI1BMI2-NEXT: movl %ecx, %esi
2759 ; X86-BMI1BMI2-NEXT: xorl %ecx, %ecx
2760 ; X86-BMI1BMI2-NEXT: .LBB25_4:
2761 ; X86-BMI1BMI2-NEXT: andnl %edx, %esi, %edx
2762 ; X86-BMI1BMI2-NEXT: andnl %eax, %ecx, %eax
2763 ; X86-BMI1BMI2-NEXT: popl %esi
2764 ; X86-BMI1BMI2-NEXT: popl %ebx
2765 ; X86-BMI1BMI2-NEXT: retl
2768 ; X64-NOBMI: # %bb.0:
2780 ; X64-BMI1NOTBM: # %bb.0:
2788 ; X64-BMI1BMI2: # %bb.0:
2800 ; X86-NOBMI-LABEL: bextr64_b1_indexzext:
2801 ; X86-NOBMI: # %bb.0:
2802 ; X86-NOBMI-NEXT: pushl %ebx
2803 ; X86-NOBMI-NEXT: pushl %edi
2804 ; X86-NOBMI-NEXT: pushl %esi
2805 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
2806 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2807 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
2808 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
2809 ; X86-NOBMI-NEXT: movl %eax, %edi
2810 ; X86-NOBMI-NEXT: shrl %cl, %edi
2811 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
2812 ; X86-NOBMI-NEXT: xorl %eax, %eax
2813 ; X86-NOBMI-NEXT: testb $32, %cl
2814 ; X86-NOBMI-NEXT: je .LBB26_2
2815 ; X86-NOBMI-NEXT: # %bb.1:
2816 ; X86-NOBMI-NEXT: movl %edi, %esi
2817 ; X86-NOBMI-NEXT: xorl %edi, %edi
2818 ; X86-NOBMI-NEXT: .LBB26_2:
2819 ; X86-NOBMI-NEXT: movl $-1, %edx
2820 ; X86-NOBMI-NEXT: movl $-1, %ebx
2821 ; X86-NOBMI-NEXT: movb %ch, %cl
2822 ; X86-NOBMI-NEXT: shll %cl, %ebx
2823 ; X86-NOBMI-NEXT: testb $32, %ch
2824 ; X86-NOBMI-NEXT: jne .LBB26_3
2825 ; X86-NOBMI-NEXT: # %bb.4:
2826 ; X86-NOBMI-NEXT: movl %ebx, %eax
2827 ; X86-NOBMI-NEXT: jmp .LBB26_5
2828 ; X86-NOBMI-NEXT: .LBB26_3:
2829 ; X86-NOBMI-NEXT: movl %ebx, %edx
2830 ; X86-NOBMI-NEXT: .LBB26_5:
2831 ; X86-NOBMI-NEXT: notl %edx
2832 ; X86-NOBMI-NEXT: andl %edi, %edx
2833 ; X86-NOBMI-NEXT: notl %eax
2834 ; X86-NOBMI-NEXT: andl %esi, %eax
2835 ; X86-NOBMI-NEXT: popl %esi
2836 ; X86-NOBMI-NEXT: popl %edi
2837 ; X86-NOBMI-NEXT: popl %ebx
2838 ; X86-NOBMI-NEXT: retl
2840 ; X86-BMI1NOTBM-LABEL: bextr64_b1_indexzext:
2841 ; X86-BMI1NOTBM: # %bb.0:
2842 ; X86-BMI1NOTBM-NEXT: pushl %ebx
2843 ; X86-BMI1NOTBM-NEXT: pushl %edi
2844 ; X86-BMI1NOTBM-NEXT: pushl %esi
2845 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
2846 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
2847 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
2848 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
2849 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
2850 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
2851 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
2852 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
2853 ; X86-BMI1NOTBM-NEXT: je .LBB26_2
2854 ; X86-BMI1NOTBM-NEXT: # %bb.1:
2855 ; X86-BMI1NOTBM-NEXT: movl %edx, %esi
2856 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
2857 ; X86-BMI1NOTBM-NEXT: .LBB26_2:
2858 ; X86-BMI1NOTBM-NEXT: movl $-1, %edi
2859 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
2860 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
2861 ; X86-BMI1NOTBM-NEXT: shll %cl, %ebx
2862 ; X86-BMI1NOTBM-NEXT: testb $32, %al
2863 ; X86-BMI1NOTBM-NEXT: je .LBB26_4
2864 ; X86-BMI1NOTBM-NEXT: # %bb.3:
2865 ; X86-BMI1NOTBM-NEXT: movl %ebx, %edi
2866 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
2867 ; X86-BMI1NOTBM-NEXT: .LBB26_4:
2868 ; X86-BMI1NOTBM-NEXT: andnl %edx, %edi, %edx
2869 ; X86-BMI1NOTBM-NEXT: andnl %esi, %ebx, %eax
2870 ; X86-BMI1NOTBM-NEXT: popl %esi
2871 ; X86-BMI1NOTBM-NEXT: popl %edi
2872 ; X86-BMI1NOTBM-NEXT: popl %ebx
2873 ; X86-BMI1NOTBM-NEXT: retl
2875 ; X86-BMI1BMI2-LABEL: bextr64_b1_indexzext:
2876 ; X86-BMI1BMI2: # %bb.0:
2877 ; X86-BMI1BMI2-NEXT: pushl %ebx
2878 ; X86-BMI1BMI2-NEXT: pushl %esi
2879 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
2880 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
2881 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
2882 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
2883 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
2884 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edx
2885 ; X86-BMI1BMI2-NEXT: testb $32, %cl
2886 ; X86-BMI1BMI2-NEXT: je .LBB26_2
2887 ; X86-BMI1BMI2-NEXT: # %bb.1:
2888 ; X86-BMI1BMI2-NEXT: movl %edx, %eax
2889 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
2890 ; X86-BMI1BMI2-NEXT: .LBB26_2:
2891 ; X86-BMI1BMI2-NEXT: movl $-1, %esi
2892 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %esi, %ecx
2893 ; X86-BMI1BMI2-NEXT: testb $32, %bl
2894 ; X86-BMI1BMI2-NEXT: je .LBB26_4
2895 ; X86-BMI1BMI2-NEXT: # %bb.3:
2896 ; X86-BMI1BMI2-NEXT: movl %ecx, %esi
2897 ; X86-BMI1BMI2-NEXT: xorl %ecx, %ecx
2898 ; X86-BMI1BMI2-NEXT: .LBB26_4:
2899 ; X86-BMI1BMI2-NEXT: andnl %edx, %esi, %edx
2900 ; X86-BMI1BMI2-NEXT: andnl %eax, %ecx, %eax
2901 ; X86-BMI1BMI2-NEXT: popl %esi
2902 ; X86-BMI1BMI2-NEXT: popl %ebx
2903 ; X86-BMI1BMI2-NEXT: retl
2906 ; X64-NOBMI: # %bb.0:
2918 ; X64-BMI1NOTBM: # %bb.0:
2926 ; X64-BMI1BMI2: # %bb.0:
2942 ; X86-NOBMI-LABEL: bextr64_b2_load:
2943 ; X86-NOBMI: # %bb.0:
2944 ; X86-NOBMI-NEXT: pushl %ebx
2945 ; X86-NOBMI-NEXT: pushl %edi
2946 ; X86-NOBMI-NEXT: pushl %esi
2947 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
2948 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
2949 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
2950 ; X86-NOBMI-NEXT: movl (%eax), %esi
2951 ; X86-NOBMI-NEXT: movl 4(%eax), %eax
2952 ; X86-NOBMI-NEXT: movl %eax, %edi
2953 ; X86-NOBMI-NEXT: shrl %cl, %edi
2954 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
2955 ; X86-NOBMI-NEXT: xorl %eax, %eax
2956 ; X86-NOBMI-NEXT: testb $32, %cl
2957 ; X86-NOBMI-NEXT: je .LBB27_2
2958 ; X86-NOBMI-NEXT: # %bb.1:
2959 ; X86-NOBMI-NEXT: movl %edi, %esi
2960 ; X86-NOBMI-NEXT: xorl %edi, %edi
2961 ; X86-NOBMI-NEXT: .LBB27_2:
2962 ; X86-NOBMI-NEXT: movl $-1, %edx
2963 ; X86-NOBMI-NEXT: movl $-1, %ebx
2964 ; X86-NOBMI-NEXT: movb %ch, %cl
2965 ; X86-NOBMI-NEXT: shll %cl, %ebx
2966 ; X86-NOBMI-NEXT: testb $32, %ch
2967 ; X86-NOBMI-NEXT: jne .LBB27_3
2968 ; X86-NOBMI-NEXT: # %bb.4:
2969 ; X86-NOBMI-NEXT: movl %ebx, %eax
2970 ; X86-NOBMI-NEXT: jmp .LBB27_5
2971 ; X86-NOBMI-NEXT: .LBB27_3:
2972 ; X86-NOBMI-NEXT: movl %ebx, %edx
2973 ; X86-NOBMI-NEXT: .LBB27_5:
2974 ; X86-NOBMI-NEXT: notl %edx
2975 ; X86-NOBMI-NEXT: andl %edi, %edx
2976 ; X86-NOBMI-NEXT: notl %eax
2977 ; X86-NOBMI-NEXT: andl %esi, %eax
2978 ; X86-NOBMI-NEXT: popl %esi
2979 ; X86-NOBMI-NEXT: popl %edi
2980 ; X86-NOBMI-NEXT: popl %ebx
2981 ; X86-NOBMI-NEXT: retl
2983 ; X86-BMI1NOTBM-LABEL: bextr64_b2_load:
2984 ; X86-BMI1NOTBM: # %bb.0:
2985 ; X86-BMI1NOTBM-NEXT: pushl %ebx
2986 ; X86-BMI1NOTBM-NEXT: pushl %edi
2987 ; X86-BMI1NOTBM-NEXT: pushl %esi
2988 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
2989 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
2990 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edx
2991 ; X86-BMI1NOTBM-NEXT: movl (%edx), %esi
2992 ; X86-BMI1NOTBM-NEXT: movl 4(%edx), %edi
2993 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
2994 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
2995 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
2996 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
2997 ; X86-BMI1NOTBM-NEXT: je .LBB27_2
2998 ; X86-BMI1NOTBM-NEXT: # %bb.1:
2999 ; X86-BMI1NOTBM-NEXT: movl %edx, %esi
3000 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
3001 ; X86-BMI1NOTBM-NEXT: .LBB27_2:
3002 ; X86-BMI1NOTBM-NEXT: movl $-1, %edi
3003 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
3004 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
3005 ; X86-BMI1NOTBM-NEXT: shll %cl, %ebx
3006 ; X86-BMI1NOTBM-NEXT: testb $32, %al
3007 ; X86-BMI1NOTBM-NEXT: je .LBB27_4
3008 ; X86-BMI1NOTBM-NEXT: # %bb.3:
3009 ; X86-BMI1NOTBM-NEXT: movl %ebx, %edi
3010 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
3011 ; X86-BMI1NOTBM-NEXT: .LBB27_4:
3012 ; X86-BMI1NOTBM-NEXT: andnl %edx, %edi, %edx
3013 ; X86-BMI1NOTBM-NEXT: andnl %esi, %ebx, %eax
3014 ; X86-BMI1NOTBM-NEXT: popl %esi
3015 ; X86-BMI1NOTBM-NEXT: popl %edi
3016 ; X86-BMI1NOTBM-NEXT: popl %ebx
3017 ; X86-BMI1NOTBM-NEXT: retl
3019 ; X86-BMI1BMI2-LABEL: bextr64_b2_load:
3020 ; X86-BMI1BMI2: # %bb.0:
3021 ; X86-BMI1BMI2-NEXT: pushl %ebx
3022 ; X86-BMI1BMI2-NEXT: pushl %esi
3023 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
3024 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
3025 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
3026 ; X86-BMI1BMI2-NEXT: movl (%edx), %eax
3027 ; X86-BMI1BMI2-NEXT: movl 4(%edx), %esi
3028 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
3029 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %eax
3030 ; X86-BMI1BMI2-NEXT: testb $32, %cl
3031 ; X86-BMI1BMI2-NEXT: je .LBB27_2
3032 ; X86-BMI1BMI2-NEXT: # %bb.1:
3033 ; X86-BMI1BMI2-NEXT: movl %edx, %eax
3034 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
3035 ; X86-BMI1BMI2-NEXT: .LBB27_2:
3036 ; X86-BMI1BMI2-NEXT: movl $-1, %esi
3037 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %esi, %ecx
3038 ; X86-BMI1BMI2-NEXT: testb $32, %bl
3039 ; X86-BMI1BMI2-NEXT: je .LBB27_4
3040 ; X86-BMI1BMI2-NEXT: # %bb.3:
3041 ; X86-BMI1BMI2-NEXT: movl %ecx, %esi
3042 ; X86-BMI1BMI2-NEXT: xorl %ecx, %ecx
3043 ; X86-BMI1BMI2-NEXT: .LBB27_4:
3044 ; X86-BMI1BMI2-NEXT: andnl %edx, %esi, %edx
3045 ; X86-BMI1BMI2-NEXT: andnl %eax, %ecx, %eax
3046 ; X86-BMI1BMI2-NEXT: popl %esi
3047 ; X86-BMI1BMI2-NEXT: popl %ebx
3048 ; X86-BMI1BMI2-NEXT: retl
3051 ; X64-NOBMI: # %bb.0:
3064 ; X64-BMI1NOTBM: # %bb.0:
3072 ; X64-BMI1BMI2: # %bb.0:
3085 ; X86-NOBMI-LABEL: bextr64_b3_load_indexzext:
3086 ; X86-NOBMI: # %bb.0:
3087 ; X86-NOBMI-NEXT: pushl %ebx
3088 ; X86-NOBMI-NEXT: pushl %edi
3089 ; X86-NOBMI-NEXT: pushl %esi
3090 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
3091 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
3092 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
3093 ; X86-NOBMI-NEXT: movl (%eax), %esi
3094 ; X86-NOBMI-NEXT: movl 4(%eax), %eax
3095 ; X86-NOBMI-NEXT: movl %eax, %edi
3096 ; X86-NOBMI-NEXT: shrl %cl, %edi
3097 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
3098 ; X86-NOBMI-NEXT: xorl %eax, %eax
3099 ; X86-NOBMI-NEXT: testb $32, %cl
3100 ; X86-NOBMI-NEXT: je .LBB28_2
3101 ; X86-NOBMI-NEXT: # %bb.1:
3102 ; X86-NOBMI-NEXT: movl %edi, %esi
3103 ; X86-NOBMI-NEXT: xorl %edi, %edi
3104 ; X86-NOBMI-NEXT: .LBB28_2:
3105 ; X86-NOBMI-NEXT: movl $-1, %edx
3106 ; X86-NOBMI-NEXT: movl $-1, %ebx
3107 ; X86-NOBMI-NEXT: movb %ch, %cl
3108 ; X86-NOBMI-NEXT: shll %cl, %ebx
3109 ; X86-NOBMI-NEXT: testb $32, %ch
3110 ; X86-NOBMI-NEXT: jne .LBB28_3
3111 ; X86-NOBMI-NEXT: # %bb.4:
3112 ; X86-NOBMI-NEXT: movl %ebx, %eax
3113 ; X86-NOBMI-NEXT: jmp .LBB28_5
3114 ; X86-NOBMI-NEXT: .LBB28_3:
3115 ; X86-NOBMI-NEXT: movl %ebx, %edx
3116 ; X86-NOBMI-NEXT: .LBB28_5:
3117 ; X86-NOBMI-NEXT: notl %edx
3118 ; X86-NOBMI-NEXT: andl %edi, %edx
3119 ; X86-NOBMI-NEXT: notl %eax
3120 ; X86-NOBMI-NEXT: andl %esi, %eax
3121 ; X86-NOBMI-NEXT: popl %esi
3122 ; X86-NOBMI-NEXT: popl %edi
3123 ; X86-NOBMI-NEXT: popl %ebx
3124 ; X86-NOBMI-NEXT: retl
3126 ; X86-BMI1NOTBM-LABEL: bextr64_b3_load_indexzext:
3127 ; X86-BMI1NOTBM: # %bb.0:
3128 ; X86-BMI1NOTBM-NEXT: pushl %ebx
3129 ; X86-BMI1NOTBM-NEXT: pushl %edi
3130 ; X86-BMI1NOTBM-NEXT: pushl %esi
3131 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
3132 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
3133 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edx
3134 ; X86-BMI1NOTBM-NEXT: movl (%edx), %esi
3135 ; X86-BMI1NOTBM-NEXT: movl 4(%edx), %edi
3136 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
3137 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
3138 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
3139 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
3140 ; X86-BMI1NOTBM-NEXT: je .LBB28_2
3141 ; X86-BMI1NOTBM-NEXT: # %bb.1:
3142 ; X86-BMI1NOTBM-NEXT: movl %edx, %esi
3143 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
3144 ; X86-BMI1NOTBM-NEXT: .LBB28_2:
3145 ; X86-BMI1NOTBM-NEXT: movl $-1, %edi
3146 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
3147 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
3148 ; X86-BMI1NOTBM-NEXT: shll %cl, %ebx
3149 ; X86-BMI1NOTBM-NEXT: testb $32, %al
3150 ; X86-BMI1NOTBM-NEXT: je .LBB28_4
3151 ; X86-BMI1NOTBM-NEXT: # %bb.3:
3152 ; X86-BMI1NOTBM-NEXT: movl %ebx, %edi
3153 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
3154 ; X86-BMI1NOTBM-NEXT: .LBB28_4:
3155 ; X86-BMI1NOTBM-NEXT: andnl %edx, %edi, %edx
3156 ; X86-BMI1NOTBM-NEXT: andnl %esi, %ebx, %eax
3157 ; X86-BMI1NOTBM-NEXT: popl %esi
3158 ; X86-BMI1NOTBM-NEXT: popl %edi
3159 ; X86-BMI1NOTBM-NEXT: popl %ebx
3160 ; X86-BMI1NOTBM-NEXT: retl
3162 ; X86-BMI1BMI2-LABEL: bextr64_b3_load_indexzext:
3163 ; X86-BMI1BMI2: # %bb.0:
3164 ; X86-BMI1BMI2-NEXT: pushl %ebx
3165 ; X86-BMI1BMI2-NEXT: pushl %esi
3166 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
3167 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
3168 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
3169 ; X86-BMI1BMI2-NEXT: movl (%edx), %eax
3170 ; X86-BMI1BMI2-NEXT: movl 4(%edx), %esi
3171 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
3172 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %eax
3173 ; X86-BMI1BMI2-NEXT: testb $32, %cl
3174 ; X86-BMI1BMI2-NEXT: je .LBB28_2
3175 ; X86-BMI1BMI2-NEXT: # %bb.1:
3176 ; X86-BMI1BMI2-NEXT: movl %edx, %eax
3177 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
3178 ; X86-BMI1BMI2-NEXT: .LBB28_2:
3179 ; X86-BMI1BMI2-NEXT: movl $-1, %esi
3180 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %esi, %ecx
3181 ; X86-BMI1BMI2-NEXT: testb $32, %bl
3182 ; X86-BMI1BMI2-NEXT: je .LBB28_4
3183 ; X86-BMI1BMI2-NEXT: # %bb.3:
3184 ; X86-BMI1BMI2-NEXT: movl %ecx, %esi
3185 ; X86-BMI1BMI2-NEXT: xorl %ecx, %ecx
3186 ; X86-BMI1BMI2-NEXT: .LBB28_4:
3187 ; X86-BMI1BMI2-NEXT: andnl %edx, %esi, %edx
3188 ; X86-BMI1BMI2-NEXT: andnl %eax, %ecx, %eax
3189 ; X86-BMI1BMI2-NEXT: popl %esi
3190 ; X86-BMI1BMI2-NEXT: popl %ebx
3191 ; X86-BMI1BMI2-NEXT: retl
3194 ; X64-NOBMI: # %bb.0:
3207 ; X64-BMI1NOTBM: # %bb.0:
3215 ; X64-BMI1BMI2: # %bb.0:
3232 ; X86-NOBMI-LABEL: bextr64_b4_commutative:
3233 ; X86-NOBMI: # %bb.0:
3234 ; X86-NOBMI-NEXT: pushl %ebx
3235 ; X86-NOBMI-NEXT: pushl %edi
3236 ; X86-NOBMI-NEXT: pushl %esi
3237 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
3238 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
3239 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
3240 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
3241 ; X86-NOBMI-NEXT: movl %esi, %edx
3242 ; X86-NOBMI-NEXT: shrl %cl, %edx
3243 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %eax
3244 ; X86-NOBMI-NEXT: xorl %esi, %esi
3245 ; X86-NOBMI-NEXT: testb $32, %cl
3246 ; X86-NOBMI-NEXT: je .LBB29_2
3247 ; X86-NOBMI-NEXT: # %bb.1:
3248 ; X86-NOBMI-NEXT: movl %edx, %eax
3249 ; X86-NOBMI-NEXT: xorl %edx, %edx
3250 ; X86-NOBMI-NEXT: .LBB29_2:
3251 ; X86-NOBMI-NEXT: movl $-1, %edi
3252 ; X86-NOBMI-NEXT: movl $-1, %ebx
3253 ; X86-NOBMI-NEXT: movb %ch, %cl
3254 ; X86-NOBMI-NEXT: shll %cl, %ebx
3255 ; X86-NOBMI-NEXT: testb $32, %ch
3256 ; X86-NOBMI-NEXT: jne .LBB29_3
3257 ; X86-NOBMI-NEXT: # %bb.4:
3258 ; X86-NOBMI-NEXT: movl %ebx, %esi
3259 ; X86-NOBMI-NEXT: jmp .LBB29_5
3260 ; X86-NOBMI-NEXT: .LBB29_3:
3261 ; X86-NOBMI-NEXT: movl %ebx, %edi
3262 ; X86-NOBMI-NEXT: .LBB29_5:
3263 ; X86-NOBMI-NEXT: notl %edi
3264 ; X86-NOBMI-NEXT: andl %edi, %edx
3265 ; X86-NOBMI-NEXT: notl %esi
3266 ; X86-NOBMI-NEXT: andl %esi, %eax
3267 ; X86-NOBMI-NEXT: popl %esi
3268 ; X86-NOBMI-NEXT: popl %edi
3269 ; X86-NOBMI-NEXT: popl %ebx
3270 ; X86-NOBMI-NEXT: retl
3272 ; X86-BMI1NOTBM-LABEL: bextr64_b4_commutative:
3273 ; X86-BMI1NOTBM: # %bb.0:
3274 ; X86-BMI1NOTBM-NEXT: pushl %ebx
3275 ; X86-BMI1NOTBM-NEXT: pushl %edi
3276 ; X86-BMI1NOTBM-NEXT: pushl %esi
3277 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
3278 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
3279 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
3280 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
3281 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
3282 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
3283 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
3284 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
3285 ; X86-BMI1NOTBM-NEXT: je .LBB29_2
3286 ; X86-BMI1NOTBM-NEXT: # %bb.1:
3287 ; X86-BMI1NOTBM-NEXT: movl %edx, %esi
3288 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
3289 ; X86-BMI1NOTBM-NEXT: .LBB29_2:
3290 ; X86-BMI1NOTBM-NEXT: movl $-1, %edi
3291 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
3292 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
3293 ; X86-BMI1NOTBM-NEXT: shll %cl, %ebx
3294 ; X86-BMI1NOTBM-NEXT: testb $32, %al
3295 ; X86-BMI1NOTBM-NEXT: je .LBB29_4
3296 ; X86-BMI1NOTBM-NEXT: # %bb.3:
3297 ; X86-BMI1NOTBM-NEXT: movl %ebx, %edi
3298 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
3299 ; X86-BMI1NOTBM-NEXT: .LBB29_4:
3300 ; X86-BMI1NOTBM-NEXT: andnl %edx, %edi, %edx
3301 ; X86-BMI1NOTBM-NEXT: andnl %esi, %ebx, %eax
3302 ; X86-BMI1NOTBM-NEXT: popl %esi
3303 ; X86-BMI1NOTBM-NEXT: popl %edi
3304 ; X86-BMI1NOTBM-NEXT: popl %ebx
3305 ; X86-BMI1NOTBM-NEXT: retl
3307 ; X86-BMI1BMI2-LABEL: bextr64_b4_commutative:
3308 ; X86-BMI1BMI2: # %bb.0:
3309 ; X86-BMI1BMI2-NEXT: pushl %ebx
3310 ; X86-BMI1BMI2-NEXT: pushl %esi
3311 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
3312 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
3313 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
3314 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
3315 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
3316 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edx
3317 ; X86-BMI1BMI2-NEXT: testb $32, %cl
3318 ; X86-BMI1BMI2-NEXT: je .LBB29_2
3319 ; X86-BMI1BMI2-NEXT: # %bb.1:
3320 ; X86-BMI1BMI2-NEXT: movl %edx, %eax
3321 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
3322 ; X86-BMI1BMI2-NEXT: .LBB29_2:
3323 ; X86-BMI1BMI2-NEXT: movl $-1, %esi
3324 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %esi, %ecx
3325 ; X86-BMI1BMI2-NEXT: testb $32, %bl
3326 ; X86-BMI1BMI2-NEXT: je .LBB29_4
3327 ; X86-BMI1BMI2-NEXT: # %bb.3:
3328 ; X86-BMI1BMI2-NEXT: movl %ecx, %esi
3329 ; X86-BMI1BMI2-NEXT: xorl %ecx, %ecx
3330 ; X86-BMI1BMI2-NEXT: .LBB29_4:
3331 ; X86-BMI1BMI2-NEXT: andnl %edx, %esi, %edx
3332 ; X86-BMI1BMI2-NEXT: andnl %eax, %ecx, %eax
3333 ; X86-BMI1BMI2-NEXT: popl %esi
3334 ; X86-BMI1BMI2-NEXT: popl %ebx
3335 ; X86-BMI1BMI2-NEXT: retl
3338 ; X64-NOBMI: # %bb.0:
3350 ; X64-BMI1NOTBM: # %bb.0:
3358 ; X64-BMI1BMI2: # %bb.0:
3370 ; X86-NOBMI-LABEL: bextr64_b5_skipextrauses:
3371 ; X86-NOBMI: # %bb.0:
3372 ; X86-NOBMI-NEXT: pushl %ebp
3373 ; X86-NOBMI-NEXT: pushl %ebx
3374 ; X86-NOBMI-NEXT: pushl %edi
3375 ; X86-NOBMI-NEXT: pushl %esi
3376 ; X86-NOBMI-NEXT: subl $12, %esp
3377 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %ch
3378 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
3379 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
3380 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
3381 ; X86-NOBMI-NEXT: movl %esi, %ebp
3382 ; X86-NOBMI-NEXT: movb %al, %cl
3383 ; X86-NOBMI-NEXT: shrl %cl, %ebp
3384 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %edx
3385 ; X86-NOBMI-NEXT: xorl %ebx, %ebx
3386 ; X86-NOBMI-NEXT: testb $32, %al
3387 ; X86-NOBMI-NEXT: je .LBB30_2
3388 ; X86-NOBMI-NEXT: # %bb.1:
3389 ; X86-NOBMI-NEXT: movl %ebp, %edx
3390 ; X86-NOBMI-NEXT: xorl %ebp, %ebp
3391 ; X86-NOBMI-NEXT: .LBB30_2:
3392 ; X86-NOBMI-NEXT: movl $-1, %edi
3393 ; X86-NOBMI-NEXT: movl $-1, %esi
3394 ; X86-NOBMI-NEXT: movb %ch, %cl
3395 ; X86-NOBMI-NEXT: shll %cl, %esi
3396 ; X86-NOBMI-NEXT: testb $32, %ch
3397 ; X86-NOBMI-NEXT: jne .LBB30_3
3398 ; X86-NOBMI-NEXT: # %bb.4:
3399 ; X86-NOBMI-NEXT: movl %esi, %ebx
3400 ; X86-NOBMI-NEXT: jmp .LBB30_5
3401 ; X86-NOBMI-NEXT: .LBB30_3:
3402 ; X86-NOBMI-NEXT: movl %esi, %edi
3403 ; X86-NOBMI-NEXT: .LBB30_5:
3404 ; X86-NOBMI-NEXT: notl %edi
3405 ; X86-NOBMI-NEXT: andl %ebp, %edi
3406 ; X86-NOBMI-NEXT: notl %ebx
3407 ; X86-NOBMI-NEXT: andl %edx, %ebx
3408 ; X86-NOBMI-NEXT: subl $8, %esp
3409 ; X86-NOBMI-NEXT: pushl {{[0-9]+}}(%esp)
3410 ; X86-NOBMI-NEXT: pushl %eax
3411 ; X86-NOBMI-NEXT: calll use64
3412 ; X86-NOBMI-NEXT: addl $16, %esp
3413 ; X86-NOBMI-NEXT: movl %ebx, %eax
3414 ; X86-NOBMI-NEXT: movl %edi, %edx
3415 ; X86-NOBMI-NEXT: addl $12, %esp
3416 ; X86-NOBMI-NEXT: popl %esi
3417 ; X86-NOBMI-NEXT: popl %edi
3418 ; X86-NOBMI-NEXT: popl %ebx
3419 ; X86-NOBMI-NEXT: popl %ebp
3420 ; X86-NOBMI-NEXT: retl
3422 ; X86-BMI1NOTBM-LABEL: bextr64_b5_skipextrauses:
3423 ; X86-BMI1NOTBM: # %bb.0:
3424 ; X86-BMI1NOTBM-NEXT: pushl %ebp
3425 ; X86-BMI1NOTBM-NEXT: pushl %ebx
3426 ; X86-BMI1NOTBM-NEXT: pushl %edi
3427 ; X86-BMI1NOTBM-NEXT: pushl %esi
3428 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
3429 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %dl
3430 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
3431 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %ebx
3432 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
3433 ; X86-BMI1NOTBM-NEXT: movl %ebx, %esi
3434 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
3435 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
3436 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %edi
3437 ; X86-BMI1NOTBM-NEXT: testb $32, %al
3438 ; X86-BMI1NOTBM-NEXT: je .LBB30_2
3439 ; X86-BMI1NOTBM-NEXT: # %bb.1:
3440 ; X86-BMI1NOTBM-NEXT: movl %esi, %edi
3441 ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi
3442 ; X86-BMI1NOTBM-NEXT: .LBB30_2:
3443 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
3444 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebp
3445 ; X86-BMI1NOTBM-NEXT: movl %edx, %ecx
3446 ; X86-BMI1NOTBM-NEXT: shll %cl, %ebp
3447 ; X86-BMI1NOTBM-NEXT: testb $32, %dl
3448 ; X86-BMI1NOTBM-NEXT: je .LBB30_4
3449 ; X86-BMI1NOTBM-NEXT: # %bb.3:
3450 ; X86-BMI1NOTBM-NEXT: movl %ebp, %ebx
3451 ; X86-BMI1NOTBM-NEXT: xorl %ebp, %ebp
3452 ; X86-BMI1NOTBM-NEXT: .LBB30_4:
3453 ; X86-BMI1NOTBM-NEXT: andnl %esi, %ebx, %esi
3454 ; X86-BMI1NOTBM-NEXT: andnl %edi, %ebp, %edi
3455 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
3456 ; X86-BMI1NOTBM-NEXT: pushl {{[0-9]+}}(%esp)
3457 ; X86-BMI1NOTBM-NEXT: pushl %eax
3458 ; X86-BMI1NOTBM-NEXT: calll use64
3459 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
3460 ; X86-BMI1NOTBM-NEXT: movl %edi, %eax
3461 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
3462 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
3463 ; X86-BMI1NOTBM-NEXT: popl %esi
3464 ; X86-BMI1NOTBM-NEXT: popl %edi
3465 ; X86-BMI1NOTBM-NEXT: popl %ebx
3466 ; X86-BMI1NOTBM-NEXT: popl %ebp
3467 ; X86-BMI1NOTBM-NEXT: retl
3469 ; X86-BMI1BMI2-LABEL: bextr64_b5_skipextrauses:
3470 ; X86-BMI1BMI2: # %bb.0:
3471 ; X86-BMI1BMI2-NEXT: pushl %ebp
3472 ; X86-BMI1BMI2-NEXT: pushl %ebx
3473 ; X86-BMI1BMI2-NEXT: pushl %edi
3474 ; X86-BMI1BMI2-NEXT: pushl %esi
3475 ; X86-BMI1BMI2-NEXT: subl $12, %esp
3476 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
3477 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
3478 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
3479 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
3480 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
3481 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edx
3482 ; X86-BMI1BMI2-NEXT: testb $32, %cl
3483 ; X86-BMI1BMI2-NEXT: je .LBB30_2
3484 ; X86-BMI1BMI2-NEXT: # %bb.1:
3485 ; X86-BMI1BMI2-NEXT: movl %edx, %eax
3486 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
3487 ; X86-BMI1BMI2-NEXT: .LBB30_2:
3488 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ebp
3489 ; X86-BMI1BMI2-NEXT: movl $-1, %esi
3490 ; X86-BMI1BMI2-NEXT: shlxl %ebx, %esi, %edi
3491 ; X86-BMI1BMI2-NEXT: testb $32, %bl
3492 ; X86-BMI1BMI2-NEXT: je .LBB30_4
3493 ; X86-BMI1BMI2-NEXT: # %bb.3:
3494 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
3495 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
3496 ; X86-BMI1BMI2-NEXT: .LBB30_4:
3497 ; X86-BMI1BMI2-NEXT: andnl %edx, %esi, %esi
3498 ; X86-BMI1BMI2-NEXT: andnl %eax, %edi, %edi
3499 ; X86-BMI1BMI2-NEXT: subl $8, %esp
3500 ; X86-BMI1BMI2-NEXT: pushl %ebp
3501 ; X86-BMI1BMI2-NEXT: pushl %ecx
3502 ; X86-BMI1BMI2-NEXT: calll use64
3503 ; X86-BMI1BMI2-NEXT: addl $16, %esp
3504 ; X86-BMI1BMI2-NEXT: movl %edi, %eax
3505 ; X86-BMI1BMI2-NEXT: movl %esi, %edx
3506 ; X86-BMI1BMI2-NEXT: addl $12, %esp
3507 ; X86-BMI1BMI2-NEXT: popl %esi
3508 ; X86-BMI1BMI2-NEXT: popl %edi
3509 ; X86-BMI1BMI2-NEXT: popl %ebx
3510 ; X86-BMI1BMI2-NEXT: popl %ebp
3511 ; X86-BMI1BMI2-NEXT: retl
3514 ; X64-NOBMI: # %bb.0:
3530 ; X64-BMI1NOTBM: # %bb.0:
3543 ; X64-BMI1BMI2: # %bb.0:
3564 ; X86-NOBMI-LABEL: bextr64_32_b0:
3565 ; X86-NOBMI: # %bb.0:
3566 ; X86-NOBMI-NEXT: pushl %edi
3567 ; X86-NOBMI-NEXT: pushl %esi
3568 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
3569 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
3570 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
3571 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
3572 ; X86-NOBMI-NEXT: movl %edi, %eax
3573 ; X86-NOBMI-NEXT: shrl %cl, %eax
3574 ; X86-NOBMI-NEXT: shrdl %cl, %edi, %esi
3575 ; X86-NOBMI-NEXT: testb $32, %cl
3576 ; X86-NOBMI-NEXT: jne .LBB31_2
3577 ; X86-NOBMI-NEXT: # %bb.1:
3578 ; X86-NOBMI-NEXT: movl %esi, %eax
3579 ; X86-NOBMI-NEXT: .LBB31_2:
3580 ; X86-NOBMI-NEXT: movl $-1, %esi
3581 ; X86-NOBMI-NEXT: movl %edx, %ecx
3582 ; X86-NOBMI-NEXT: shll %cl, %esi
3583 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
3584 ; X86-NOBMI-NEXT: testb $32, %dl
3585 ; X86-NOBMI-NEXT: jne .LBB31_4
3586 ; X86-NOBMI-NEXT: # %bb.3:
3587 ; X86-NOBMI-NEXT: movl %esi, %ecx
3588 ; X86-NOBMI-NEXT: .LBB31_4:
3589 ; X86-NOBMI-NEXT: notl %ecx
3590 ; X86-NOBMI-NEXT: andl %ecx, %eax
3591 ; X86-NOBMI-NEXT: popl %esi
3592 ; X86-NOBMI-NEXT: popl %edi
3593 ; X86-NOBMI-NEXT: retl
3595 ; X86-BMI1NOTBM-LABEL: bextr64_32_b0:
3596 ; X86-BMI1NOTBM: # %bb.0:
3597 ; X86-BMI1NOTBM-NEXT: pushl %edi
3598 ; X86-BMI1NOTBM-NEXT: pushl %esi
3599 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
3600 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
3601 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
3602 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
3603 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
3604 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
3605 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
3606 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
3607 ; X86-BMI1NOTBM-NEXT: jne .LBB31_2
3608 ; X86-BMI1NOTBM-NEXT: # %bb.1:
3609 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
3610 ; X86-BMI1NOTBM-NEXT: .LBB31_2:
3611 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
3612 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
3613 ; X86-BMI1NOTBM-NEXT: shll %cl, %esi
3614 ; X86-BMI1NOTBM-NEXT: xorl %ecx, %ecx
3615 ; X86-BMI1NOTBM-NEXT: testb $32, %al
3616 ; X86-BMI1NOTBM-NEXT: jne .LBB31_4
3617 ; X86-BMI1NOTBM-NEXT: # %bb.3:
3618 ; X86-BMI1NOTBM-NEXT: movl %esi, %ecx
3619 ; X86-BMI1NOTBM-NEXT: .LBB31_4:
3620 ; X86-BMI1NOTBM-NEXT: andnl %edx, %ecx, %eax
3621 ; X86-BMI1NOTBM-NEXT: popl %esi
3622 ; X86-BMI1NOTBM-NEXT: popl %edi
3623 ; X86-BMI1NOTBM-NEXT: retl
3625 ; X86-BMI1BMI2-LABEL: bextr64_32_b0:
3626 ; X86-BMI1BMI2: # %bb.0:
3627 ; X86-BMI1BMI2-NEXT: pushl %esi
3628 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
3629 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
3630 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
3631 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
3632 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
3633 ; X86-BMI1BMI2-NEXT: testb $32, %cl
3634 ; X86-BMI1BMI2-NEXT: je .LBB31_2
3635 ; X86-BMI1BMI2-NEXT: # %bb.1:
3636 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
3637 ; X86-BMI1BMI2-NEXT: .LBB31_2:
3638 ; X86-BMI1BMI2-NEXT: xorl %ecx, %ecx
3639 ; X86-BMI1BMI2-NEXT: testb $32, %al
3640 ; X86-BMI1BMI2-NEXT: jne .LBB31_4
3641 ; X86-BMI1BMI2-NEXT: # %bb.3:
3642 ; X86-BMI1BMI2-NEXT: movl $-1, %ecx
3643 ; X86-BMI1BMI2-NEXT: shlxl %eax, %ecx, %ecx
3644 ; X86-BMI1BMI2-NEXT: .LBB31_4:
3645 ; X86-BMI1BMI2-NEXT: andnl %edx, %ecx, %eax
3646 ; X86-BMI1BMI2-NEXT: popl %esi
3647 ; X86-BMI1BMI2-NEXT: retl
3650 ; X64-NOBMI: # %bb.0:
3663 ; X64-BMI1NOTBM: # %bb.0:
3672 ; X64-BMI1BMI2: # %bb.0:
3687 ; X86-NOBMI-LABEL: bextr64_32_b1:
3688 ; X86-NOBMI: # %bb.0:
3689 ; X86-NOBMI-NEXT: pushl %edi
3690 ; X86-NOBMI-NEXT: pushl %esi
3691 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
3692 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
3693 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
3694 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
3695 ; X86-NOBMI-NEXT: movl %edi, %esi
3696 ; X86-NOBMI-NEXT: shrl %cl, %esi
3697 ; X86-NOBMI-NEXT: shrdl %cl, %edi, %eax
3698 ; X86-NOBMI-NEXT: testb $32, %cl
3699 ; X86-NOBMI-NEXT: jne .LBB32_2
3700 ; X86-NOBMI-NEXT: # %bb.1:
3701 ; X86-NOBMI-NEXT: movl %eax, %esi
3702 ; X86-NOBMI-NEXT: .LBB32_2:
3703 ; X86-NOBMI-NEXT: movl $-1, %eax
3704 ; X86-NOBMI-NEXT: movl %edx, %ecx
3705 ; X86-NOBMI-NEXT: shll %cl, %eax
3706 ; X86-NOBMI-NEXT: notl %eax
3707 ; X86-NOBMI-NEXT: andl %esi, %eax
3708 ; X86-NOBMI-NEXT: popl %esi
3709 ; X86-NOBMI-NEXT: popl %edi
3710 ; X86-NOBMI-NEXT: retl
3712 ; X86-BMI1NOTBM-LABEL: bextr64_32_b1:
3713 ; X86-BMI1NOTBM: # %bb.0:
3714 ; X86-BMI1NOTBM-NEXT: pushl %edi
3715 ; X86-BMI1NOTBM-NEXT: pushl %esi
3716 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
3717 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
3718 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
3719 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
3720 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
3721 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
3722 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
3723 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
3724 ; X86-BMI1NOTBM-NEXT: jne .LBB32_2
3725 ; X86-BMI1NOTBM-NEXT: # %bb.1:
3726 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
3727 ; X86-BMI1NOTBM-NEXT: .LBB32_2:
3728 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
3729 ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax
3730 ; X86-BMI1NOTBM-NEXT: popl %esi
3731 ; X86-BMI1NOTBM-NEXT: popl %edi
3732 ; X86-BMI1NOTBM-NEXT: retl
3734 ; X86-BMI1BMI2-LABEL: bextr64_32_b1:
3735 ; X86-BMI1BMI2: # %bb.0:
3736 ; X86-BMI1BMI2-NEXT: pushl %esi
3737 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
3738 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
3739 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
3740 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
3741 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
3742 ; X86-BMI1BMI2-NEXT: testb $32, %cl
3743 ; X86-BMI1BMI2-NEXT: je .LBB32_2
3744 ; X86-BMI1BMI2-NEXT: # %bb.1:
3745 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
3746 ; X86-BMI1BMI2-NEXT: .LBB32_2:
3747 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %eax
3748 ; X86-BMI1BMI2-NEXT: popl %esi
3749 ; X86-BMI1BMI2-NEXT: retl
3752 ; X64-NOBMI: # %bb.0:
3764 ; X64-BMI1NOTBM: # %bb.0:
3773 ; X64-BMI1BMI2: # %bb.0:
3789 ; X86-NOBMI-LABEL: bextr64_32_b2:
3790 ; X86-NOBMI: # %bb.0:
3791 ; X86-NOBMI-NEXT: pushl %edi
3792 ; X86-NOBMI-NEXT: pushl %esi
3793 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
3794 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
3795 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
3796 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
3797 ; X86-NOBMI-NEXT: movl %edi, %esi
3798 ; X86-NOBMI-NEXT: shrl %cl, %esi
3799 ; X86-NOBMI-NEXT: shrdl %cl, %edi, %eax
3800 ; X86-NOBMI-NEXT: testb $32, %cl
3801 ; X86-NOBMI-NEXT: jne .LBB33_2
3802 ; X86-NOBMI-NEXT: # %bb.1:
3803 ; X86-NOBMI-NEXT: movl %eax, %esi
3804 ; X86-NOBMI-NEXT: .LBB33_2:
3805 ; X86-NOBMI-NEXT: movl $-1, %eax
3806 ; X86-NOBMI-NEXT: movl %edx, %ecx
3807 ; X86-NOBMI-NEXT: shll %cl, %eax
3808 ; X86-NOBMI-NEXT: notl %eax
3809 ; X86-NOBMI-NEXT: andl %esi, %eax
3810 ; X86-NOBMI-NEXT: popl %esi
3811 ; X86-NOBMI-NEXT: popl %edi
3812 ; X86-NOBMI-NEXT: retl
3814 ; X86-BMI1NOTBM-LABEL: bextr64_32_b2:
3815 ; X86-BMI1NOTBM: # %bb.0:
3816 ; X86-BMI1NOTBM-NEXT: pushl %edi
3817 ; X86-BMI1NOTBM-NEXT: pushl %esi
3818 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
3819 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
3820 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
3821 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
3822 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
3823 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
3824 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
3825 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
3826 ; X86-BMI1NOTBM-NEXT: jne .LBB33_2
3827 ; X86-BMI1NOTBM-NEXT: # %bb.1:
3828 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
3829 ; X86-BMI1NOTBM-NEXT: .LBB33_2:
3830 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
3831 ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax
3832 ; X86-BMI1NOTBM-NEXT: popl %esi
3833 ; X86-BMI1NOTBM-NEXT: popl %edi
3834 ; X86-BMI1NOTBM-NEXT: retl
3836 ; X86-BMI1BMI2-LABEL: bextr64_32_b2:
3837 ; X86-BMI1BMI2: # %bb.0:
3838 ; X86-BMI1BMI2-NEXT: pushl %esi
3839 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
3840 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
3841 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
3842 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
3843 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
3844 ; X86-BMI1BMI2-NEXT: testb $32, %cl
3845 ; X86-BMI1BMI2-NEXT: je .LBB33_2
3846 ; X86-BMI1BMI2-NEXT: # %bb.1:
3847 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
3848 ; X86-BMI1BMI2-NEXT: .LBB33_2:
3849 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %eax
3850 ; X86-BMI1BMI2-NEXT: popl %esi
3851 ; X86-BMI1BMI2-NEXT: retl
3854 ; X64-NOBMI: # %bb.0:
3866 ; X64-BMI1NOTBM: # %bb.0:
3875 ; X64-BMI1BMI2: # %bb.0:
3892 ; X86-NOBMI-LABEL: bextr64_32_b3:
3893 ; X86-NOBMI: # %bb.0:
3894 ; X86-NOBMI-NEXT: pushl %edi
3895 ; X86-NOBMI-NEXT: pushl %esi
3896 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %dl
3897 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
3898 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
3899 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
3900 ; X86-NOBMI-NEXT: movl %edi, %eax
3901 ; X86-NOBMI-NEXT: shrl %cl, %eax
3902 ; X86-NOBMI-NEXT: shrdl %cl, %edi, %esi
3903 ; X86-NOBMI-NEXT: testb $32, %cl
3904 ; X86-NOBMI-NEXT: jne .LBB34_2
3905 ; X86-NOBMI-NEXT: # %bb.1:
3906 ; X86-NOBMI-NEXT: movl %esi, %eax
3907 ; X86-NOBMI-NEXT: .LBB34_2:
3908 ; X86-NOBMI-NEXT: movl $-1, %esi
3909 ; X86-NOBMI-NEXT: movl %edx, %ecx
3910 ; X86-NOBMI-NEXT: shll %cl, %esi
3911 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
3912 ; X86-NOBMI-NEXT: testb $32, %dl
3913 ; X86-NOBMI-NEXT: jne .LBB34_4
3914 ; X86-NOBMI-NEXT: # %bb.3:
3915 ; X86-NOBMI-NEXT: movl %esi, %ecx
3916 ; X86-NOBMI-NEXT: .LBB34_4:
3917 ; X86-NOBMI-NEXT: notl %ecx
3918 ; X86-NOBMI-NEXT: andl %ecx, %eax
3919 ; X86-NOBMI-NEXT: popl %esi
3920 ; X86-NOBMI-NEXT: popl %edi
3921 ; X86-NOBMI-NEXT: retl
3923 ; X86-BMI1NOTBM-LABEL: bextr64_32_b3:
3924 ; X86-BMI1NOTBM: # %bb.0:
3925 ; X86-BMI1NOTBM-NEXT: pushl %edi
3926 ; X86-BMI1NOTBM-NEXT: pushl %esi
3927 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
3928 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
3929 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
3930 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
3931 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
3932 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
3933 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
3934 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
3935 ; X86-BMI1NOTBM-NEXT: jne .LBB34_2
3936 ; X86-BMI1NOTBM-NEXT: # %bb.1:
3937 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
3938 ; X86-BMI1NOTBM-NEXT: .LBB34_2:
3939 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
3940 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
3941 ; X86-BMI1NOTBM-NEXT: shll %cl, %esi
3942 ; X86-BMI1NOTBM-NEXT: xorl %ecx, %ecx
3943 ; X86-BMI1NOTBM-NEXT: testb $32, %al
3944 ; X86-BMI1NOTBM-NEXT: jne .LBB34_4
3945 ; X86-BMI1NOTBM-NEXT: # %bb.3:
3946 ; X86-BMI1NOTBM-NEXT: movl %esi, %ecx
3947 ; X86-BMI1NOTBM-NEXT: .LBB34_4:
3948 ; X86-BMI1NOTBM-NEXT: andnl %edx, %ecx, %eax
3949 ; X86-BMI1NOTBM-NEXT: popl %esi
3950 ; X86-BMI1NOTBM-NEXT: popl %edi
3951 ; X86-BMI1NOTBM-NEXT: retl
3953 ; X86-BMI1BMI2-LABEL: bextr64_32_b3:
3954 ; X86-BMI1BMI2: # %bb.0:
3955 ; X86-BMI1BMI2-NEXT: pushl %esi
3956 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
3957 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
3958 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
3959 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
3960 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
3961 ; X86-BMI1BMI2-NEXT: testb $32, %cl
3962 ; X86-BMI1BMI2-NEXT: je .LBB34_2
3963 ; X86-BMI1BMI2-NEXT: # %bb.1:
3964 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
3965 ; X86-BMI1BMI2-NEXT: .LBB34_2:
3966 ; X86-BMI1BMI2-NEXT: xorl %ecx, %ecx
3967 ; X86-BMI1BMI2-NEXT: testb $32, %al
3968 ; X86-BMI1BMI2-NEXT: jne .LBB34_4
3969 ; X86-BMI1BMI2-NEXT: # %bb.3:
3970 ; X86-BMI1BMI2-NEXT: movl $-1, %ecx
3971 ; X86-BMI1BMI2-NEXT: shlxl %eax, %ecx, %ecx
3972 ; X86-BMI1BMI2-NEXT: .LBB34_4:
3973 ; X86-BMI1BMI2-NEXT: andnl %edx, %ecx, %eax
3974 ; X86-BMI1BMI2-NEXT: popl %esi
3975 ; X86-BMI1BMI2-NEXT: retl
3978 ; X64-NOBMI: # %bb.0:
3982 ; X64-NOBMI-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF
3983 ; X64-NOBMI-NEXT: movl $4294967295, %esi # imm = 0xFFFFFFFF
3992 ; X64-BMI1NOTBM: # %bb.0:
4001 ; X64-BMI1BMI2: # %bb.0:
4019 ; X86-NOBMI-LABEL: bextr32_c0:
4020 ; X86-NOBMI: # %bb.0:
4021 ; X86-NOBMI-NEXT: pushl %edi
4022 ; X86-NOBMI-NEXT: pushl %esi
4023 ; X86-NOBMI-NEXT: pushl %eax
4024 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
4025 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
4026 ; X86-NOBMI-NEXT: shrl %cl, %edi
4027 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
4028 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
4029 ; X86-NOBMI-NEXT: movl $-1, %esi
4030 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
4031 ; X86-NOBMI-NEXT: shrl %cl, %esi
4032 ; X86-NOBMI-NEXT: movl %esi, (%esp)
4033 ; X86-NOBMI-NEXT: calll use32
4034 ; X86-NOBMI-NEXT: andl %edi, %esi
4035 ; X86-NOBMI-NEXT: movl %esi, %eax
4036 ; X86-NOBMI-NEXT: addl $4, %esp
4037 ; X86-NOBMI-NEXT: popl %esi
4038 ; X86-NOBMI-NEXT: popl %edi
4039 ; X86-NOBMI-NEXT: retl
4041 ; X86-BMI1NOTBM-LABEL: bextr32_c0:
4042 ; X86-BMI1NOTBM: # %bb.0:
4043 ; X86-BMI1NOTBM-NEXT: pushl %edi
4044 ; X86-BMI1NOTBM-NEXT: pushl %esi
4045 ; X86-BMI1NOTBM-NEXT: pushl %eax
4046 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
4047 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
4048 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
4049 ; X86-BMI1NOTBM-NEXT: xorl %ecx, %ecx
4050 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
4051 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
4052 ; X86-BMI1NOTBM-NEXT: # kill: def $cl killed $cl killed $ecx
4053 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
4054 ; X86-BMI1NOTBM-NEXT: movl %esi, (%esp)
4055 ; X86-BMI1NOTBM-NEXT: calll use32
4056 ; X86-BMI1NOTBM-NEXT: andl %edi, %esi
4057 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
4058 ; X86-BMI1NOTBM-NEXT: addl $4, %esp
4059 ; X86-BMI1NOTBM-NEXT: popl %esi
4060 ; X86-BMI1NOTBM-NEXT: popl %edi
4061 ; X86-BMI1NOTBM-NEXT: retl
4063 ; X86-BMI1BMI2-LABEL: bextr32_c0:
4064 ; X86-BMI1BMI2: # %bb.0:
4065 ; X86-BMI1BMI2-NEXT: pushl %ebx
4066 ; X86-BMI1BMI2-NEXT: pushl %esi
4067 ; X86-BMI1BMI2-NEXT: pushl %eax
4068 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
4069 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
4070 ; X86-BMI1BMI2-NEXT: shrxl %eax, {{[0-9]+}}(%esp), %esi
4071 ; X86-BMI1BMI2-NEXT: movl %ebx, %eax
4072 ; X86-BMI1BMI2-NEXT: negb %al
4073 ; X86-BMI1BMI2-NEXT: movl $-1, %ecx
4074 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ecx, %eax
4075 ; X86-BMI1BMI2-NEXT: movl %eax, (%esp)
4076 ; X86-BMI1BMI2-NEXT: calll use32
4077 ; X86-BMI1BMI2-NEXT: bzhil %ebx, %esi, %eax
4078 ; X86-BMI1BMI2-NEXT: addl $4, %esp
4079 ; X86-BMI1BMI2-NEXT: popl %esi
4080 ; X86-BMI1BMI2-NEXT: popl %ebx
4081 ; X86-BMI1BMI2-NEXT: retl
4084 ; X64-NOBMI: # %bb.0:
4106 ; X64-BMI1NOTBM: # %bb.0:
4128 ; X64-BMI1BMI2: # %bb.0:
4153 ; X86-NOBMI-LABEL: bextr32_c1_indexzext:
4154 ; X86-NOBMI: # %bb.0:
4155 ; X86-NOBMI-NEXT: pushl %edi
4156 ; X86-NOBMI-NEXT: pushl %esi
4157 ; X86-NOBMI-NEXT: pushl %eax
4158 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
4159 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
4160 ; X86-NOBMI-NEXT: shrl %cl, %edi
4161 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
4162 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
4163 ; X86-NOBMI-NEXT: movl $-1, %esi
4164 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
4165 ; X86-NOBMI-NEXT: shrl %cl, %esi
4166 ; X86-NOBMI-NEXT: movl %esi, (%esp)
4167 ; X86-NOBMI-NEXT: calll use32
4168 ; X86-NOBMI-NEXT: andl %edi, %esi
4169 ; X86-NOBMI-NEXT: movl %esi, %eax
4170 ; X86-NOBMI-NEXT: addl $4, %esp
4171 ; X86-NOBMI-NEXT: popl %esi
4172 ; X86-NOBMI-NEXT: popl %edi
4173 ; X86-NOBMI-NEXT: retl
4175 ; X86-BMI1NOTBM-LABEL: bextr32_c1_indexzext:
4176 ; X86-BMI1NOTBM: # %bb.0:
4177 ; X86-BMI1NOTBM-NEXT: pushl %edi
4178 ; X86-BMI1NOTBM-NEXT: pushl %esi
4179 ; X86-BMI1NOTBM-NEXT: pushl %eax
4180 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
4181 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
4182 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
4183 ; X86-BMI1NOTBM-NEXT: xorl %ecx, %ecx
4184 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
4185 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
4186 ; X86-BMI1NOTBM-NEXT: # kill: def $cl killed $cl killed $ecx
4187 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
4188 ; X86-BMI1NOTBM-NEXT: movl %esi, (%esp)
4189 ; X86-BMI1NOTBM-NEXT: calll use32
4190 ; X86-BMI1NOTBM-NEXT: andl %edi, %esi
4191 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
4192 ; X86-BMI1NOTBM-NEXT: addl $4, %esp
4193 ; X86-BMI1NOTBM-NEXT: popl %esi
4194 ; X86-BMI1NOTBM-NEXT: popl %edi
4195 ; X86-BMI1NOTBM-NEXT: retl
4197 ; X86-BMI1BMI2-LABEL: bextr32_c1_indexzext:
4198 ; X86-BMI1BMI2: # %bb.0:
4199 ; X86-BMI1BMI2-NEXT: pushl %ebx
4200 ; X86-BMI1BMI2-NEXT: pushl %esi
4201 ; X86-BMI1BMI2-NEXT: pushl %eax
4202 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
4203 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
4204 ; X86-BMI1BMI2-NEXT: shrxl %eax, {{[0-9]+}}(%esp), %esi
4205 ; X86-BMI1BMI2-NEXT: movl %ebx, %eax
4206 ; X86-BMI1BMI2-NEXT: negb %al
4207 ; X86-BMI1BMI2-NEXT: movl $-1, %ecx
4208 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ecx, %eax
4209 ; X86-BMI1BMI2-NEXT: movl %eax, (%esp)
4210 ; X86-BMI1BMI2-NEXT: calll use32
4211 ; X86-BMI1BMI2-NEXT: bzhil %ebx, %esi, %eax
4212 ; X86-BMI1BMI2-NEXT: addl $4, %esp
4213 ; X86-BMI1BMI2-NEXT: popl %esi
4214 ; X86-BMI1BMI2-NEXT: popl %ebx
4215 ; X86-BMI1BMI2-NEXT: retl
4218 ; X64-NOBMI: # %bb.0:
4240 ; X64-BMI1NOTBM: # %bb.0:
4262 ; X64-BMI1BMI2: # %bb.0:
4289 ; X86-NOBMI-LABEL: bextr32_c2_load:
4290 ; X86-NOBMI: # %bb.0:
4291 ; X86-NOBMI-NEXT: pushl %edi
4292 ; X86-NOBMI-NEXT: pushl %esi
4293 ; X86-NOBMI-NEXT: pushl %eax
4294 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
4295 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
4296 ; X86-NOBMI-NEXT: movl (%eax), %edi
4297 ; X86-NOBMI-NEXT: shrl %cl, %edi
4298 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
4299 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
4300 ; X86-NOBMI-NEXT: movl $-1, %esi
4301 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
4302 ; X86-NOBMI-NEXT: shrl %cl, %esi
4303 ; X86-NOBMI-NEXT: movl %esi, (%esp)
4304 ; X86-NOBMI-NEXT: calll use32
4305 ; X86-NOBMI-NEXT: andl %edi, %esi
4306 ; X86-NOBMI-NEXT: movl %esi, %eax
4307 ; X86-NOBMI-NEXT: addl $4, %esp
4308 ; X86-NOBMI-NEXT: popl %esi
4309 ; X86-NOBMI-NEXT: popl %edi
4310 ; X86-NOBMI-NEXT: retl
4312 ; X86-BMI1NOTBM-LABEL: bextr32_c2_load:
4313 ; X86-BMI1NOTBM: # %bb.0:
4314 ; X86-BMI1NOTBM-NEXT: pushl %edi
4315 ; X86-BMI1NOTBM-NEXT: pushl %esi
4316 ; X86-BMI1NOTBM-NEXT: pushl %eax
4317 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
4318 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
4319 ; X86-BMI1NOTBM-NEXT: movl (%eax), %edi
4320 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
4321 ; X86-BMI1NOTBM-NEXT: xorl %ecx, %ecx
4322 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
4323 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
4324 ; X86-BMI1NOTBM-NEXT: # kill: def $cl killed $cl killed $ecx
4325 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
4326 ; X86-BMI1NOTBM-NEXT: movl %esi, (%esp)
4327 ; X86-BMI1NOTBM-NEXT: calll use32
4328 ; X86-BMI1NOTBM-NEXT: andl %edi, %esi
4329 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
4330 ; X86-BMI1NOTBM-NEXT: addl $4, %esp
4331 ; X86-BMI1NOTBM-NEXT: popl %esi
4332 ; X86-BMI1NOTBM-NEXT: popl %edi
4333 ; X86-BMI1NOTBM-NEXT: retl
4335 ; X86-BMI1BMI2-LABEL: bextr32_c2_load:
4336 ; X86-BMI1BMI2: # %bb.0:
4337 ; X86-BMI1BMI2-NEXT: pushl %ebx
4338 ; X86-BMI1BMI2-NEXT: pushl %esi
4339 ; X86-BMI1BMI2-NEXT: pushl %eax
4340 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
4341 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
4342 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
4343 ; X86-BMI1BMI2-NEXT: shrxl %ecx, (%eax), %esi
4344 ; X86-BMI1BMI2-NEXT: movl %ebx, %eax
4345 ; X86-BMI1BMI2-NEXT: negb %al
4346 ; X86-BMI1BMI2-NEXT: movl $-1, %ecx
4347 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ecx, %eax
4348 ; X86-BMI1BMI2-NEXT: movl %eax, (%esp)
4349 ; X86-BMI1BMI2-NEXT: calll use32
4350 ; X86-BMI1BMI2-NEXT: bzhil %ebx, %esi, %eax
4351 ; X86-BMI1BMI2-NEXT: addl $4, %esp
4352 ; X86-BMI1BMI2-NEXT: popl %esi
4353 ; X86-BMI1BMI2-NEXT: popl %ebx
4354 ; X86-BMI1BMI2-NEXT: retl
4357 ; X64-NOBMI: # %bb.0:
4379 ; X64-BMI1NOTBM: # %bb.0:
4401 ; X64-BMI1BMI2: # %bb.0:
4427 ; X86-NOBMI-LABEL: bextr32_c3_load_indexzext:
4428 ; X86-NOBMI: # %bb.0:
4429 ; X86-NOBMI-NEXT: pushl %edi
4430 ; X86-NOBMI-NEXT: pushl %esi
4431 ; X86-NOBMI-NEXT: pushl %eax
4432 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
4433 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
4434 ; X86-NOBMI-NEXT: movl (%eax), %edi
4435 ; X86-NOBMI-NEXT: shrl %cl, %edi
4436 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
4437 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
4438 ; X86-NOBMI-NEXT: movl $-1, %esi
4439 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
4440 ; X86-NOBMI-NEXT: shrl %cl, %esi
4441 ; X86-NOBMI-NEXT: movl %esi, (%esp)
4442 ; X86-NOBMI-NEXT: calll use32
4443 ; X86-NOBMI-NEXT: andl %edi, %esi
4444 ; X86-NOBMI-NEXT: movl %esi, %eax
4445 ; X86-NOBMI-NEXT: addl $4, %esp
4446 ; X86-NOBMI-NEXT: popl %esi
4447 ; X86-NOBMI-NEXT: popl %edi
4448 ; X86-NOBMI-NEXT: retl
4450 ; X86-BMI1NOTBM-LABEL: bextr32_c3_load_indexzext:
4451 ; X86-BMI1NOTBM: # %bb.0:
4452 ; X86-BMI1NOTBM-NEXT: pushl %edi
4453 ; X86-BMI1NOTBM-NEXT: pushl %esi
4454 ; X86-BMI1NOTBM-NEXT: pushl %eax
4455 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
4456 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
4457 ; X86-BMI1NOTBM-NEXT: movl (%eax), %edi
4458 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
4459 ; X86-BMI1NOTBM-NEXT: xorl %ecx, %ecx
4460 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
4461 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
4462 ; X86-BMI1NOTBM-NEXT: # kill: def $cl killed $cl killed $ecx
4463 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
4464 ; X86-BMI1NOTBM-NEXT: movl %esi, (%esp)
4465 ; X86-BMI1NOTBM-NEXT: calll use32
4466 ; X86-BMI1NOTBM-NEXT: andl %edi, %esi
4467 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
4468 ; X86-BMI1NOTBM-NEXT: addl $4, %esp
4469 ; X86-BMI1NOTBM-NEXT: popl %esi
4470 ; X86-BMI1NOTBM-NEXT: popl %edi
4471 ; X86-BMI1NOTBM-NEXT: retl
4473 ; X86-BMI1BMI2-LABEL: bextr32_c3_load_indexzext:
4474 ; X86-BMI1BMI2: # %bb.0:
4475 ; X86-BMI1BMI2-NEXT: pushl %ebx
4476 ; X86-BMI1BMI2-NEXT: pushl %esi
4477 ; X86-BMI1BMI2-NEXT: pushl %eax
4478 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
4479 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
4480 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
4481 ; X86-BMI1BMI2-NEXT: shrxl %ecx, (%eax), %esi
4482 ; X86-BMI1BMI2-NEXT: movl %ebx, %eax
4483 ; X86-BMI1BMI2-NEXT: negb %al
4484 ; X86-BMI1BMI2-NEXT: movl $-1, %ecx
4485 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ecx, %eax
4486 ; X86-BMI1BMI2-NEXT: movl %eax, (%esp)
4487 ; X86-BMI1BMI2-NEXT: calll use32
4488 ; X86-BMI1BMI2-NEXT: bzhil %ebx, %esi, %eax
4489 ; X86-BMI1BMI2-NEXT: addl $4, %esp
4490 ; X86-BMI1BMI2-NEXT: popl %esi
4491 ; X86-BMI1BMI2-NEXT: popl %ebx
4492 ; X86-BMI1BMI2-NEXT: retl
4495 ; X64-NOBMI: # %bb.0:
4517 ; X64-BMI1NOTBM: # %bb.0:
4539 ; X64-BMI1BMI2: # %bb.0:
4567 ; X86-NOBMI-LABEL: bextr32_c4_commutative:
4568 ; X86-NOBMI: # %bb.0:
4569 ; X86-NOBMI-NEXT: pushl %edi
4570 ; X86-NOBMI-NEXT: pushl %esi
4571 ; X86-NOBMI-NEXT: pushl %eax
4572 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
4573 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
4574 ; X86-NOBMI-NEXT: shrl %cl, %edi
4575 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
4576 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
4577 ; X86-NOBMI-NEXT: movl $-1, %esi
4578 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
4579 ; X86-NOBMI-NEXT: shrl %cl, %esi
4580 ; X86-NOBMI-NEXT: movl %esi, (%esp)
4581 ; X86-NOBMI-NEXT: calll use32
4582 ; X86-NOBMI-NEXT: andl %edi, %esi
4583 ; X86-NOBMI-NEXT: movl %esi, %eax
4584 ; X86-NOBMI-NEXT: addl $4, %esp
4585 ; X86-NOBMI-NEXT: popl %esi
4586 ; X86-NOBMI-NEXT: popl %edi
4587 ; X86-NOBMI-NEXT: retl
4589 ; X86-BMI1NOTBM-LABEL: bextr32_c4_commutative:
4590 ; X86-BMI1NOTBM: # %bb.0:
4591 ; X86-BMI1NOTBM-NEXT: pushl %edi
4592 ; X86-BMI1NOTBM-NEXT: pushl %esi
4593 ; X86-BMI1NOTBM-NEXT: pushl %eax
4594 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
4595 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
4596 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
4597 ; X86-BMI1NOTBM-NEXT: xorl %ecx, %ecx
4598 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
4599 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
4600 ; X86-BMI1NOTBM-NEXT: # kill: def $cl killed $cl killed $ecx
4601 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
4602 ; X86-BMI1NOTBM-NEXT: movl %esi, (%esp)
4603 ; X86-BMI1NOTBM-NEXT: calll use32
4604 ; X86-BMI1NOTBM-NEXT: andl %edi, %esi
4605 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
4606 ; X86-BMI1NOTBM-NEXT: addl $4, %esp
4607 ; X86-BMI1NOTBM-NEXT: popl %esi
4608 ; X86-BMI1NOTBM-NEXT: popl %edi
4609 ; X86-BMI1NOTBM-NEXT: retl
4611 ; X86-BMI1BMI2-LABEL: bextr32_c4_commutative:
4612 ; X86-BMI1BMI2: # %bb.0:
4613 ; X86-BMI1BMI2-NEXT: pushl %ebx
4614 ; X86-BMI1BMI2-NEXT: pushl %esi
4615 ; X86-BMI1BMI2-NEXT: pushl %eax
4616 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
4617 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
4618 ; X86-BMI1BMI2-NEXT: shrxl %eax, {{[0-9]+}}(%esp), %esi
4619 ; X86-BMI1BMI2-NEXT: movl %ebx, %eax
4620 ; X86-BMI1BMI2-NEXT: negb %al
4621 ; X86-BMI1BMI2-NEXT: movl $-1, %ecx
4622 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ecx, %eax
4623 ; X86-BMI1BMI2-NEXT: movl %eax, (%esp)
4624 ; X86-BMI1BMI2-NEXT: calll use32
4625 ; X86-BMI1BMI2-NEXT: bzhil %ebx, %esi, %eax
4626 ; X86-BMI1BMI2-NEXT: addl $4, %esp
4627 ; X86-BMI1BMI2-NEXT: popl %esi
4628 ; X86-BMI1BMI2-NEXT: popl %ebx
4629 ; X86-BMI1BMI2-NEXT: retl
4632 ; X64-NOBMI: # %bb.0:
4654 ; X64-BMI1NOTBM: # %bb.0:
4676 ; X64-BMI1BMI2: # %bb.0:
4701 ; X86-NOBMI-LABEL: bextr32_c5_skipextrauses:
4702 ; X86-NOBMI: # %bb.0:
4703 ; X86-NOBMI-NEXT: pushl %ebx
4704 ; X86-NOBMI-NEXT: pushl %edi
4705 ; X86-NOBMI-NEXT: pushl %esi
4706 ; X86-NOBMI-NEXT: subl $16, %esp
4707 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
4708 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ebx
4709 ; X86-NOBMI-NEXT: movl %ebx, %ecx
4710 ; X86-NOBMI-NEXT: shrl %cl, %edi
4711 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
4712 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
4713 ; X86-NOBMI-NEXT: movl $-1, %esi
4714 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
4715 ; X86-NOBMI-NEXT: shrl %cl, %esi
4716 ; X86-NOBMI-NEXT: movl %esi, (%esp)
4717 ; X86-NOBMI-NEXT: calll use32
4718 ; X86-NOBMI-NEXT: andl %edi, %esi
4719 ; X86-NOBMI-NEXT: movl %ebx, (%esp)
4720 ; X86-NOBMI-NEXT: calll use32
4721 ; X86-NOBMI-NEXT: movl %esi, %eax
4722 ; X86-NOBMI-NEXT: addl $16, %esp
4723 ; X86-NOBMI-NEXT: popl %esi
4724 ; X86-NOBMI-NEXT: popl %edi
4725 ; X86-NOBMI-NEXT: popl %ebx
4726 ; X86-NOBMI-NEXT: retl
4728 ; X86-BMI1NOTBM-LABEL: bextr32_c5_skipextrauses:
4729 ; X86-BMI1NOTBM: # %bb.0:
4730 ; X86-BMI1NOTBM-NEXT: pushl %ebx
4731 ; X86-BMI1NOTBM-NEXT: pushl %edi
4732 ; X86-BMI1NOTBM-NEXT: pushl %esi
4733 ; X86-BMI1NOTBM-NEXT: subl $16, %esp
4734 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
4735 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %ebx
4736 ; X86-BMI1NOTBM-NEXT: movl %ebx, %ecx
4737 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
4738 ; X86-BMI1NOTBM-NEXT: xorl %ecx, %ecx
4739 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
4740 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
4741 ; X86-BMI1NOTBM-NEXT: # kill: def $cl killed $cl killed $ecx
4742 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
4743 ; X86-BMI1NOTBM-NEXT: movl %esi, (%esp)
4744 ; X86-BMI1NOTBM-NEXT: calll use32
4745 ; X86-BMI1NOTBM-NEXT: andl %edi, %esi
4746 ; X86-BMI1NOTBM-NEXT: movl %ebx, (%esp)
4747 ; X86-BMI1NOTBM-NEXT: calll use32
4748 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
4749 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
4750 ; X86-BMI1NOTBM-NEXT: popl %esi
4751 ; X86-BMI1NOTBM-NEXT: popl %edi
4752 ; X86-BMI1NOTBM-NEXT: popl %ebx
4753 ; X86-BMI1NOTBM-NEXT: retl
4755 ; X86-BMI1BMI2-LABEL: bextr32_c5_skipextrauses:
4756 ; X86-BMI1BMI2: # %bb.0:
4757 ; X86-BMI1BMI2-NEXT: pushl %ebx
4758 ; X86-BMI1BMI2-NEXT: pushl %edi
4759 ; X86-BMI1BMI2-NEXT: pushl %esi
4760 ; X86-BMI1BMI2-NEXT: subl $16, %esp
4761 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %bl
4762 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edi
4763 ; X86-BMI1BMI2-NEXT: shrxl %edi, {{[0-9]+}}(%esp), %esi
4764 ; X86-BMI1BMI2-NEXT: movl %ebx, %eax
4765 ; X86-BMI1BMI2-NEXT: negb %al
4766 ; X86-BMI1BMI2-NEXT: movl $-1, %ecx
4767 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ecx, %eax
4768 ; X86-BMI1BMI2-NEXT: movl %eax, (%esp)
4769 ; X86-BMI1BMI2-NEXT: calll use32
4770 ; X86-BMI1BMI2-NEXT: bzhil %ebx, %esi, %esi
4771 ; X86-BMI1BMI2-NEXT: movl %edi, (%esp)
4772 ; X86-BMI1BMI2-NEXT: calll use32
4773 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
4774 ; X86-BMI1BMI2-NEXT: addl $16, %esp
4775 ; X86-BMI1BMI2-NEXT: popl %esi
4776 ; X86-BMI1BMI2-NEXT: popl %edi
4777 ; X86-BMI1BMI2-NEXT: popl %ebx
4778 ; X86-BMI1BMI2-NEXT: retl
4781 ; X64-NOBMI: # %bb.0:
4805 ; X64-BMI1NOTBM: # %bb.0:
4829 ; X64-BMI1BMI2: # %bb.0:
4861 ; X86-NOBMI-LABEL: bextr64_c0:
4862 ; X86-NOBMI: # %bb.0:
4863 ; X86-NOBMI-NEXT: pushl %ebp
4864 ; X86-NOBMI-NEXT: pushl %ebx
4865 ; X86-NOBMI-NEXT: pushl %edi
4866 ; X86-NOBMI-NEXT: pushl %esi
4867 ; X86-NOBMI-NEXT: subl $12, %esp
4868 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
4869 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
4870 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
4871 ; X86-NOBMI-NEXT: movl %eax, %edi
4872 ; X86-NOBMI-NEXT: shrl %cl, %edi
4873 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
4874 ; X86-NOBMI-NEXT: testb $32, %cl
4875 ; X86-NOBMI-NEXT: je .LBB41_2
4876 ; X86-NOBMI-NEXT: # %bb.1:
4877 ; X86-NOBMI-NEXT: movl %edi, %esi
4878 ; X86-NOBMI-NEXT: xorl %edi, %edi
4879 ; X86-NOBMI-NEXT: .LBB41_2:
4880 ; X86-NOBMI-NEXT: movb $64, %cl
4881 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
4882 ; X86-NOBMI-NEXT: movl $-1, %ebp
4883 ; X86-NOBMI-NEXT: movl $-1, %ebx
4884 ; X86-NOBMI-NEXT: shrl %cl, %ebx
4885 ; X86-NOBMI-NEXT: testb $32, %cl
4886 ; X86-NOBMI-NEXT: je .LBB41_4
4887 ; X86-NOBMI-NEXT: # %bb.3:
4888 ; X86-NOBMI-NEXT: movl %ebx, %ebp
4889 ; X86-NOBMI-NEXT: xorl %ebx, %ebx
4890 ; X86-NOBMI-NEXT: .LBB41_4:
4891 ; X86-NOBMI-NEXT: subl $8, %esp
4892 ; X86-NOBMI-NEXT: pushl %ebx
4893 ; X86-NOBMI-NEXT: pushl %ebp
4894 ; X86-NOBMI-NEXT: calll use64
4895 ; X86-NOBMI-NEXT: addl $16, %esp
4896 ; X86-NOBMI-NEXT: andl %ebp, %esi
4897 ; X86-NOBMI-NEXT: andl %ebx, %edi
4898 ; X86-NOBMI-NEXT: movl %esi, %eax
4899 ; X86-NOBMI-NEXT: movl %edi, %edx
4900 ; X86-NOBMI-NEXT: addl $12, %esp
4901 ; X86-NOBMI-NEXT: popl %esi
4902 ; X86-NOBMI-NEXT: popl %edi
4903 ; X86-NOBMI-NEXT: popl %ebx
4904 ; X86-NOBMI-NEXT: popl %ebp
4905 ; X86-NOBMI-NEXT: retl
4907 ; X86-BMI1NOTBM-LABEL: bextr64_c0:
4908 ; X86-BMI1NOTBM: # %bb.0:
4909 ; X86-BMI1NOTBM-NEXT: pushl %ebp
4910 ; X86-BMI1NOTBM-NEXT: pushl %ebx
4911 ; X86-BMI1NOTBM-NEXT: pushl %edi
4912 ; X86-BMI1NOTBM-NEXT: pushl %esi
4913 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
4914 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
4915 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
4916 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
4917 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
4918 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
4919 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
4920 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
4921 ; X86-BMI1NOTBM-NEXT: je .LBB41_2
4922 ; X86-BMI1NOTBM-NEXT: # %bb.1:
4923 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
4924 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
4925 ; X86-BMI1NOTBM-NEXT: .LBB41_2:
4926 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
4927 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
4928 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebp
4929 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
4930 ; X86-BMI1NOTBM-NEXT: shrl %cl, %ebx
4931 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
4932 ; X86-BMI1NOTBM-NEXT: je .LBB41_4
4933 ; X86-BMI1NOTBM-NEXT: # %bb.3:
4934 ; X86-BMI1NOTBM-NEXT: movl %ebx, %ebp
4935 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
4936 ; X86-BMI1NOTBM-NEXT: .LBB41_4:
4937 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
4938 ; X86-BMI1NOTBM-NEXT: pushl %ebx
4939 ; X86-BMI1NOTBM-NEXT: pushl %ebp
4940 ; X86-BMI1NOTBM-NEXT: calll use64
4941 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
4942 ; X86-BMI1NOTBM-NEXT: andl %ebp, %esi
4943 ; X86-BMI1NOTBM-NEXT: andl %ebx, %edi
4944 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
4945 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
4946 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
4947 ; X86-BMI1NOTBM-NEXT: popl %esi
4948 ; X86-BMI1NOTBM-NEXT: popl %edi
4949 ; X86-BMI1NOTBM-NEXT: popl %ebx
4950 ; X86-BMI1NOTBM-NEXT: popl %ebp
4951 ; X86-BMI1NOTBM-NEXT: retl
4953 ; X86-BMI1BMI2-LABEL: bextr64_c0:
4954 ; X86-BMI1BMI2: # %bb.0:
4955 ; X86-BMI1BMI2-NEXT: pushl %ebp
4956 ; X86-BMI1BMI2-NEXT: pushl %ebx
4957 ; X86-BMI1BMI2-NEXT: pushl %edi
4958 ; X86-BMI1BMI2-NEXT: pushl %esi
4959 ; X86-BMI1BMI2-NEXT: subl $12, %esp
4960 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
4961 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
4962 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
4963 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
4964 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
4965 ; X86-BMI1BMI2-NEXT: testb $32, %cl
4966 ; X86-BMI1BMI2-NEXT: je .LBB41_2
4967 ; X86-BMI1BMI2-NEXT: # %bb.1:
4968 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
4969 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
4970 ; X86-BMI1BMI2-NEXT: .LBB41_2:
4971 ; X86-BMI1BMI2-NEXT: movb $64, %al
4972 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %al
4973 ; X86-BMI1BMI2-NEXT: movl $-1, %ebp
4974 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ebp, %ebx
4975 ; X86-BMI1BMI2-NEXT: testb $32, %al
4976 ; X86-BMI1BMI2-NEXT: je .LBB41_4
4977 ; X86-BMI1BMI2-NEXT: # %bb.3:
4978 ; X86-BMI1BMI2-NEXT: movl %ebx, %ebp
4979 ; X86-BMI1BMI2-NEXT: xorl %ebx, %ebx
4980 ; X86-BMI1BMI2-NEXT: .LBB41_4:
4981 ; X86-BMI1BMI2-NEXT: subl $8, %esp
4982 ; X86-BMI1BMI2-NEXT: pushl %ebx
4983 ; X86-BMI1BMI2-NEXT: pushl %ebp
4984 ; X86-BMI1BMI2-NEXT: calll use64
4985 ; X86-BMI1BMI2-NEXT: addl $16, %esp
4986 ; X86-BMI1BMI2-NEXT: andl %ebp, %esi
4987 ; X86-BMI1BMI2-NEXT: andl %ebx, %edi
4988 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
4989 ; X86-BMI1BMI2-NEXT: movl %edi, %edx
4990 ; X86-BMI1BMI2-NEXT: addl $12, %esp
4991 ; X86-BMI1BMI2-NEXT: popl %esi
4992 ; X86-BMI1BMI2-NEXT: popl %edi
4993 ; X86-BMI1BMI2-NEXT: popl %ebx
4994 ; X86-BMI1BMI2-NEXT: popl %ebp
4995 ; X86-BMI1BMI2-NEXT: retl
4998 ; X64-NOBMI: # %bb.0:
5020 ; X64-BMI1NOTBM: # %bb.0:
5042 ; X64-BMI1BMI2: # %bb.0:
5067 ; X86-NOBMI-LABEL: bextr64_c1_indexzext:
5068 ; X86-NOBMI: # %bb.0:
5069 ; X86-NOBMI-NEXT: pushl %ebp
5070 ; X86-NOBMI-NEXT: pushl %ebx
5071 ; X86-NOBMI-NEXT: pushl %edi
5072 ; X86-NOBMI-NEXT: pushl %esi
5073 ; X86-NOBMI-NEXT: subl $12, %esp
5074 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
5075 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
5076 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
5077 ; X86-NOBMI-NEXT: movl %eax, %edi
5078 ; X86-NOBMI-NEXT: shrl %cl, %edi
5079 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
5080 ; X86-NOBMI-NEXT: testb $32, %cl
5081 ; X86-NOBMI-NEXT: je .LBB42_2
5082 ; X86-NOBMI-NEXT: # %bb.1:
5083 ; X86-NOBMI-NEXT: movl %edi, %esi
5084 ; X86-NOBMI-NEXT: xorl %edi, %edi
5085 ; X86-NOBMI-NEXT: .LBB42_2:
5086 ; X86-NOBMI-NEXT: movb $64, %cl
5087 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
5088 ; X86-NOBMI-NEXT: movl $-1, %ebp
5089 ; X86-NOBMI-NEXT: movl $-1, %ebx
5090 ; X86-NOBMI-NEXT: shrl %cl, %ebx
5091 ; X86-NOBMI-NEXT: testb $32, %cl
5092 ; X86-NOBMI-NEXT: je .LBB42_4
5093 ; X86-NOBMI-NEXT: # %bb.3:
5094 ; X86-NOBMI-NEXT: movl %ebx, %ebp
5095 ; X86-NOBMI-NEXT: xorl %ebx, %ebx
5096 ; X86-NOBMI-NEXT: .LBB42_4:
5097 ; X86-NOBMI-NEXT: subl $8, %esp
5098 ; X86-NOBMI-NEXT: pushl %ebx
5099 ; X86-NOBMI-NEXT: pushl %ebp
5100 ; X86-NOBMI-NEXT: calll use64
5101 ; X86-NOBMI-NEXT: addl $16, %esp
5102 ; X86-NOBMI-NEXT: andl %ebp, %esi
5103 ; X86-NOBMI-NEXT: andl %ebx, %edi
5104 ; X86-NOBMI-NEXT: movl %esi, %eax
5105 ; X86-NOBMI-NEXT: movl %edi, %edx
5106 ; X86-NOBMI-NEXT: addl $12, %esp
5107 ; X86-NOBMI-NEXT: popl %esi
5108 ; X86-NOBMI-NEXT: popl %edi
5109 ; X86-NOBMI-NEXT: popl %ebx
5110 ; X86-NOBMI-NEXT: popl %ebp
5111 ; X86-NOBMI-NEXT: retl
5113 ; X86-BMI1NOTBM-LABEL: bextr64_c1_indexzext:
5114 ; X86-BMI1NOTBM: # %bb.0:
5115 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5116 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5117 ; X86-BMI1NOTBM-NEXT: pushl %edi
5118 ; X86-BMI1NOTBM-NEXT: pushl %esi
5119 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
5120 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
5121 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
5122 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
5123 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
5124 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
5125 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
5126 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5127 ; X86-BMI1NOTBM-NEXT: je .LBB42_2
5128 ; X86-BMI1NOTBM-NEXT: # %bb.1:
5129 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
5130 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
5131 ; X86-BMI1NOTBM-NEXT: .LBB42_2:
5132 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
5133 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
5134 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebp
5135 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
5136 ; X86-BMI1NOTBM-NEXT: shrl %cl, %ebx
5137 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5138 ; X86-BMI1NOTBM-NEXT: je .LBB42_4
5139 ; X86-BMI1NOTBM-NEXT: # %bb.3:
5140 ; X86-BMI1NOTBM-NEXT: movl %ebx, %ebp
5141 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
5142 ; X86-BMI1NOTBM-NEXT: .LBB42_4:
5143 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
5144 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5145 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5146 ; X86-BMI1NOTBM-NEXT: calll use64
5147 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
5148 ; X86-BMI1NOTBM-NEXT: andl %ebp, %esi
5149 ; X86-BMI1NOTBM-NEXT: andl %ebx, %edi
5150 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
5151 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
5152 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
5153 ; X86-BMI1NOTBM-NEXT: popl %esi
5154 ; X86-BMI1NOTBM-NEXT: popl %edi
5155 ; X86-BMI1NOTBM-NEXT: popl %ebx
5156 ; X86-BMI1NOTBM-NEXT: popl %ebp
5157 ; X86-BMI1NOTBM-NEXT: retl
5159 ; X86-BMI1BMI2-LABEL: bextr64_c1_indexzext:
5160 ; X86-BMI1BMI2: # %bb.0:
5161 ; X86-BMI1BMI2-NEXT: pushl %ebp
5162 ; X86-BMI1BMI2-NEXT: pushl %ebx
5163 ; X86-BMI1BMI2-NEXT: pushl %edi
5164 ; X86-BMI1BMI2-NEXT: pushl %esi
5165 ; X86-BMI1BMI2-NEXT: subl $12, %esp
5166 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
5167 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
5168 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
5169 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
5170 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
5171 ; X86-BMI1BMI2-NEXT: testb $32, %cl
5172 ; X86-BMI1BMI2-NEXT: je .LBB42_2
5173 ; X86-BMI1BMI2-NEXT: # %bb.1:
5174 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
5175 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
5176 ; X86-BMI1BMI2-NEXT: .LBB42_2:
5177 ; X86-BMI1BMI2-NEXT: movb $64, %al
5178 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %al
5179 ; X86-BMI1BMI2-NEXT: movl $-1, %ebp
5180 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ebp, %ebx
5181 ; X86-BMI1BMI2-NEXT: testb $32, %al
5182 ; X86-BMI1BMI2-NEXT: je .LBB42_4
5183 ; X86-BMI1BMI2-NEXT: # %bb.3:
5184 ; X86-BMI1BMI2-NEXT: movl %ebx, %ebp
5185 ; X86-BMI1BMI2-NEXT: xorl %ebx, %ebx
5186 ; X86-BMI1BMI2-NEXT: .LBB42_4:
5187 ; X86-BMI1BMI2-NEXT: subl $8, %esp
5188 ; X86-BMI1BMI2-NEXT: pushl %ebx
5189 ; X86-BMI1BMI2-NEXT: pushl %ebp
5190 ; X86-BMI1BMI2-NEXT: calll use64
5191 ; X86-BMI1BMI2-NEXT: addl $16, %esp
5192 ; X86-BMI1BMI2-NEXT: andl %ebp, %esi
5193 ; X86-BMI1BMI2-NEXT: andl %ebx, %edi
5194 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
5195 ; X86-BMI1BMI2-NEXT: movl %edi, %edx
5196 ; X86-BMI1BMI2-NEXT: addl $12, %esp
5197 ; X86-BMI1BMI2-NEXT: popl %esi
5198 ; X86-BMI1BMI2-NEXT: popl %edi
5199 ; X86-BMI1BMI2-NEXT: popl %ebx
5200 ; X86-BMI1BMI2-NEXT: popl %ebp
5201 ; X86-BMI1BMI2-NEXT: retl
5204 ; X64-NOBMI: # %bb.0:
5226 ; X64-BMI1NOTBM: # %bb.0:
5248 ; X64-BMI1BMI2: # %bb.0:
5276 ; X86-NOBMI-LABEL: bextr64_c2_load:
5277 ; X86-NOBMI: # %bb.0:
5278 ; X86-NOBMI-NEXT: pushl %ebp
5279 ; X86-NOBMI-NEXT: pushl %ebx
5280 ; X86-NOBMI-NEXT: pushl %edi
5281 ; X86-NOBMI-NEXT: pushl %esi
5282 ; X86-NOBMI-NEXT: subl $12, %esp
5283 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
5284 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
5285 ; X86-NOBMI-NEXT: movl (%eax), %esi
5286 ; X86-NOBMI-NEXT: movl 4(%eax), %eax
5287 ; X86-NOBMI-NEXT: movl %eax, %edi
5288 ; X86-NOBMI-NEXT: shrl %cl, %edi
5289 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
5290 ; X86-NOBMI-NEXT: testb $32, %cl
5291 ; X86-NOBMI-NEXT: je .LBB43_2
5292 ; X86-NOBMI-NEXT: # %bb.1:
5293 ; X86-NOBMI-NEXT: movl %edi, %esi
5294 ; X86-NOBMI-NEXT: xorl %edi, %edi
5295 ; X86-NOBMI-NEXT: .LBB43_2:
5296 ; X86-NOBMI-NEXT: movb $64, %cl
5297 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
5298 ; X86-NOBMI-NEXT: movl $-1, %ebp
5299 ; X86-NOBMI-NEXT: movl $-1, %ebx
5300 ; X86-NOBMI-NEXT: shrl %cl, %ebx
5301 ; X86-NOBMI-NEXT: testb $32, %cl
5302 ; X86-NOBMI-NEXT: je .LBB43_4
5303 ; X86-NOBMI-NEXT: # %bb.3:
5304 ; X86-NOBMI-NEXT: movl %ebx, %ebp
5305 ; X86-NOBMI-NEXT: xorl %ebx, %ebx
5306 ; X86-NOBMI-NEXT: .LBB43_4:
5307 ; X86-NOBMI-NEXT: subl $8, %esp
5308 ; X86-NOBMI-NEXT: pushl %ebx
5309 ; X86-NOBMI-NEXT: pushl %ebp
5310 ; X86-NOBMI-NEXT: calll use64
5311 ; X86-NOBMI-NEXT: addl $16, %esp
5312 ; X86-NOBMI-NEXT: andl %ebp, %esi
5313 ; X86-NOBMI-NEXT: andl %ebx, %edi
5314 ; X86-NOBMI-NEXT: movl %esi, %eax
5315 ; X86-NOBMI-NEXT: movl %edi, %edx
5316 ; X86-NOBMI-NEXT: addl $12, %esp
5317 ; X86-NOBMI-NEXT: popl %esi
5318 ; X86-NOBMI-NEXT: popl %edi
5319 ; X86-NOBMI-NEXT: popl %ebx
5320 ; X86-NOBMI-NEXT: popl %ebp
5321 ; X86-NOBMI-NEXT: retl
5323 ; X86-BMI1NOTBM-LABEL: bextr64_c2_load:
5324 ; X86-BMI1NOTBM: # %bb.0:
5325 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5326 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5327 ; X86-BMI1NOTBM-NEXT: pushl %edi
5328 ; X86-BMI1NOTBM-NEXT: pushl %esi
5329 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
5330 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
5331 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
5332 ; X86-BMI1NOTBM-NEXT: movl (%eax), %esi
5333 ; X86-BMI1NOTBM-NEXT: movl 4(%eax), %eax
5334 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
5335 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
5336 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
5337 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5338 ; X86-BMI1NOTBM-NEXT: je .LBB43_2
5339 ; X86-BMI1NOTBM-NEXT: # %bb.1:
5340 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
5341 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
5342 ; X86-BMI1NOTBM-NEXT: .LBB43_2:
5343 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
5344 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
5345 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebp
5346 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
5347 ; X86-BMI1NOTBM-NEXT: shrl %cl, %ebx
5348 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5349 ; X86-BMI1NOTBM-NEXT: je .LBB43_4
5350 ; X86-BMI1NOTBM-NEXT: # %bb.3:
5351 ; X86-BMI1NOTBM-NEXT: movl %ebx, %ebp
5352 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
5353 ; X86-BMI1NOTBM-NEXT: .LBB43_4:
5354 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
5355 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5356 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5357 ; X86-BMI1NOTBM-NEXT: calll use64
5358 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
5359 ; X86-BMI1NOTBM-NEXT: andl %ebp, %esi
5360 ; X86-BMI1NOTBM-NEXT: andl %ebx, %edi
5361 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
5362 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
5363 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
5364 ; X86-BMI1NOTBM-NEXT: popl %esi
5365 ; X86-BMI1NOTBM-NEXT: popl %edi
5366 ; X86-BMI1NOTBM-NEXT: popl %ebx
5367 ; X86-BMI1NOTBM-NEXT: popl %ebp
5368 ; X86-BMI1NOTBM-NEXT: retl
5370 ; X86-BMI1BMI2-LABEL: bextr64_c2_load:
5371 ; X86-BMI1BMI2: # %bb.0:
5372 ; X86-BMI1BMI2-NEXT: pushl %ebp
5373 ; X86-BMI1BMI2-NEXT: pushl %ebx
5374 ; X86-BMI1BMI2-NEXT: pushl %edi
5375 ; X86-BMI1BMI2-NEXT: pushl %esi
5376 ; X86-BMI1BMI2-NEXT: subl $12, %esp
5377 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
5378 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
5379 ; X86-BMI1BMI2-NEXT: movl (%eax), %esi
5380 ; X86-BMI1BMI2-NEXT: movl 4(%eax), %eax
5381 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
5382 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
5383 ; X86-BMI1BMI2-NEXT: testb $32, %cl
5384 ; X86-BMI1BMI2-NEXT: je .LBB43_2
5385 ; X86-BMI1BMI2-NEXT: # %bb.1:
5386 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
5387 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
5388 ; X86-BMI1BMI2-NEXT: .LBB43_2:
5389 ; X86-BMI1BMI2-NEXT: movb $64, %al
5390 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %al
5391 ; X86-BMI1BMI2-NEXT: movl $-1, %ebp
5392 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ebp, %ebx
5393 ; X86-BMI1BMI2-NEXT: testb $32, %al
5394 ; X86-BMI1BMI2-NEXT: je .LBB43_4
5395 ; X86-BMI1BMI2-NEXT: # %bb.3:
5396 ; X86-BMI1BMI2-NEXT: movl %ebx, %ebp
5397 ; X86-BMI1BMI2-NEXT: xorl %ebx, %ebx
5398 ; X86-BMI1BMI2-NEXT: .LBB43_4:
5399 ; X86-BMI1BMI2-NEXT: subl $8, %esp
5400 ; X86-BMI1BMI2-NEXT: pushl %ebx
5401 ; X86-BMI1BMI2-NEXT: pushl %ebp
5402 ; X86-BMI1BMI2-NEXT: calll use64
5403 ; X86-BMI1BMI2-NEXT: addl $16, %esp
5404 ; X86-BMI1BMI2-NEXT: andl %ebp, %esi
5405 ; X86-BMI1BMI2-NEXT: andl %ebx, %edi
5406 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
5407 ; X86-BMI1BMI2-NEXT: movl %edi, %edx
5408 ; X86-BMI1BMI2-NEXT: addl $12, %esp
5409 ; X86-BMI1BMI2-NEXT: popl %esi
5410 ; X86-BMI1BMI2-NEXT: popl %edi
5411 ; X86-BMI1BMI2-NEXT: popl %ebx
5412 ; X86-BMI1BMI2-NEXT: popl %ebp
5413 ; X86-BMI1BMI2-NEXT: retl
5416 ; X64-NOBMI: # %bb.0:
5438 ; X64-BMI1NOTBM: # %bb.0:
5460 ; X64-BMI1BMI2: # %bb.0:
5486 ; X86-NOBMI-LABEL: bextr64_c3_load_indexzext:
5487 ; X86-NOBMI: # %bb.0:
5488 ; X86-NOBMI-NEXT: pushl %ebp
5489 ; X86-NOBMI-NEXT: pushl %ebx
5490 ; X86-NOBMI-NEXT: pushl %edi
5491 ; X86-NOBMI-NEXT: pushl %esi
5492 ; X86-NOBMI-NEXT: subl $12, %esp
5493 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
5494 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
5495 ; X86-NOBMI-NEXT: movl (%eax), %esi
5496 ; X86-NOBMI-NEXT: movl 4(%eax), %eax
5497 ; X86-NOBMI-NEXT: movl %eax, %edi
5498 ; X86-NOBMI-NEXT: shrl %cl, %edi
5499 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
5500 ; X86-NOBMI-NEXT: testb $32, %cl
5501 ; X86-NOBMI-NEXT: je .LBB44_2
5502 ; X86-NOBMI-NEXT: # %bb.1:
5503 ; X86-NOBMI-NEXT: movl %edi, %esi
5504 ; X86-NOBMI-NEXT: xorl %edi, %edi
5505 ; X86-NOBMI-NEXT: .LBB44_2:
5506 ; X86-NOBMI-NEXT: movb $64, %cl
5507 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
5508 ; X86-NOBMI-NEXT: movl $-1, %ebp
5509 ; X86-NOBMI-NEXT: movl $-1, %ebx
5510 ; X86-NOBMI-NEXT: shrl %cl, %ebx
5511 ; X86-NOBMI-NEXT: testb $32, %cl
5512 ; X86-NOBMI-NEXT: je .LBB44_4
5513 ; X86-NOBMI-NEXT: # %bb.3:
5514 ; X86-NOBMI-NEXT: movl %ebx, %ebp
5515 ; X86-NOBMI-NEXT: xorl %ebx, %ebx
5516 ; X86-NOBMI-NEXT: .LBB44_4:
5517 ; X86-NOBMI-NEXT: subl $8, %esp
5518 ; X86-NOBMI-NEXT: pushl %ebx
5519 ; X86-NOBMI-NEXT: pushl %ebp
5520 ; X86-NOBMI-NEXT: calll use64
5521 ; X86-NOBMI-NEXT: addl $16, %esp
5522 ; X86-NOBMI-NEXT: andl %ebp, %esi
5523 ; X86-NOBMI-NEXT: andl %ebx, %edi
5524 ; X86-NOBMI-NEXT: movl %esi, %eax
5525 ; X86-NOBMI-NEXT: movl %edi, %edx
5526 ; X86-NOBMI-NEXT: addl $12, %esp
5527 ; X86-NOBMI-NEXT: popl %esi
5528 ; X86-NOBMI-NEXT: popl %edi
5529 ; X86-NOBMI-NEXT: popl %ebx
5530 ; X86-NOBMI-NEXT: popl %ebp
5531 ; X86-NOBMI-NEXT: retl
5533 ; X86-BMI1NOTBM-LABEL: bextr64_c3_load_indexzext:
5534 ; X86-BMI1NOTBM: # %bb.0:
5535 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5536 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5537 ; X86-BMI1NOTBM-NEXT: pushl %edi
5538 ; X86-BMI1NOTBM-NEXT: pushl %esi
5539 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
5540 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
5541 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
5542 ; X86-BMI1NOTBM-NEXT: movl (%eax), %esi
5543 ; X86-BMI1NOTBM-NEXT: movl 4(%eax), %eax
5544 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
5545 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
5546 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
5547 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5548 ; X86-BMI1NOTBM-NEXT: je .LBB44_2
5549 ; X86-BMI1NOTBM-NEXT: # %bb.1:
5550 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
5551 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
5552 ; X86-BMI1NOTBM-NEXT: .LBB44_2:
5553 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
5554 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
5555 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebp
5556 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
5557 ; X86-BMI1NOTBM-NEXT: shrl %cl, %ebx
5558 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5559 ; X86-BMI1NOTBM-NEXT: je .LBB44_4
5560 ; X86-BMI1NOTBM-NEXT: # %bb.3:
5561 ; X86-BMI1NOTBM-NEXT: movl %ebx, %ebp
5562 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
5563 ; X86-BMI1NOTBM-NEXT: .LBB44_4:
5564 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
5565 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5566 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5567 ; X86-BMI1NOTBM-NEXT: calll use64
5568 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
5569 ; X86-BMI1NOTBM-NEXT: andl %ebp, %esi
5570 ; X86-BMI1NOTBM-NEXT: andl %ebx, %edi
5571 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
5572 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
5573 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
5574 ; X86-BMI1NOTBM-NEXT: popl %esi
5575 ; X86-BMI1NOTBM-NEXT: popl %edi
5576 ; X86-BMI1NOTBM-NEXT: popl %ebx
5577 ; X86-BMI1NOTBM-NEXT: popl %ebp
5578 ; X86-BMI1NOTBM-NEXT: retl
5580 ; X86-BMI1BMI2-LABEL: bextr64_c3_load_indexzext:
5581 ; X86-BMI1BMI2: # %bb.0:
5582 ; X86-BMI1BMI2-NEXT: pushl %ebp
5583 ; X86-BMI1BMI2-NEXT: pushl %ebx
5584 ; X86-BMI1BMI2-NEXT: pushl %edi
5585 ; X86-BMI1BMI2-NEXT: pushl %esi
5586 ; X86-BMI1BMI2-NEXT: subl $12, %esp
5587 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
5588 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
5589 ; X86-BMI1BMI2-NEXT: movl (%eax), %esi
5590 ; X86-BMI1BMI2-NEXT: movl 4(%eax), %eax
5591 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
5592 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
5593 ; X86-BMI1BMI2-NEXT: testb $32, %cl
5594 ; X86-BMI1BMI2-NEXT: je .LBB44_2
5595 ; X86-BMI1BMI2-NEXT: # %bb.1:
5596 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
5597 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
5598 ; X86-BMI1BMI2-NEXT: .LBB44_2:
5599 ; X86-BMI1BMI2-NEXT: movb $64, %al
5600 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %al
5601 ; X86-BMI1BMI2-NEXT: movl $-1, %ebp
5602 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ebp, %ebx
5603 ; X86-BMI1BMI2-NEXT: testb $32, %al
5604 ; X86-BMI1BMI2-NEXT: je .LBB44_4
5605 ; X86-BMI1BMI2-NEXT: # %bb.3:
5606 ; X86-BMI1BMI2-NEXT: movl %ebx, %ebp
5607 ; X86-BMI1BMI2-NEXT: xorl %ebx, %ebx
5608 ; X86-BMI1BMI2-NEXT: .LBB44_4:
5609 ; X86-BMI1BMI2-NEXT: subl $8, %esp
5610 ; X86-BMI1BMI2-NEXT: pushl %ebx
5611 ; X86-BMI1BMI2-NEXT: pushl %ebp
5612 ; X86-BMI1BMI2-NEXT: calll use64
5613 ; X86-BMI1BMI2-NEXT: addl $16, %esp
5614 ; X86-BMI1BMI2-NEXT: andl %ebp, %esi
5615 ; X86-BMI1BMI2-NEXT: andl %ebx, %edi
5616 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
5617 ; X86-BMI1BMI2-NEXT: movl %edi, %edx
5618 ; X86-BMI1BMI2-NEXT: addl $12, %esp
5619 ; X86-BMI1BMI2-NEXT: popl %esi
5620 ; X86-BMI1BMI2-NEXT: popl %edi
5621 ; X86-BMI1BMI2-NEXT: popl %ebx
5622 ; X86-BMI1BMI2-NEXT: popl %ebp
5623 ; X86-BMI1BMI2-NEXT: retl
5626 ; X64-NOBMI: # %bb.0:
5648 ; X64-BMI1NOTBM: # %bb.0:
5670 ; X64-BMI1BMI2: # %bb.0:
5699 ; X86-NOBMI-LABEL: bextr64_c4_commutative:
5700 ; X86-NOBMI: # %bb.0:
5701 ; X86-NOBMI-NEXT: pushl %ebp
5702 ; X86-NOBMI-NEXT: pushl %ebx
5703 ; X86-NOBMI-NEXT: pushl %edi
5704 ; X86-NOBMI-NEXT: pushl %esi
5705 ; X86-NOBMI-NEXT: subl $12, %esp
5706 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
5707 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
5708 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
5709 ; X86-NOBMI-NEXT: movl %eax, %edi
5710 ; X86-NOBMI-NEXT: shrl %cl, %edi
5711 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
5712 ; X86-NOBMI-NEXT: testb $32, %cl
5713 ; X86-NOBMI-NEXT: je .LBB45_2
5714 ; X86-NOBMI-NEXT: # %bb.1:
5715 ; X86-NOBMI-NEXT: movl %edi, %esi
5716 ; X86-NOBMI-NEXT: xorl %edi, %edi
5717 ; X86-NOBMI-NEXT: .LBB45_2:
5718 ; X86-NOBMI-NEXT: movb $64, %cl
5719 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
5720 ; X86-NOBMI-NEXT: movl $-1, %ebp
5721 ; X86-NOBMI-NEXT: movl $-1, %ebx
5722 ; X86-NOBMI-NEXT: shrl %cl, %ebx
5723 ; X86-NOBMI-NEXT: testb $32, %cl
5724 ; X86-NOBMI-NEXT: je .LBB45_4
5725 ; X86-NOBMI-NEXT: # %bb.3:
5726 ; X86-NOBMI-NEXT: movl %ebx, %ebp
5727 ; X86-NOBMI-NEXT: xorl %ebx, %ebx
5728 ; X86-NOBMI-NEXT: .LBB45_4:
5729 ; X86-NOBMI-NEXT: subl $8, %esp
5730 ; X86-NOBMI-NEXT: pushl %ebx
5731 ; X86-NOBMI-NEXT: pushl %ebp
5732 ; X86-NOBMI-NEXT: calll use64
5733 ; X86-NOBMI-NEXT: addl $16, %esp
5734 ; X86-NOBMI-NEXT: andl %ebp, %esi
5735 ; X86-NOBMI-NEXT: andl %ebx, %edi
5736 ; X86-NOBMI-NEXT: movl %esi, %eax
5737 ; X86-NOBMI-NEXT: movl %edi, %edx
5738 ; X86-NOBMI-NEXT: addl $12, %esp
5739 ; X86-NOBMI-NEXT: popl %esi
5740 ; X86-NOBMI-NEXT: popl %edi
5741 ; X86-NOBMI-NEXT: popl %ebx
5742 ; X86-NOBMI-NEXT: popl %ebp
5743 ; X86-NOBMI-NEXT: retl
5745 ; X86-BMI1NOTBM-LABEL: bextr64_c4_commutative:
5746 ; X86-BMI1NOTBM: # %bb.0:
5747 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5748 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5749 ; X86-BMI1NOTBM-NEXT: pushl %edi
5750 ; X86-BMI1NOTBM-NEXT: pushl %esi
5751 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
5752 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
5753 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
5754 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
5755 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
5756 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
5757 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
5758 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5759 ; X86-BMI1NOTBM-NEXT: je .LBB45_2
5760 ; X86-BMI1NOTBM-NEXT: # %bb.1:
5761 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
5762 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
5763 ; X86-BMI1NOTBM-NEXT: .LBB45_2:
5764 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
5765 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
5766 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebp
5767 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
5768 ; X86-BMI1NOTBM-NEXT: shrl %cl, %ebx
5769 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5770 ; X86-BMI1NOTBM-NEXT: je .LBB45_4
5771 ; X86-BMI1NOTBM-NEXT: # %bb.3:
5772 ; X86-BMI1NOTBM-NEXT: movl %ebx, %ebp
5773 ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx
5774 ; X86-BMI1NOTBM-NEXT: .LBB45_4:
5775 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
5776 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5777 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5778 ; X86-BMI1NOTBM-NEXT: calll use64
5779 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
5780 ; X86-BMI1NOTBM-NEXT: andl %ebp, %esi
5781 ; X86-BMI1NOTBM-NEXT: andl %ebx, %edi
5782 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
5783 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
5784 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
5785 ; X86-BMI1NOTBM-NEXT: popl %esi
5786 ; X86-BMI1NOTBM-NEXT: popl %edi
5787 ; X86-BMI1NOTBM-NEXT: popl %ebx
5788 ; X86-BMI1NOTBM-NEXT: popl %ebp
5789 ; X86-BMI1NOTBM-NEXT: retl
5791 ; X86-BMI1BMI2-LABEL: bextr64_c4_commutative:
5792 ; X86-BMI1BMI2: # %bb.0:
5793 ; X86-BMI1BMI2-NEXT: pushl %ebp
5794 ; X86-BMI1BMI2-NEXT: pushl %ebx
5795 ; X86-BMI1BMI2-NEXT: pushl %edi
5796 ; X86-BMI1BMI2-NEXT: pushl %esi
5797 ; X86-BMI1BMI2-NEXT: subl $12, %esp
5798 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
5799 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
5800 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
5801 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
5802 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
5803 ; X86-BMI1BMI2-NEXT: testb $32, %cl
5804 ; X86-BMI1BMI2-NEXT: je .LBB45_2
5805 ; X86-BMI1BMI2-NEXT: # %bb.1:
5806 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
5807 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
5808 ; X86-BMI1BMI2-NEXT: .LBB45_2:
5809 ; X86-BMI1BMI2-NEXT: movb $64, %al
5810 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %al
5811 ; X86-BMI1BMI2-NEXT: movl $-1, %ebp
5812 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ebp, %ebx
5813 ; X86-BMI1BMI2-NEXT: testb $32, %al
5814 ; X86-BMI1BMI2-NEXT: je .LBB45_4
5815 ; X86-BMI1BMI2-NEXT: # %bb.3:
5816 ; X86-BMI1BMI2-NEXT: movl %ebx, %ebp
5817 ; X86-BMI1BMI2-NEXT: xorl %ebx, %ebx
5818 ; X86-BMI1BMI2-NEXT: .LBB45_4:
5819 ; X86-BMI1BMI2-NEXT: subl $8, %esp
5820 ; X86-BMI1BMI2-NEXT: pushl %ebx
5821 ; X86-BMI1BMI2-NEXT: pushl %ebp
5822 ; X86-BMI1BMI2-NEXT: calll use64
5823 ; X86-BMI1BMI2-NEXT: addl $16, %esp
5824 ; X86-BMI1BMI2-NEXT: andl %ebp, %esi
5825 ; X86-BMI1BMI2-NEXT: andl %ebx, %edi
5826 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
5827 ; X86-BMI1BMI2-NEXT: movl %edi, %edx
5828 ; X86-BMI1BMI2-NEXT: addl $12, %esp
5829 ; X86-BMI1BMI2-NEXT: popl %esi
5830 ; X86-BMI1BMI2-NEXT: popl %edi
5831 ; X86-BMI1BMI2-NEXT: popl %ebx
5832 ; X86-BMI1BMI2-NEXT: popl %ebp
5833 ; X86-BMI1BMI2-NEXT: retl
5836 ; X64-NOBMI: # %bb.0:
5858 ; X64-BMI1NOTBM: # %bb.0:
5880 ; X64-BMI1BMI2: # %bb.0:
5905 ; X86-NOBMI-LABEL: bextr64_c5_skipextrauses:
5906 ; X86-NOBMI: # %bb.0:
5907 ; X86-NOBMI-NEXT: pushl %ebp
5908 ; X86-NOBMI-NEXT: pushl %ebx
5909 ; X86-NOBMI-NEXT: pushl %edi
5910 ; X86-NOBMI-NEXT: pushl %esi
5911 ; X86-NOBMI-NEXT: subl $12, %esp
5912 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
5913 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
5914 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
5915 ; X86-NOBMI-NEXT: movl %eax, %edi
5916 ; X86-NOBMI-NEXT: shrl %cl, %edi
5917 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
5918 ; X86-NOBMI-NEXT: testb $32, %cl
5919 ; X86-NOBMI-NEXT: je .LBB46_2
5920 ; X86-NOBMI-NEXT: # %bb.1:
5921 ; X86-NOBMI-NEXT: movl %edi, %esi
5922 ; X86-NOBMI-NEXT: xorl %edi, %edi
5923 ; X86-NOBMI-NEXT: .LBB46_2:
5924 ; X86-NOBMI-NEXT: movb $64, %cl
5925 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
5926 ; X86-NOBMI-NEXT: movl $-1, %ebx
5927 ; X86-NOBMI-NEXT: movl $-1, %ebp
5928 ; X86-NOBMI-NEXT: shrl %cl, %ebp
5929 ; X86-NOBMI-NEXT: testb $32, %cl
5930 ; X86-NOBMI-NEXT: je .LBB46_4
5931 ; X86-NOBMI-NEXT: # %bb.3:
5932 ; X86-NOBMI-NEXT: movl %ebp, %ebx
5933 ; X86-NOBMI-NEXT: xorl %ebp, %ebp
5934 ; X86-NOBMI-NEXT: .LBB46_4:
5935 ; X86-NOBMI-NEXT: subl $8, %esp
5936 ; X86-NOBMI-NEXT: pushl %ebp
5937 ; X86-NOBMI-NEXT: pushl %ebx
5938 ; X86-NOBMI-NEXT: calll use64
5939 ; X86-NOBMI-NEXT: addl $16, %esp
5940 ; X86-NOBMI-NEXT: andl %ebx, %esi
5941 ; X86-NOBMI-NEXT: andl %ebp, %edi
5942 ; X86-NOBMI-NEXT: subl $8, %esp
5943 ; X86-NOBMI-NEXT: pushl {{[0-9]+}}(%esp)
5944 ; X86-NOBMI-NEXT: pushl {{[0-9]+}}(%esp)
5945 ; X86-NOBMI-NEXT: calll use64
5946 ; X86-NOBMI-NEXT: addl $16, %esp
5947 ; X86-NOBMI-NEXT: movl %esi, %eax
5948 ; X86-NOBMI-NEXT: movl %edi, %edx
5949 ; X86-NOBMI-NEXT: addl $12, %esp
5950 ; X86-NOBMI-NEXT: popl %esi
5951 ; X86-NOBMI-NEXT: popl %edi
5952 ; X86-NOBMI-NEXT: popl %ebx
5953 ; X86-NOBMI-NEXT: popl %ebp
5954 ; X86-NOBMI-NEXT: retl
5956 ; X86-BMI1NOTBM-LABEL: bextr64_c5_skipextrauses:
5957 ; X86-BMI1NOTBM: # %bb.0:
5958 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5959 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5960 ; X86-BMI1NOTBM-NEXT: pushl %edi
5961 ; X86-BMI1NOTBM-NEXT: pushl %esi
5962 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
5963 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
5964 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
5965 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %ecx
5966 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
5967 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edi
5968 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
5969 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5970 ; X86-BMI1NOTBM-NEXT: je .LBB46_2
5971 ; X86-BMI1NOTBM-NEXT: # %bb.1:
5972 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
5973 ; X86-BMI1NOTBM-NEXT: xorl %edi, %edi
5974 ; X86-BMI1NOTBM-NEXT: .LBB46_2:
5975 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
5976 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
5977 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebx
5978 ; X86-BMI1NOTBM-NEXT: movl $-1, %ebp
5979 ; X86-BMI1NOTBM-NEXT: shrl %cl, %ebp
5980 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
5981 ; X86-BMI1NOTBM-NEXT: je .LBB46_4
5982 ; X86-BMI1NOTBM-NEXT: # %bb.3:
5983 ; X86-BMI1NOTBM-NEXT: movl %ebp, %ebx
5984 ; X86-BMI1NOTBM-NEXT: xorl %ebp, %ebp
5985 ; X86-BMI1NOTBM-NEXT: .LBB46_4:
5986 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
5987 ; X86-BMI1NOTBM-NEXT: pushl %ebp
5988 ; X86-BMI1NOTBM-NEXT: pushl %ebx
5989 ; X86-BMI1NOTBM-NEXT: calll use64
5990 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
5991 ; X86-BMI1NOTBM-NEXT: andl %ebx, %esi
5992 ; X86-BMI1NOTBM-NEXT: andl %ebp, %edi
5993 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
5994 ; X86-BMI1NOTBM-NEXT: pushl {{[0-9]+}}(%esp)
5995 ; X86-BMI1NOTBM-NEXT: pushl {{[0-9]+}}(%esp)
5996 ; X86-BMI1NOTBM-NEXT: calll use64
5997 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
5998 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
5999 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
6000 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
6001 ; X86-BMI1NOTBM-NEXT: popl %esi
6002 ; X86-BMI1NOTBM-NEXT: popl %edi
6003 ; X86-BMI1NOTBM-NEXT: popl %ebx
6004 ; X86-BMI1NOTBM-NEXT: popl %ebp
6005 ; X86-BMI1NOTBM-NEXT: retl
6007 ; X86-BMI1BMI2-LABEL: bextr64_c5_skipextrauses:
6008 ; X86-BMI1BMI2: # %bb.0:
6009 ; X86-BMI1BMI2-NEXT: pushl %ebp
6010 ; X86-BMI1BMI2-NEXT: pushl %ebx
6011 ; X86-BMI1BMI2-NEXT: pushl %edi
6012 ; X86-BMI1BMI2-NEXT: pushl %esi
6013 ; X86-BMI1BMI2-NEXT: subl $12, %esp
6014 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
6015 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
6016 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
6017 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
6018 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edi
6019 ; X86-BMI1BMI2-NEXT: testb $32, %cl
6020 ; X86-BMI1BMI2-NEXT: je .LBB46_2
6021 ; X86-BMI1BMI2-NEXT: # %bb.1:
6022 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
6023 ; X86-BMI1BMI2-NEXT: xorl %edi, %edi
6024 ; X86-BMI1BMI2-NEXT: .LBB46_2:
6025 ; X86-BMI1BMI2-NEXT: movb $64, %al
6026 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %al
6027 ; X86-BMI1BMI2-NEXT: movl $-1, %ebp
6028 ; X86-BMI1BMI2-NEXT: shrxl %eax, %ebp, %ebx
6029 ; X86-BMI1BMI2-NEXT: testb $32, %al
6030 ; X86-BMI1BMI2-NEXT: je .LBB46_4
6031 ; X86-BMI1BMI2-NEXT: # %bb.3:
6032 ; X86-BMI1BMI2-NEXT: movl %ebx, %ebp
6033 ; X86-BMI1BMI2-NEXT: xorl %ebx, %ebx
6034 ; X86-BMI1BMI2-NEXT: .LBB46_4:
6035 ; X86-BMI1BMI2-NEXT: subl $8, %esp
6036 ; X86-BMI1BMI2-NEXT: pushl %ebx
6037 ; X86-BMI1BMI2-NEXT: pushl %ebp
6038 ; X86-BMI1BMI2-NEXT: calll use64
6039 ; X86-BMI1BMI2-NEXT: addl $16, %esp
6040 ; X86-BMI1BMI2-NEXT: andl %ebp, %esi
6041 ; X86-BMI1BMI2-NEXT: andl %ebx, %edi
6042 ; X86-BMI1BMI2-NEXT: subl $8, %esp
6043 ; X86-BMI1BMI2-NEXT: pushl {{[0-9]+}}(%esp)
6044 ; X86-BMI1BMI2-NEXT: pushl {{[0-9]+}}(%esp)
6045 ; X86-BMI1BMI2-NEXT: calll use64
6046 ; X86-BMI1BMI2-NEXT: addl $16, %esp
6047 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
6048 ; X86-BMI1BMI2-NEXT: movl %edi, %edx
6049 ; X86-BMI1BMI2-NEXT: addl $12, %esp
6050 ; X86-BMI1BMI2-NEXT: popl %esi
6051 ; X86-BMI1BMI2-NEXT: popl %edi
6052 ; X86-BMI1BMI2-NEXT: popl %ebx
6053 ; X86-BMI1BMI2-NEXT: popl %ebp
6054 ; X86-BMI1BMI2-NEXT: retl
6057 ; X64-NOBMI: # %bb.0:
6081 ; X64-BMI1NOTBM: # %bb.0:
6105 ; X64-BMI1BMI2: # %bb.0:
6138 ; X86-NOBMI-LABEL: bextr64_32_c0:
6139 ; X86-NOBMI: # %bb.0:
6140 ; X86-NOBMI-NEXT: pushl %esi
6141 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6142 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
6143 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
6144 ; X86-NOBMI-NEXT: movl %esi, %edx
6145 ; X86-NOBMI-NEXT: shrl %cl, %edx
6146 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %eax
6147 ; X86-NOBMI-NEXT: testb $32, %cl
6148 ; X86-NOBMI-NEXT: jne .LBB47_2
6149 ; X86-NOBMI-NEXT: # %bb.1:
6150 ; X86-NOBMI-NEXT: movl %eax, %edx
6151 ; X86-NOBMI-NEXT: .LBB47_2:
6152 ; X86-NOBMI-NEXT: movb $64, %cl
6153 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6154 ; X86-NOBMI-NEXT: movl $-1, %eax
6155 ; X86-NOBMI-NEXT: shrl %cl, %eax
6156 ; X86-NOBMI-NEXT: testb $32, %cl
6157 ; X86-NOBMI-NEXT: jne .LBB47_4
6158 ; X86-NOBMI-NEXT: # %bb.3:
6159 ; X86-NOBMI-NEXT: movl $-1, %eax
6160 ; X86-NOBMI-NEXT: .LBB47_4:
6161 ; X86-NOBMI-NEXT: andl %edx, %eax
6162 ; X86-NOBMI-NEXT: popl %esi
6163 ; X86-NOBMI-NEXT: retl
6165 ; X86-BMI1NOTBM-LABEL: bextr64_32_c0:
6166 ; X86-BMI1NOTBM: # %bb.0:
6167 ; X86-BMI1NOTBM-NEXT: pushl %esi
6168 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
6169 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
6170 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
6171 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
6172 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
6173 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %esi, %eax
6174 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
6175 ; X86-BMI1NOTBM-NEXT: jne .LBB47_2
6176 ; X86-BMI1NOTBM-NEXT: # %bb.1:
6177 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
6178 ; X86-BMI1NOTBM-NEXT: .LBB47_2:
6179 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
6180 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
6181 ; X86-BMI1NOTBM-NEXT: movl $-1, %eax
6182 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
6183 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
6184 ; X86-BMI1NOTBM-NEXT: jne .LBB47_4
6185 ; X86-BMI1NOTBM-NEXT: # %bb.3:
6186 ; X86-BMI1NOTBM-NEXT: movl $-1, %eax
6187 ; X86-BMI1NOTBM-NEXT: .LBB47_4:
6188 ; X86-BMI1NOTBM-NEXT: andl %edx, %eax
6189 ; X86-BMI1NOTBM-NEXT: popl %esi
6190 ; X86-BMI1NOTBM-NEXT: retl
6192 ; X86-BMI1BMI2-LABEL: bextr64_32_c0:
6193 ; X86-BMI1BMI2: # %bb.0:
6194 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
6195 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
6196 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
6197 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %edx
6198 ; X86-BMI1BMI2-NEXT: testb $32, %cl
6199 ; X86-BMI1BMI2-NEXT: je .LBB47_2
6200 ; X86-BMI1BMI2-NEXT: # %bb.1:
6201 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edx
6202 ; X86-BMI1BMI2-NEXT: .LBB47_2:
6203 ; X86-BMI1BMI2-NEXT: movb $64, %cl
6204 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl
6205 ; X86-BMI1BMI2-NEXT: movl $-1, %eax
6206 ; X86-BMI1BMI2-NEXT: testb $32, %cl
6207 ; X86-BMI1BMI2-NEXT: je .LBB47_4
6208 ; X86-BMI1BMI2-NEXT: # %bb.3:
6209 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %eax
6210 ; X86-BMI1BMI2-NEXT: .LBB47_4:
6211 ; X86-BMI1BMI2-NEXT: andl %edx, %eax
6212 ; X86-BMI1BMI2-NEXT: retl
6215 ; X64-NOBMI: # %bb.0:
6228 ; X64-BMI1NOTBM: # %bb.0:
6237 ; X64-BMI1BMI2: # %bb.0:
6251 ; X86-NOBMI-LABEL: bextr64_32_c1:
6252 ; X86-NOBMI: # %bb.0:
6253 ; X86-NOBMI-NEXT: pushl %esi
6254 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6255 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
6256 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
6257 ; X86-NOBMI-NEXT: movl %esi, %eax
6258 ; X86-NOBMI-NEXT: shrl %cl, %eax
6259 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %edx
6260 ; X86-NOBMI-NEXT: testb $32, %cl
6261 ; X86-NOBMI-NEXT: jne .LBB48_2
6262 ; X86-NOBMI-NEXT: # %bb.1:
6263 ; X86-NOBMI-NEXT: movl %edx, %eax
6264 ; X86-NOBMI-NEXT: .LBB48_2:
6265 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
6266 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6267 ; X86-NOBMI-NEXT: shll %cl, %eax
6268 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
6269 ; X86-NOBMI-NEXT: shrl %cl, %eax
6270 ; X86-NOBMI-NEXT: popl %esi
6271 ; X86-NOBMI-NEXT: retl
6273 ; X86-BMI1NOTBM-LABEL: bextr64_32_c1:
6274 ; X86-BMI1NOTBM: # %bb.0:
6275 ; X86-BMI1NOTBM-NEXT: pushl %edi
6276 ; X86-BMI1NOTBM-NEXT: pushl %esi
6277 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
6278 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
6279 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
6280 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
6281 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
6282 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
6283 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
6284 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
6285 ; X86-BMI1NOTBM-NEXT: jne .LBB48_2
6286 ; X86-BMI1NOTBM-NEXT: # %bb.1:
6287 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
6288 ; X86-BMI1NOTBM-NEXT: .LBB48_2:
6289 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
6290 ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax
6291 ; X86-BMI1NOTBM-NEXT: popl %esi
6292 ; X86-BMI1NOTBM-NEXT: popl %edi
6293 ; X86-BMI1NOTBM-NEXT: retl
6295 ; X86-BMI1BMI2-LABEL: bextr64_32_c1:
6296 ; X86-BMI1BMI2: # %bb.0:
6297 ; X86-BMI1BMI2-NEXT: pushl %esi
6298 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
6299 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
6300 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
6301 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
6302 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
6303 ; X86-BMI1BMI2-NEXT: testb $32, %cl
6304 ; X86-BMI1BMI2-NEXT: je .LBB48_2
6305 ; X86-BMI1BMI2-NEXT: # %bb.1:
6306 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
6307 ; X86-BMI1BMI2-NEXT: .LBB48_2:
6308 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %eax
6309 ; X86-BMI1BMI2-NEXT: popl %esi
6310 ; X86-BMI1BMI2-NEXT: retl
6313 ; X64-NOBMI: # %bb.0:
6326 ; X64-BMI1NOTBM: # %bb.0:
6335 ; X64-BMI1BMI2: # %bb.0:
6350 ; X86-NOBMI-LABEL: bextr64_32_c2:
6351 ; X86-NOBMI: # %bb.0:
6352 ; X86-NOBMI-NEXT: pushl %esi
6353 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6354 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
6355 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
6356 ; X86-NOBMI-NEXT: movl %esi, %eax
6357 ; X86-NOBMI-NEXT: shrl %cl, %eax
6358 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %edx
6359 ; X86-NOBMI-NEXT: testb $32, %cl
6360 ; X86-NOBMI-NEXT: jne .LBB49_2
6361 ; X86-NOBMI-NEXT: # %bb.1:
6362 ; X86-NOBMI-NEXT: movl %edx, %eax
6363 ; X86-NOBMI-NEXT: .LBB49_2:
6364 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
6365 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6366 ; X86-NOBMI-NEXT: shll %cl, %eax
6367 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
6368 ; X86-NOBMI-NEXT: shrl %cl, %eax
6369 ; X86-NOBMI-NEXT: popl %esi
6370 ; X86-NOBMI-NEXT: retl
6372 ; X86-BMI1NOTBM-LABEL: bextr64_32_c2:
6373 ; X86-BMI1NOTBM: # %bb.0:
6374 ; X86-BMI1NOTBM-NEXT: pushl %edi
6375 ; X86-BMI1NOTBM-NEXT: pushl %esi
6376 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
6377 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
6378 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
6379 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
6380 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
6381 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
6382 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
6383 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
6384 ; X86-BMI1NOTBM-NEXT: jne .LBB49_2
6385 ; X86-BMI1NOTBM-NEXT: # %bb.1:
6386 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
6387 ; X86-BMI1NOTBM-NEXT: .LBB49_2:
6388 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
6389 ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax
6390 ; X86-BMI1NOTBM-NEXT: popl %esi
6391 ; X86-BMI1NOTBM-NEXT: popl %edi
6392 ; X86-BMI1NOTBM-NEXT: retl
6394 ; X86-BMI1BMI2-LABEL: bextr64_32_c2:
6395 ; X86-BMI1BMI2: # %bb.0:
6396 ; X86-BMI1BMI2-NEXT: pushl %esi
6397 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
6398 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
6399 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
6400 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
6401 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
6402 ; X86-BMI1BMI2-NEXT: testb $32, %cl
6403 ; X86-BMI1BMI2-NEXT: je .LBB49_2
6404 ; X86-BMI1BMI2-NEXT: # %bb.1:
6405 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
6406 ; X86-BMI1BMI2-NEXT: .LBB49_2:
6407 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %eax
6408 ; X86-BMI1BMI2-NEXT: popl %esi
6409 ; X86-BMI1BMI2-NEXT: retl
6412 ; X64-NOBMI: # %bb.0:
6425 ; X64-BMI1NOTBM: # %bb.0:
6434 ; X64-BMI1BMI2: # %bb.0:
6450 ; X86-NOBMI-LABEL: bextr64_32_c3:
6451 ; X86-NOBMI: # %bb.0:
6452 ; X86-NOBMI-NEXT: pushl %esi
6453 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6454 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
6455 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
6456 ; X86-NOBMI-NEXT: movl %esi, %edx
6457 ; X86-NOBMI-NEXT: shrl %cl, %edx
6458 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %eax
6459 ; X86-NOBMI-NEXT: testb $32, %cl
6460 ; X86-NOBMI-NEXT: jne .LBB50_2
6461 ; X86-NOBMI-NEXT: # %bb.1:
6462 ; X86-NOBMI-NEXT: movl %eax, %edx
6463 ; X86-NOBMI-NEXT: .LBB50_2:
6464 ; X86-NOBMI-NEXT: movb $64, %cl
6465 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6466 ; X86-NOBMI-NEXT: xorl %eax, %eax
6467 ; X86-NOBMI-NEXT: movl $-1, %esi
6468 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi
6469 ; X86-NOBMI-NEXT: testb $32, %cl
6470 ; X86-NOBMI-NEXT: jne .LBB50_4
6471 ; X86-NOBMI-NEXT: # %bb.3:
6472 ; X86-NOBMI-NEXT: movl %esi, %eax
6473 ; X86-NOBMI-NEXT: .LBB50_4:
6474 ; X86-NOBMI-NEXT: andl %edx, %eax
6475 ; X86-NOBMI-NEXT: popl %esi
6476 ; X86-NOBMI-NEXT: retl
6478 ; X86-BMI1NOTBM-LABEL: bextr64_32_c3:
6479 ; X86-BMI1NOTBM: # %bb.0:
6480 ; X86-BMI1NOTBM-NEXT: pushl %esi
6481 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
6482 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
6483 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
6484 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
6485 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
6486 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %esi, %eax
6487 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
6488 ; X86-BMI1NOTBM-NEXT: jne .LBB50_2
6489 ; X86-BMI1NOTBM-NEXT: # %bb.1:
6490 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
6491 ; X86-BMI1NOTBM-NEXT: .LBB50_2:
6492 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
6493 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
6494 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
6495 ; X86-BMI1NOTBM-NEXT: movl $-1, %esi
6496 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi
6497 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
6498 ; X86-BMI1NOTBM-NEXT: jne .LBB50_4
6499 ; X86-BMI1NOTBM-NEXT: # %bb.3:
6500 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
6501 ; X86-BMI1NOTBM-NEXT: .LBB50_4:
6502 ; X86-BMI1NOTBM-NEXT: andl %edx, %eax
6503 ; X86-BMI1NOTBM-NEXT: popl %esi
6504 ; X86-BMI1NOTBM-NEXT: retl
6506 ; X86-BMI1BMI2-LABEL: bextr64_32_c3:
6507 ; X86-BMI1BMI2: # %bb.0:
6508 ; X86-BMI1BMI2-NEXT: pushl %esi
6509 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
6510 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
6511 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
6512 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %edx
6513 ; X86-BMI1BMI2-NEXT: testb $32, %cl
6514 ; X86-BMI1BMI2-NEXT: je .LBB50_2
6515 ; X86-BMI1BMI2-NEXT: # %bb.1:
6516 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edx
6517 ; X86-BMI1BMI2-NEXT: .LBB50_2:
6518 ; X86-BMI1BMI2-NEXT: movb $64, %cl
6519 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl
6520 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
6521 ; X86-BMI1BMI2-NEXT: movl $-1, %esi
6522 ; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi
6523 ; X86-BMI1BMI2-NEXT: testb $32, %cl
6524 ; X86-BMI1BMI2-NEXT: jne .LBB50_4
6525 ; X86-BMI1BMI2-NEXT: # %bb.3:
6526 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
6527 ; X86-BMI1BMI2-NEXT: .LBB50_4:
6528 ; X86-BMI1BMI2-NEXT: andl %edx, %eax
6529 ; X86-BMI1BMI2-NEXT: popl %esi
6530 ; X86-BMI1BMI2-NEXT: retl
6533 ; X64-NOBMI: # %bb.0:
6538 ; X64-NOBMI-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF
6546 ; X64-BMI1NOTBM: # %bb.0:
6551 ; X64-BMI1NOTBM-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF
6559 ; X64-BMI1BMI2: # %bb.0:
6562 ; X64-BMI1BMI2-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF
6580 ; X86-NOBMI-LABEL: bextr32_d0:
6581 ; X86-NOBMI: # %bb.0:
6582 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6583 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
6584 ; X86-NOBMI-NEXT: shrl %cl, %eax
6585 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
6586 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6587 ; X86-NOBMI-NEXT: shll %cl, %eax
6588 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
6589 ; X86-NOBMI-NEXT: shrl %cl, %eax
6590 ; X86-NOBMI-NEXT: retl
6592 ; X86-BMI1NOTBM-LABEL: bextr32_d0:
6593 ; X86-BMI1NOTBM: # %bb.0:
6594 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
6595 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
6596 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
6597 ; X86-BMI1NOTBM-NEXT: orl %eax, %ecx
6598 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %eax
6599 ; X86-BMI1NOTBM-NEXT: retl
6601 ; X86-BMI1BMI2-LABEL: bextr32_d0:
6602 ; X86-BMI1BMI2: # %bb.0:
6603 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
6604 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
6605 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %ecx
6606 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
6607 ; X86-BMI1BMI2-NEXT: retl
6610 ; X64-NOBMI: # %bb.0:
6622 ; X64-BMI1NOTBM: # %bb.0:
6630 ; X64-BMI1BMI2: # %bb.0:
6642 ; X86-NOBMI-LABEL: bextr32_d1_indexzext:
6643 ; X86-NOBMI: # %bb.0:
6644 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6645 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
6646 ; X86-NOBMI-NEXT: shrl %cl, %eax
6647 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
6648 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6649 ; X86-NOBMI-NEXT: shll %cl, %eax
6650 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
6651 ; X86-NOBMI-NEXT: shrl %cl, %eax
6652 ; X86-NOBMI-NEXT: retl
6654 ; X86-BMI1NOTBM-LABEL: bextr32_d1_indexzext:
6655 ; X86-BMI1NOTBM: # %bb.0:
6656 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
6657 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
6658 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
6659 ; X86-BMI1NOTBM-NEXT: orl %eax, %ecx
6660 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %eax
6661 ; X86-BMI1NOTBM-NEXT: retl
6663 ; X86-BMI1BMI2-LABEL: bextr32_d1_indexzext:
6664 ; X86-BMI1BMI2: # %bb.0:
6665 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
6666 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
6667 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %ecx
6668 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
6669 ; X86-BMI1BMI2-NEXT: retl
6672 ; X64-NOBMI: # %bb.0:
6684 ; X64-BMI1NOTBM: # %bb.0:
6692 ; X64-BMI1BMI2: # %bb.0:
6706 ; X86-NOBMI-LABEL: bextr32_d2_load:
6707 ; X86-NOBMI: # %bb.0:
6708 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6709 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
6710 ; X86-NOBMI-NEXT: movl (%eax), %eax
6711 ; X86-NOBMI-NEXT: shrl %cl, %eax
6712 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
6713 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6714 ; X86-NOBMI-NEXT: shll %cl, %eax
6715 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
6716 ; X86-NOBMI-NEXT: shrl %cl, %eax
6717 ; X86-NOBMI-NEXT: retl
6719 ; X86-BMI1NOTBM-LABEL: bextr32_d2_load:
6720 ; X86-BMI1NOTBM: # %bb.0:
6721 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
6722 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
6723 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
6724 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %edx
6725 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
6726 ; X86-BMI1NOTBM-NEXT: bextrl %edx, (%eax), %eax
6727 ; X86-BMI1NOTBM-NEXT: retl
6729 ; X86-BMI1BMI2-LABEL: bextr32_d2_load:
6730 ; X86-BMI1BMI2: # %bb.0:
6731 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
6732 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
6733 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %dl
6734 ; X86-BMI1BMI2-NEXT: shrxl %edx, (%ecx), %ecx
6735 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
6736 ; X86-BMI1BMI2-NEXT: retl
6739 ; X64-NOBMI: # %bb.0:
6751 ; X64-BMI1NOTBM: # %bb.0:
6759 ; X64-BMI1BMI2: # %bb.0:
6772 ; X86-NOBMI-LABEL: bextr32_d3_load_indexzext:
6773 ; X86-NOBMI: # %bb.0:
6774 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6775 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
6776 ; X86-NOBMI-NEXT: movl (%eax), %eax
6777 ; X86-NOBMI-NEXT: shrl %cl, %eax
6778 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
6779 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6780 ; X86-NOBMI-NEXT: shll %cl, %eax
6781 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
6782 ; X86-NOBMI-NEXT: shrl %cl, %eax
6783 ; X86-NOBMI-NEXT: retl
6785 ; X86-BMI1NOTBM-LABEL: bextr32_d3_load_indexzext:
6786 ; X86-BMI1NOTBM: # %bb.0:
6787 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
6788 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
6789 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
6790 ; X86-BMI1NOTBM-NEXT: movzbl {{[0-9]+}}(%esp), %edx
6791 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
6792 ; X86-BMI1NOTBM-NEXT: bextrl %edx, (%eax), %eax
6793 ; X86-BMI1NOTBM-NEXT: retl
6795 ; X86-BMI1BMI2-LABEL: bextr32_d3_load_indexzext:
6796 ; X86-BMI1BMI2: # %bb.0:
6797 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
6798 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
6799 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %dl
6800 ; X86-BMI1BMI2-NEXT: shrxl %edx, (%ecx), %ecx
6801 ; X86-BMI1BMI2-NEXT: bzhil %eax, %ecx, %eax
6802 ; X86-BMI1BMI2-NEXT: retl
6805 ; X64-NOBMI: # %bb.0:
6817 ; X64-BMI1NOTBM: # %bb.0:
6825 ; X64-BMI1BMI2: # %bb.0:
6840 ; X86-NOBMI-LABEL: bextr32_d5_skipextrauses:
6841 ; X86-NOBMI: # %bb.0:
6842 ; X86-NOBMI-NEXT: pushl %esi
6843 ; X86-NOBMI-NEXT: subl $8, %esp
6844 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
6845 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
6846 ; X86-NOBMI-NEXT: movl %eax, %ecx
6847 ; X86-NOBMI-NEXT: shrl %cl, %esi
6848 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
6849 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6850 ; X86-NOBMI-NEXT: shll %cl, %esi
6851 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
6852 ; X86-NOBMI-NEXT: shrl %cl, %esi
6853 ; X86-NOBMI-NEXT: movl %eax, (%esp)
6854 ; X86-NOBMI-NEXT: calll use32
6855 ; X86-NOBMI-NEXT: movl %esi, %eax
6856 ; X86-NOBMI-NEXT: addl $8, %esp
6857 ; X86-NOBMI-NEXT: popl %esi
6858 ; X86-NOBMI-NEXT: retl
6860 ; X86-BMI1NOTBM-LABEL: bextr32_d5_skipextrauses:
6861 ; X86-BMI1NOTBM: # %bb.0:
6862 ; X86-BMI1NOTBM-NEXT: pushl %esi
6863 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
6864 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
6865 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
6866 ; X86-BMI1NOTBM-NEXT: shll $8, %ecx
6867 ; X86-BMI1NOTBM-NEXT: movzbl %al, %edx
6868 ; X86-BMI1NOTBM-NEXT: orl %ecx, %edx
6869 ; X86-BMI1NOTBM-NEXT: bextrl %edx, {{[0-9]+}}(%esp), %esi
6870 ; X86-BMI1NOTBM-NEXT: movl %eax, (%esp)
6871 ; X86-BMI1NOTBM-NEXT: calll use32
6872 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
6873 ; X86-BMI1NOTBM-NEXT: addl $8, %esp
6874 ; X86-BMI1NOTBM-NEXT: popl %esi
6875 ; X86-BMI1NOTBM-NEXT: retl
6877 ; X86-BMI1BMI2-LABEL: bextr32_d5_skipextrauses:
6878 ; X86-BMI1BMI2: # %bb.0:
6879 ; X86-BMI1BMI2-NEXT: pushl %esi
6880 ; X86-BMI1BMI2-NEXT: subl $8, %esp
6881 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
6882 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
6883 ; X86-BMI1BMI2-NEXT: shrxl %ecx, {{[0-9]+}}(%esp), %edx
6884 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %esi
6885 ; X86-BMI1BMI2-NEXT: movl %ecx, (%esp)
6886 ; X86-BMI1BMI2-NEXT: calll use32
6887 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
6888 ; X86-BMI1BMI2-NEXT: addl $8, %esp
6889 ; X86-BMI1BMI2-NEXT: popl %esi
6890 ; X86-BMI1BMI2-NEXT: retl
6893 ; X64-NOBMI: # %bb.0:
6909 ; X64-BMI1NOTBM: # %bb.0:
6922 ; X64-BMI1BMI2: # %bb.0:
6942 ; X86-NOBMI-LABEL: bextr64_d0:
6943 ; X86-NOBMI: # %bb.0:
6944 ; X86-NOBMI-NEXT: pushl %ebx
6945 ; X86-NOBMI-NEXT: pushl %edi
6946 ; X86-NOBMI-NEXT: pushl %esi
6947 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
6948 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
6949 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
6950 ; X86-NOBMI-NEXT: movl %edx, %eax
6951 ; X86-NOBMI-NEXT: shrl %cl, %eax
6952 ; X86-NOBMI-NEXT: shrdl %cl, %edx, %edi
6953 ; X86-NOBMI-NEXT: xorl %esi, %esi
6954 ; X86-NOBMI-NEXT: testb $32, %cl
6955 ; X86-NOBMI-NEXT: je .LBB56_2
6956 ; X86-NOBMI-NEXT: # %bb.1:
6957 ; X86-NOBMI-NEXT: movl %eax, %edi
6958 ; X86-NOBMI-NEXT: xorl %eax, %eax
6959 ; X86-NOBMI-NEXT: .LBB56_2:
6960 ; X86-NOBMI-NEXT: movb $64, %cl
6961 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
6962 ; X86-NOBMI-NEXT: shldl %cl, %edi, %eax
6963 ; X86-NOBMI-NEXT: shll %cl, %edi
6964 ; X86-NOBMI-NEXT: testb $32, %cl
6965 ; X86-NOBMI-NEXT: movl %edi, %ebx
6966 ; X86-NOBMI-NEXT: jne .LBB56_4
6967 ; X86-NOBMI-NEXT: # %bb.3:
6968 ; X86-NOBMI-NEXT: movl %eax, %ebx
6969 ; X86-NOBMI-NEXT: .LBB56_4:
6970 ; X86-NOBMI-NEXT: movl %ebx, %eax
6971 ; X86-NOBMI-NEXT: shrl %cl, %eax
6972 ; X86-NOBMI-NEXT: testb $32, %cl
6973 ; X86-NOBMI-NEXT: movl $0, %edx
6974 ; X86-NOBMI-NEXT: jne .LBB56_6
6975 ; X86-NOBMI-NEXT: # %bb.5:
6976 ; X86-NOBMI-NEXT: movl %edi, %esi
6977 ; X86-NOBMI-NEXT: movl %eax, %edx
6978 ; X86-NOBMI-NEXT: .LBB56_6:
6979 ; X86-NOBMI-NEXT: shrdl %cl, %ebx, %esi
6980 ; X86-NOBMI-NEXT: testb $32, %cl
6981 ; X86-NOBMI-NEXT: jne .LBB56_8
6982 ; X86-NOBMI-NEXT: # %bb.7:
6983 ; X86-NOBMI-NEXT: movl %esi, %eax
6984 ; X86-NOBMI-NEXT: .LBB56_8:
6985 ; X86-NOBMI-NEXT: popl %esi
6986 ; X86-NOBMI-NEXT: popl %edi
6987 ; X86-NOBMI-NEXT: popl %ebx
6988 ; X86-NOBMI-NEXT: retl
6990 ; X86-BMI1NOTBM-LABEL: bextr64_d0:
6991 ; X86-BMI1NOTBM: # %bb.0:
6992 ; X86-BMI1NOTBM-NEXT: pushl %ebx
6993 ; X86-BMI1NOTBM-NEXT: pushl %edi
6994 ; X86-BMI1NOTBM-NEXT: pushl %esi
6995 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
6996 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
6997 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edx
6998 ; X86-BMI1NOTBM-NEXT: movl %edx, %eax
6999 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7000 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %edi
7001 ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi
7002 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7003 ; X86-BMI1NOTBM-NEXT: je .LBB56_2
7004 ; X86-BMI1NOTBM-NEXT: # %bb.1:
7005 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
7006 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
7007 ; X86-BMI1NOTBM-NEXT: .LBB56_2:
7008 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
7009 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
7010 ; X86-BMI1NOTBM-NEXT: shldl %cl, %edi, %eax
7011 ; X86-BMI1NOTBM-NEXT: shll %cl, %edi
7012 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7013 ; X86-BMI1NOTBM-NEXT: movl %edi, %ebx
7014 ; X86-BMI1NOTBM-NEXT: jne .LBB56_4
7015 ; X86-BMI1NOTBM-NEXT: # %bb.3:
7016 ; X86-BMI1NOTBM-NEXT: movl %eax, %ebx
7017 ; X86-BMI1NOTBM-NEXT: .LBB56_4:
7018 ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax
7019 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7020 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7021 ; X86-BMI1NOTBM-NEXT: movl $0, %edx
7022 ; X86-BMI1NOTBM-NEXT: jne .LBB56_6
7023 ; X86-BMI1NOTBM-NEXT: # %bb.5:
7024 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
7025 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
7026 ; X86-BMI1NOTBM-NEXT: .LBB56_6:
7027 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %esi
7028 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7029 ; X86-BMI1NOTBM-NEXT: jne .LBB56_8
7030 ; X86-BMI1NOTBM-NEXT: # %bb.7:
7031 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
7032 ; X86-BMI1NOTBM-NEXT: .LBB56_8:
7033 ; X86-BMI1NOTBM-NEXT: popl %esi
7034 ; X86-BMI1NOTBM-NEXT: popl %edi
7035 ; X86-BMI1NOTBM-NEXT: popl %ebx
7036 ; X86-BMI1NOTBM-NEXT: retl
7038 ; X86-BMI1BMI2-LABEL: bextr64_d0:
7039 ; X86-BMI1BMI2: # %bb.0:
7040 ; X86-BMI1BMI2-NEXT: pushl %edi
7041 ; X86-BMI1BMI2-NEXT: pushl %esi
7042 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
7043 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
7044 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
7045 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
7046 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %esi
7047 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
7048 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7049 ; X86-BMI1BMI2-NEXT: je .LBB56_2
7050 ; X86-BMI1BMI2-NEXT: # %bb.1:
7051 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
7052 ; X86-BMI1BMI2-NEXT: xorl %esi, %esi
7053 ; X86-BMI1BMI2-NEXT: .LBB56_2:
7054 ; X86-BMI1BMI2-NEXT: movb $64, %cl
7055 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl
7056 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %esi
7057 ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi
7058 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7059 ; X86-BMI1BMI2-NEXT: je .LBB56_4
7060 ; X86-BMI1BMI2-NEXT: # %bb.3:
7061 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
7062 ; X86-BMI1BMI2-NEXT: movl $0, %edi
7063 ; X86-BMI1BMI2-NEXT: .LBB56_4:
7064 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax
7065 ; X86-BMI1BMI2-NEXT: jne .LBB56_6
7066 ; X86-BMI1BMI2-NEXT: # %bb.5:
7067 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
7068 ; X86-BMI1BMI2-NEXT: .LBB56_6:
7069 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi
7070 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7071 ; X86-BMI1BMI2-NEXT: jne .LBB56_8
7072 ; X86-BMI1BMI2-NEXT: # %bb.7:
7073 ; X86-BMI1BMI2-NEXT: movl %edi, %eax
7074 ; X86-BMI1BMI2-NEXT: .LBB56_8:
7075 ; X86-BMI1BMI2-NEXT: popl %esi
7076 ; X86-BMI1BMI2-NEXT: popl %edi
7077 ; X86-BMI1BMI2-NEXT: retl
7080 ; X64-NOBMI: # %bb.0:
7092 ; X64-BMI1NOTBM: # %bb.0:
7100 ; X64-BMI1BMI2: # %bb.0:
7112 ; X86-NOBMI-LABEL: bextr64_d1_indexzext:
7113 ; X86-NOBMI: # %bb.0:
7114 ; X86-NOBMI-NEXT: pushl %ebx
7115 ; X86-NOBMI-NEXT: pushl %edi
7116 ; X86-NOBMI-NEXT: pushl %esi
7117 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
7118 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edi
7119 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
7120 ; X86-NOBMI-NEXT: movl %edx, %eax
7121 ; X86-NOBMI-NEXT: shrl %cl, %eax
7122 ; X86-NOBMI-NEXT: shrdl %cl, %edx, %edi
7123 ; X86-NOBMI-NEXT: xorl %esi, %esi
7124 ; X86-NOBMI-NEXT: testb $32, %cl
7125 ; X86-NOBMI-NEXT: je .LBB57_2
7126 ; X86-NOBMI-NEXT: # %bb.1:
7127 ; X86-NOBMI-NEXT: movl %eax, %edi
7128 ; X86-NOBMI-NEXT: xorl %eax, %eax
7129 ; X86-NOBMI-NEXT: .LBB57_2:
7130 ; X86-NOBMI-NEXT: movb $64, %cl
7131 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
7132 ; X86-NOBMI-NEXT: shldl %cl, %edi, %eax
7133 ; X86-NOBMI-NEXT: shll %cl, %edi
7134 ; X86-NOBMI-NEXT: testb $32, %cl
7135 ; X86-NOBMI-NEXT: movl %edi, %ebx
7136 ; X86-NOBMI-NEXT: jne .LBB57_4
7137 ; X86-NOBMI-NEXT: # %bb.3:
7138 ; X86-NOBMI-NEXT: movl %eax, %ebx
7139 ; X86-NOBMI-NEXT: .LBB57_4:
7140 ; X86-NOBMI-NEXT: movl %ebx, %eax
7141 ; X86-NOBMI-NEXT: shrl %cl, %eax
7142 ; X86-NOBMI-NEXT: testb $32, %cl
7143 ; X86-NOBMI-NEXT: movl $0, %edx
7144 ; X86-NOBMI-NEXT: jne .LBB57_6
7145 ; X86-NOBMI-NEXT: # %bb.5:
7146 ; X86-NOBMI-NEXT: movl %edi, %esi
7147 ; X86-NOBMI-NEXT: movl %eax, %edx
7148 ; X86-NOBMI-NEXT: .LBB57_6:
7149 ; X86-NOBMI-NEXT: shrdl %cl, %ebx, %esi
7150 ; X86-NOBMI-NEXT: testb $32, %cl
7151 ; X86-NOBMI-NEXT: jne .LBB57_8
7152 ; X86-NOBMI-NEXT: # %bb.7:
7153 ; X86-NOBMI-NEXT: movl %esi, %eax
7154 ; X86-NOBMI-NEXT: .LBB57_8:
7155 ; X86-NOBMI-NEXT: popl %esi
7156 ; X86-NOBMI-NEXT: popl %edi
7157 ; X86-NOBMI-NEXT: popl %ebx
7158 ; X86-NOBMI-NEXT: retl
7160 ; X86-BMI1NOTBM-LABEL: bextr64_d1_indexzext:
7161 ; X86-BMI1NOTBM: # %bb.0:
7162 ; X86-BMI1NOTBM-NEXT: pushl %ebx
7163 ; X86-BMI1NOTBM-NEXT: pushl %edi
7164 ; X86-BMI1NOTBM-NEXT: pushl %esi
7165 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
7166 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
7167 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edx
7168 ; X86-BMI1NOTBM-NEXT: movl %edx, %eax
7169 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7170 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %edi
7171 ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi
7172 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7173 ; X86-BMI1NOTBM-NEXT: je .LBB57_2
7174 ; X86-BMI1NOTBM-NEXT: # %bb.1:
7175 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
7176 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
7177 ; X86-BMI1NOTBM-NEXT: .LBB57_2:
7178 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
7179 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
7180 ; X86-BMI1NOTBM-NEXT: shldl %cl, %edi, %eax
7181 ; X86-BMI1NOTBM-NEXT: shll %cl, %edi
7182 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7183 ; X86-BMI1NOTBM-NEXT: movl %edi, %ebx
7184 ; X86-BMI1NOTBM-NEXT: jne .LBB57_4
7185 ; X86-BMI1NOTBM-NEXT: # %bb.3:
7186 ; X86-BMI1NOTBM-NEXT: movl %eax, %ebx
7187 ; X86-BMI1NOTBM-NEXT: .LBB57_4:
7188 ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax
7189 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7190 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7191 ; X86-BMI1NOTBM-NEXT: movl $0, %edx
7192 ; X86-BMI1NOTBM-NEXT: jne .LBB57_6
7193 ; X86-BMI1NOTBM-NEXT: # %bb.5:
7194 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
7195 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
7196 ; X86-BMI1NOTBM-NEXT: .LBB57_6:
7197 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %esi
7198 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7199 ; X86-BMI1NOTBM-NEXT: jne .LBB57_8
7200 ; X86-BMI1NOTBM-NEXT: # %bb.7:
7201 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
7202 ; X86-BMI1NOTBM-NEXT: .LBB57_8:
7203 ; X86-BMI1NOTBM-NEXT: popl %esi
7204 ; X86-BMI1NOTBM-NEXT: popl %edi
7205 ; X86-BMI1NOTBM-NEXT: popl %ebx
7206 ; X86-BMI1NOTBM-NEXT: retl
7208 ; X86-BMI1BMI2-LABEL: bextr64_d1_indexzext:
7209 ; X86-BMI1BMI2: # %bb.0:
7210 ; X86-BMI1BMI2-NEXT: pushl %edi
7211 ; X86-BMI1BMI2-NEXT: pushl %esi
7212 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
7213 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
7214 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
7215 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
7216 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %esi
7217 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
7218 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7219 ; X86-BMI1BMI2-NEXT: je .LBB57_2
7220 ; X86-BMI1BMI2-NEXT: # %bb.1:
7221 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
7222 ; X86-BMI1BMI2-NEXT: xorl %esi, %esi
7223 ; X86-BMI1BMI2-NEXT: .LBB57_2:
7224 ; X86-BMI1BMI2-NEXT: movb $64, %cl
7225 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl
7226 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %esi
7227 ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi
7228 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7229 ; X86-BMI1BMI2-NEXT: je .LBB57_4
7230 ; X86-BMI1BMI2-NEXT: # %bb.3:
7231 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
7232 ; X86-BMI1BMI2-NEXT: movl $0, %edi
7233 ; X86-BMI1BMI2-NEXT: .LBB57_4:
7234 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax
7235 ; X86-BMI1BMI2-NEXT: jne .LBB57_6
7236 ; X86-BMI1BMI2-NEXT: # %bb.5:
7237 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
7238 ; X86-BMI1BMI2-NEXT: .LBB57_6:
7239 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi
7240 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7241 ; X86-BMI1BMI2-NEXT: jne .LBB57_8
7242 ; X86-BMI1BMI2-NEXT: # %bb.7:
7243 ; X86-BMI1BMI2-NEXT: movl %edi, %eax
7244 ; X86-BMI1BMI2-NEXT: .LBB57_8:
7245 ; X86-BMI1BMI2-NEXT: popl %esi
7246 ; X86-BMI1BMI2-NEXT: popl %edi
7247 ; X86-BMI1BMI2-NEXT: retl
7250 ; X64-NOBMI: # %bb.0:
7262 ; X64-BMI1NOTBM: # %bb.0:
7270 ; X64-BMI1BMI2: # %bb.0:
7286 ; X86-NOBMI-LABEL: bextr64_d2_load:
7287 ; X86-NOBMI: # %bb.0:
7288 ; X86-NOBMI-NEXT: pushl %ebx
7289 ; X86-NOBMI-NEXT: pushl %edi
7290 ; X86-NOBMI-NEXT: pushl %esi
7291 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
7292 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
7293 ; X86-NOBMI-NEXT: movl (%eax), %edi
7294 ; X86-NOBMI-NEXT: movl 4(%eax), %edx
7295 ; X86-NOBMI-NEXT: movl %edx, %eax
7296 ; X86-NOBMI-NEXT: shrl %cl, %eax
7297 ; X86-NOBMI-NEXT: shrdl %cl, %edx, %edi
7298 ; X86-NOBMI-NEXT: xorl %esi, %esi
7299 ; X86-NOBMI-NEXT: testb $32, %cl
7300 ; X86-NOBMI-NEXT: je .LBB58_2
7301 ; X86-NOBMI-NEXT: # %bb.1:
7302 ; X86-NOBMI-NEXT: movl %eax, %edi
7303 ; X86-NOBMI-NEXT: xorl %eax, %eax
7304 ; X86-NOBMI-NEXT: .LBB58_2:
7305 ; X86-NOBMI-NEXT: movb $64, %cl
7306 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
7307 ; X86-NOBMI-NEXT: shldl %cl, %edi, %eax
7308 ; X86-NOBMI-NEXT: shll %cl, %edi
7309 ; X86-NOBMI-NEXT: testb $32, %cl
7310 ; X86-NOBMI-NEXT: movl %edi, %ebx
7311 ; X86-NOBMI-NEXT: jne .LBB58_4
7312 ; X86-NOBMI-NEXT: # %bb.3:
7313 ; X86-NOBMI-NEXT: movl %eax, %ebx
7314 ; X86-NOBMI-NEXT: .LBB58_4:
7315 ; X86-NOBMI-NEXT: movl %ebx, %eax
7316 ; X86-NOBMI-NEXT: shrl %cl, %eax
7317 ; X86-NOBMI-NEXT: testb $32, %cl
7318 ; X86-NOBMI-NEXT: movl $0, %edx
7319 ; X86-NOBMI-NEXT: jne .LBB58_6
7320 ; X86-NOBMI-NEXT: # %bb.5:
7321 ; X86-NOBMI-NEXT: movl %edi, %esi
7322 ; X86-NOBMI-NEXT: movl %eax, %edx
7323 ; X86-NOBMI-NEXT: .LBB58_6:
7324 ; X86-NOBMI-NEXT: shrdl %cl, %ebx, %esi
7325 ; X86-NOBMI-NEXT: testb $32, %cl
7326 ; X86-NOBMI-NEXT: jne .LBB58_8
7327 ; X86-NOBMI-NEXT: # %bb.7:
7328 ; X86-NOBMI-NEXT: movl %esi, %eax
7329 ; X86-NOBMI-NEXT: .LBB58_8:
7330 ; X86-NOBMI-NEXT: popl %esi
7331 ; X86-NOBMI-NEXT: popl %edi
7332 ; X86-NOBMI-NEXT: popl %ebx
7333 ; X86-NOBMI-NEXT: retl
7335 ; X86-BMI1NOTBM-LABEL: bextr64_d2_load:
7336 ; X86-BMI1NOTBM: # %bb.0:
7337 ; X86-BMI1NOTBM-NEXT: pushl %ebx
7338 ; X86-BMI1NOTBM-NEXT: pushl %edi
7339 ; X86-BMI1NOTBM-NEXT: pushl %esi
7340 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
7341 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
7342 ; X86-BMI1NOTBM-NEXT: movl (%eax), %edi
7343 ; X86-BMI1NOTBM-NEXT: movl 4(%eax), %edx
7344 ; X86-BMI1NOTBM-NEXT: movl %edx, %eax
7345 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7346 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %edi
7347 ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi
7348 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7349 ; X86-BMI1NOTBM-NEXT: je .LBB58_2
7350 ; X86-BMI1NOTBM-NEXT: # %bb.1:
7351 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
7352 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
7353 ; X86-BMI1NOTBM-NEXT: .LBB58_2:
7354 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
7355 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
7356 ; X86-BMI1NOTBM-NEXT: shldl %cl, %edi, %eax
7357 ; X86-BMI1NOTBM-NEXT: shll %cl, %edi
7358 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7359 ; X86-BMI1NOTBM-NEXT: movl %edi, %ebx
7360 ; X86-BMI1NOTBM-NEXT: jne .LBB58_4
7361 ; X86-BMI1NOTBM-NEXT: # %bb.3:
7362 ; X86-BMI1NOTBM-NEXT: movl %eax, %ebx
7363 ; X86-BMI1NOTBM-NEXT: .LBB58_4:
7364 ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax
7365 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7366 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7367 ; X86-BMI1NOTBM-NEXT: movl $0, %edx
7368 ; X86-BMI1NOTBM-NEXT: jne .LBB58_6
7369 ; X86-BMI1NOTBM-NEXT: # %bb.5:
7370 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
7371 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
7372 ; X86-BMI1NOTBM-NEXT: .LBB58_6:
7373 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %esi
7374 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7375 ; X86-BMI1NOTBM-NEXT: jne .LBB58_8
7376 ; X86-BMI1NOTBM-NEXT: # %bb.7:
7377 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
7378 ; X86-BMI1NOTBM-NEXT: .LBB58_8:
7379 ; X86-BMI1NOTBM-NEXT: popl %esi
7380 ; X86-BMI1NOTBM-NEXT: popl %edi
7381 ; X86-BMI1NOTBM-NEXT: popl %ebx
7382 ; X86-BMI1NOTBM-NEXT: retl
7384 ; X86-BMI1BMI2-LABEL: bextr64_d2_load:
7385 ; X86-BMI1BMI2: # %bb.0:
7386 ; X86-BMI1BMI2-NEXT: pushl %edi
7387 ; X86-BMI1BMI2-NEXT: pushl %esi
7388 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
7389 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
7390 ; X86-BMI1BMI2-NEXT: movl (%edx), %eax
7391 ; X86-BMI1BMI2-NEXT: movl 4(%edx), %edx
7392 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %esi
7393 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
7394 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
7395 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7396 ; X86-BMI1BMI2-NEXT: je .LBB58_2
7397 ; X86-BMI1BMI2-NEXT: # %bb.1:
7398 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
7399 ; X86-BMI1BMI2-NEXT: xorl %esi, %esi
7400 ; X86-BMI1BMI2-NEXT: .LBB58_2:
7401 ; X86-BMI1BMI2-NEXT: movb $64, %cl
7402 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl
7403 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %esi
7404 ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi
7405 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7406 ; X86-BMI1BMI2-NEXT: je .LBB58_4
7407 ; X86-BMI1BMI2-NEXT: # %bb.3:
7408 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
7409 ; X86-BMI1BMI2-NEXT: movl $0, %edi
7410 ; X86-BMI1BMI2-NEXT: .LBB58_4:
7411 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax
7412 ; X86-BMI1BMI2-NEXT: jne .LBB58_6
7413 ; X86-BMI1BMI2-NEXT: # %bb.5:
7414 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
7415 ; X86-BMI1BMI2-NEXT: .LBB58_6:
7416 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi
7417 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7418 ; X86-BMI1BMI2-NEXT: jne .LBB58_8
7419 ; X86-BMI1BMI2-NEXT: # %bb.7:
7420 ; X86-BMI1BMI2-NEXT: movl %edi, %eax
7421 ; X86-BMI1BMI2-NEXT: .LBB58_8:
7422 ; X86-BMI1BMI2-NEXT: popl %esi
7423 ; X86-BMI1BMI2-NEXT: popl %edi
7424 ; X86-BMI1BMI2-NEXT: retl
7427 ; X64-NOBMI: # %bb.0:
7439 ; X64-BMI1NOTBM: # %bb.0:
7447 ; X64-BMI1BMI2: # %bb.0:
7460 ; X86-NOBMI-LABEL: bextr64_d3_load_indexzext:
7461 ; X86-NOBMI: # %bb.0:
7462 ; X86-NOBMI-NEXT: pushl %ebx
7463 ; X86-NOBMI-NEXT: pushl %edi
7464 ; X86-NOBMI-NEXT: pushl %esi
7465 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
7466 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
7467 ; X86-NOBMI-NEXT: movl (%eax), %edi
7468 ; X86-NOBMI-NEXT: movl 4(%eax), %edx
7469 ; X86-NOBMI-NEXT: movl %edx, %eax
7470 ; X86-NOBMI-NEXT: shrl %cl, %eax
7471 ; X86-NOBMI-NEXT: shrdl %cl, %edx, %edi
7472 ; X86-NOBMI-NEXT: xorl %esi, %esi
7473 ; X86-NOBMI-NEXT: testb $32, %cl
7474 ; X86-NOBMI-NEXT: je .LBB59_2
7475 ; X86-NOBMI-NEXT: # %bb.1:
7476 ; X86-NOBMI-NEXT: movl %eax, %edi
7477 ; X86-NOBMI-NEXT: xorl %eax, %eax
7478 ; X86-NOBMI-NEXT: .LBB59_2:
7479 ; X86-NOBMI-NEXT: movb $64, %cl
7480 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
7481 ; X86-NOBMI-NEXT: shldl %cl, %edi, %eax
7482 ; X86-NOBMI-NEXT: shll %cl, %edi
7483 ; X86-NOBMI-NEXT: testb $32, %cl
7484 ; X86-NOBMI-NEXT: movl %edi, %ebx
7485 ; X86-NOBMI-NEXT: jne .LBB59_4
7486 ; X86-NOBMI-NEXT: # %bb.3:
7487 ; X86-NOBMI-NEXT: movl %eax, %ebx
7488 ; X86-NOBMI-NEXT: .LBB59_4:
7489 ; X86-NOBMI-NEXT: movl %ebx, %eax
7490 ; X86-NOBMI-NEXT: shrl %cl, %eax
7491 ; X86-NOBMI-NEXT: testb $32, %cl
7492 ; X86-NOBMI-NEXT: movl $0, %edx
7493 ; X86-NOBMI-NEXT: jne .LBB59_6
7494 ; X86-NOBMI-NEXT: # %bb.5:
7495 ; X86-NOBMI-NEXT: movl %edi, %esi
7496 ; X86-NOBMI-NEXT: movl %eax, %edx
7497 ; X86-NOBMI-NEXT: .LBB59_6:
7498 ; X86-NOBMI-NEXT: shrdl %cl, %ebx, %esi
7499 ; X86-NOBMI-NEXT: testb $32, %cl
7500 ; X86-NOBMI-NEXT: jne .LBB59_8
7501 ; X86-NOBMI-NEXT: # %bb.7:
7502 ; X86-NOBMI-NEXT: movl %esi, %eax
7503 ; X86-NOBMI-NEXT: .LBB59_8:
7504 ; X86-NOBMI-NEXT: popl %esi
7505 ; X86-NOBMI-NEXT: popl %edi
7506 ; X86-NOBMI-NEXT: popl %ebx
7507 ; X86-NOBMI-NEXT: retl
7509 ; X86-BMI1NOTBM-LABEL: bextr64_d3_load_indexzext:
7510 ; X86-BMI1NOTBM: # %bb.0:
7511 ; X86-BMI1NOTBM-NEXT: pushl %ebx
7512 ; X86-BMI1NOTBM-NEXT: pushl %edi
7513 ; X86-BMI1NOTBM-NEXT: pushl %esi
7514 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
7515 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
7516 ; X86-BMI1NOTBM-NEXT: movl (%eax), %edi
7517 ; X86-BMI1NOTBM-NEXT: movl 4(%eax), %edx
7518 ; X86-BMI1NOTBM-NEXT: movl %edx, %eax
7519 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7520 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %edi
7521 ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi
7522 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7523 ; X86-BMI1NOTBM-NEXT: je .LBB59_2
7524 ; X86-BMI1NOTBM-NEXT: # %bb.1:
7525 ; X86-BMI1NOTBM-NEXT: movl %eax, %edi
7526 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
7527 ; X86-BMI1NOTBM-NEXT: .LBB59_2:
7528 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
7529 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
7530 ; X86-BMI1NOTBM-NEXT: shldl %cl, %edi, %eax
7531 ; X86-BMI1NOTBM-NEXT: shll %cl, %edi
7532 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7533 ; X86-BMI1NOTBM-NEXT: movl %edi, %ebx
7534 ; X86-BMI1NOTBM-NEXT: jne .LBB59_4
7535 ; X86-BMI1NOTBM-NEXT: # %bb.3:
7536 ; X86-BMI1NOTBM-NEXT: movl %eax, %ebx
7537 ; X86-BMI1NOTBM-NEXT: .LBB59_4:
7538 ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax
7539 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7540 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7541 ; X86-BMI1NOTBM-NEXT: movl $0, %edx
7542 ; X86-BMI1NOTBM-NEXT: jne .LBB59_6
7543 ; X86-BMI1NOTBM-NEXT: # %bb.5:
7544 ; X86-BMI1NOTBM-NEXT: movl %edi, %esi
7545 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
7546 ; X86-BMI1NOTBM-NEXT: .LBB59_6:
7547 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %esi
7548 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7549 ; X86-BMI1NOTBM-NEXT: jne .LBB59_8
7550 ; X86-BMI1NOTBM-NEXT: # %bb.7:
7551 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
7552 ; X86-BMI1NOTBM-NEXT: .LBB59_8:
7553 ; X86-BMI1NOTBM-NEXT: popl %esi
7554 ; X86-BMI1NOTBM-NEXT: popl %edi
7555 ; X86-BMI1NOTBM-NEXT: popl %ebx
7556 ; X86-BMI1NOTBM-NEXT: retl
7558 ; X86-BMI1BMI2-LABEL: bextr64_d3_load_indexzext:
7559 ; X86-BMI1BMI2: # %bb.0:
7560 ; X86-BMI1BMI2-NEXT: pushl %edi
7561 ; X86-BMI1BMI2-NEXT: pushl %esi
7562 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
7563 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
7564 ; X86-BMI1BMI2-NEXT: movl (%edx), %eax
7565 ; X86-BMI1BMI2-NEXT: movl 4(%edx), %edx
7566 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %esi
7567 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
7568 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
7569 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7570 ; X86-BMI1BMI2-NEXT: je .LBB59_2
7571 ; X86-BMI1BMI2-NEXT: # %bb.1:
7572 ; X86-BMI1BMI2-NEXT: movl %esi, %eax
7573 ; X86-BMI1BMI2-NEXT: xorl %esi, %esi
7574 ; X86-BMI1BMI2-NEXT: .LBB59_2:
7575 ; X86-BMI1BMI2-NEXT: movb $64, %cl
7576 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl
7577 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %esi
7578 ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi
7579 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7580 ; X86-BMI1BMI2-NEXT: je .LBB59_4
7581 ; X86-BMI1BMI2-NEXT: # %bb.3:
7582 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
7583 ; X86-BMI1BMI2-NEXT: movl $0, %edi
7584 ; X86-BMI1BMI2-NEXT: .LBB59_4:
7585 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax
7586 ; X86-BMI1BMI2-NEXT: jne .LBB59_6
7587 ; X86-BMI1BMI2-NEXT: # %bb.5:
7588 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
7589 ; X86-BMI1BMI2-NEXT: .LBB59_6:
7590 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi
7591 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7592 ; X86-BMI1BMI2-NEXT: jne .LBB59_8
7593 ; X86-BMI1BMI2-NEXT: # %bb.7:
7594 ; X86-BMI1BMI2-NEXT: movl %edi, %eax
7595 ; X86-BMI1BMI2-NEXT: .LBB59_8:
7596 ; X86-BMI1BMI2-NEXT: popl %esi
7597 ; X86-BMI1BMI2-NEXT: popl %edi
7598 ; X86-BMI1BMI2-NEXT: retl
7601 ; X64-NOBMI: # %bb.0:
7613 ; X64-BMI1NOTBM: # %bb.0:
7621 ; X64-BMI1BMI2: # %bb.0:
7638 ; X86-NOBMI-LABEL: bextr64_d5_skipextrauses:
7639 ; X86-NOBMI: # %bb.0:
7640 ; X86-NOBMI-NEXT: pushl %ebp
7641 ; X86-NOBMI-NEXT: pushl %ebx
7642 ; X86-NOBMI-NEXT: pushl %edi
7643 ; X86-NOBMI-NEXT: pushl %esi
7644 ; X86-NOBMI-NEXT: subl $12, %esp
7645 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ebx
7646 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
7647 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
7648 ; X86-NOBMI-NEXT: movl %edx, %esi
7649 ; X86-NOBMI-NEXT: movl %eax, %ecx
7650 ; X86-NOBMI-NEXT: shrl %cl, %esi
7651 ; X86-NOBMI-NEXT: shrdl %cl, %edx, %ebx
7652 ; X86-NOBMI-NEXT: xorl %edx, %edx
7653 ; X86-NOBMI-NEXT: testb $32, %al
7654 ; X86-NOBMI-NEXT: je .LBB60_2
7655 ; X86-NOBMI-NEXT: # %bb.1:
7656 ; X86-NOBMI-NEXT: movl %esi, %ebx
7657 ; X86-NOBMI-NEXT: xorl %esi, %esi
7658 ; X86-NOBMI-NEXT: .LBB60_2:
7659 ; X86-NOBMI-NEXT: movb $64, %cl
7660 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
7661 ; X86-NOBMI-NEXT: shldl %cl, %ebx, %esi
7662 ; X86-NOBMI-NEXT: shll %cl, %ebx
7663 ; X86-NOBMI-NEXT: testb $32, %cl
7664 ; X86-NOBMI-NEXT: movl %ebx, %ebp
7665 ; X86-NOBMI-NEXT: jne .LBB60_4
7666 ; X86-NOBMI-NEXT: # %bb.3:
7667 ; X86-NOBMI-NEXT: movl %esi, %ebp
7668 ; X86-NOBMI-NEXT: .LBB60_4:
7669 ; X86-NOBMI-NEXT: movl %ebp, %esi
7670 ; X86-NOBMI-NEXT: shrl %cl, %esi
7671 ; X86-NOBMI-NEXT: testb $32, %cl
7672 ; X86-NOBMI-NEXT: movl $0, %edi
7673 ; X86-NOBMI-NEXT: jne .LBB60_6
7674 ; X86-NOBMI-NEXT: # %bb.5:
7675 ; X86-NOBMI-NEXT: movl %ebx, %edx
7676 ; X86-NOBMI-NEXT: movl %esi, %edi
7677 ; X86-NOBMI-NEXT: .LBB60_6:
7678 ; X86-NOBMI-NEXT: shrdl %cl, %ebp, %edx
7679 ; X86-NOBMI-NEXT: testb $32, %cl
7680 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
7681 ; X86-NOBMI-NEXT: jne .LBB60_8
7682 ; X86-NOBMI-NEXT: # %bb.7:
7683 ; X86-NOBMI-NEXT: movl %edx, %esi
7684 ; X86-NOBMI-NEXT: .LBB60_8:
7685 ; X86-NOBMI-NEXT: subl $8, %esp
7686 ; X86-NOBMI-NEXT: pushl %ecx
7687 ; X86-NOBMI-NEXT: pushl %eax
7688 ; X86-NOBMI-NEXT: calll use64
7689 ; X86-NOBMI-NEXT: addl $16, %esp
7690 ; X86-NOBMI-NEXT: movl %esi, %eax
7691 ; X86-NOBMI-NEXT: movl %edi, %edx
7692 ; X86-NOBMI-NEXT: addl $12, %esp
7693 ; X86-NOBMI-NEXT: popl %esi
7694 ; X86-NOBMI-NEXT: popl %edi
7695 ; X86-NOBMI-NEXT: popl %ebx
7696 ; X86-NOBMI-NEXT: popl %ebp
7697 ; X86-NOBMI-NEXT: retl
7699 ; X86-BMI1NOTBM-LABEL: bextr64_d5_skipextrauses:
7700 ; X86-BMI1NOTBM: # %bb.0:
7701 ; X86-BMI1NOTBM-NEXT: pushl %ebp
7702 ; X86-BMI1NOTBM-NEXT: pushl %ebx
7703 ; X86-BMI1NOTBM-NEXT: pushl %edi
7704 ; X86-BMI1NOTBM-NEXT: pushl %esi
7705 ; X86-BMI1NOTBM-NEXT: subl $12, %esp
7706 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %ebx
7707 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edx
7708 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
7709 ; X86-BMI1NOTBM-NEXT: movl %edx, %esi
7710 ; X86-BMI1NOTBM-NEXT: movl %eax, %ecx
7711 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
7712 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %ebx
7713 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
7714 ; X86-BMI1NOTBM-NEXT: testb $32, %al
7715 ; X86-BMI1NOTBM-NEXT: je .LBB60_2
7716 ; X86-BMI1NOTBM-NEXT: # %bb.1:
7717 ; X86-BMI1NOTBM-NEXT: movl %esi, %ebx
7718 ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi
7719 ; X86-BMI1NOTBM-NEXT: .LBB60_2:
7720 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
7721 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
7722 ; X86-BMI1NOTBM-NEXT: shldl %cl, %ebx, %esi
7723 ; X86-BMI1NOTBM-NEXT: shll %cl, %ebx
7724 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7725 ; X86-BMI1NOTBM-NEXT: movl %ebx, %ebp
7726 ; X86-BMI1NOTBM-NEXT: jne .LBB60_4
7727 ; X86-BMI1NOTBM-NEXT: # %bb.3:
7728 ; X86-BMI1NOTBM-NEXT: movl %esi, %ebp
7729 ; X86-BMI1NOTBM-NEXT: .LBB60_4:
7730 ; X86-BMI1NOTBM-NEXT: movl %ebp, %esi
7731 ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi
7732 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7733 ; X86-BMI1NOTBM-NEXT: movl $0, %edi
7734 ; X86-BMI1NOTBM-NEXT: jne .LBB60_6
7735 ; X86-BMI1NOTBM-NEXT: # %bb.5:
7736 ; X86-BMI1NOTBM-NEXT: movl %ebx, %edx
7737 ; X86-BMI1NOTBM-NEXT: movl %esi, %edi
7738 ; X86-BMI1NOTBM-NEXT: .LBB60_6:
7739 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebp, %edx
7740 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7741 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %ecx
7742 ; X86-BMI1NOTBM-NEXT: jne .LBB60_8
7743 ; X86-BMI1NOTBM-NEXT: # %bb.7:
7744 ; X86-BMI1NOTBM-NEXT: movl %edx, %esi
7745 ; X86-BMI1NOTBM-NEXT: .LBB60_8:
7746 ; X86-BMI1NOTBM-NEXT: subl $8, %esp
7747 ; X86-BMI1NOTBM-NEXT: pushl %ecx
7748 ; X86-BMI1NOTBM-NEXT: pushl %eax
7749 ; X86-BMI1NOTBM-NEXT: calll use64
7750 ; X86-BMI1NOTBM-NEXT: addl $16, %esp
7751 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
7752 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
7753 ; X86-BMI1NOTBM-NEXT: addl $12, %esp
7754 ; X86-BMI1NOTBM-NEXT: popl %esi
7755 ; X86-BMI1NOTBM-NEXT: popl %edi
7756 ; X86-BMI1NOTBM-NEXT: popl %ebx
7757 ; X86-BMI1NOTBM-NEXT: popl %ebp
7758 ; X86-BMI1NOTBM-NEXT: retl
7760 ; X86-BMI1BMI2-LABEL: bextr64_d5_skipextrauses:
7761 ; X86-BMI1BMI2: # %bb.0:
7762 ; X86-BMI1BMI2-NEXT: pushl %ebx
7763 ; X86-BMI1BMI2-NEXT: pushl %edi
7764 ; X86-BMI1BMI2-NEXT: pushl %esi
7765 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edi
7766 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
7767 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
7768 ; X86-BMI1BMI2-NEXT: movl %eax, %ecx
7769 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %edi
7770 ; X86-BMI1BMI2-NEXT: shrxl %eax, %edx, %edx
7771 ; X86-BMI1BMI2-NEXT: xorl %esi, %esi
7772 ; X86-BMI1BMI2-NEXT: testb $32, %al
7773 ; X86-BMI1BMI2-NEXT: je .LBB60_2
7774 ; X86-BMI1BMI2-NEXT: # %bb.1:
7775 ; X86-BMI1BMI2-NEXT: movl %edx, %edi
7776 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
7777 ; X86-BMI1BMI2-NEXT: .LBB60_2:
7778 ; X86-BMI1BMI2-NEXT: movb $64, %cl
7779 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl
7780 ; X86-BMI1BMI2-NEXT: shldl %cl, %edi, %edx
7781 ; X86-BMI1BMI2-NEXT: shlxl %ecx, %edi, %ebx
7782 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7783 ; X86-BMI1BMI2-NEXT: je .LBB60_4
7784 ; X86-BMI1BMI2-NEXT: # %bb.3:
7785 ; X86-BMI1BMI2-NEXT: movl %ebx, %edx
7786 ; X86-BMI1BMI2-NEXT: movl $0, %ebx
7787 ; X86-BMI1BMI2-NEXT: .LBB60_4:
7788 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edi
7789 ; X86-BMI1BMI2-NEXT: jne .LBB60_6
7790 ; X86-BMI1BMI2-NEXT: # %bb.5:
7791 ; X86-BMI1BMI2-NEXT: movl %edi, %esi
7792 ; X86-BMI1BMI2-NEXT: .LBB60_6:
7793 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %ebx
7794 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7795 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
7796 ; X86-BMI1BMI2-NEXT: jne .LBB60_8
7797 ; X86-BMI1BMI2-NEXT: # %bb.7:
7798 ; X86-BMI1BMI2-NEXT: movl %ebx, %edi
7799 ; X86-BMI1BMI2-NEXT: .LBB60_8:
7800 ; X86-BMI1BMI2-NEXT: subl $8, %esp
7801 ; X86-BMI1BMI2-NEXT: pushl %ecx
7802 ; X86-BMI1BMI2-NEXT: pushl %eax
7803 ; X86-BMI1BMI2-NEXT: calll use64
7804 ; X86-BMI1BMI2-NEXT: addl $16, %esp
7805 ; X86-BMI1BMI2-NEXT: movl %edi, %eax
7806 ; X86-BMI1BMI2-NEXT: movl %esi, %edx
7807 ; X86-BMI1BMI2-NEXT: popl %esi
7808 ; X86-BMI1BMI2-NEXT: popl %edi
7809 ; X86-BMI1BMI2-NEXT: popl %ebx
7810 ; X86-BMI1BMI2-NEXT: retl
7813 ; X64-NOBMI: # %bb.0:
7829 ; X64-BMI1NOTBM: # %bb.0:
7842 ; X64-BMI1BMI2: # %bb.0:
7863 ; X86-NOBMI-LABEL: bextr64_32_d0:
7864 ; X86-NOBMI: # %bb.0:
7865 ; X86-NOBMI-NEXT: pushl %esi
7866 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
7867 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
7868 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
7869 ; X86-NOBMI-NEXT: movl %esi, %eax
7870 ; X86-NOBMI-NEXT: shrl %cl, %eax
7871 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %edx
7872 ; X86-NOBMI-NEXT: testb $32, %cl
7873 ; X86-NOBMI-NEXT: je .LBB61_2
7874 ; X86-NOBMI-NEXT: # %bb.1:
7875 ; X86-NOBMI-NEXT: movl %eax, %edx
7876 ; X86-NOBMI-NEXT: xorl %eax, %eax
7877 ; X86-NOBMI-NEXT: .LBB61_2:
7878 ; X86-NOBMI-NEXT: movb $64, %cl
7879 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
7880 ; X86-NOBMI-NEXT: shldl %cl, %edx, %eax
7881 ; X86-NOBMI-NEXT: shll %cl, %edx
7882 ; X86-NOBMI-NEXT: testb $32, %cl
7883 ; X86-NOBMI-NEXT: je .LBB61_4
7884 ; X86-NOBMI-NEXT: # %bb.3:
7885 ; X86-NOBMI-NEXT: movl %edx, %eax
7886 ; X86-NOBMI-NEXT: xorl %edx, %edx
7887 ; X86-NOBMI-NEXT: .LBB61_4:
7888 ; X86-NOBMI-NEXT: shrdl %cl, %eax, %edx
7889 ; X86-NOBMI-NEXT: shrl %cl, %eax
7890 ; X86-NOBMI-NEXT: testb $32, %cl
7891 ; X86-NOBMI-NEXT: jne .LBB61_6
7892 ; X86-NOBMI-NEXT: # %bb.5:
7893 ; X86-NOBMI-NEXT: movl %edx, %eax
7894 ; X86-NOBMI-NEXT: .LBB61_6:
7895 ; X86-NOBMI-NEXT: popl %esi
7896 ; X86-NOBMI-NEXT: retl
7898 ; X86-BMI1NOTBM-LABEL: bextr64_32_d0:
7899 ; X86-BMI1NOTBM: # %bb.0:
7900 ; X86-BMI1NOTBM-NEXT: pushl %esi
7901 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
7902 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edx
7903 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
7904 ; X86-BMI1NOTBM-NEXT: movl %esi, %eax
7905 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7906 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %esi, %edx
7907 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7908 ; X86-BMI1NOTBM-NEXT: je .LBB61_2
7909 ; X86-BMI1NOTBM-NEXT: # %bb.1:
7910 ; X86-BMI1NOTBM-NEXT: movl %eax, %edx
7911 ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax
7912 ; X86-BMI1NOTBM-NEXT: .LBB61_2:
7913 ; X86-BMI1NOTBM-NEXT: movb $64, %cl
7914 ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl
7915 ; X86-BMI1NOTBM-NEXT: shldl %cl, %edx, %eax
7916 ; X86-BMI1NOTBM-NEXT: shll %cl, %edx
7917 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7918 ; X86-BMI1NOTBM-NEXT: je .LBB61_4
7919 ; X86-BMI1NOTBM-NEXT: # %bb.3:
7920 ; X86-BMI1NOTBM-NEXT: movl %edx, %eax
7921 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
7922 ; X86-BMI1NOTBM-NEXT: .LBB61_4:
7923 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %edx
7924 ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax
7925 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
7926 ; X86-BMI1NOTBM-NEXT: jne .LBB61_6
7927 ; X86-BMI1NOTBM-NEXT: # %bb.5:
7928 ; X86-BMI1NOTBM-NEXT: movl %edx, %eax
7929 ; X86-BMI1NOTBM-NEXT: .LBB61_6:
7930 ; X86-BMI1NOTBM-NEXT: popl %esi
7931 ; X86-BMI1NOTBM-NEXT: retl
7933 ; X86-BMI1BMI2-LABEL: bextr64_32_d0:
7934 ; X86-BMI1BMI2: # %bb.0:
7935 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
7936 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
7937 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
7938 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
7939 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edx
7940 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7941 ; X86-BMI1BMI2-NEXT: je .LBB61_2
7942 ; X86-BMI1BMI2-NEXT: # %bb.1:
7943 ; X86-BMI1BMI2-NEXT: movl %edx, %eax
7944 ; X86-BMI1BMI2-NEXT: xorl %edx, %edx
7945 ; X86-BMI1BMI2-NEXT: .LBB61_2:
7946 ; X86-BMI1BMI2-NEXT: movb $64, %cl
7947 ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl
7948 ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %edx
7949 ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %eax
7950 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7951 ; X86-BMI1BMI2-NEXT: je .LBB61_4
7952 ; X86-BMI1BMI2-NEXT: # %bb.3:
7953 ; X86-BMI1BMI2-NEXT: movl %eax, %edx
7954 ; X86-BMI1BMI2-NEXT: xorl %eax, %eax
7955 ; X86-BMI1BMI2-NEXT: .LBB61_4:
7956 ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax
7957 ; X86-BMI1BMI2-NEXT: testb $32, %cl
7958 ; X86-BMI1BMI2-NEXT: je .LBB61_6
7959 ; X86-BMI1BMI2-NEXT: # %bb.5:
7960 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %eax
7961 ; X86-BMI1BMI2-NEXT: .LBB61_6:
7962 ; X86-BMI1BMI2-NEXT: retl
7965 ; X64-NOBMI: # %bb.0:
7978 ; X64-BMI1NOTBM: # %bb.0:
7987 ; X64-BMI1BMI2: # %bb.0:
8002 ; X86-NOBMI-LABEL: bextr64_32_d1:
8003 ; X86-NOBMI: # %bb.0:
8004 ; X86-NOBMI-NEXT: pushl %esi
8005 ; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl
8006 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
8007 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi
8008 ; X86-NOBMI-NEXT: movl %esi, %eax
8009 ; X86-NOBMI-NEXT: shrl %cl, %eax
8010 ; X86-NOBMI-NEXT: shrdl %cl, %esi, %edx
8011 ; X86-NOBMI-NEXT: testb $32, %cl
8012 ; X86-NOBMI-NEXT: jne .LBB62_2
8013 ; X86-NOBMI-NEXT: # %bb.1:
8014 ; X86-NOBMI-NEXT: movl %edx, %eax
8015 ; X86-NOBMI-NEXT: .LBB62_2:
8016 ; X86-NOBMI-NEXT: xorl %ecx, %ecx
8017 ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl
8018 ; X86-NOBMI-NEXT: shll %cl, %eax
8019 ; X86-NOBMI-NEXT: # kill: def $cl killed $cl killed $ecx
8020 ; X86-NOBMI-NEXT: shrl %cl, %eax
8021 ; X86-NOBMI-NEXT: popl %esi
8022 ; X86-NOBMI-NEXT: retl
8024 ; X86-BMI1NOTBM-LABEL: bextr64_32_d1:
8025 ; X86-BMI1NOTBM: # %bb.0:
8026 ; X86-BMI1NOTBM-NEXT: pushl %edi
8027 ; X86-BMI1NOTBM-NEXT: pushl %esi
8028 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %al
8029 ; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl
8030 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi
8031 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %edi
8032 ; X86-BMI1NOTBM-NEXT: movl %edi, %edx
8033 ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx
8034 ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi
8035 ; X86-BMI1NOTBM-NEXT: testb $32, %cl
8036 ; X86-BMI1NOTBM-NEXT: jne .LBB62_2
8037 ; X86-BMI1NOTBM-NEXT: # %bb.1:
8038 ; X86-BMI1NOTBM-NEXT: movl %esi, %edx
8039 ; X86-BMI1NOTBM-NEXT: .LBB62_2:
8040 ; X86-BMI1NOTBM-NEXT: shll $8, %eax
8041 ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax
8042 ; X86-BMI1NOTBM-NEXT: popl %esi
8043 ; X86-BMI1NOTBM-NEXT: popl %edi
8044 ; X86-BMI1NOTBM-NEXT: retl
8046 ; X86-BMI1BMI2-LABEL: bextr64_32_d1:
8047 ; X86-BMI1BMI2: # %bb.0:
8048 ; X86-BMI1BMI2-NEXT: pushl %esi
8049 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %al
8050 ; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl
8051 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx
8052 ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi
8053 ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx
8054 ; X86-BMI1BMI2-NEXT: testb $32, %cl
8055 ; X86-BMI1BMI2-NEXT: je .LBB62_2
8056 ; X86-BMI1BMI2-NEXT: # %bb.1:
8057 ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx
8058 ; X86-BMI1BMI2-NEXT: .LBB62_2:
8059 ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %eax
8060 ; X86-BMI1BMI2-NEXT: popl %esi
8061 ; X86-BMI1BMI2-NEXT: retl
8064 ; X64-NOBMI: # %bb.0:
8077 ; X64-BMI1NOTBM: # %bb.0:
8086 ; X64-BMI1BMI2: # %bb.0:
8104 ; X86-NOBMI-LABEL: pr38938:
8105 ; X86-NOBMI: # %bb.0:
8106 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
8107 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
8108 ; X86-NOBMI-NEXT: movl (%ecx), %ecx
8109 ; X86-NOBMI-NEXT: shrl $19, %ecx
8110 ; X86-NOBMI-NEXT: andl $4092, %ecx # imm = 0xFFC
8111 ; X86-NOBMI-NEXT: incl (%eax,%ecx)
8112 ; X86-NOBMI-NEXT: retl
8114 ; X86-BMI1NOTBM-LABEL: pr38938:
8115 ; X86-BMI1NOTBM: # %bb.0:
8116 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8117 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %ecx
8118 ; X86-BMI1NOTBM-NEXT: movl $2581, %edx # imm = 0xA15
8119 ; X86-BMI1NOTBM-NEXT: bextrl %edx, (%ecx), %ecx
8120 ; X86-BMI1NOTBM-NEXT: incl (%eax,%ecx,4)
8121 ; X86-BMI1NOTBM-NEXT: retl
8123 ; X86-BMI1TBM-LABEL: pr38938:
8124 ; X86-BMI1TBM: # %bb.0:
8125 ; X86-BMI1TBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8126 ; X86-BMI1TBM-NEXT: movl {{[0-9]+}}(%esp), %ecx
8127 ; X86-BMI1TBM-NEXT: bextrl $2581, (%ecx), %ecx # imm = 0xA15
8128 ; X86-BMI1TBM-NEXT: incl (%eax,%ecx,4)
8129 ; X86-BMI1TBM-NEXT: retl
8131 ; X86-BMI1NOTBMBMI2-LABEL: pr38938:
8132 ; X86-BMI1NOTBMBMI2: # %bb.0:
8133 ; X86-BMI1NOTBMBMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
8134 ; X86-BMI1NOTBMBMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
8135 ; X86-BMI1NOTBMBMI2-NEXT: movl $2581, %edx # imm = 0xA15
8136 ; X86-BMI1NOTBMBMI2-NEXT: bextrl %edx, (%ecx), %ecx
8137 ; X86-BMI1NOTBMBMI2-NEXT: incl (%eax,%ecx,4)
8138 ; X86-BMI1NOTBMBMI2-NEXT: retl
8141 ; X64-NOBMI: # %bb.0:
8144 ; X64-NOBMI-NEXT: andl $4092, %eax # imm = 0xFFC
8149 ; X64-BMI1NOTBM: # %bb.0:
8150 ; X64-BMI1NOTBM-NEXT: movl $2581, %eax # imm = 0xA15
8156 ; X64-BMI1TBM: # %bb.0:
8157 ; X64-BMI1TBM-NEXT: bextrq $2581, (%rsi), %rax # imm = 0xA15
8162 ; X64-BMI1NOTBMBMI2: # %bb.0:
8163 ; X64-BMI1NOTBMBMI2-NEXT: movl $2581, %eax # imm = 0xA15
8179 ; X86-NOBMI-LABEL: c0_i32:
8180 ; X86-NOBMI: # %bb.0:
8181 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
8182 ; X86-NOBMI-NEXT: shrl $19, %eax
8183 ; X86-NOBMI-NEXT: andl $1023, %eax # imm = 0x3FF
8184 ; X86-NOBMI-NEXT: retl
8186 ; X86-BMI1NOTBM-LABEL: c0_i32:
8187 ; X86-BMI1NOTBM: # %bb.0:
8188 ; X86-BMI1NOTBM-NEXT: movl $2579, %eax # imm = 0xA13
8189 ; X86-BMI1NOTBM-NEXT: bextrl %eax, {{[0-9]+}}(%esp), %eax
8190 ; X86-BMI1NOTBM-NEXT: retl
8192 ; X86-BMI1TBM-LABEL: c0_i32:
8193 ; X86-BMI1TBM: # %bb.0:
8194 ; X86-BMI1TBM-NEXT: bextrl $2579, {{[0-9]+}}(%esp), %eax # imm = 0xA13
8195 ; X86-BMI1TBM-NEXT: retl
8197 ; X86-BMI1NOTBMBMI2-LABEL: c0_i32:
8198 ; X86-BMI1NOTBMBMI2: # %bb.0:
8199 ; X86-BMI1NOTBMBMI2-NEXT: movl $2579, %eax # imm = 0xA13
8200 ; X86-BMI1NOTBMBMI2-NEXT: bextrl %eax, {{[0-9]+}}(%esp), %eax
8201 ; X86-BMI1NOTBMBMI2-NEXT: retl
8204 ; X64-NOBMI: # %bb.0:
8207 ; X64-NOBMI-NEXT: andl $1023, %eax # imm = 0x3FF
8211 ; X64-BMI1NOTBM: # %bb.0:
8212 ; X64-BMI1NOTBM-NEXT: movl $2579, %eax # imm = 0xA13
8217 ; X64-BMI1TBM: # %bb.0:
8218 ; X64-BMI1TBM-NEXT: bextrl $2579, %edi, %eax # imm = 0xA13
8222 ; X64-BMI1NOTBMBMI2: # %bb.0:
8223 ; X64-BMI1NOTBMBMI2-NEXT: movl $2579, %eax # imm = 0xA13
8233 ; X86-LABEL: c1_i32:
8234 ; X86: # %bb.0:
8235 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
8236 ; X86-NEXT: shrl $19, %eax
8237 ; X86-NEXT: andl $4092, %eax # imm = 0xFFC
8238 ; X86-NEXT: retl
8241 ; X64: # %bb.0:
8244 ; X64-NEXT: andl $4092, %eax # imm = 0xFFC
8253 ; X86-LABEL: c2_i32:
8254 ; X86: # %bb.0:
8255 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
8256 ; X86-NEXT: shrl $17, %eax
8257 ; X86-NEXT: andl $4092, %eax # imm = 0xFFC
8258 ; X86-NEXT: retl
8261 ; X64: # %bb.0:
8264 ; X64-NEXT: andl $4092, %eax # imm = 0xFFC
8274 ; X86-LABEL: c4_i32_bad:
8275 ; X86: # %bb.0:
8276 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
8277 ; X86-NEXT: shrl $19, %eax
8278 ; X86-NEXT: andl $-2, %eax
8279 ; X86-NEXT: retl
8282 ; X64: # %bb.0:
8296 ; X86-NOBMI-LABEL: c0_i64:
8297 ; X86-NOBMI: # %bb.0:
8298 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
8299 ; X86-NOBMI-NEXT: shrl $19, %eax
8300 ; X86-NOBMI-NEXT: andl $1023, %eax # imm = 0x3FF
8301 ; X86-NOBMI-NEXT: xorl %edx, %edx
8302 ; X86-NOBMI-NEXT: retl
8304 ; X86-BMI1NOTBM-LABEL: c0_i64:
8305 ; X86-BMI1NOTBM: # %bb.0:
8306 ; X86-BMI1NOTBM-NEXT: movl $2579, %eax # imm = 0xA13
8307 ; X86-BMI1NOTBM-NEXT: bextrl %eax, {{[0-9]+}}(%esp), %eax
8308 ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx
8309 ; X86-BMI1NOTBM-NEXT: retl
8311 ; X86-BMI1TBM-LABEL: c0_i64:
8312 ; X86-BMI1TBM: # %bb.0:
8313 ; X86-BMI1TBM-NEXT: bextrl $2579, {{[0-9]+}}(%esp), %eax # imm = 0xA13
8314 ; X86-BMI1TBM-NEXT: xorl %edx, %edx
8315 ; X86-BMI1TBM-NEXT: retl
8317 ; X86-BMI1NOTBMBMI2-LABEL: c0_i64:
8318 ; X86-BMI1NOTBMBMI2: # %bb.0:
8319 ; X86-BMI1NOTBMBMI2-NEXT: movl $2579, %eax # imm = 0xA13
8320 ; X86-BMI1NOTBMBMI2-NEXT: bextrl %eax, {{[0-9]+}}(%esp), %eax
8321 ; X86-BMI1NOTBMBMI2-NEXT: xorl %edx, %edx
8322 ; X86-BMI1NOTBMBMI2-NEXT: retl
8325 ; X64-NOBMI: # %bb.0:
8328 ; X64-NOBMI-NEXT: andl $1023, %eax # imm = 0x3FF
8332 ; X64-BMI1NOTBM: # %bb.0:
8333 ; X64-BMI1NOTBM-NEXT: movl $2611, %eax # imm = 0xA33
8338 ; X64-BMI1TBM: # %bb.0:
8339 ; X64-BMI1TBM-NEXT: bextrq $2611, %rdi, %rax # imm = 0xA33
8343 ; X64-BMI1NOTBMBMI2: # %bb.0:
8344 ; X64-BMI1NOTBMBMI2-NEXT: movl $2611, %eax # imm = 0xA33
8354 ; X86-LABEL: c1_i64:
8355 ; X86: # %bb.0:
8356 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
8357 ; X86-NEXT: shrl $19, %eax
8358 ; X86-NEXT: andl $4092, %eax # imm = 0xFFC
8359 ; X86-NEXT: xorl %edx, %edx
8360 ; X86-NEXT: retl
8363 ; X64: # %bb.0:
8366 ; X64-NEXT: andl $4092, %eax # imm = 0xFFC
8375 ; X86-LABEL: c2_i64:
8376 ; X86: # %bb.0:
8377 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
8378 ; X86-NEXT: shrl $17, %eax
8379 ; X86-NEXT: andl $4092, %eax # imm = 0xFFC
8380 ; X86-NEXT: xorl %edx, %edx
8381 ; X86-NEXT: retl
8384 ; X64: # %bb.0:
8387 ; X64-NEXT: andl $4092, %eax # imm = 0xFFC
8397 ; X86-LABEL: c4_i64_bad:
8398 ; X86: # %bb.0:
8399 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
8400 ; X86-NEXT: shrl $19, %eax
8401 ; X86-NEXT: andl $-2, %eax
8402 ; X86-NEXT: xorl %edx, %edx
8403 ; X86-NEXT: retl
8406 ; X64: # %bb.0:
8424 ; X86-NOBMI-LABEL: c5_i32:
8425 ; X86-NOBMI: # %bb.0:
8426 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
8427 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
8428 ; X86-NOBMI-NEXT: shrl $19, %ecx
8429 ; X86-NOBMI-NEXT: andl $1023, %ecx # imm = 0x3FF
8430 ; X86-NOBMI-NEXT: movl %ecx, (%eax)
8431 ; X86-NOBMI-NEXT: retl
8433 ; X86-BMI1NOTBM-LABEL: c5_i32:
8434 ; X86-BMI1NOTBM: # %bb.0:
8435 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8436 ; X86-BMI1NOTBM-NEXT: movl $2579, %ecx # imm = 0xA13
8437 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %ecx
8438 ; X86-BMI1NOTBM-NEXT: movl %ecx, (%eax)
8439 ; X86-BMI1NOTBM-NEXT: retl
8441 ; X86-BMI1TBM-LABEL: c5_i32:
8442 ; X86-BMI1TBM: # %bb.0:
8443 ; X86-BMI1TBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8444 ; X86-BMI1TBM-NEXT: bextrl $2579, {{[0-9]+}}(%esp), %ecx # imm = 0xA13
8445 ; X86-BMI1TBM-NEXT: movl %ecx, (%eax)
8446 ; X86-BMI1TBM-NEXT: retl
8448 ; X86-BMI1NOTBMBMI2-LABEL: c5_i32:
8449 ; X86-BMI1NOTBMBMI2: # %bb.0:
8450 ; X86-BMI1NOTBMBMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
8451 ; X86-BMI1NOTBMBMI2-NEXT: movl $2579, %ecx # imm = 0xA13
8452 ; X86-BMI1NOTBMBMI2-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %ecx
8453 ; X86-BMI1NOTBMBMI2-NEXT: movl %ecx, (%eax)
8454 ; X86-BMI1NOTBMBMI2-NEXT: retl
8457 ; X64-NOBMI: # %bb.0:
8459 ; X64-NOBMI-NEXT: andl $1023, %edi # imm = 0x3FF
8464 ; X64-BMI1NOTBM: # %bb.0:
8465 ; X64-BMI1NOTBM-NEXT: movl $2579, %eax # imm = 0xA13
8471 ; X64-BMI1TBM: # %bb.0:
8472 ; X64-BMI1TBM-NEXT: bextrl $2579, %edi, %eax # imm = 0xA13
8477 ; X64-BMI1NOTBMBMI2: # %bb.0:
8478 ; X64-BMI1NOTBMBMI2-NEXT: movl $2579, %eax # imm = 0xA13
8490 ; X86-NOBMI-LABEL: c6_i32:
8491 ; X86-NOBMI: # %bb.0:
8492 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
8493 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
8494 ; X86-NOBMI-NEXT: shrl $19, %ecx
8495 ; X86-NOBMI-NEXT: andl $4095, %ecx # imm = 0xFFF
8496 ; X86-NOBMI-NEXT: movl %ecx, (%eax)
8497 ; X86-NOBMI-NEXT: retl
8499 ; X86-BMI1NOTBM-LABEL: c6_i32:
8500 ; X86-BMI1NOTBM: # %bb.0:
8501 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8502 ; X86-BMI1NOTBM-NEXT: movl $3091, %ecx # imm = 0xC13
8503 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %ecx
8504 ; X86-BMI1NOTBM-NEXT: movl %ecx, (%eax)
8505 ; X86-BMI1NOTBM-NEXT: retl
8507 ; X86-BMI1TBM-LABEL: c6_i32:
8508 ; X86-BMI1TBM: # %bb.0:
8509 ; X86-BMI1TBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8510 ; X86-BMI1TBM-NEXT: bextrl $3091, {{[0-9]+}}(%esp), %ecx # imm = 0xC13
8511 ; X86-BMI1TBM-NEXT: movl %ecx, (%eax)
8512 ; X86-BMI1TBM-NEXT: retl
8514 ; X86-BMI1NOTBMBMI2-LABEL: c6_i32:
8515 ; X86-BMI1NOTBMBMI2: # %bb.0:
8516 ; X86-BMI1NOTBMBMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
8517 ; X86-BMI1NOTBMBMI2-NEXT: movl $3091, %ecx # imm = 0xC13
8518 ; X86-BMI1NOTBMBMI2-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %ecx
8519 ; X86-BMI1NOTBMBMI2-NEXT: movl %ecx, (%eax)
8520 ; X86-BMI1NOTBMBMI2-NEXT: retl
8523 ; X64-NOBMI: # %bb.0:
8525 ; X64-NOBMI-NEXT: andl $4095, %edi # imm = 0xFFF
8530 ; X64-BMI1NOTBM: # %bb.0:
8531 ; X64-BMI1NOTBM-NEXT: movl $3091, %eax # imm = 0xC13
8537 ; X64-BMI1TBM: # %bb.0:
8538 ; X64-BMI1TBM-NEXT: bextrl $3091, %edi, %eax # imm = 0xC13
8543 ; X64-BMI1NOTBMBMI2: # %bb.0:
8544 ; X64-BMI1NOTBMBMI2-NEXT: movl $3091, %eax # imm = 0xC13
8556 ; X86-LABEL: c7_i32:
8557 ; X86: # %bb.0:
8558 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
8559 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
8560 ; X86-NEXT: shrl $17, %ecx
8561 ; X86-NEXT: andl $4092, %ecx # imm = 0xFFC
8562 ; X86-NEXT: movl %ecx, (%eax)
8563 ; X86-NEXT: retl
8566 ; X64: # %bb.0:
8568 ; X64-NEXT: andl $4092, %edi # imm = 0xFFC
8582 ; X86-NOBMI-LABEL: c5_i64:
8583 ; X86-NOBMI: # %bb.0:
8584 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
8585 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
8586 ; X86-NOBMI-NEXT: shrl $19, %ecx
8587 ; X86-NOBMI-NEXT: andl $1023, %ecx # imm = 0x3FF
8588 ; X86-NOBMI-NEXT: movl %ecx, (%eax)
8589 ; X86-NOBMI-NEXT: movl $0, 4(%eax)
8590 ; X86-NOBMI-NEXT: retl
8592 ; X86-BMI1NOTBM-LABEL: c5_i64:
8593 ; X86-BMI1NOTBM: # %bb.0:
8594 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8595 ; X86-BMI1NOTBM-NEXT: movl $2579, %ecx # imm = 0xA13
8596 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %ecx
8597 ; X86-BMI1NOTBM-NEXT: movl %ecx, (%eax)
8598 ; X86-BMI1NOTBM-NEXT: movl $0, 4(%eax)
8599 ; X86-BMI1NOTBM-NEXT: retl
8601 ; X86-BMI1TBM-LABEL: c5_i64:
8602 ; X86-BMI1TBM: # %bb.0:
8603 ; X86-BMI1TBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8604 ; X86-BMI1TBM-NEXT: bextrl $2579, {{[0-9]+}}(%esp), %ecx # imm = 0xA13
8605 ; X86-BMI1TBM-NEXT: movl %ecx, (%eax)
8606 ; X86-BMI1TBM-NEXT: movl $0, 4(%eax)
8607 ; X86-BMI1TBM-NEXT: retl
8609 ; X86-BMI1NOTBMBMI2-LABEL: c5_i64:
8610 ; X86-BMI1NOTBMBMI2: # %bb.0:
8611 ; X86-BMI1NOTBMBMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
8612 ; X86-BMI1NOTBMBMI2-NEXT: movl $2579, %ecx # imm = 0xA13
8613 ; X86-BMI1NOTBMBMI2-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %ecx
8614 ; X86-BMI1NOTBMBMI2-NEXT: movl %ecx, (%eax)
8615 ; X86-BMI1NOTBMBMI2-NEXT: movl $0, 4(%eax)
8616 ; X86-BMI1NOTBMBMI2-NEXT: retl
8619 ; X64-NOBMI: # %bb.0:
8621 ; X64-NOBMI-NEXT: andl $1023, %edi # imm = 0x3FF
8626 ; X64-BMI1NOTBM: # %bb.0:
8627 ; X64-BMI1NOTBM-NEXT: movl $2611, %eax # imm = 0xA33
8633 ; X64-BMI1TBM: # %bb.0:
8634 ; X64-BMI1TBM-NEXT: bextrq $2611, %rdi, %rax # imm = 0xA33
8639 ; X64-BMI1NOTBMBMI2: # %bb.0:
8640 ; X64-BMI1NOTBMBMI2-NEXT: movl $2611, %eax # imm = 0xA33
8652 ; X86-NOBMI-LABEL: c6_i64:
8653 ; X86-NOBMI: # %bb.0:
8654 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
8655 ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
8656 ; X86-NOBMI-NEXT: shrl $19, %ecx
8657 ; X86-NOBMI-NEXT: andl $4095, %ecx # imm = 0xFFF
8658 ; X86-NOBMI-NEXT: movl %ecx, (%eax)
8659 ; X86-NOBMI-NEXT: movl $0, 4(%eax)
8660 ; X86-NOBMI-NEXT: retl
8662 ; X86-BMI1NOTBM-LABEL: c6_i64:
8663 ; X86-BMI1NOTBM: # %bb.0:
8664 ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8665 ; X86-BMI1NOTBM-NEXT: movl $3091, %ecx # imm = 0xC13
8666 ; X86-BMI1NOTBM-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %ecx
8667 ; X86-BMI1NOTBM-NEXT: movl %ecx, (%eax)
8668 ; X86-BMI1NOTBM-NEXT: movl $0, 4(%eax)
8669 ; X86-BMI1NOTBM-NEXT: retl
8671 ; X86-BMI1TBM-LABEL: c6_i64:
8672 ; X86-BMI1TBM: # %bb.0:
8673 ; X86-BMI1TBM-NEXT: movl {{[0-9]+}}(%esp), %eax
8674 ; X86-BMI1TBM-NEXT: bextrl $3091, {{[0-9]+}}(%esp), %ecx # imm = 0xC13
8675 ; X86-BMI1TBM-NEXT: movl %ecx, (%eax)
8676 ; X86-BMI1TBM-NEXT: movl $0, 4(%eax)
8677 ; X86-BMI1TBM-NEXT: retl
8679 ; X86-BMI1NOTBMBMI2-LABEL: c6_i64:
8680 ; X86-BMI1NOTBMBMI2: # %bb.0:
8681 ; X86-BMI1NOTBMBMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
8682 ; X86-BMI1NOTBMBMI2-NEXT: movl $3091, %ecx # imm = 0xC13
8683 ; X86-BMI1NOTBMBMI2-NEXT: bextrl %ecx, {{[0-9]+}}(%esp), %ecx
8684 ; X86-BMI1NOTBMBMI2-NEXT: movl %ecx, (%eax)
8685 ; X86-BMI1NOTBMBMI2-NEXT: movl $0, 4(%eax)
8686 ; X86-BMI1NOTBMBMI2-NEXT: retl
8689 ; X64-NOBMI: # %bb.0:
8691 ; X64-NOBMI-NEXT: andl $4095, %edi # imm = 0xFFF
8696 ; X64-BMI1NOTBM: # %bb.0:
8697 ; X64-BMI1NOTBM-NEXT: movl $3123, %eax # imm = 0xC33
8703 ; X64-BMI1TBM: # %bb.0:
8704 ; X64-BMI1TBM-NEXT: bextrq $3123, %rdi, %rax # imm = 0xC33
8709 ; X64-BMI1NOTBMBMI2: # %bb.0:
8710 ; X64-BMI1NOTBMBMI2-NEXT: movl $3123, %eax # imm = 0xC33
8722 ; X86-LABEL: c7_i64:
8723 ; X86: # %bb.0:
8724 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
8725 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
8726 ; X86-NEXT: shrl $17, %ecx
8727 ; X86-NEXT: andl $4092, %ecx # imm = 0xFFC
8728 ; X86-NEXT: movl %ecx, (%eax)
8729 ; X86-NEXT: movl $0, 4(%eax)
8730 ; X86-NEXT: retl
8733 ; X64: # %bb.0:
8735 ; X64-NEXT: andl $4092, %edi # imm = 0xFFC