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