1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker; sdiv by 7 9*9880d681SAndroid Build Coastguard Worker; 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_div7_2i64(<2 x i64> %a) nounwind { 12*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_div7_2i64: 13*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 14*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rax 15*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movabsq $5270498306774157605, %rcx # imm = 0x4924924924924925 16*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: imulq %rcx 17*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movq %rdx, %rax 18*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: shrq $63, %rax 19*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: sarq %rdx 20*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: addq %rax, %rdx 21*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %rdx, %xmm1 22*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 23*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rax 24*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: imulq %rcx 25*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movq %rdx, %rax 26*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: shrq $63, %rax 27*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: sarq %rdx 28*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: addq %rax, %rdx 29*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %rdx, %xmm0 30*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0] 31*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm0 32*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 33*9880d681SAndroid Build Coastguard Worker; 34*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_div7_2i64: 35*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 36*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrq $1, %xmm0, %rax 37*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movabsq $5270498306774157605, %rcx # imm = 0x4924924924924925 38*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: imulq %rcx 39*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movq %rdx, %rax 40*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: shrq $63, %rax 41*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: sarq %rdx 42*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: addq %rax, %rdx 43*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %rdx, %xmm1 44*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %xmm0, %rax 45*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: imulq %rcx 46*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movq %rdx, %rax 47*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: shrq $63, %rax 48*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: sarq %rdx 49*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: addq %rax, %rdx 50*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %rdx, %xmm0 51*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 52*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 53*9880d681SAndroid Build Coastguard Worker; 54*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_div7_2i64: 55*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 56*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrq $1, %xmm0, %rax 57*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movabsq $5270498306774157605, %rcx # imm = 0x4924924924924925 58*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: imulq %rcx 59*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rdx, %rax 60*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: shrq $63, %rax 61*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: sarq %rdx 62*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: addq %rax, %rdx 63*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %rdx, %xmm1 64*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %xmm0, %rax 65*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: imulq %rcx 66*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rdx, %rax 67*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: shrq $63, %rax 68*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: sarq %rdx 69*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: addq %rax, %rdx 70*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %rdx, %xmm0 71*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 72*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 73*9880d681SAndroid Build Coastguard Worker %res = sdiv <2 x i64> %a, <i64 7, i64 7> 74*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_div7_4i32(<4 x i32> %a) nounwind { 78*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_div7_4i32: 79*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 80*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027] 81*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm2 82*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $31, %xmm2 83*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm1, %xmm2 84*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm3 85*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmuludq %xmm1, %xmm3 86*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3] 87*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $31, %xmm1 88*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm0, %xmm1 89*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddd %xmm1, %xmm2 90*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3] 91*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 92*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmuludq %xmm4, %xmm3 93*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3] 94*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1] 95*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psubd %xmm2, %xmm1 96*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddd %xmm0, %xmm1 97*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm0 98*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrld $31, %xmm0 99*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $2, %xmm1 100*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddd %xmm0, %xmm1 101*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm0 102*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 103*9880d681SAndroid Build Coastguard Worker; 104*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_div7_4i32: 105*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 106*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027] 107*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3] 108*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 109*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmuldq %xmm2, %xmm3 110*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmuldq %xmm0, %xmm1 111*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 112*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7] 113*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddd %xmm0, %xmm1 114*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 115*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrld $31, %xmm0 116*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad $2, %xmm1 117*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddd %xmm0, %xmm1 118*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 119*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 120*9880d681SAndroid Build Coastguard Worker; 121*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_div7_4i32: 122*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 123*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027] 124*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3] 125*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 126*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuldq %xmm2, %xmm3, %xmm2 127*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuldq %xmm1, %xmm0, %xmm1 128*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 129*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7] 130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm0, %xmm1, %xmm0 131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $31, %xmm0, %xmm1 132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $2, %xmm0, %xmm0 133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 135*9880d681SAndroid Build Coastguard Worker; 136*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_div7_4i32: 137*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %xmm1 139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3] 140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuldq %xmm2, %xmm3, %xmm2 142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuldq %xmm1, %xmm0, %xmm1 143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 144*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3] 145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd %xmm0, %xmm1, %xmm0 146*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $31, %xmm0, %xmm1 147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrad $2, %xmm0, %xmm0 148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0 149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 150*9880d681SAndroid Build Coastguard Worker %res = sdiv <4 x i32> %a, <i32 7, i32 7, i32 7, i32 7> 151*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_div7_8i16(<8 x i16> %a) nounwind { 155*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_div7_8i16: 156*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 157*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmulhw {{.*}}(%rip), %xmm0 158*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm1 159*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlw $15, %xmm1 160*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psraw $1, %xmm0 161*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddw %xmm1, %xmm0 162*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 163*9880d681SAndroid Build Coastguard Worker; 164*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_div7_8i16: 165*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 166*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpmulhw {{.*}}(%rip), %xmm0, %xmm0 167*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlw $15, %xmm0, %xmm1 168*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $1, %xmm0, %xmm0 169*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0 170*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 171*9880d681SAndroid Build Coastguard Worker %res = sdiv <8 x i16> %a, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7> 172*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_div7_16i8(<16 x i8> %a) nounwind { 176*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_div7_16i8: 177*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 178*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147] 179*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm2 180*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm3 181*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 182*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm3 183*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmullw %xmm2, %xmm3 184*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm3 185*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm1 186*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 187*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm1 188*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmullw %xmm2, %xmm1 189*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm1 190*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm3, %xmm1 191*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddb %xmm0, %xmm1 192*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm0 193*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $2, %xmm0 194*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand {{.*}}(%rip), %xmm0 195*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32] 196*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm2, %xmm0 197*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psubb %xmm2, %xmm0 198*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $7, %xmm1 199*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand {{.*}}(%rip), %xmm1 200*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddb %xmm0, %xmm1 201*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm0 202*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 203*9880d681SAndroid Build Coastguard Worker; 204*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_div7_16i8: 205*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 206*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw %xmm0, %xmm1 207*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw {{.*}}(%rip), %xmm2 208*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmullw %xmm2, %xmm1 209*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm1 210*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1] 211*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw %xmm3, %xmm3 212*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmullw %xmm2, %xmm3 213*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm3 214*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packuswb %xmm3, %xmm1 215*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddb %xmm0, %xmm1 216*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 217*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $2, %xmm0 218*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pand {{.*}}(%rip), %xmm0 219*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32] 220*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm2, %xmm0 221*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psubb %xmm2, %xmm0 222*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $7, %xmm1 223*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pand {{.*}}(%rip), %xmm1 224*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddb %xmm0, %xmm1 225*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 226*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 227*9880d681SAndroid Build Coastguard Worker; 228*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_div7_16i8: 229*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 230*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw %xmm0, %xmm1 231*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw {{.*}}(%rip), %xmm2 232*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw %xmm2, %xmm1, %xmm1 233*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm1, %xmm1 234*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1] 235*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw %xmm3, %xmm3 236*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw %xmm2, %xmm3, %xmm2 237*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 238*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 239*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 240*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm0, %xmm1 241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1 242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32] 243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1 244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm1 245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $7, %xmm0, %xmm0 246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 249*9880d681SAndroid Build Coastguard Worker; 250*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_div7_16i8: 251*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 252*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxbw %xmm0, %ymm1 253*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxbw {{.*}}(%rip), %ymm2 254*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmullw %ymm2, %ymm1, %ymm1 255*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm1, %ymm1 256*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 257*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 258*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %xmm0, %xmm1, %xmm0 259*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $2, %xmm0, %xmm1 260*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1 261*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32] 262*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm1 263*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb %xmm2, %xmm1, %xmm1 264*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $7, %xmm0, %xmm0 265*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %xmm0, %xmm1, %xmm0 267*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 268*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 269*9880d681SAndroid Build Coastguard Worker %res = sdiv <16 x i8> %a, <i8 7, i8 7, i8 7, i8 7,i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7,i8 7, i8 7, i8 7, i8 7> 270*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 271*9880d681SAndroid Build Coastguard Worker} 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker; 274*9880d681SAndroid Build Coastguard Worker; srem by 7 275*9880d681SAndroid Build Coastguard Worker; 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_rem7_2i64(<2 x i64> %a) nounwind { 278*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_rem7_2i64: 279*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 280*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rcx 281*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movabsq $5270498306774157605, %rsi # imm = 0x4924924924924925 282*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movq %rcx, %rax 283*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: imulq %rsi 284*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movq %rdx, %rax 285*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: shrq $63, %rax 286*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: sarq %rdx 287*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: addq %rax, %rdx 288*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: leaq (,%rdx,8), %rax 289*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: subq %rdx, %rax 290*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: subq %rax, %rcx 291*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %rcx, %xmm1 292*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 293*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rcx 294*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movq %rcx, %rax 295*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: imulq %rsi 296*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movq %rdx, %rax 297*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: shrq $63, %rax 298*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: sarq %rdx 299*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: addq %rax, %rdx 300*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: leaq (,%rdx,8), %rax 301*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: subq %rdx, %rax 302*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: subq %rax, %rcx 303*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %rcx, %xmm0 304*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0] 305*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm0 306*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 307*9880d681SAndroid Build Coastguard Worker; 308*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_rem7_2i64: 309*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 310*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrq $1, %xmm0, %rcx 311*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movabsq $5270498306774157605, %rsi # imm = 0x4924924924924925 312*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movq %rcx, %rax 313*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: imulq %rsi 314*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movq %rdx, %rax 315*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: shrq $63, %rax 316*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: sarq %rdx 317*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: addq %rax, %rdx 318*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: leaq (,%rdx,8), %rax 319*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: subq %rdx, %rax 320*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: subq %rax, %rcx 321*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %rcx, %xmm1 322*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %xmm0, %rcx 323*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movq %rcx, %rax 324*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: imulq %rsi 325*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movq %rdx, %rax 326*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: shrq $63, %rax 327*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: sarq %rdx 328*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: addq %rax, %rdx 329*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: leaq (,%rdx,8), %rax 330*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: subq %rdx, %rax 331*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: subq %rax, %rcx 332*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %rcx, %xmm0 333*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 334*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 335*9880d681SAndroid Build Coastguard Worker; 336*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_rem7_2i64: 337*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 338*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrq $1, %xmm0, %rcx 339*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movabsq $5270498306774157605, %rsi # imm = 0x4924924924924925 340*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rcx, %rax 341*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: imulq %rsi 342*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rdx, %rax 343*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: shrq $63, %rax 344*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: sarq %rdx 345*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: addq %rax, %rdx 346*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: leaq (,%rdx,8), %rax 347*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: subq %rdx, %rax 348*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: subq %rax, %rcx 349*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %rcx, %xmm1 350*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %xmm0, %rcx 351*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rcx, %rax 352*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: imulq %rsi 353*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rdx, %rax 354*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: shrq $63, %rax 355*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: sarq %rdx 356*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: addq %rax, %rdx 357*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: leaq (,%rdx,8), %rax 358*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: subq %rdx, %rax 359*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: subq %rax, %rcx 360*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %rcx, %xmm0 361*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 362*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 363*9880d681SAndroid Build Coastguard Worker %res = srem <2 x i64> %a, <i64 7, i64 7> 364*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 365*9880d681SAndroid Build Coastguard Worker} 366*9880d681SAndroid Build Coastguard Worker 367*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_rem7_4i32(<4 x i32> %a) nounwind { 368*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_rem7_4i32: 369*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 370*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027] 371*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm2 372*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $31, %xmm2 373*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm1, %xmm2 374*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm3 375*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmuludq %xmm1, %xmm3 376*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3] 377*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $31, %xmm1 378*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm0, %xmm1 379*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddd %xmm1, %xmm2 380*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,3,2,3] 381*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 382*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmuludq %xmm4, %xmm3 383*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,3,2,3] 384*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1] 385*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psubd %xmm2, %xmm1 386*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddd %xmm0, %xmm1 387*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 388*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrld $31, %xmm2 389*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $2, %xmm1 390*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddd %xmm2, %xmm1 391*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [7,7,7,7] 392*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3] 393*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmuludq %xmm2, %xmm1 394*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 395*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmuludq %xmm2, %xmm3 396*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[0,2,2,3] 397*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 398*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psubd %xmm1, %xmm0 399*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 400*9880d681SAndroid Build Coastguard Worker; 401*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_rem7_4i32: 402*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 403*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027] 404*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3] 405*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 406*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmuldq %xmm2, %xmm3 407*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmuldq %xmm0, %xmm1 408*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 409*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7] 410*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddd %xmm0, %xmm1 411*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 412*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrld $31, %xmm2 413*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad $2, %xmm1 414*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddd %xmm2, %xmm1 415*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmulld {{.*}}(%rip), %xmm1 416*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psubd %xmm1, %xmm0 417*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 418*9880d681SAndroid Build Coastguard Worker; 419*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_rem7_4i32: 420*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [2454267027,2454267027,2454267027,2454267027] 422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3] 423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuldq %xmm2, %xmm3, %xmm2 425*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuldq %xmm1, %xmm0, %xmm1 426*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 427*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7] 428*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm0, %xmm1, %xmm1 429*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $31, %xmm1, %xmm2 430*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $2, %xmm1, %xmm1 431*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm2, %xmm1, %xmm1 432*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm1, %xmm1 433*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm0 434*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 435*9880d681SAndroid Build Coastguard Worker; 436*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_rem7_4i32: 437*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 438*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %xmm1 439*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} xmm2 = xmm1[1,1,3,3] 440*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 441*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuldq %xmm2, %xmm3, %xmm2 442*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuldq %xmm1, %xmm0, %xmm1 443*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 444*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3] 445*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd %xmm0, %xmm1, %xmm1 446*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $31, %xmm1, %xmm2 447*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrad $2, %xmm1, %xmm1 448*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd %xmm2, %xmm1, %xmm1 449*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %xmm2 450*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmulld %xmm2, %xmm1, %xmm1 451*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %xmm1, %xmm0, %xmm0 452*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 453*9880d681SAndroid Build Coastguard Worker %res = srem <4 x i32> %a, <i32 7, i32 7, i32 7, i32 7> 454*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 455*9880d681SAndroid Build Coastguard Worker} 456*9880d681SAndroid Build Coastguard Worker 457*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_rem7_8i16(<8 x i16> %a) nounwind { 458*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_rem7_8i16: 459*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm1 = [18725,18725,18725,18725,18725,18725,18725,18725] 461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmulhw %xmm0, %xmm1 462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm2 463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlw $15, %xmm2 464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psraw $1, %xmm1 465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddw %xmm2, %xmm1 466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmullw {{.*}}(%rip), %xmm1 467*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubw %xmm1, %xmm0 468*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 469*9880d681SAndroid Build Coastguard Worker; 470*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_rem7_8i16: 471*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 472*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpmulhw {{.*}}(%rip), %xmm0, %xmm1 473*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlw $15, %xmm1, %xmm2 474*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $1, %xmm1, %xmm1 475*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm2, %xmm1, %xmm1 476*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpmullw {{.*}}(%rip), %xmm1, %xmm1 477*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsubw %xmm1, %xmm0, %xmm0 478*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 479*9880d681SAndroid Build Coastguard Worker %res = srem <8 x i16> %a, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7> 480*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 481*9880d681SAndroid Build Coastguard Worker} 482*9880d681SAndroid Build Coastguard Worker 483*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_rem7_16i8(<16 x i8> %a) nounwind { 484*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test_rem7_16i8: 485*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 486*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147] 487*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm2 488*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm3 489*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 490*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm3 491*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmullw %xmm2, %xmm3 492*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm3 493*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm1 494*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 495*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm1 496*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmullw %xmm2, %xmm1 497*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm1 498*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm3, %xmm1 499*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddb %xmm0, %xmm1 500*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 501*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $2, %xmm2 502*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand {{.*}}(%rip), %xmm2 503*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32] 504*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm3, %xmm2 505*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psubb %xmm3, %xmm2 506*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $7, %xmm1 507*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand {{.*}}(%rip), %xmm1 508*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddb %xmm2, %xmm1 509*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 510*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 511*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm2 512*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7] 513*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm3 514*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmullw %xmm3, %xmm2 515*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255] 516*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm2 517*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 518*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm1 519*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pmullw %xmm3, %xmm1 520*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm1 521*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm2, %xmm1 522*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psubb %xmm1, %xmm0 523*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 524*9880d681SAndroid Build Coastguard Worker; 525*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: test_rem7_16i8: 526*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 527*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw %xmm0, %xmm1 528*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw {{.*}}(%rip), %xmm2 529*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmullw %xmm2, %xmm1 530*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm1 531*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[2,3,0,1] 532*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw %xmm3, %xmm3 533*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmullw %xmm2, %xmm3 534*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm3 535*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packuswb %xmm3, %xmm1 536*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddb %xmm0, %xmm1 537*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 538*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $2, %xmm2 539*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pand {{.*}}(%rip), %xmm2 540*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32] 541*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm3, %xmm2 542*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psubb %xmm3, %xmm2 543*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $7, %xmm1 544*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pand {{.*}}(%rip), %xmm1 545*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddb %xmm2, %xmm1 546*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw %xmm1, %xmm2 547*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw {{.*}}(%rip), %xmm3 548*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmullw %xmm3, %xmm2 549*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255] 550*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pand %xmm4, %xmm2 551*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1] 552*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovsxbw %xmm1, %xmm1 553*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmullw %xmm3, %xmm1 554*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pand %xmm4, %xmm1 555*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packuswb %xmm1, %xmm2 556*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psubb %xmm2, %xmm0 557*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 558*9880d681SAndroid Build Coastguard Worker; 559*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test_rem7_16i8: 560*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 561*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw %xmm0, %xmm1 562*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw {{.*}}(%rip), %xmm2 563*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw %xmm2, %xmm1, %xmm1 564*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm1, %xmm1 565*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1] 566*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw %xmm3, %xmm3 567*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw %xmm2, %xmm3, %xmm2 568*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 569*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 570*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm1 571*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm1, %xmm2 572*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand {{.*}}(%rip), %xmm2, %xmm2 573*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32] 574*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 575*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm3, %xmm2, %xmm2 576*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $7, %xmm1, %xmm1 577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1 578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm1, %xmm2, %xmm1 579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw %xmm1, %xmm2 580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw {{.*}}(%rip), %xmm3 581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw %xmm3, %xmm2, %xmm2 582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255] 583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1] 585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxbw %xmm1, %xmm1 586*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw %xmm3, %xmm1, %xmm1 587*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 588*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1 589*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm0 590*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 591*9880d681SAndroid Build Coastguard Worker; 592*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_rem7_16i8: 593*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxbw %xmm0, %ymm1 595*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxbw {{.*}}(%rip), %ymm2 596*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmullw %ymm2, %ymm1, %ymm1 597*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm1, %ymm1 598*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 599*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 600*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %xmm0, %xmm1, %xmm1 601*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $2, %xmm1, %xmm2 602*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %xmm2, %xmm2 603*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32] 604*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 605*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb %xmm3, %xmm2, %xmm2 606*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $7, %xmm1, %xmm1 607*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %xmm1, %xmm1 608*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %xmm1, %xmm2, %xmm1 609*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxbw %xmm1, %ymm1 610*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxbw {{.*}}(%rip), %ymm2 611*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmullw %ymm2, %ymm1, %ymm1 612*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 613*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 614*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2 615*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 616*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0] 617*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm0 618*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 619*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 620*9880d681SAndroid Build Coastguard Worker %res = srem <16 x i8> %a, <i8 7, i8 7, i8 7, i8 7,i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7,i8 7, i8 7, i8 7, i8 7> 621*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 622*9880d681SAndroid Build Coastguard Worker} 623