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=ALL --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=ALL --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=ALL --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=ALL --check-prefix=AVX --check-prefix=AVX2 6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1 7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2 8*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; 11*9880d681SAndroid Build Coastguard Worker; Just one 32-bit run to make sure we do reasonable things for i64 shifts. 12*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=X32-SSE --check-prefix=X32-SSE2 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; 15*9880d681SAndroid Build Coastguard Worker; Variable Shifts 16*9880d681SAndroid Build Coastguard Worker; 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @var_shift_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind { 19*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v2i64: 20*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 21*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[2,3,0,1] 22*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 23*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm2, %xmm4 24*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlq %xmm3, %xmm4 25*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlq %xmm1, %xmm2 26*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movsd {{.*#+}} xmm4 = xmm2[0],xmm4[1] 27*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm2 28*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlq %xmm3, %xmm2 29*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlq %xmm1, %xmm0 30*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movsd {{.*#+}} xmm2 = xmm0[0],xmm2[1] 31*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: xorpd %xmm4, %xmm2 32*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psubq %xmm4, %xmm2 33*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm2, %xmm0 34*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 35*9880d681SAndroid Build Coastguard Worker; 36*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v2i64: 37*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 38*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 39*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm3 40*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlq %xmm1, %xmm3 41*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm1[2,3,0,1] 42*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlq %xmm4, %xmm2 43*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7] 44*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm3 45*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlq %xmm1, %xmm3 46*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlq %xmm4, %xmm0 47*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7] 48*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm2, %xmm0 49*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psubq %xmm2, %xmm0 50*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 51*9880d681SAndroid Build Coastguard Worker; 52*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v2i64: 53*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 54*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 55*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm1, %xmm2, %xmm3 56*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1] 57*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm4, %xmm2, %xmm2 58*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7] 59*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm1, %xmm0, %xmm1 60*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm4, %xmm0, %xmm0 61*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7] 62*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 63*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm2, %xmm0, %xmm0 64*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 65*9880d681SAndroid Build Coastguard Worker; 66*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v2i64: 67*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 68*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 69*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvq %xmm1, %xmm2, %xmm3 70*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0 71*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvq %xmm1, %xmm0, %xmm0 72*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %xmm3, %xmm0, %xmm0 73*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 74*9880d681SAndroid Build Coastguard Worker; 75*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: var_shift_v2i64: 76*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 77*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm2, %xmm2, %xmm2 78*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsubq %xmm1, %xmm2, %xmm1 79*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpshaq %xmm1, %xmm0, %xmm0 80*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 81*9880d681SAndroid Build Coastguard Worker; 82*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v2i64: 83*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 84*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 85*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlvq %xmm1, %xmm2, %xmm3 86*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %xmm2, %xmm0, %xmm0 87*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlvq %xmm1, %xmm0, %xmm0 88*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %xmm3, %xmm0, %xmm0 89*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 90*9880d681SAndroid Build Coastguard Worker; 91*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v2i64: 92*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 93*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm1[2,3,0,1] 94*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa {{.*#+}} xmm3 = [0,2147483648,0,2147483648] 95*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm3, %xmm4 96*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq %xmm2, %xmm4 97*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movq {{.*#+}} xmm5 = xmm1[0],zero 98*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq %xmm5, %xmm3 99*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm4 = xmm3[0],xmm4[1] 100*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm1 101*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq %xmm2, %xmm1 102*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq %xmm5, %xmm0 103*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1] 104*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorpd %xmm4, %xmm1 105*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psubq %xmm4, %xmm1 106*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm0 107*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 108*9880d681SAndroid Build Coastguard Worker %shift = ashr <2 x i64> %a, %b 109*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shift 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @var_shift_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind { 113*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v4i32: 114*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 115*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 116*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrldq {{.*#+}} xmm2 = xmm2[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 117*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm3 118*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad %xmm2, %xmm3 119*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 120*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlq $32, %xmm2 121*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm4 122*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad %xmm2, %xmm4 123*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movsd {{.*#+}} xmm3 = xmm4[0],xmm3[1] 124*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,3,2,3] 125*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm3, %xmm3 126*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm4 127*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3] 128*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm5 129*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad %xmm4, %xmm5 130*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1] 131*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad %xmm1, %xmm0 132*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movsd {{.*#+}} xmm5 = xmm0[0],xmm5[1] 133*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,2,2,3] 134*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 135*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 136*9880d681SAndroid Build Coastguard Worker; 137*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v4i32: 138*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 139*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 140*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrldq {{.*#+}} xmm2 = xmm2[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 141*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm3 142*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad %xmm2, %xmm3 143*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 144*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlq $32, %xmm2 145*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm4 146*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad %xmm2, %xmm4 147*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm4 = xmm4[0,1,2,3],xmm3[4,5,6,7] 148*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm2, %xmm2 149*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pmovzxdq {{.*#+}} xmm3 = xmm1[0],zero,xmm1[1],zero 150*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3] 151*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm2 152*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad %xmm1, %xmm2 153*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad %xmm3, %xmm0 154*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7] 155*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm4[2,3],xmm0[4,5],xmm4[6,7] 156*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 157*9880d681SAndroid Build Coastguard Worker; 158*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v4i32: 159*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrldq {{.*#+}} xmm2 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm2, %xmm0, %xmm2 162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm3 163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm3, %xmm0, %xmm3 164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7] 165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm3 = xmm1[2],xmm3[2],xmm1[3],xmm3[3] 167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm3, %xmm0, %xmm3 168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero 169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad %xmm1, %xmm0, %xmm0 170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7] 171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7] 172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 173*9880d681SAndroid Build Coastguard Worker; 174*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v4i32: 175*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 176*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd %xmm1, %xmm0, %xmm0 177*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 178*9880d681SAndroid Build Coastguard Worker; 179*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_shift_v4i32: 180*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 181*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 182*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubd %xmm1, %xmm2, %xmm1 183*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshad %xmm1, %xmm0, %xmm0 184*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 185*9880d681SAndroid Build Coastguard Worker; 186*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_shift_v4i32: 187*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 188*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsravd %xmm1, %xmm0, %xmm0 189*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 190*9880d681SAndroid Build Coastguard Worker; 191*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v4i32: 192*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 193*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsravd %xmm1, %xmm0, %xmm0 194*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 195*9880d681SAndroid Build Coastguard Worker; 196*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v4i32: 197*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 198*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm2 199*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrldq {{.*#+}} xmm2 = xmm2[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 200*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm3 201*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad %xmm2, %xmm3 202*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm2 203*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq $32, %xmm2 204*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm4 205*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad %xmm2, %xmm4 206*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm3 = xmm4[0],xmm3[1] 207*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,3,2,3] 208*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm3, %xmm3 209*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm4 210*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3] 211*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm5 212*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad %xmm4, %xmm5 213*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1] 214*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad %xmm1, %xmm0 215*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm5 = xmm0[0],xmm5[1] 216*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,2,2,3] 217*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 218*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 219*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i32> %a, %b 220*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shift 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @var_shift_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind { 224*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v8i16: 225*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psllw $12, %xmm1 227*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $15, %xmm2 229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm2, %xmm3 230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm3 231*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $8, %xmm0 232*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm0 233*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm3, %xmm0 234*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm1, %xmm1 235*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 236*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $15, %xmm2 237*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm2, %xmm3 238*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm3 239*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $4, %xmm0 240*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm0 241*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm3, %xmm0 242*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm1, %xmm1 243*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 244*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $15, %xmm2 245*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm2, %xmm3 246*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm3 247*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $2, %xmm0 248*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm0 249*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm3, %xmm0 250*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm1, %xmm1 251*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $15, %xmm1 252*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm2 253*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm2 254*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $1, %xmm0 255*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm1, %xmm0 256*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm2, %xmm0 257*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 258*9880d681SAndroid Build Coastguard Worker; 259*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v8i16: 260*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 261*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm2 262*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 263*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psllw $12, %xmm0 264*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psllw $4, %xmm1 265*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: por %xmm0, %xmm1 266*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm3 267*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm3, %xmm3 268*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm4 269*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $8, %xmm4 270*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 271*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm2 272*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm1 273*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $4, %xmm1 274*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm0 275*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm1, %xmm2 276*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm1 277*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $2, %xmm1 278*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm3, %xmm3 279*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm0 280*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm1, %xmm2 281*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm1 282*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $1, %xmm1 283*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm3, %xmm3 284*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm0 285*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm1, %xmm2 286*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm0 287*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 288*9880d681SAndroid Build Coastguard Worker; 289*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_shift_v8i16: 290*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $12, %xmm1, %xmm2 292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm1, %xmm1 293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpor %xmm2, %xmm1, %xmm1 294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm2 295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $8, %xmm0, %xmm3 296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm0, %xmm1 298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm0, %xmm1 300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm2 301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm0, %xmm1 303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm2 304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 306*9880d681SAndroid Build Coastguard Worker; 307*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_shift_v8i16: 308*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 309*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero 310*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxwd %xmm0, %ymm0 311*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd %ymm1, %ymm0, %ymm0 312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 317*9880d681SAndroid Build Coastguard Worker; 318*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: var_shift_v8i16: 319*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 320*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm2, %xmm2, %xmm2 321*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsubw %xmm1, %xmm2, %xmm1 322*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpshaw %xmm1, %xmm0, %xmm0 323*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 324*9880d681SAndroid Build Coastguard Worker; 325*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v8i16: 326*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 327*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %XMM1<def> %XMM1<kill> %ZMM1<def> 328*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def> 329*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsravw %zmm1, %zmm0, %zmm0 330*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 331*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 332*9880d681SAndroid Build Coastguard Worker; 333*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v8i16: 334*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 335*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psllw $12, %xmm1 336*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm2 337*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $15, %xmm2 338*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm2, %xmm3 339*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm3 340*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $8, %xmm0 341*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm2, %xmm0 342*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm3, %xmm0 343*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm1, %xmm1 344*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm2 345*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $15, %xmm2 346*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm2, %xmm3 347*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm3 348*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $4, %xmm0 349*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm2, %xmm0 350*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm3, %xmm0 351*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm1, %xmm1 352*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm2 353*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $15, %xmm2 354*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm2, %xmm3 355*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm3 356*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $2, %xmm0 357*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm2, %xmm0 358*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm3, %xmm0 359*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm1, %xmm1 360*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $15, %xmm1 361*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm2 362*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm2 363*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $1, %xmm0 364*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm1, %xmm0 365*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm2, %xmm0 366*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 367*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i16> %a, %b 368*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 369*9880d681SAndroid Build Coastguard Worker} 370*9880d681SAndroid Build Coastguard Worker 371*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @var_shift_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind { 372*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: var_shift_v16i8: 373*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 374*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15] 375*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psllw $5, %xmm1 376*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm1[8],xmm4[9],xmm1[9],xmm4[10],xmm1[10],xmm4[11],xmm1[11],xmm4[12],xmm1[12],xmm4[13],xmm1[13],xmm4[14],xmm1[14],xmm4[15],xmm1[15] 377*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm3, %xmm3 378*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 379*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 380*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm6 381*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm2, %xmm6 382*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $4, %xmm2 383*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm2 384*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm6, %xmm2 385*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm4, %xmm4 386*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 387*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 388*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm6 389*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm2, %xmm6 390*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $2, %xmm2 391*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm2 392*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm6, %xmm2 393*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm4, %xmm4 394*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 395*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 396*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm4 397*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm2, %xmm4 398*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $1, %xmm2 399*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm2 400*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm4, %xmm2 401*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm2 402*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 403*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] 404*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm4, %xmm4 405*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm1, %xmm4 406*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm4, %xmm5 407*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm5 408*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $4, %xmm0 409*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm0 410*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm5, %xmm0 411*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm1, %xmm1 412*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm4, %xmm4 413*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm1, %xmm4 414*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm4, %xmm5 415*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm5 416*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $2, %xmm0 417*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm0 418*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm5, %xmm0 419*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm1, %xmm1 420*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm1, %xmm3 421*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm3, %xmm1 422*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm1 423*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $1, %xmm0 424*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm3, %xmm0 425*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm1, %xmm0 426*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm0 427*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm2, %xmm0 428*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 429*9880d681SAndroid Build Coastguard Worker; 430*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: var_shift_v16i8: 431*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 432*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm2 433*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psllw $5, %xmm1 434*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 435*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15] 436*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm4 437*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $4, %xmm4 438*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm3 439*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm4 440*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $2, %xmm4 441*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 442*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm3 443*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm4 444*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $1, %xmm4 445*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 446*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm3 447*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm3 448*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 449*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7] 450*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 451*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $4, %xmm2 452*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm2, %xmm1 453*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 454*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $2, %xmm2 455*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 456*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm2, %xmm1 457*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 458*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $1, %xmm2 459*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 460*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm2, %xmm1 461*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm1 462*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packuswb %xmm3, %xmm1 463*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 464*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 465*9880d681SAndroid Build Coastguard Worker; 466*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: var_shift_v16i8: 467*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 468*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsllw $5, %xmm1, %xmm1 469*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 470*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 471*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $4, %xmm3, %xmm4 472*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 473*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $2, %xmm3, %xmm4 474*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm2, %xmm2, %xmm2 475*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 476*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $1, %xmm3, %xmm4 477*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm2, %xmm2, %xmm2 478*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm2 479*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlw $8, %xmm2, %xmm2 480*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 481*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 482*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $4, %xmm0, %xmm3 483*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 484*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $2, %xmm0, %xmm3 485*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm1, %xmm1, %xmm1 486*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 487*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $1, %xmm0, %xmm3 488*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm1, %xmm1, %xmm1 489*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 490*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlw $8, %xmm0, %xmm0 491*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 492*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 493*9880d681SAndroid Build Coastguard Worker; 494*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: var_shift_v16i8: 495*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 496*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm2, %xmm2, %xmm2 497*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsubb %xmm1, %xmm2, %xmm1 498*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpshab %xmm1, %xmm0, %xmm0 499*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 500*9880d681SAndroid Build Coastguard Worker; 501*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: var_shift_v16i8: 502*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 503*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllw $5, %xmm1, %xmm1 504*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 505*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 506*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %xmm3, %xmm4 507*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 508*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %xmm3, %xmm4 509*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm2, %xmm2, %xmm2 510*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 511*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %xmm3, %xmm4 512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm2, %xmm2, %xmm2 513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm2 514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %xmm2, %xmm2 515*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 516*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 517*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %xmm0, %xmm3 518*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 519*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %xmm0, %xmm3 520*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm1, %xmm1, %xmm1 521*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 522*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %xmm0, %xmm3 523*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm1, %xmm1, %xmm1 524*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 525*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %xmm0, %xmm0 526*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 527*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 528*9880d681SAndroid Build Coastguard Worker; 529*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: var_shift_v16i8: 530*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 531*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15] 532*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psllw $5, %xmm1 533*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm1[8],xmm4[9],xmm1[9],xmm4[10],xmm1[10],xmm4[11],xmm1[11],xmm4[12],xmm1[12],xmm4[13],xmm1[13],xmm4[14],xmm1[14],xmm4[15],xmm1[15] 534*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm3, %xmm3 535*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 536*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 537*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm6 538*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm2, %xmm6 539*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $4, %xmm2 540*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm2 541*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm6, %xmm2 542*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm4, %xmm4 543*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 544*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 545*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm6 546*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm2, %xmm6 547*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $2, %xmm2 548*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm2 549*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm6, %xmm2 550*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm4, %xmm4 551*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 552*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 553*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm4 554*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm2, %xmm4 555*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $1, %xmm2 556*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm2 557*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm4, %xmm2 558*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlw $8, %xmm2 559*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 560*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 561*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm4, %xmm4 562*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm1, %xmm4 563*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm4, %xmm5 564*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm5 565*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $4, %xmm0 566*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm4, %xmm0 567*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm5, %xmm0 568*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm1, %xmm1 569*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm4, %xmm4 570*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm1, %xmm4 571*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm4, %xmm5 572*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm5 573*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $2, %xmm0 574*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm4, %xmm0 575*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm5, %xmm0 576*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm1, %xmm1 577*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm1, %xmm3 578*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm3, %xmm1 579*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm1 580*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $1, %xmm0 581*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm3, %xmm0 582*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm1, %xmm0 583*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlw $8, %xmm0 584*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: packuswb %xmm2, %xmm0 585*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 586*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i8> %a, %b 587*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %shift 588*9880d681SAndroid Build Coastguard Worker} 589*9880d681SAndroid Build Coastguard Worker 590*9880d681SAndroid Build Coastguard Worker; 591*9880d681SAndroid Build Coastguard Worker; Uniform Variable Shifts 592*9880d681SAndroid Build Coastguard Worker; 593*9880d681SAndroid Build Coastguard Worker 594*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @splatvar_shift_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind { 595*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatvar_shift_v2i64: 596*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 597*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 598*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq %xmm1, %xmm2 599*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq %xmm1, %xmm0 600*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm2, %xmm0 601*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm2, %xmm0 602*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 603*9880d681SAndroid Build Coastguard Worker; 604*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v2i64: 605*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 606*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 607*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlq %xmm1, %xmm2, %xmm2 608*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlq %xmm1, %xmm0, %xmm0 609*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm0 610*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsubq %xmm2, %xmm0, %xmm0 611*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 612*9880d681SAndroid Build Coastguard Worker; 613*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v2i64: 614*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 615*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1] 616*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 617*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq %xmm1, %xmm2, %xmm1 618*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshaq %xmm1, %xmm0, %xmm0 619*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 620*9880d681SAndroid Build Coastguard Worker; 621*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v2i64: 622*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 623*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpbroadcastq %xmm1, %xmm1 624*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 625*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubq %xmm1, %xmm2, %xmm1 626*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshaq %xmm1, %xmm0, %xmm0 627*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 628*9880d681SAndroid Build Coastguard Worker; 629*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v2i64: 630*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 631*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 632*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq %xmm1, %xmm2, %xmm2 633*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq %xmm1, %xmm0, %xmm0 634*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %xmm2, %xmm0, %xmm0 635*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %xmm2, %xmm0, %xmm0 636*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 637*9880d681SAndroid Build Coastguard Worker; 638*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v2i64: 639*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 640*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movq {{.*#+}} xmm1 = xmm1[0],zero 641*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa {{.*#+}} xmm2 = [0,2147483648,0,2147483648] 642*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq %xmm1, %xmm2 643*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq %xmm1, %xmm0 644*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm2, %xmm0 645*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psubq %xmm2, %xmm0 646*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 647*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <2 x i64> %b, <2 x i64> undef, <2 x i32> zeroinitializer 648*9880d681SAndroid Build Coastguard Worker %shift = ashr <2 x i64> %a, %splat 649*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shift 650*9880d681SAndroid Build Coastguard Worker} 651*9880d681SAndroid Build Coastguard Worker 652*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @splatvar_shift_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind { 653*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v4i32: 654*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 655*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: xorps %xmm2, %xmm2 656*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movss {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3] 657*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad %xmm2, %xmm0 658*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 659*9880d681SAndroid Build Coastguard Worker; 660*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v4i32: 661*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 662*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm2, %xmm2 663*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3,4,5,6,7] 664*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad %xmm2, %xmm0 665*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 666*9880d681SAndroid Build Coastguard Worker; 667*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v4i32: 668*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 669*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm2 670*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7] 671*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrad %xmm1, %xmm0, %xmm0 672*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 673*9880d681SAndroid Build Coastguard Worker; 674*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatvar_shift_v4i32: 675*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 676*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm2, %xmm2, %xmm2 677*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3,4,5,6,7] 678*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsrad %xmm1, %xmm0, %xmm0 679*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 680*9880d681SAndroid Build Coastguard Worker; 681*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v4i32: 682*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 683*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vxorps %xmm2, %xmm2, %xmm2 684*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovss {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3] 685*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrad %xmm1, %xmm0, %xmm0 686*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 687*9880d681SAndroid Build Coastguard Worker; 688*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v4i32: 689*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 690*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorps %xmm2, %xmm2 691*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movss {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3] 692*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad %xmm2, %xmm0 693*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 694*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <4 x i32> %b, <4 x i32> undef, <4 x i32> zeroinitializer 695*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i32> %a, %splat 696*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shift 697*9880d681SAndroid Build Coastguard Worker} 698*9880d681SAndroid Build Coastguard Worker 699*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @splatvar_shift_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind { 700*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v8i16: 701*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 702*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm1, %eax 703*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movzwl %ax, %eax 704*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %eax, %xmm1 705*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw %xmm1, %xmm0 706*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 707*9880d681SAndroid Build Coastguard Worker; 708*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v8i16: 709*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 710*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm2, %xmm2 711*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3,4,5,6,7] 712*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw %xmm2, %xmm0 713*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 714*9880d681SAndroid Build Coastguard Worker; 715*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatvar_shift_v8i16: 716*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 717*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm2 718*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7] 719*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw %xmm1, %xmm0, %xmm0 720*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 721*9880d681SAndroid Build Coastguard Worker; 722*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatvar_shift_v8i16: 723*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 724*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm2, %xmm2, %xmm2 725*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7] 726*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsraw %xmm1, %xmm0, %xmm0 727*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 728*9880d681SAndroid Build Coastguard Worker; 729*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v8i16: 730*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 731*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %xmm2, %xmm2, %xmm2 732*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3,4,5,6,7] 733*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw %xmm1, %xmm0, %xmm0 734*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 735*9880d681SAndroid Build Coastguard Worker; 736*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v8i16: 737*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 738*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movd %xmm1, %eax 739*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movzwl %ax, %eax 740*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movd %eax, %xmm1 741*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw %xmm1, %xmm0 742*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 743*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <8 x i16> %b, <8 x i16> undef, <8 x i32> zeroinitializer 744*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i16> %a, %splat 745*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 746*9880d681SAndroid Build Coastguard Worker} 747*9880d681SAndroid Build Coastguard Worker 748*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @splatvar_shift_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind { 749*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatvar_shift_v16i8: 750*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 751*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] 752*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7] 753*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,1,1] 754*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15] 755*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psllw $5, %xmm3 756*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15] 757*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm2, %xmm2 758*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 759*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 760*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm6 761*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm1, %xmm6 762*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $4, %xmm1 763*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm1 764*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm6, %xmm1 765*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm4, %xmm4 766*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 767*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 768*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm6 769*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm1, %xmm6 770*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $2, %xmm1 771*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm1 772*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm6, %xmm1 773*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm4, %xmm4 774*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 775*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 776*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm4 777*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm1, %xmm4 778*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $1, %xmm1 779*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm1 780*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm4, %xmm1 781*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm1 782*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 783*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 784*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm4, %xmm4 785*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm3, %xmm4 786*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm4, %xmm5 787*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm5 788*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $4, %xmm0 789*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm0 790*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm5, %xmm0 791*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm3, %xmm3 792*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm4, %xmm4 793*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm3, %xmm4 794*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm4, %xmm5 795*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm5 796*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $2, %xmm0 797*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm0 798*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm5, %xmm0 799*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm3, %xmm3 800*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 801*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm2, %xmm3 802*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm3 803*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $1, %xmm0 804*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm0 805*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm3, %xmm0 806*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm0 807*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm1, %xmm0 808*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 809*9880d681SAndroid Build Coastguard Worker; 810*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatvar_shift_v16i8: 811*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 812*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm2 813*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm0, %xmm0 814*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm0, %xmm1 815*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psllw $5, %xmm1 816*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 817*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15] 818*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm4 819*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $4, %xmm4 820*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm3 821*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm4 822*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $2, %xmm4 823*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 824*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm3 825*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm3, %xmm4 826*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $1, %xmm4 827*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 828*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm3 829*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm3 830*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 831*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7] 832*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 833*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $4, %xmm2 834*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm2, %xmm1 835*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 836*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $2, %xmm2 837*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 838*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm2, %xmm1 839*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 840*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $1, %xmm2 841*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 842*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm2, %xmm1 843*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm1 844*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packuswb %xmm3, %xmm1 845*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 846*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 847*9880d681SAndroid Build Coastguard Worker; 848*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatvar_shift_v16i8: 849*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 850*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 851*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 852*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1 853*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 854*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 855*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm3, %xmm4 856*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 857*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm3, %xmm4 858*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm2 859*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm3, %xmm4 861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm2 862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm2 863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm0, %xmm3 867*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 868*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm0, %xmm3 869*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm1 870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm0, %xmm3 872*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm1 873*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 874*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 875*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 876*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 877*9880d681SAndroid Build Coastguard Worker; 878*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatvar_shift_v16i8: 879*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 880*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastb %xmm1, %xmm1 881*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %xmm1, %xmm1 882*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 883*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 884*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $4, %xmm3, %xmm4 885*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 886*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $2, %xmm3, %xmm4 887*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %xmm2, %xmm2, %xmm2 888*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 889*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $1, %xmm3, %xmm4 890*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %xmm2, %xmm2, %xmm2 891*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm2 892*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %xmm2, %xmm2 893*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 894*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 895*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $4, %xmm0, %xmm3 896*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 897*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $2, %xmm0, %xmm3 898*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %xmm1, %xmm1, %xmm1 899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 900*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsraw $1, %xmm0, %xmm3 901*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %xmm1, %xmm1, %xmm1 902*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 903*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %xmm0, %xmm0 904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 906*9880d681SAndroid Build Coastguard Worker; 907*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatvar_shift_v16i8: 908*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 909*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 910*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 911*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1 912*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshab %xmm1, %xmm0, %xmm0 913*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 914*9880d681SAndroid Build Coastguard Worker; 915*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatvar_shift_v16i8: 916*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 917*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpbroadcastb %xmm1, %xmm1 918*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 919*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubb %xmm1, %xmm2, %xmm1 920*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshab %xmm1, %xmm0, %xmm0 921*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 922*9880d681SAndroid Build Coastguard Worker; 923*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatvar_shift_v16i8: 924*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 925*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpbroadcastb %xmm1, %xmm1 926*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllw $5, %xmm1, %xmm1 927*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 928*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 929*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %xmm3, %xmm4 930*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 931*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %xmm3, %xmm4 932*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm2, %xmm2, %xmm2 933*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 934*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %xmm3, %xmm4 935*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm2, %xmm2, %xmm2 936*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm2 937*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %xmm2, %xmm2 938*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 939*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 940*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %xmm0, %xmm3 941*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 942*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %xmm0, %xmm3 943*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm1, %xmm1, %xmm1 944*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 945*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %xmm0, %xmm3 946*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm1, %xmm1, %xmm1 947*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 948*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %xmm0, %xmm0 949*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 950*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 951*9880d681SAndroid Build Coastguard Worker; 952*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatvar_shift_v16i8: 953*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 954*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 955*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7] 956*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,1,1] 957*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15] 958*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psllw $5, %xmm3 959*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15] 960*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm2, %xmm2 961*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 962*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 963*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm6 964*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm1, %xmm6 965*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $4, %xmm1 966*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm1 967*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm6, %xmm1 968*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm4, %xmm4 969*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 970*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 971*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm6 972*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm1, %xmm6 973*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $2, %xmm1 974*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm1 975*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm6, %xmm1 976*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm4, %xmm4 977*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 978*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 979*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm4 980*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm1, %xmm4 981*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $1, %xmm1 982*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm1 983*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm4, %xmm1 984*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlw $8, %xmm1 985*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 986*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 987*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm4, %xmm4 988*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm3, %xmm4 989*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm4, %xmm5 990*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm5 991*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $4, %xmm0 992*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm4, %xmm0 993*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm5, %xmm0 994*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm3, %xmm3 995*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm4, %xmm4 996*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm3, %xmm4 997*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm4, %xmm5 998*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm5 999*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $2, %xmm0 1000*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm4, %xmm0 1001*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm5, %xmm0 1002*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm3, %xmm3 1003*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm3, %xmm2 1004*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm2, %xmm3 1005*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm3 1006*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $1, %xmm0 1007*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm2, %xmm0 1008*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm3, %xmm0 1009*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlw $8, %xmm0 1010*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: packuswb %xmm1, %xmm0 1011*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1012*9880d681SAndroid Build Coastguard Worker %splat = shufflevector <16 x i8> %b, <16 x i8> undef, <16 x i32> zeroinitializer 1013*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i8> %a, %splat 1014*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %shift 1015*9880d681SAndroid Build Coastguard Worker} 1016*9880d681SAndroid Build Coastguard Worker 1017*9880d681SAndroid Build Coastguard Worker; 1018*9880d681SAndroid Build Coastguard Worker; Constant Shifts 1019*9880d681SAndroid Build Coastguard Worker; 1020*9880d681SAndroid Build Coastguard Worker 1021*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @constant_shift_v2i64(<2 x i64> %a) nounwind { 1022*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v2i64: 1023*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 1024*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm1 1025*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlq $7, %xmm1 1026*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlq $1, %xmm0 1027*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1] 1028*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movapd {{.*#+}} xmm0 = [4611686018427387904,72057594037927936] 1029*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: xorpd %xmm0, %xmm1 1030*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psubq %xmm0, %xmm1 1031*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm1, %xmm0 1032*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 1033*9880d681SAndroid Build Coastguard Worker; 1034*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v2i64: 1035*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 1036*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm1 1037*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlq $7, %xmm1 1038*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlq $1, %xmm0 1039*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 1040*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936] 1041*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm1, %xmm0 1042*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psubq %xmm1, %xmm0 1043*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 1044*9880d681SAndroid Build Coastguard Worker; 1045*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v2i64: 1046*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $7, %xmm0, %xmm1 1048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $1, %xmm0, %xmm0 1049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 1050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936] 1051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0 1052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm1, %xmm0, %xmm0 1053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1054*9880d681SAndroid Build Coastguard Worker; 1055*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v2i64: 1056*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1057*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvq {{.*}}(%rip), %xmm0, %xmm0 1058*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936] 1059*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0 1060*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %xmm1, %xmm0, %xmm0 1061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1062*9880d681SAndroid Build Coastguard Worker; 1063*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: constant_shift_v2i64: 1064*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 1065*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm1, %xmm1, %xmm1 1066*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm1 1067*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpshaq %xmm1, %xmm0, %xmm0 1068*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 1069*9880d681SAndroid Build Coastguard Worker; 1070*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v2i64: 1071*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1072*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlvq {{.*}}(%rip), %xmm0, %xmm0 1073*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936] 1074*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0 1075*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %xmm1, %xmm0, %xmm0 1076*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1077*9880d681SAndroid Build Coastguard Worker; 1078*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v2i64: 1079*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 1080*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa {{.*#+}} xmm1 = [0,2147483648,0,2147483648] 1081*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm2 1082*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq $7, %xmm2 1083*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq $1, %xmm1 1084*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1] 1085*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm1 1086*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq $7, %xmm1 1087*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq $1, %xmm0 1088*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1] 1089*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorpd %xmm2, %xmm1 1090*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psubq %xmm2, %xmm1 1091*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm1, %xmm0 1092*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1093*9880d681SAndroid Build Coastguard Worker %shift = ashr <2 x i64> %a, <i64 1, i64 7> 1094*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shift 1095*9880d681SAndroid Build Coastguard Worker} 1096*9880d681SAndroid Build Coastguard Worker 1097*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @constant_shift_v4i32(<4 x i32> %a) nounwind { 1098*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v4i32: 1099*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 1100*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm1 1101*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $7, %xmm1 1102*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm2 1103*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $5, %xmm2 1104*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1] 1105*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3] 1106*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm2 1107*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $6, %xmm2 1108*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $4, %xmm0 1109*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movsd {{.*#+}} xmm2 = xmm0[0],xmm2[1] 1110*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3] 1111*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 1112*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 1113*9880d681SAndroid Build Coastguard Worker; 1114*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v4i32: 1115*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 1116*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm1 1117*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad $7, %xmm1 1118*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm2 1119*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad $5, %xmm2 1120*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm1[4,5,6,7] 1121*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm1 1122*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad $6, %xmm1 1123*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad $4, %xmm0 1124*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 1125*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7] 1126*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 1127*9880d681SAndroid Build Coastguard Worker; 1128*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v4i32: 1129*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $7, %xmm0, %xmm1 1131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $5, %xmm0, %xmm2 1132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7] 1133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $6, %xmm0, %xmm2 1134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $4, %xmm0, %xmm0 1135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7] 1136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7] 1137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1138*9880d681SAndroid Build Coastguard Worker; 1139*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v4i32: 1140*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd {{.*}}(%rip), %xmm0, %xmm0 1142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1143*9880d681SAndroid Build Coastguard Worker; 1144*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_shift_v4i32: 1145*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 1146*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshad {{.*}}(%rip), %xmm0, %xmm0 1147*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 1148*9880d681SAndroid Build Coastguard Worker; 1149*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_shift_v4i32: 1150*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 1151*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsravd {{.*}}(%rip), %xmm0, %xmm0 1152*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 1153*9880d681SAndroid Build Coastguard Worker; 1154*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v4i32: 1155*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1156*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsravd {{.*}}(%rip), %xmm0, %xmm0 1157*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1158*9880d681SAndroid Build Coastguard Worker; 1159*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v4i32: 1160*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 1161*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm1 1162*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad $7, %xmm1 1163*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm2 1164*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad $5, %xmm2 1165*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1] 1166*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3] 1167*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm2 1168*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad $6, %xmm2 1169*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad $4, %xmm0 1170*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm2 = xmm0[0],xmm2[1] 1171*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3] 1172*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 1173*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1174*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i32> %a, <i32 4, i32 5, i32 6, i32 7> 1175*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shift 1176*9880d681SAndroid Build Coastguard Worker} 1177*9880d681SAndroid Build Coastguard Worker 1178*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @constant_shift_v8i16(<8 x i16> %a) nounwind { 1179*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v8i16: 1180*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 1181*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm1 1182*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $4, %xmm1 1183*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1] 1184*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3] 1185*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $2, %xmm1 1186*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,3,2,3] 1187*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1] 1188*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [65535,0,65535,0,65535,0,65535,0] 1189*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm2, %xmm1 1190*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm0, %xmm1 1191*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $1, %xmm2 1192*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm2, %xmm0 1193*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm1, %xmm0 1194*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 1195*9880d681SAndroid Build Coastguard Worker; 1196*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v8i16: 1197*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 1198*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm1 1199*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $4, %xmm1 1200*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0,1,2,3],xmm1[4,5,6,7] 1201*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm2 1202*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $2, %xmm2 1203*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7] 1204*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm0 1205*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $1, %xmm0 1206*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm2[0],xmm0[1],xmm2[2],xmm0[3],xmm2[4],xmm0[5],xmm2[6],xmm0[7] 1207*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 1208*9880d681SAndroid Build Coastguard Worker; 1209*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_shift_v8i16: 1210*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1211*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $4, %xmm0, %xmm1 1212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 1213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $2, %xmm0, %xmm1 1214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7] 1215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsraw $1, %xmm0, %xmm1 1216*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] 1217*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1218*9880d681SAndroid Build Coastguard Worker; 1219*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_shift_v8i16: 1220*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxwd %xmm0, %ymm0 1222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsravd {{.*}}(%rip), %ymm0, %ymm0 1223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 1224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1228*9880d681SAndroid Build Coastguard Worker; 1229*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: constant_shift_v8i16: 1230*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 1231*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm1, %xmm1, %xmm1 1232*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsubw {{.*}}(%rip), %xmm1, %xmm1 1233*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpshaw %xmm1, %xmm0, %xmm0 1234*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 1235*9880d681SAndroid Build Coastguard Worker; 1236*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v8i16: 1237*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1238*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def> 1239*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7] 1240*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsravw %zmm1, %zmm0, %zmm0 1241*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 1242*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1243*9880d681SAndroid Build Coastguard Worker; 1244*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v8i16: 1245*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 1246*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm1 1247*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $4, %xmm1 1248*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movsd {{.*#+}} xmm1 = xmm0[0],xmm1[1] 1249*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3] 1250*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $2, %xmm1 1251*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,3,2,3] 1252*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1] 1253*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa {{.*#+}} xmm0 = [65535,0,65535,0,65535,0,65535,0] 1254*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm2, %xmm1 1255*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm0, %xmm1 1256*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $1, %xmm2 1257*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm2, %xmm0 1258*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm1, %xmm0 1259*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1260*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i16> %a, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7> 1261*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 1262*9880d681SAndroid Build Coastguard Worker} 1263*9880d681SAndroid Build Coastguard Worker 1264*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @constant_shift_v16i8(<16 x i8> %a) nounwind { 1265*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: constant_shift_v16i8: 1266*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 1267*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15] 1268*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0] 1269*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psllw $5, %xmm3 1270*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15] 1271*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm2, %xmm2 1272*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 1273*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 1274*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm6 1275*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm1, %xmm6 1276*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $4, %xmm1 1277*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm1 1278*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm6, %xmm1 1279*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm4, %xmm4 1280*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 1281*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 1282*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm6 1283*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm1, %xmm6 1284*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $2, %xmm1 1285*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm1 1286*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm6, %xmm1 1287*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm4, %xmm4 1288*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm5, %xmm5 1289*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm4, %xmm5 1290*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm5, %xmm4 1291*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm1, %xmm4 1292*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $1, %xmm1 1293*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm5, %xmm1 1294*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm4, %xmm1 1295*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm1 1296*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1297*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1298*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm4, %xmm4 1299*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm3, %xmm4 1300*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm4, %xmm5 1301*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm5 1302*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $4, %xmm0 1303*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm0 1304*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm5, %xmm0 1305*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm3, %xmm3 1306*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pxor %xmm4, %xmm4 1307*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm3, %xmm4 1308*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm4, %xmm5 1309*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm5 1310*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $2, %xmm0 1311*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm4, %xmm0 1312*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm5, %xmm0 1313*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: paddw %xmm3, %xmm3 1314*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 1315*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm2, %xmm3 1316*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pandn %xmm0, %xmm3 1317*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psraw $1, %xmm0 1318*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm0 1319*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: por %xmm3, %xmm0 1320*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlw $8, %xmm0 1321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm1, %xmm0 1322*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 1323*9880d681SAndroid Build Coastguard Worker; 1324*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: constant_shift_v16i8: 1325*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 1326*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm1 1327*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0] 1328*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psllw $5, %xmm3 1329*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15] 1330*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15] 1331*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm4 1332*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $4, %xmm4 1333*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm2 1334*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm4 1335*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $2, %xmm4 1336*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 1337*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm2 1338*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm2, %xmm4 1339*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $1, %xmm4 1340*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 1341*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm4, %xmm2 1342*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm2 1343*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7] 1344*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1345*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm3 1346*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $4, %xmm3 1347*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm3, %xmm1 1348*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm3 1349*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $2, %xmm3 1350*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 1351*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm3, %xmm1 1352*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm3 1353*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psraw $1, %xmm3 1354*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: paddw %xmm0, %xmm0 1355*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendvb %xmm3, %xmm1 1356*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlw $8, %xmm1 1357*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packuswb %xmm2, %xmm1 1358*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm1, %xmm0 1359*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 1360*9880d681SAndroid Build Coastguard Worker; 1361*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: constant_shift_v16i8: 1362*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 1363*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0] 1364*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsllw $5, %xmm1, %xmm1 1365*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 1366*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 1367*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $4, %xmm3, %xmm4 1368*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 1369*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $2, %xmm3, %xmm4 1370*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm2, %xmm2, %xmm2 1371*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 1372*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $1, %xmm3, %xmm4 1373*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm2, %xmm2, %xmm2 1374*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm2 1375*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlw $8, %xmm2, %xmm2 1376*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 1377*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1378*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $4, %xmm0, %xmm3 1379*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 1380*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $2, %xmm0, %xmm3 1381*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm1, %xmm1, %xmm1 1382*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 1383*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $1, %xmm0, %xmm3 1384*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpaddw %xmm1, %xmm1, %xmm1 1385*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 1386*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlw $8, %xmm0, %xmm0 1387*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 1388*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 1389*9880d681SAndroid Build Coastguard Worker; 1390*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: constant_shift_v16i8: 1391*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 1392*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm1, %xmm1, %xmm1 1393*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsubb {{.*}}(%rip), %xmm1, %xmm1 1394*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpshab %xmm1, %xmm0, %xmm0 1395*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 1396*9880d681SAndroid Build Coastguard Worker; 1397*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: constant_shift_v16i8: 1398*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1399*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0] 1400*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllw $5, %xmm1, %xmm1 1401*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] 1402*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 1403*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %xmm3, %xmm4 1404*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 1405*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %xmm3, %xmm4 1406*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm2, %xmm2, %xmm2 1407*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm3 1408*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %xmm3, %xmm4 1409*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm2, %xmm2, %xmm2 1410*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm2, %xmm4, %xmm3, %xmm2 1411*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %xmm2, %xmm2 1412*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 1413*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1414*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $4, %xmm0, %xmm3 1415*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 1416*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $2, %xmm0, %xmm3 1417*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm1, %xmm1, %xmm1 1418*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 1419*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $1, %xmm0, %xmm3 1420*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddw %xmm1, %xmm1, %xmm1 1421*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendvb %xmm1, %xmm3, %xmm0, %xmm0 1422*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $8, %xmm0, %xmm0 1423*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 1424*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1425*9880d681SAndroid Build Coastguard Worker; 1426*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: constant_shift_v16i8: 1427*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 1428*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15] 1429*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0] 1430*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psllw $5, %xmm3 1431*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm3[8],xmm4[9],xmm3[9],xmm4[10],xmm3[10],xmm4[11],xmm3[11],xmm4[12],xmm3[12],xmm4[13],xmm3[13],xmm4[14],xmm3[14],xmm4[15],xmm3[15] 1432*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm2, %xmm2 1433*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 1434*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 1435*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm6 1436*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm1, %xmm6 1437*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $4, %xmm1 1438*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm1 1439*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm6, %xmm1 1440*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm4, %xmm4 1441*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 1442*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 1443*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm6 1444*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm1, %xmm6 1445*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $2, %xmm1 1446*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm1 1447*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm6, %xmm1 1448*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm4, %xmm4 1449*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm5, %xmm5 1450*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm4, %xmm5 1451*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm5, %xmm4 1452*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm1, %xmm4 1453*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $1, %xmm1 1454*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm5, %xmm1 1455*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm4, %xmm1 1456*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlw $8, %xmm1 1457*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1458*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1459*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm4, %xmm4 1460*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm3, %xmm4 1461*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm4, %xmm5 1462*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm5 1463*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $4, %xmm0 1464*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm4, %xmm0 1465*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm5, %xmm0 1466*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm3, %xmm3 1467*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm4, %xmm4 1468*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm3, %xmm4 1469*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm4, %xmm5 1470*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm5 1471*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $2, %xmm0 1472*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm4, %xmm0 1473*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm5, %xmm0 1474*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: paddw %xmm3, %xmm3 1475*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pcmpgtw %xmm3, %xmm2 1476*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm2, %xmm3 1477*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pandn %xmm0, %xmm3 1478*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $1, %xmm0 1479*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm2, %xmm0 1480*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm3, %xmm0 1481*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlw $8, %xmm0 1482*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: packuswb %xmm1, %xmm0 1483*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1484*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0> 1485*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %shift 1486*9880d681SAndroid Build Coastguard Worker} 1487*9880d681SAndroid Build Coastguard Worker 1488*9880d681SAndroid Build Coastguard Worker; 1489*9880d681SAndroid Build Coastguard Worker; Uniform Constant Shifts 1490*9880d681SAndroid Build Coastguard Worker; 1491*9880d681SAndroid Build Coastguard Worker 1492*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @splatconstant_shift_v2i64(<2 x i64> %a) nounwind { 1493*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: splatconstant_shift_v2i64: 1494*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 1495*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa %xmm0, %xmm1 1496*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $7, %xmm1 1497*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3] 1498*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrlq $7, %xmm0 1499*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 1500*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 1501*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 1502*9880d681SAndroid Build Coastguard Worker; 1503*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: splatconstant_shift_v2i64: 1504*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 1505*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa %xmm0, %xmm1 1506*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrad $7, %xmm1 1507*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: psrlq $7, %xmm0 1508*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7] 1509*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 1510*9880d681SAndroid Build Coastguard Worker; 1511*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_shift_v2i64: 1512*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1513*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrad $7, %xmm0, %xmm1 1514*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $7, %xmm0, %xmm0 1515*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7] 1516*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1517*9880d681SAndroid Build Coastguard Worker; 1518*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_shift_v2i64: 1519*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1520*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrad $7, %xmm0, %xmm1 1521*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $7, %xmm0, %xmm0 1522*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3] 1523*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1524*9880d681SAndroid Build Coastguard Worker; 1525*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v2i64: 1526*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 1527*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm1, %xmm1, %xmm1 1528*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm1 1529*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpshaq %xmm1, %xmm0, %xmm0 1530*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 1531*9880d681SAndroid Build Coastguard Worker; 1532*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v2i64: 1533*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1534*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrad $7, %xmm0, %xmm1 1535*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $7, %xmm0, %xmm0 1536*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3] 1537*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1538*9880d681SAndroid Build Coastguard Worker; 1539*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v2i64: 1540*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 1541*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa %xmm0, %xmm1 1542*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad $7, %xmm1 1543*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3] 1544*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlq $7, %xmm0 1545*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 1546*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 1547*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1548*9880d681SAndroid Build Coastguard Worker %shift = ashr <2 x i64> %a, <i64 7, i64 7> 1549*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shift 1550*9880d681SAndroid Build Coastguard Worker} 1551*9880d681SAndroid Build Coastguard Worker 1552*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @splatconstant_shift_v4i32(<4 x i32> %a) nounwind { 1553*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v4i32: 1554*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1555*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $5, %xmm0 1556*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1557*9880d681SAndroid Build Coastguard Worker; 1558*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v4i32: 1559*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 1560*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrad $5, %xmm0, %xmm0 1561*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 1562*9880d681SAndroid Build Coastguard Worker; 1563*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v4i32: 1564*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 1565*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsrad $5, %xmm0, %xmm0 1566*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 1567*9880d681SAndroid Build Coastguard Worker; 1568*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v4i32: 1569*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1570*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrad $5, %xmm0, %xmm0 1571*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1572*9880d681SAndroid Build Coastguard Worker; 1573*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v4i32: 1574*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 1575*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrad $5, %xmm0 1576*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1577*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i32> %a, <i32 5, i32 5, i32 5, i32 5> 1578*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shift 1579*9880d681SAndroid Build Coastguard Worker} 1580*9880d681SAndroid Build Coastguard Worker 1581*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @splatconstant_shift_v8i16(<8 x i16> %a) nounwind { 1582*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v8i16: 1583*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psraw $3, %xmm0 1585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1586*9880d681SAndroid Build Coastguard Worker; 1587*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v8i16: 1588*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 1589*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsraw $3, %xmm0, %xmm0 1590*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 1591*9880d681SAndroid Build Coastguard Worker; 1592*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v8i16: 1593*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 1594*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsraw $3, %xmm0, %xmm0 1595*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 1596*9880d681SAndroid Build Coastguard Worker; 1597*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v8i16: 1598*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1599*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsraw $3, %xmm0, %xmm0 1600*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1601*9880d681SAndroid Build Coastguard Worker; 1602*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v8i16: 1603*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 1604*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psraw $3, %xmm0 1605*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1606*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 1607*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 1608*9880d681SAndroid Build Coastguard Worker} 1609*9880d681SAndroid Build Coastguard Worker 1610*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @splatconstant_shift_v16i8(<16 x i8> %a) nounwind { 1611*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: splatconstant_shift_v16i8: 1612*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlw $3, %xmm0 1614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm0 1615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 1616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm1, %xmm0 1617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubb %xmm1, %xmm0 1618*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1619*9880d681SAndroid Build Coastguard Worker; 1620*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: splatconstant_shift_v16i8: 1621*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 1622*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsrlw $3, %xmm0, %xmm0 1623*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 1624*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovdqa {{.*#+}} xmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 1625*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 1626*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpsubb %xmm1, %xmm0, %xmm0 1627*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 1628*9880d681SAndroid Build Coastguard Worker; 1629*9880d681SAndroid Build Coastguard Worker; XOP-LABEL: splatconstant_shift_v16i8: 1630*9880d681SAndroid Build Coastguard Worker; XOP: # BB#0: 1631*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpxor %xmm1, %xmm1, %xmm1 1632*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpsubb {{.*}}(%rip), %xmm1, %xmm1 1633*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: vpshab %xmm1, %xmm0, %xmm0 1634*9880d681SAndroid Build Coastguard Worker; XOP-NEXT: retq 1635*9880d681SAndroid Build Coastguard Worker; 1636*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: splatconstant_shift_v16i8: 1637*9880d681SAndroid Build Coastguard Worker; AVX512: ## BB#0: 1638*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlw $3, %xmm0, %xmm0 1639*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 1640*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} xmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 1641*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxor %xmm1, %xmm0, %xmm0 1642*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubb %xmm1, %xmm0, %xmm0 1643*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1644*9880d681SAndroid Build Coastguard Worker; 1645*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: splatconstant_shift_v16i8: 1646*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 1647*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psrlw $3, %xmm0 1648*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand {{\.LCPI.*}}, %xmm0 1649*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movdqa {{.*#+}} xmm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 1650*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm1, %xmm0 1651*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: psubb %xmm1, %xmm0 1652*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 1653*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 1654*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %shift 1655*9880d681SAndroid Build Coastguard Worker} 1656