Lines Matching refs:SSE41
3 …triple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
35 ; SSE41-LABEL: test_div7_2i64:
36 ; SSE41: # %bb.0:
37 ; SSE41-NEXT: pextrq $1, %xmm0, %rax
38 ; SSE41-NEXT: movabsq $5270498306774157605, %rcx # imm = 0x4924924924924925
39 ; SSE41-NEXT: imulq %rcx
40 ; SSE41-NEXT: movq %rdx, %rax
41 ; SSE41-NEXT: shrq $63, %rax
42 ; SSE41-NEXT: sarq %rdx
43 ; SSE41-NEXT: addq %rax, %rdx
44 ; SSE41-NEXT: movq %rdx, %xmm1
45 ; SSE41-NEXT: movq %xmm0, %rax
46 ; SSE41-NEXT: imulq %rcx
47 ; SSE41-NEXT: movq %rdx, %rax
48 ; SSE41-NEXT: shrq $63, %rax
49 ; SSE41-NEXT: sarq %rdx
50 ; SSE41-NEXT: addq %rax, %rdx
51 ; SSE41-NEXT: movq %rdx, %xmm0
52 ; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
53 ; SSE41-NEXT: retq
102 ; SSE41-LABEL: test_div7_4i32:
103 ; SSE41: # %bb.0:
104 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
105 ; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027]
106 ; SSE41-NEXT: pmuldq %xmm1, %xmm2
107 ; SSE41-NEXT: pmuldq %xmm0, %xmm1
108 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
109 ; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
110 ; SSE41-NEXT: paddd %xmm0, %xmm1
111 ; SSE41-NEXT: movdqa %xmm1, %xmm0
112 ; SSE41-NEXT: psrld $31, %xmm0
113 ; SSE41-NEXT: psrad $2, %xmm1
114 ; SSE41-NEXT: paddd %xmm0, %xmm1
115 ; SSE41-NEXT: movdqa %xmm1, %xmm0
116 ; SSE41-NEXT: retq
196 ; SSE41-LABEL: test_div7_16i8:
197 ; SSE41: # %bb.0:
198 ; SSE41-NEXT: pmovsxbw %xmm0, %xmm1
199 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [65427,65427,65427,65427,65427,65427,65427,65427]
200 ; SSE41-NEXT: pmullw %xmm2, %xmm1
201 ; SSE41-NEXT: psrlw $8, %xmm1
202 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]
203 ; SSE41-NEXT: pmovsxbw %xmm3, %xmm3
204 ; SSE41-NEXT: pmullw %xmm2, %xmm3
205 ; SSE41-NEXT: psrlw $8, %xmm3
206 ; SSE41-NEXT: packuswb %xmm3, %xmm1
207 ; SSE41-NEXT: paddb %xmm0, %xmm1
208 ; SSE41-NEXT: movdqa %xmm1, %xmm0
209 ; SSE41-NEXT: psrlw $2, %xmm0
210 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm0
211 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
212 ; SSE41-NEXT: pxor %xmm2, %xmm0
213 ; SSE41-NEXT: psrlw $7, %xmm1
214 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm1
215 ; SSE41-NEXT: paddb %xmm0, %xmm1
216 ; SSE41-NEXT: psubb %xmm2, %xmm1
217 ; SSE41-NEXT: movdqa %xmm1, %xmm0
218 ; SSE41-NEXT: retq
316 ; SSE41-LABEL: test_divconstant_16i8:
317 ; SSE41: # %bb.0:
318 ; SSE41-NEXT: pmovsxbw %xmm0, %xmm1
319 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm1
320 ; SSE41-NEXT: psrlw $8, %xmm1
321 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]
322 ; SSE41-NEXT: pmovsxbw %xmm2, %xmm2
323 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm2
324 ; SSE41-NEXT: psrlw $8, %xmm2
325 ; SSE41-NEXT: packuswb %xmm2, %xmm1
326 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm0
327 ; SSE41-NEXT: paddb %xmm1, %xmm0
328 ; SSE41-NEXT: movdqa %xmm0, %xmm1
329 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[1…
330 ; SSE41-NEXT: psraw $8, %xmm1
331 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm1
332 ; SSE41-NEXT: psrlw $8, %xmm1
333 ; SSE41-NEXT: movdqa %xmm0, %xmm2
334 ; SSE41-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],…
335 ; SSE41-NEXT: psraw $8, %xmm2
336 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm2
337 ; SSE41-NEXT: psrlw $8, %xmm2
338 ; SSE41-NEXT: packuswb %xmm1, %xmm2
339 ; SSE41-NEXT: psrlw $7, %xmm0
340 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm0
341 ; SSE41-NEXT: paddb %xmm2, %xmm0
342 ; SSE41-NEXT: retq
446 ; SSE41-LABEL: test_rem7_2i64:
447 ; SSE41: # %bb.0:
448 ; SSE41-NEXT: pextrq $1, %xmm0, %rcx
449 ; SSE41-NEXT: movabsq $5270498306774157605, %rsi # imm = 0x4924924924924925
450 ; SSE41-NEXT: movq %rcx, %rax
451 ; SSE41-NEXT: imulq %rsi
452 ; SSE41-NEXT: movq %rdx, %rax
453 ; SSE41-NEXT: shrq $63, %rax
454 ; SSE41-NEXT: sarq %rdx
455 ; SSE41-NEXT: addq %rax, %rdx
456 ; SSE41-NEXT: leaq (,%rdx,8), %rax
457 ; SSE41-NEXT: subq %rax, %rdx
458 ; SSE41-NEXT: addq %rcx, %rdx
459 ; SSE41-NEXT: movq %rdx, %xmm1
460 ; SSE41-NEXT: movq %xmm0, %rcx
461 ; SSE41-NEXT: movq %rcx, %rax
462 ; SSE41-NEXT: imulq %rsi
463 ; SSE41-NEXT: movq %rdx, %rax
464 ; SSE41-NEXT: shrq $63, %rax
465 ; SSE41-NEXT: sarq %rdx
466 ; SSE41-NEXT: addq %rax, %rdx
467 ; SSE41-NEXT: leaq (,%rdx,8), %rax
468 ; SSE41-NEXT: subq %rax, %rdx
469 ; SSE41-NEXT: addq %rcx, %rdx
470 ; SSE41-NEXT: movq %rdx, %xmm0
471 ; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
472 ; SSE41-NEXT: retq
532 ; SSE41-LABEL: test_rem7_4i32:
533 ; SSE41: # %bb.0:
534 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
535 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2454267027,2454267027,2454267027,2454267027]
536 ; SSE41-NEXT: pmuldq %xmm2, %xmm1
537 ; SSE41-NEXT: pmuldq %xmm0, %xmm2
538 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
539 ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]
540 ; SSE41-NEXT: paddd %xmm0, %xmm2
541 ; SSE41-NEXT: movdqa %xmm2, %xmm1
542 ; SSE41-NEXT: psrld $31, %xmm1
543 ; SSE41-NEXT: psrad $2, %xmm2
544 ; SSE41-NEXT: paddd %xmm1, %xmm2
545 ; SSE41-NEXT: pmulld {{.*}}(%rip), %xmm2
546 ; SSE41-NEXT: psubd %xmm2, %xmm0
547 ; SSE41-NEXT: retq
641 ; SSE41-LABEL: test_rem7_16i8:
642 ; SSE41: # %bb.0:
643 ; SSE41-NEXT: pmovsxbw %xmm0, %xmm1
644 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [65427,65427,65427,65427,65427,65427,65427,65427]
645 ; SSE41-NEXT: pmullw %xmm2, %xmm1
646 ; SSE41-NEXT: psrlw $8, %xmm1
647 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]
648 ; SSE41-NEXT: pmovsxbw %xmm3, %xmm3
649 ; SSE41-NEXT: pmullw %xmm2, %xmm3
650 ; SSE41-NEXT: psrlw $8, %xmm3
651 ; SSE41-NEXT: packuswb %xmm3, %xmm1
652 ; SSE41-NEXT: paddb %xmm0, %xmm1
653 ; SSE41-NEXT: movdqa %xmm1, %xmm2
654 ; SSE41-NEXT: psrlw $2, %xmm2
655 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm2
656 ; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
657 ; SSE41-NEXT: pxor %xmm3, %xmm2
658 ; SSE41-NEXT: psrlw $7, %xmm1
659 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm1
660 ; SSE41-NEXT: paddb %xmm2, %xmm1
661 ; SSE41-NEXT: psubb %xmm3, %xmm1
662 ; SSE41-NEXT: movdqa %xmm1, %xmm2
663 ; SSE41-NEXT: psllw $3, %xmm2
664 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm2
665 ; SSE41-NEXT: psubb %xmm2, %xmm1
666 ; SSE41-NEXT: paddb %xmm1, %xmm0
667 ; SSE41-NEXT: retq
788 ; SSE41-LABEL: test_remconstant_16i8:
789 ; SSE41: # %bb.0:
790 ; SSE41-NEXT: pmovsxbw %xmm0, %xmm2
791 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm2
792 ; SSE41-NEXT: psrlw $8, %xmm2
793 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
794 ; SSE41-NEXT: pmovsxbw %xmm1, %xmm1
795 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm1
796 ; SSE41-NEXT: psrlw $8, %xmm1
797 ; SSE41-NEXT: packuswb %xmm1, %xmm2
798 ; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [255,255,0,0,255,0,0,255,255,0,0,255,0,0,0,255]
799 ; SSE41-NEXT: pand %xmm0, %xmm1
800 ; SSE41-NEXT: paddb %xmm2, %xmm1
801 ; SSE41-NEXT: movdqa %xmm1, %xmm2
802 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[1…
803 ; SSE41-NEXT: psraw $8, %xmm2
804 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm2
805 ; SSE41-NEXT: psrlw $8, %xmm2
806 ; SSE41-NEXT: movdqa %xmm1, %xmm3
807 ; SSE41-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],…
808 ; SSE41-NEXT: psraw $8, %xmm3
809 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm3
810 ; SSE41-NEXT: psrlw $8, %xmm3
811 ; SSE41-NEXT: packuswb %xmm2, %xmm3
812 ; SSE41-NEXT: psrlw $7, %xmm1
813 ; SSE41-NEXT: pand {{.*}}(%rip), %xmm1
814 ; SSE41-NEXT: paddb %xmm3, %xmm1
815 ; SSE41-NEXT: pmovzxbw {{.*#+}} xmm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[…
816 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
817 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm1
818 ; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]
819 ; SSE41-NEXT: pand %xmm3, %xmm1
820 ; SSE41-NEXT: pmullw {{.*}}(%rip), %xmm2
821 ; SSE41-NEXT: pand %xmm3, %xmm2
822 ; SSE41-NEXT: packuswb %xmm1, %xmm2
823 ; SSE41-NEXT: psubb %xmm2, %xmm0
824 ; SSE41-NEXT: retq
999 ; SSE41-LABEL: test_rem_variable_16i8:
1000 ; SSE41: # %bb.0:
1001 ; SSE41-NEXT: pextrb $1, %xmm1, %ecx
1002 ; SSE41-NEXT: pextrb $1, %xmm0, %eax
1003 ; SSE41-NEXT: cbtw
1004 ; SSE41-NEXT: idivb %cl
1005 ; SSE41-NEXT: movsbl %ah, %ecx
1006 ; SSE41-NEXT: movd %xmm1, %edx
1007 ; SSE41-NEXT: movd %xmm0, %eax
1008 ; SSE41-NEXT: cbtw
1009 ; SSE41-NEXT: idivb %dl
1010 ; SSE41-NEXT: movsbl %ah, %eax
1011 ; SSE41-NEXT: movd %eax, %xmm2
1012 ; SSE41-NEXT: pinsrb $1, %ecx, %xmm2
1013 ; SSE41-NEXT: pextrb $2, %xmm1, %ecx
1014 ; SSE41-NEXT: pextrb $2, %xmm0, %eax
1015 ; SSE41-NEXT: cbtw
1016 ; SSE41-NEXT: idivb %cl
1017 ; SSE41-NEXT: movsbl %ah, %eax
1018 ; SSE41-NEXT: pinsrb $2, %eax, %xmm2
1019 ; SSE41-NEXT: pextrb $3, %xmm1, %ecx
1020 ; SSE41-NEXT: pextrb $3, %xmm0, %eax
1021 ; SSE41-NEXT: cbtw
1022 ; SSE41-NEXT: idivb %cl
1023 ; SSE41-NEXT: movsbl %ah, %eax
1024 ; SSE41-NEXT: pinsrb $3, %eax, %xmm2
1025 ; SSE41-NEXT: pextrb $4, %xmm1, %ecx
1026 ; SSE41-NEXT: pextrb $4, %xmm0, %eax
1027 ; SSE41-NEXT: cbtw
1028 ; SSE41-NEXT: idivb %cl
1029 ; SSE41-NEXT: movsbl %ah, %eax
1030 ; SSE41-NEXT: pinsrb $4, %eax, %xmm2
1031 ; SSE41-NEXT: pextrb $5, %xmm1, %ecx
1032 ; SSE41-NEXT: pextrb $5, %xmm0, %eax
1033 ; SSE41-NEXT: cbtw
1034 ; SSE41-NEXT: idivb %cl
1035 ; SSE41-NEXT: movsbl %ah, %eax
1036 ; SSE41-NEXT: pinsrb $5, %eax, %xmm2
1037 ; SSE41-NEXT: pextrb $6, %xmm1, %ecx
1038 ; SSE41-NEXT: pextrb $6, %xmm0, %eax
1039 ; SSE41-NEXT: cbtw
1040 ; SSE41-NEXT: idivb %cl
1041 ; SSE41-NEXT: movsbl %ah, %eax
1042 ; SSE41-NEXT: pinsrb $6, %eax, %xmm2
1043 ; SSE41-NEXT: pextrb $7, %xmm1, %ecx
1044 ; SSE41-NEXT: pextrb $7, %xmm0, %eax
1045 ; SSE41-NEXT: cbtw
1046 ; SSE41-NEXT: idivb %cl
1047 ; SSE41-NEXT: movsbl %ah, %eax
1048 ; SSE41-NEXT: pinsrb $7, %eax, %xmm2
1049 ; SSE41-NEXT: pextrb $8, %xmm1, %ecx
1050 ; SSE41-NEXT: pextrb $8, %xmm0, %eax
1051 ; SSE41-NEXT: cbtw
1052 ; SSE41-NEXT: idivb %cl
1053 ; SSE41-NEXT: movsbl %ah, %eax
1054 ; SSE41-NEXT: pinsrb $8, %eax, %xmm2
1055 ; SSE41-NEXT: pextrb $9, %xmm1, %ecx
1056 ; SSE41-NEXT: pextrb $9, %xmm0, %eax
1057 ; SSE41-NEXT: cbtw
1058 ; SSE41-NEXT: idivb %cl
1059 ; SSE41-NEXT: movsbl %ah, %eax
1060 ; SSE41-NEXT: pinsrb $9, %eax, %xmm2
1061 ; SSE41-NEXT: pextrb $10, %xmm1, %ecx
1062 ; SSE41-NEXT: pextrb $10, %xmm0, %eax
1063 ; SSE41-NEXT: cbtw
1064 ; SSE41-NEXT: idivb %cl
1065 ; SSE41-NEXT: movsbl %ah, %eax
1066 ; SSE41-NEXT: pinsrb $10, %eax, %xmm2
1067 ; SSE41-NEXT: pextrb $11, %xmm1, %ecx
1068 ; SSE41-NEXT: pextrb $11, %xmm0, %eax
1069 ; SSE41-NEXT: cbtw
1070 ; SSE41-NEXT: idivb %cl
1071 ; SSE41-NEXT: movsbl %ah, %eax
1072 ; SSE41-NEXT: pinsrb $11, %eax, %xmm2
1073 ; SSE41-NEXT: pextrb $12, %xmm1, %ecx
1074 ; SSE41-NEXT: pextrb $12, %xmm0, %eax
1075 ; SSE41-NEXT: cbtw
1076 ; SSE41-NEXT: idivb %cl
1077 ; SSE41-NEXT: movsbl %ah, %eax
1078 ; SSE41-NEXT: pinsrb $12, %eax, %xmm2
1079 ; SSE41-NEXT: pextrb $13, %xmm1, %ecx
1080 ; SSE41-NEXT: pextrb $13, %xmm0, %eax
1081 ; SSE41-NEXT: cbtw
1082 ; SSE41-NEXT: idivb %cl
1083 ; SSE41-NEXT: movsbl %ah, %eax
1084 ; SSE41-NEXT: pinsrb $13, %eax, %xmm2
1085 ; SSE41-NEXT: pextrb $14, %xmm1, %ecx
1086 ; SSE41-NEXT: pextrb $14, %xmm0, %eax
1087 ; SSE41-NEXT: cbtw
1088 ; SSE41-NEXT: idivb %cl
1089 ; SSE41-NEXT: movsbl %ah, %eax
1090 ; SSE41-NEXT: pinsrb $14, %eax, %xmm2
1091 ; SSE41-NEXT: pextrb $15, %xmm1, %ecx
1092 ; SSE41-NEXT: pextrb $15, %xmm0, %eax
1093 ; SSE41-NEXT: cbtw
1094 ; SSE41-NEXT: idivb %cl
1095 ; SSE41-NEXT: movsbl %ah, %eax
1096 ; SSE41-NEXT: pinsrb $15, %eax, %xmm2
1097 ; SSE41-NEXT: movdqa %xmm2, %xmm0
1098 ; SSE41-NEXT: retq