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=i686-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=X32-SSE --check-prefix=X32-SSE42 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=X64-SSE --check-prefix=X64-SSE42 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; 6*9880d681SAndroid Build Coastguard Worker; AND/XOR/OR i24 as v3i8 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine i24 @and_i24_as_v3i8(i24 %a, i24 %b) nounwind { 10*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: and_i24_as_v3i8: 11*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 12*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 13*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: andl {{[0-9]+}}(%esp), %eax 14*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 15*9880d681SAndroid Build Coastguard Worker; 16*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: and_i24_as_v3i8: 17*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 18*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: andl %esi, %edi 19*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 20*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 21*9880d681SAndroid Build Coastguard Worker %1 = bitcast i24 %a to <3 x i8> 22*9880d681SAndroid Build Coastguard Worker %2 = bitcast i24 %b to <3 x i8> 23*9880d681SAndroid Build Coastguard Worker %3 = and <3 x i8> %1, %2 24*9880d681SAndroid Build Coastguard Worker %4 = bitcast <3 x i8> %3 to i24 25*9880d681SAndroid Build Coastguard Worker ret i24 %4 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine i24 @xor_i24_as_v3i8(i24 %a, i24 %b) nounwind { 29*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: xor_i24_as_v3i8: 30*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 32*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorl {{[0-9]+}}(%esp), %eax 33*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 34*9880d681SAndroid Build Coastguard Worker; 35*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: xor_i24_as_v3i8: 36*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 37*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: xorl %esi, %edi 38*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 39*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 40*9880d681SAndroid Build Coastguard Worker %1 = bitcast i24 %a to <3 x i8> 41*9880d681SAndroid Build Coastguard Worker %2 = bitcast i24 %b to <3 x i8> 42*9880d681SAndroid Build Coastguard Worker %3 = xor <3 x i8> %1, %2 43*9880d681SAndroid Build Coastguard Worker %4 = bitcast <3 x i8> %3 to i24 44*9880d681SAndroid Build Coastguard Worker ret i24 %4 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine i24 @or_i24_as_v3i8(i24 %a, i24 %b) nounwind { 48*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: or_i24_as_v3i8: 49*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 50*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 51*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: orl {{[0-9]+}}(%esp), %eax 52*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 53*9880d681SAndroid Build Coastguard Worker; 54*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: or_i24_as_v3i8: 55*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 56*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: orl %esi, %edi 57*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 58*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 59*9880d681SAndroid Build Coastguard Worker %1 = bitcast i24 %a to <3 x i8> 60*9880d681SAndroid Build Coastguard Worker %2 = bitcast i24 %b to <3 x i8> 61*9880d681SAndroid Build Coastguard Worker %3 = or <3 x i8> %1, %2 62*9880d681SAndroid Build Coastguard Worker %4 = bitcast <3 x i8> %3 to i24 63*9880d681SAndroid Build Coastguard Worker ret i24 %4 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; 67*9880d681SAndroid Build Coastguard Worker; AND/XOR/OR i24 as v8i3 68*9880d681SAndroid Build Coastguard Worker; 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine i24 @and_i24_as_v8i3(i24 %a, i24 %b) nounwind { 71*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: and_i24_as_v8i3: 72*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 73*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 74*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: andl {{[0-9]+}}(%esp), %eax 75*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 76*9880d681SAndroid Build Coastguard Worker; 77*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: and_i24_as_v8i3: 78*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 79*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: andl %esi, %edi 80*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 81*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 82*9880d681SAndroid Build Coastguard Worker %1 = bitcast i24 %a to <8 x i3> 83*9880d681SAndroid Build Coastguard Worker %2 = bitcast i24 %b to <8 x i3> 84*9880d681SAndroid Build Coastguard Worker %3 = and <8 x i3> %1, %2 85*9880d681SAndroid Build Coastguard Worker %4 = bitcast <8 x i3> %3 to i24 86*9880d681SAndroid Build Coastguard Worker ret i24 %4 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine i24 @xor_i24_as_v8i3(i24 %a, i24 %b) nounwind { 90*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: xor_i24_as_v8i3: 91*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 92*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 93*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorl {{[0-9]+}}(%esp), %eax 94*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 95*9880d681SAndroid Build Coastguard Worker; 96*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: xor_i24_as_v8i3: 97*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 98*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: xorl %esi, %edi 99*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 100*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 101*9880d681SAndroid Build Coastguard Worker %1 = bitcast i24 %a to <8 x i3> 102*9880d681SAndroid Build Coastguard Worker %2 = bitcast i24 %b to <8 x i3> 103*9880d681SAndroid Build Coastguard Worker %3 = xor <8 x i3> %1, %2 104*9880d681SAndroid Build Coastguard Worker %4 = bitcast <8 x i3> %3 to i24 105*9880d681SAndroid Build Coastguard Worker ret i24 %4 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine i24 @or_i24_as_v8i3(i24 %a, i24 %b) nounwind { 109*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: or_i24_as_v8i3: 110*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 111*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax 112*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: orl {{[0-9]+}}(%esp), %eax 113*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 114*9880d681SAndroid Build Coastguard Worker; 115*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: or_i24_as_v8i3: 116*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 117*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: orl %esi, %edi 118*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movl %edi, %eax 119*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 120*9880d681SAndroid Build Coastguard Worker %1 = bitcast i24 %a to <8 x i3> 121*9880d681SAndroid Build Coastguard Worker %2 = bitcast i24 %b to <8 x i3> 122*9880d681SAndroid Build Coastguard Worker %3 = or <8 x i3> %1, %2 123*9880d681SAndroid Build Coastguard Worker %4 = bitcast <8 x i3> %3 to i24 124*9880d681SAndroid Build Coastguard Worker ret i24 %4 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; 128*9880d681SAndroid Build Coastguard Worker; AND/XOR/OR v3i8 as i24 129*9880d681SAndroid Build Coastguard Worker; 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine <3 x i8> @and_v3i8_as_i24(<3 x i8> %a, <3 x i8> %b) nounwind { 132*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: and_v3i8_as_i24: 133*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 134*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $0, {{[0-9]+}}(%esp), %xmm0 135*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $4, {{[0-9]+}}(%esp), %xmm0 136*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $8, {{[0-9]+}}(%esp), %xmm0 137*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $0, {{[0-9]+}}(%esp), %xmm1 138*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $4, {{[0-9]+}}(%esp), %xmm1 139*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $8, {{[0-9]+}}(%esp), %xmm1 140*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pand %xmm0, %xmm1 141*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $0, %xmm1, %eax 142*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $4, %xmm1, %edx 143*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $8, %xmm1, %ecx 144*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 145*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %DL<def> %DL<kill> %EDX<kill> 146*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %CL<def> %CL<kill> %ECX<kill> 147*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 148*9880d681SAndroid Build Coastguard Worker; 149*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: and_v3i8_as_i24: 150*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 151*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movd %ecx, %xmm0 152*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $1, %r8d, %xmm0 153*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $2, %r9d, %xmm0 154*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movd %edi, %xmm1 155*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $1, %esi, %xmm1 156*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $2, %edx, %xmm1 157*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pand %xmm0, %xmm1 158*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $0, %xmm1, %eax 159*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $4, %xmm1, %edx 160*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $8, %xmm1, %ecx 161*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 162*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %DL<def> %DL<kill> %EDX<kill> 163*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %CL<def> %CL<kill> %ECX<kill> 164*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 165*9880d681SAndroid Build Coastguard Worker %1 = bitcast <3 x i8> %a to i24 166*9880d681SAndroid Build Coastguard Worker %2 = bitcast <3 x i8> %b to i24 167*9880d681SAndroid Build Coastguard Worker %3 = and i24 %1, %2 168*9880d681SAndroid Build Coastguard Worker %4 = bitcast i24 %3 to <3 x i8> 169*9880d681SAndroid Build Coastguard Worker ret <3 x i8> %4 170*9880d681SAndroid Build Coastguard Worker} 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerdefine <3 x i8> @xor_v3i8_as_i24(<3 x i8> %a, <3 x i8> %b) nounwind { 173*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: xor_v3i8_as_i24: 174*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 175*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $0, {{[0-9]+}}(%esp), %xmm0 176*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $4, {{[0-9]+}}(%esp), %xmm0 177*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $8, {{[0-9]+}}(%esp), %xmm0 178*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $0, {{[0-9]+}}(%esp), %xmm1 179*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $4, {{[0-9]+}}(%esp), %xmm1 180*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $8, {{[0-9]+}}(%esp), %xmm1 181*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pxor %xmm0, %xmm1 182*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $0, %xmm1, %eax 183*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $4, %xmm1, %edx 184*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $8, %xmm1, %ecx 185*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 186*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %DL<def> %DL<kill> %EDX<kill> 187*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %CL<def> %CL<kill> %ECX<kill> 188*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 189*9880d681SAndroid Build Coastguard Worker; 190*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: xor_v3i8_as_i24: 191*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 192*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movd %ecx, %xmm0 193*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $1, %r8d, %xmm0 194*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $2, %r9d, %xmm0 195*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movd %edi, %xmm1 196*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $1, %esi, %xmm1 197*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $2, %edx, %xmm1 198*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pxor %xmm0, %xmm1 199*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $0, %xmm1, %eax 200*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $4, %xmm1, %edx 201*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $8, %xmm1, %ecx 202*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 203*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %DL<def> %DL<kill> %EDX<kill> 204*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %CL<def> %CL<kill> %ECX<kill> 205*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 206*9880d681SAndroid Build Coastguard Worker %1 = bitcast <3 x i8> %a to i24 207*9880d681SAndroid Build Coastguard Worker %2 = bitcast <3 x i8> %b to i24 208*9880d681SAndroid Build Coastguard Worker %3 = xor i24 %1, %2 209*9880d681SAndroid Build Coastguard Worker %4 = bitcast i24 %3 to <3 x i8> 210*9880d681SAndroid Build Coastguard Worker ret <3 x i8> %4 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Workerdefine <3 x i8> @or_v3i8_as_i24(<3 x i8> %a, <3 x i8> %b) nounwind { 214*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: or_v3i8_as_i24: 215*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 216*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $0, {{[0-9]+}}(%esp), %xmm0 217*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $4, {{[0-9]+}}(%esp), %xmm0 218*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $8, {{[0-9]+}}(%esp), %xmm0 219*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $0, {{[0-9]+}}(%esp), %xmm1 220*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $4, {{[0-9]+}}(%esp), %xmm1 221*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pinsrb $8, {{[0-9]+}}(%esp), %xmm1 222*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: por %xmm0, %xmm1 223*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $0, %xmm1, %eax 224*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $4, %xmm1, %edx 225*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: pextrb $8, %xmm1, %ecx 226*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 227*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %DL<def> %DL<kill> %EDX<kill> 228*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: # kill: %CL<def> %CL<kill> %ECX<kill> 229*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 230*9880d681SAndroid Build Coastguard Worker; 231*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: or_v3i8_as_i24: 232*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 233*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movd %ecx, %xmm0 234*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $1, %r8d, %xmm0 235*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $2, %r9d, %xmm0 236*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: movd %edi, %xmm1 237*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $1, %esi, %xmm1 238*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pinsrd $2, %edx, %xmm1 239*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: por %xmm0, %xmm1 240*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $0, %xmm1, %eax 241*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $4, %xmm1, %edx 242*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: pextrb $8, %xmm1, %ecx 243*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 244*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %DL<def> %DL<kill> %EDX<kill> 245*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: # kill: %CL<def> %CL<kill> %ECX<kill> 246*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 247*9880d681SAndroid Build Coastguard Worker %1 = bitcast <3 x i8> %a to i24 248*9880d681SAndroid Build Coastguard Worker %2 = bitcast <3 x i8> %b to i24 249*9880d681SAndroid Build Coastguard Worker %3 = or i24 %1, %2 250*9880d681SAndroid Build Coastguard Worker %4 = bitcast i24 %3 to <3 x i8> 251*9880d681SAndroid Build Coastguard Worker ret <3 x i8> %4 252*9880d681SAndroid Build Coastguard Worker} 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Worker; 255*9880d681SAndroid Build Coastguard Worker; AND/XOR/OR v8i3 as i24 256*9880d681SAndroid Build Coastguard Worker; 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Workerdefine <8 x i3> @and_v8i3_as_i24(<8 x i3> %a, <8 x i3> %b) nounwind { 259*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: and_v8i3_as_i24: 260*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 261*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: andps %xmm1, %xmm0 262*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 263*9880d681SAndroid Build Coastguard Worker; 264*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: and_v8i3_as_i24: 265*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 266*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: andps %xmm1, %xmm0 267*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 268*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i3> %a to i24 269*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i3> %b to i24 270*9880d681SAndroid Build Coastguard Worker %3 = and i24 %1, %2 271*9880d681SAndroid Build Coastguard Worker %4 = bitcast i24 %3 to <8 x i3> 272*9880d681SAndroid Build Coastguard Worker ret <8 x i3> %4 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Workerdefine <8 x i3> @xor_v8i3_as_i24(<8 x i3> %a, <8 x i3> %b) nounwind { 276*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: xor_v8i3_as_i24: 277*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 278*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: xorps %xmm1, %xmm0 279*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 280*9880d681SAndroid Build Coastguard Worker; 281*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: xor_v8i3_as_i24: 282*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 283*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: xorps %xmm1, %xmm0 284*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 285*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i3> %a to i24 286*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i3> %b to i24 287*9880d681SAndroid Build Coastguard Worker %3 = xor i24 %1, %2 288*9880d681SAndroid Build Coastguard Worker %4 = bitcast i24 %3 to <8 x i3> 289*9880d681SAndroid Build Coastguard Worker ret <8 x i3> %4 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerdefine <8 x i3> @or_v8i3_as_i24(<8 x i3> %a, <8 x i3> %b) nounwind { 293*9880d681SAndroid Build Coastguard Worker; X32-SSE-LABEL: or_v8i3_as_i24: 294*9880d681SAndroid Build Coastguard Worker; X32-SSE: # BB#0: 295*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: orps %xmm1, %xmm0 296*9880d681SAndroid Build Coastguard Worker; X32-SSE-NEXT: retl 297*9880d681SAndroid Build Coastguard Worker; 298*9880d681SAndroid Build Coastguard Worker; X64-SSE-LABEL: or_v8i3_as_i24: 299*9880d681SAndroid Build Coastguard Worker; X64-SSE: # BB#0: 300*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: orps %xmm1, %xmm0 301*9880d681SAndroid Build Coastguard Worker; X64-SSE-NEXT: retq 302*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i3> %a to i24 303*9880d681SAndroid Build Coastguard Worker %2 = bitcast <8 x i3> %b to i24 304*9880d681SAndroid Build Coastguard Worker %3 = or i24 %1, %2 305*9880d681SAndroid Build Coastguard Worker %4 = bitcast i24 %3 to <8 x i3> 306*9880d681SAndroid Build Coastguard Worker ret <8 x i3> %4 307*9880d681SAndroid Build Coastguard Worker} 308