Index: include/llvm/CodeGen/TargetLowering.h =================================================================== --- include/llvm/CodeGen/TargetLowering.h +++ include/llvm/CodeGen/TargetLowering.h @@ -3466,6 +3466,8 @@ /// \returns MERGE_VALUs of the individual store chains. SDValue scalarizeVectorStore(StoreSDNode *ST, SelectionDAG &DAG) const; + bool shouldStoreVectorAsOneInt(EVT StoreVT) const; + /// Expands an unaligned load to 2 half-size loads for an integer, and /// possibly more for vectors. std::pair expandUnalignedLoad(LoadSDNode *LD, Index: lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp =================================================================== --- lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp +++ lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp @@ -662,7 +662,6 @@ SDValue VectorLegalizer::ExpandStore(SDValue Op) { StoreSDNode *ST = cast(Op.getNode()); - SDValue TF = TLI.scalarizeVectorStore(ST, DAG); AddLegalizedOperand(Op, TF); return TF; Index: lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp =================================================================== --- lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -3554,6 +3554,9 @@ // vector type. StoreSDNode *ST = cast(N); + if (TLI.shouldStoreVectorAsOneInt(ST->getMemoryVT())) + return TLI.scalarizeVectorStore(ST, DAG); + SmallVector StChain; if (ST->isTruncatingStore()) GenWidenVectorTruncStores(StChain, ST); Index: lib/CodeGen/SelectionDAG/TargetLowering.cpp =================================================================== --- lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -3419,9 +3419,6 @@ return DAG.getMergeValues({ Value, NewChain }, SL); } -// FIXME: This relies on each element having a byte size, otherwise the stride -// is 0 and just overwrites the same location. ExpandStore currently expects -// this broken behavior. SDValue TargetLowering::scalarizeVectorStore(StoreSDNode *ST, SelectionDAG &DAG) const { SDLoc SL(ST); @@ -3438,11 +3435,41 @@ // The type of data as saved in memory. EVT MemSclVT = StVT.getScalarType(); - // Store Stride in bytes - unsigned Stride = MemSclVT.getSizeInBits() / 8; EVT IdxVT = getVectorIdxTy(DAG.getDataLayout()); unsigned NumElem = StVT.getVectorNumElements(); + // A vector must always be stored in memory as-is, i.e. without any padding + // between the elements, since various code depend on it, e.g. in the + // handling of a bitcast of a vector type to int, which may be done with a + // vector store followed by an integer load. A vector that does not have + // elements that are at least one byte in size which is also a power-of-2 + // must therefore be stored as an integer built out of inserted vector + // elements. + if (shouldStoreVectorAsOneInt(ST->getMemoryVT())) { + unsigned NumBits = StVT.getSizeInBits(); + EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), NumBits); + + SDValue CurrVal = DAG.getConstant(0, SL, IntVT); + + for (unsigned Idx = 0; Idx < NumElem; ++Idx) { + SDValue Elt = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, SL, MemSclVT, Value, + DAG.getConstant(Idx, SL, IdxVT)); + SDValue ExtElt = DAG.getNode(ISD::ZERO_EXTEND, SL, IntVT, Elt); + SDValue ShiftAmount = + DAG.getConstant(Idx * MemSclVT.getSizeInBits(), SL, IntVT); + SDValue ShiftedElt = DAG.getNode(ISD::SHL, SL, IntVT, ExtElt, ShiftAmount); + CurrVal = DAG.getNode(ISD::OR, SL, IntVT, CurrVal, ShiftedElt); + } + + return DAG.getStore(Chain, SL, CurrVal, BasePtr, ST->getPointerInfo(), + ST->getAlignment(), ST->getMemOperand()->getFlags(), + ST->getAAInfo()); + } + + // Store Stride in bytes + unsigned Stride = MemSclVT.getSizeInBits() / 8; + assert (Stride && "Zero stride!"); + // Extract each of the elements from the original vector and save them into // memory individually. SmallVector Stores; @@ -3464,6 +3491,11 @@ return DAG.getNode(ISD::TokenFactor, SL, MVT::Other, Stores); } +bool TargetLowering::shouldStoreVectorAsOneInt(EVT StoreVT) const { + unsigned ElemBits = StoreVT.getScalarType().getSizeInBits(); + return (ElemBits < 8 || !isPowerOf2_32(ElemBits)); +} + std::pair TargetLowering::expandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG) const { assert(LD->getAddressingMode() == ISD::UNINDEXED && Index: test/CodeGen/Generic/store_nonbytesized_vecs.ll =================================================================== --- /dev/null +++ test/CodeGen/Generic/store_nonbytesized_vecs.ll @@ -0,0 +1,128 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 < %s | FileCheck %s + +; Store a <4 x i31> vector. +define void @fun0(<4 x i31> %src, <4 x i31>* %p) +; CHECK-LABEL: fun0: +; CHECK: # %bb.0: +; CHECK-NEXT: vlgvf %r1, %v24, 3 +; CHECK-NEXT: vlgvf %r0, %v24, 2 +; CHECK-NEXT: sllg %r1, %r1, 29 +; CHECK-NEXT: rosbg %r1, %r0, 35, 63, 62 +; CHECK-NEXT: nihh %r1, 4095 +; CHECK-NEXT: vlgvf %r3, %v24, 0 +; CHECK-NEXT: stg %r1, 0(%r2) +; CHECK-NEXT: vlgvf %r1, %v24, 1 +; CHECK-NEXT: llgtr %r3, %r3 +; CHECK-NEXT: rosbg %r3, %r1, 2, 32, 31 +; CHECK-NEXT: rosbg %r3, %r0, 0, 1, 62 +; CHECK-NEXT: stg %r3, 8(%r2) +; CHECK-NEXT: br %r14 +{ + store <4 x i31> %src, <4 x i31>* %p + ret void +} + +; Store a <16 x i1> vector. +define i16 @fun1(<16 x i1> %src) +; CHECK-LABEL: fun1: +; CHECK: # %bb.0: +; CHECK-NEXT: aghi %r15, -168 +; CHECK-NEXT: .cfi_def_cfa_offset 328 +; CHECK-NEXT: vlgvb %r0, %v24, 0 +; CHECK-NEXT: vlgvb %r1, %v24, 1 +; CHECK-NEXT: nilf %r0, 1 +; CHECK-NEXT: rosbg %r0, %r1, 62, 62, 1 +; CHECK-NEXT: vlgvb %r1, %v24, 2 +; CHECK-NEXT: rosbg %r0, %r1, 61, 61, 2 +; CHECK-NEXT: vlgvb %r1, %v24, 3 +; CHECK-NEXT: rosbg %r0, %r1, 60, 60, 3 +; CHECK-NEXT: vlgvb %r1, %v24, 4 +; CHECK-NEXT: rosbg %r0, %r1, 59, 59, 4 +; CHECK-NEXT: vlgvb %r1, %v24, 5 +; CHECK-NEXT: rosbg %r0, %r1, 58, 58, 5 +; CHECK-NEXT: vlgvb %r1, %v24, 6 +; CHECK-NEXT: rosbg %r0, %r1, 57, 57, 6 +; CHECK-NEXT: vlgvb %r1, %v24, 7 +; CHECK-NEXT: rosbg %r0, %r1, 56, 56, 7 +; CHECK-NEXT: vlgvb %r1, %v24, 8 +; CHECK-NEXT: rosbg %r0, %r1, 55, 55, 8 +; CHECK-NEXT: vlgvb %r1, %v24, 9 +; CHECK-NEXT: rosbg %r0, %r1, 54, 54, 9 +; CHECK-NEXT: vlgvb %r1, %v24, 10 +; CHECK-NEXT: rosbg %r0, %r1, 53, 53, 10 +; CHECK-NEXT: vlgvb %r1, %v24, 11 +; CHECK-NEXT: rosbg %r0, %r1, 52, 52, 11 +; CHECK-NEXT: vlgvb %r1, %v24, 12 +; CHECK-NEXT: rosbg %r0, %r1, 51, 51, 12 +; CHECK-NEXT: vlgvb %r1, %v24, 13 +; CHECK-NEXT: rosbg %r0, %r1, 50, 50, 13 +; CHECK-NEXT: vlgvb %r1, %v24, 14 +; CHECK-NEXT: rosbg %r0, %r1, 49, 49, 14 +; CHECK-NEXT: vlgvb %r1, %v24, 15 +; CHECK-NEXT: rosbg %r0, %r1, 32, 48, 15 +; CHECK-NEXT: sth %r0, 160(%r15) +; CHECK-NEXT: lh %r2, 160(%r15) +; CHECK-NEXT: aghi %r15, 168 +; CHECK-NEXT: br %r14 +{ + %res = bitcast <16 x i1> %src to i16 + ret i16 %res +} + +; Truncate a <8 x i32> vector to <8 x i31> and store it (test splitting). +define void @fun2(<8 x i32> %src, <8 x i31>* %p) +; CHECK-LABEL: fun2: +; CHECK: # %bb.0: +; CHECK-NEXT: vlgvf %r1, %v26, 3 +; CHECK-NEXT: vlgvf %r0, %v26, 2 +; CHECK-NEXT: sllg %r1, %r1, 29 +; CHECK-NEXT: rosbg %r1, %r0, 35, 63, 62 +; CHECK-NEXT: nihh %r1, 4095 +; CHECK-NEXT: vlgvf %r3, %v26, 0 +; CHECK-NEXT: stg %r1, 15(%r2) +; CHECK-NEXT: vlgvf %r1, %v26, 1 +; CHECK-NEXT: llgtr %r3, %r3 +; CHECK-NEXT: rosbg %r3, %r1, 2, 32, 31 +; CHECK-NEXT: vlgvf %r1, %v24, 3 +; CHECK-NEXT: rosbg %r3, %r0, 0, 1, 62 +; CHECK-NEXT: vlgvf %r0, %v24, 2 +; CHECK-NEXT: sllg %r1, %r1, 29 +; CHECK-NEXT: stg %r3, 23(%r2) +; CHECK-NEXT: vlgvf %r3, %v24, 0 +; CHECK-NEXT: rosbg %r1, %r0, 35, 63, 62 +; CHECK-NEXT: nihh %r1, 4095 +; CHECK-NEXT: stg %r1, 0(%r2) +; CHECK-NEXT: vlgvf %r1, %v24, 1 +; CHECK-NEXT: llgtr %r3, %r3 +; CHECK-NEXT: rosbg %r3, %r1, 2, 32, 31 +; CHECK-NEXT: rosbg %r3, %r0, 0, 1, 62 +; CHECK-NEXT: stg %r3, 8(%r2) +; CHECK-NEXT: br %r14 +{ + %tmp = trunc <8 x i32> %src to <8 x i31> + store <8 x i31> %tmp, <8 x i31>* %p + ret void +} + +; Load and store a <3 x i31> vector (test widening). +define void @fun3(<3 x i31>* %src, <3 x i31>* %p) +; CHECK-LABEL: fun3: +; CHECK: # %bb.0: +; CHECK-NEXT: llgf %r0, 3(%r2) +; CHECK-NEXT: llgf %r1, 0(%r2) +; CHECK-NEXT: rosbg %r1, %r0, 0, 32, 31 +; CHECK-NEXT: llgf %r0, 6(%r2) +; CHECK-NEXT: st %r1, 8(%r3) +; CHECK-NEXT: rosbg %r1, %r0, 0, 1, 62 +; CHECK-NEXT: srlg %r1, %r1, 32 +; CHECK-NEXT: sllg %r0, %r0, 30 +; CHECK-NEXT: lr %r0, %r1 +; CHECK-NEXT: nihh %r0, 8191 +; CHECK-NEXT: stg %r0, 0(%r3) +; CHECK-NEXT: br %r14 +{ + %tmp = load <3 x i31>, <3 x i31>* %src + store <3 x i31> %tmp, <3 x i31>* %p + ret void +} Index: test/CodeGen/SystemZ/vec-move-17.ll =================================================================== --- test/CodeGen/SystemZ/vec-move-17.ll +++ test/CodeGen/SystemZ/vec-move-17.ll @@ -62,7 +62,6 @@ ; Test a v2i64->v2i1 truncation. define void @f7(<2 x i64> %val, <2 x i1> *%ptr) { -; No expected output, but must compile. %trunc = trunc <2 x i64> %val to <2 x i1> store <2 x i1> %trunc, <2 x i1> *%ptr ret void Index: test/CodeGen/X86/bitcast-and-setcc-512.ll =================================================================== --- test/CodeGen/X86/bitcast-and-setcc-512.ll +++ test/CodeGen/X86/bitcast-and-setcc-512.ll @@ -522,198 +522,242 @@ ; SSE-NEXT: pand %xmm0, %xmm10 ; SSE-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm11 ; SSE-NEXT: pand %xmm1, %xmm11 -; SSE-NEXT: pextrb $15, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $14, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $13, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $12, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $11, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $10, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $9, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $8, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $7, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $6, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $5, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $4, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $3, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $2, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pextrb $1, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $0, %xmm11, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $15, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $14, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $13, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $12, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $11, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $10, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $9, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $8, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $7, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $6, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $5, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $4, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $3, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $2, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: pextrb $0, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rcx,%rax,2), %eax +; SSE-NEXT: pextrb $2, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,4), %eax +; SSE-NEXT: pextrb $3, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,8), %eax +; SSE-NEXT: pextrb $4, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $4, %ecx +; SSE-NEXT: orl %eax, %ecx +; SSE-NEXT: pextrb $5, %xmm11, %eax +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: shll $5, %eax +; SSE-NEXT: orl %ecx, %eax +; SSE-NEXT: pextrb $6, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $6, %ecx +; SSE-NEXT: pextrb $7, %xmm11, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $7, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $8, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $8, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $9, %xmm11, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $9, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $10, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $10, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $11, %xmm11, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $11, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $12, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $12, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $13, %xmm11, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $13, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $14, %xmm11, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $14, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $15, %xmm11, %edx +; SSE-NEXT: shll $15, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: orl %eax, %edx +; SSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pextrb $1, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $0, %xmm10, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $15, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $14, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $13, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $12, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $11, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $10, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $9, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $8, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $7, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $6, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $5, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $4, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $3, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $2, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: pextrb $0, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rcx,%rax,2), %eax +; SSE-NEXT: pextrb $2, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,4), %eax +; SSE-NEXT: pextrb $3, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,8), %eax +; SSE-NEXT: pextrb $4, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $4, %ecx +; SSE-NEXT: orl %eax, %ecx +; SSE-NEXT: pextrb $5, %xmm10, %eax +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: shll $5, %eax +; SSE-NEXT: orl %ecx, %eax +; SSE-NEXT: pextrb $6, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $6, %ecx +; SSE-NEXT: pextrb $7, %xmm10, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $7, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $8, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $8, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $9, %xmm10, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $9, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $10, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $10, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $11, %xmm10, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $11, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $12, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $12, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $13, %xmm10, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $13, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $14, %xmm10, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $14, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $15, %xmm10, %edx +; SSE-NEXT: shll $15, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: orl %eax, %edx +; SSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pextrb $1, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $0, %xmm9, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $15, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $14, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $13, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $12, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $11, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $10, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $9, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $8, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $7, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $6, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $5, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $4, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $3, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $2, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: pextrb $0, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rcx,%rax,2), %eax +; SSE-NEXT: pextrb $2, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,4), %eax +; SSE-NEXT: pextrb $3, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,8), %eax +; SSE-NEXT: pextrb $4, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $4, %ecx +; SSE-NEXT: orl %eax, %ecx +; SSE-NEXT: pextrb $5, %xmm9, %eax +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: shll $5, %eax +; SSE-NEXT: orl %ecx, %eax +; SSE-NEXT: pextrb $6, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $6, %ecx +; SSE-NEXT: pextrb $7, %xmm9, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $7, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $8, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $8, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $9, %xmm9, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $9, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $10, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $10, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $11, %xmm9, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $11, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $12, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $12, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $13, %xmm9, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $13, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $14, %xmm9, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $14, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $15, %xmm9, %edx +; SSE-NEXT: shll $15, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: orl %eax, %edx +; SSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pextrb $1, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $0, %xmm8, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: pextrb $0, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rcx,%rax,2), %eax +; SSE-NEXT: pextrb $2, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,4), %eax +; SSE-NEXT: pextrb $3, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,8), %eax +; SSE-NEXT: pextrb $4, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $4, %ecx +; SSE-NEXT: orl %eax, %ecx +; SSE-NEXT: pextrb $5, %xmm8, %eax +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: shll $5, %eax +; SSE-NEXT: orl %ecx, %eax +; SSE-NEXT: pextrb $6, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $6, %ecx +; SSE-NEXT: pextrb $7, %xmm8, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $7, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $8, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $8, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $9, %xmm8, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $9, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $10, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $10, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $11, %xmm8, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $11, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $12, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $12, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $13, %xmm8, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $13, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $14, %xmm8, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $14, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $15, %xmm8, %edx +; SSE-NEXT: shll $15, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: orl %eax, %edx +; SSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp) ; SSE-NEXT: movl -{{[0-9]+}}(%rsp), %eax ; SSE-NEXT: shll $16, %eax ; SSE-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx @@ -757,200 +801,254 @@ ; AVX1-NEXT: vpcmpgtb %xmm6, %xmm4, %xmm3 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 ; AVX1-NEXT: vandps %ymm2, %ymm1, %ymm1 -; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 -; AVX1-NEXT: vpextrb $15, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $14, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $13, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $12, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $11, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $10, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $9, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $8, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $7, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $6, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $5, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $4, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $3, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $2, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $1, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $0, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $15, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $14, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $13, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $12, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $11, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $10, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $9, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $8, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $7, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $6, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $5, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $4, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $3, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $2, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) ; AVX1-NEXT: vpextrb $1, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $0, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 -; AVX1-NEXT: vpextrb $15, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $14, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $13, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $12, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $11, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $10, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $9, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $8, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $7, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $6, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx ; AVX1-NEXT: vpextrb $5, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $4, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $3, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $2, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $1, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $0, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $15, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $14, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $13, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $12, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $11, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $10, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $9, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $8, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $7, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $6, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $5, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $4, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $3, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $2, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 +; AVX1-NEXT: vpextrb $0, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm1, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, (%rsp) ; AVX1-NEXT: vpextrb $1, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $0, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm0, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 +; AVX1-NEXT: vpextrb $0, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm0, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, {{[0-9]+}}(%rsp) ; AVX1-NEXT: movl (%rsp), %ecx ; AVX1-NEXT: movl {{[0-9]+}}(%rsp), %eax ; AVX1-NEXT: shlq $32, %rax @@ -975,200 +1073,254 @@ ; AVX2-NEXT: vpand %ymm0, %ymm1, %ymm0 ; AVX2-NEXT: vpcmpgtb %ymm6, %ymm4, %ymm1 ; AVX2-NEXT: vpand %ymm1, %ymm2, %ymm1 -; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 -; AVX2-NEXT: vpextrb $15, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $14, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $13, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $12, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $11, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $10, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $9, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $8, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $7, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $6, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $5, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $4, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $3, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $2, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $1, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $0, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $15, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $14, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $13, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $12, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $11, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $10, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $9, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $8, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $7, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $6, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $5, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $4, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $3, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $2, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) ; AVX2-NEXT: vpextrb $1, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $0, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 -; AVX2-NEXT: vpextrb $15, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $14, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $13, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $12, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $11, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $10, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $9, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $8, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $7, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $6, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx ; AVX2-NEXT: vpextrb $5, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $4, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $3, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $2, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $1, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $0, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $15, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $14, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $13, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $12, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $11, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $10, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $9, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $8, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $7, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $6, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $5, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $4, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $3, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $2, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1 +; AVX2-NEXT: vpextrb $0, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm1, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, (%rsp) ; AVX2-NEXT: vpextrb $1, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $0, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %eax +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, {{[0-9]+}}(%rsp) ; AVX2-NEXT: movl (%rsp), %ecx ; AVX2-NEXT: movl {{[0-9]+}}(%rsp), %eax ; AVX2-NEXT: shlq $32, %rax Index: test/CodeGen/X86/bitcast-setcc-512.ll =================================================================== --- test/CodeGen/X86/bitcast-setcc-512.ll +++ test/CodeGen/X86/bitcast-setcc-512.ll @@ -213,201 +213,245 @@ ; SSE-LABEL: v64i8: ; SSE: # %bb.0: ; SSE-NEXT: pcmpgtb %xmm5, %xmm1 -; SSE-NEXT: pextrb $15, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $14, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $13, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $12, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $11, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $10, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $9, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $8, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $7, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $6, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $5, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $4, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $3, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $2, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pextrb $1, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $0, %xmm1, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: pextrb $0, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rcx,%rax,2), %eax +; SSE-NEXT: pextrb $2, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,4), %eax +; SSE-NEXT: pextrb $3, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,8), %eax +; SSE-NEXT: pextrb $4, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $4, %ecx +; SSE-NEXT: orl %eax, %ecx +; SSE-NEXT: pextrb $5, %xmm1, %eax +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: shll $5, %eax +; SSE-NEXT: orl %ecx, %eax +; SSE-NEXT: pextrb $6, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $6, %ecx +; SSE-NEXT: pextrb $7, %xmm1, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $7, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $8, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $8, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $9, %xmm1, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $9, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $10, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $10, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $11, %xmm1, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $11, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $12, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $12, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $13, %xmm1, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $13, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $14, %xmm1, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $14, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $15, %xmm1, %edx +; SSE-NEXT: shll $15, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: orl %eax, %edx +; SSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pcmpgtb %xmm4, %xmm0 -; SSE-NEXT: pextrb $15, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $14, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $13, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $12, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $11, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $10, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $9, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $8, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $7, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $6, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $5, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $4, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $3, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $2, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pextrb $1, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $0, %xmm0, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: pextrb $0, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rcx,%rax,2), %eax +; SSE-NEXT: pextrb $2, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,4), %eax +; SSE-NEXT: pextrb $3, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,8), %eax +; SSE-NEXT: pextrb $4, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $4, %ecx +; SSE-NEXT: orl %eax, %ecx +; SSE-NEXT: pextrb $5, %xmm0, %eax +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: shll $5, %eax +; SSE-NEXT: orl %ecx, %eax +; SSE-NEXT: pextrb $6, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $6, %ecx +; SSE-NEXT: pextrb $7, %xmm0, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $7, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $8, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $8, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $9, %xmm0, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $9, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $10, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $10, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $11, %xmm0, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $11, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $12, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $12, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $13, %xmm0, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $13, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $14, %xmm0, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $14, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $15, %xmm0, %edx +; SSE-NEXT: shll $15, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: orl %eax, %edx +; SSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pcmpgtb %xmm7, %xmm3 -; SSE-NEXT: pextrb $15, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $14, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $13, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $12, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $11, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $10, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $9, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $8, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $7, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $6, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $5, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $4, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $3, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $2, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pextrb $1, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $0, %xmm3, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: pextrb $0, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rcx,%rax,2), %eax +; SSE-NEXT: pextrb $2, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,4), %eax +; SSE-NEXT: pextrb $3, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,8), %eax +; SSE-NEXT: pextrb $4, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $4, %ecx +; SSE-NEXT: orl %eax, %ecx +; SSE-NEXT: pextrb $5, %xmm3, %eax +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: shll $5, %eax +; SSE-NEXT: orl %ecx, %eax +; SSE-NEXT: pextrb $6, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $6, %ecx +; SSE-NEXT: pextrb $7, %xmm3, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $7, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $8, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $8, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $9, %xmm3, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $9, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $10, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $10, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $11, %xmm3, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $11, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $12, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $12, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $13, %xmm3, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $13, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $14, %xmm3, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $14, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $15, %xmm3, %edx +; SSE-NEXT: shll $15, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: orl %eax, %edx +; SSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pcmpgtb %xmm6, %xmm2 -; SSE-NEXT: pextrb $15, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $14, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $13, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $12, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $11, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $10, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $9, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $8, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $7, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $6, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $5, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $4, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $3, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $2, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) ; SSE-NEXT: pextrb $1, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE-NEXT: pextrb $0, %xmm2, %eax -; SSE-NEXT: andb $1, %al -; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: pextrb $0, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rcx,%rax,2), %eax +; SSE-NEXT: pextrb $2, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,4), %eax +; SSE-NEXT: pextrb $3, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: leal (%rax,%rcx,8), %eax +; SSE-NEXT: pextrb $4, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $4, %ecx +; SSE-NEXT: orl %eax, %ecx +; SSE-NEXT: pextrb $5, %xmm2, %eax +; SSE-NEXT: andl $1, %eax +; SSE-NEXT: shll $5, %eax +; SSE-NEXT: orl %ecx, %eax +; SSE-NEXT: pextrb $6, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $6, %ecx +; SSE-NEXT: pextrb $7, %xmm2, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $7, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $8, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $8, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $9, %xmm2, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $9, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $10, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $10, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $11, %xmm2, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $11, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $12, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $12, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $13, %xmm2, %edx +; SSE-NEXT: andl $1, %edx +; SSE-NEXT: shll $13, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: pextrb $14, %xmm2, %ecx +; SSE-NEXT: andl $1, %ecx +; SSE-NEXT: shll $14, %ecx +; SSE-NEXT: orl %edx, %ecx +; SSE-NEXT: pextrb $15, %xmm2, %edx +; SSE-NEXT: shll $15, %edx +; SSE-NEXT: orl %ecx, %edx +; SSE-NEXT: orl %eax, %edx +; SSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp) ; SSE-NEXT: movl -{{[0-9]+}}(%rsp), %eax ; SSE-NEXT: shll $16, %eax ; SSE-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx @@ -429,206 +473,260 @@ ; AVX1-NEXT: .cfi_def_cfa_register %rbp ; AVX1-NEXT: andq $-32, %rsp ; AVX1-NEXT: subq $64, %rsp -; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 -; AVX1-NEXT: vpcmpgtb %xmm4, %xmm5, %xmm4 -; AVX1-NEXT: vpextrb $15, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $14, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $13, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $12, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $11, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $10, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $9, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $8, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $7, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $6, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $5, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $4, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $3, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $2, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) +; AVX1-NEXT: vpcmpgtb %xmm2, %xmm0, %xmm4 ; AVX1-NEXT: vpextrb $1, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $0, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm4, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm0, %xmm0 -; AVX1-NEXT: vpextrb $15, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $14, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $13, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $12, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $11, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $10, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $9, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $8, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $7, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $6, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $5, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $4, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $3, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $2, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $1, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vpextrb $0, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rsp) -; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0 -; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 -; AVX1-NEXT: vpcmpgtb %xmm0, %xmm2, %xmm0 -; AVX1-NEXT: vpextrb $15, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $14, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $13, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $12, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $11, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $10, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $9, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $8, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $7, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $6, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $5, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $4, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $3, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $2, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $1, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $0, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX1-NEXT: vpextrb $0, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm0, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, (%rsp) ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm0 -; AVX1-NEXT: vpextrb $15, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $14, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $13, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $12, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $11, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $10, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $9, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $8, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $7, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $6, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $5, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $4, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $3, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $2, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) ; AVX1-NEXT: vpextrb $1, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX1-NEXT: vpextrb $0, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm0, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0 +; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 +; AVX1-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0 +; AVX1-NEXT: vpextrb $0, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm0, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, {{[0-9]+}}(%rsp) ; AVX1-NEXT: movl (%rsp), %ecx ; AVX1-NEXT: movl {{[0-9]+}}(%rsp), %eax ; AVX1-NEXT: shlq $32, %rax @@ -648,201 +746,255 @@ ; AVX2-NEXT: andq $-32, %rsp ; AVX2-NEXT: subq $64, %rsp ; AVX2-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm0 -; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2 -; AVX2-NEXT: vpextrb $15, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $14, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $13, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $12, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $11, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $10, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $9, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $8, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $7, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $6, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $5, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $4, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $3, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $2, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $1, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $0, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $15, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $14, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $13, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $12, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $11, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $10, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $9, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $8, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $7, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $6, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $5, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $4, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $3, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $2, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) ; AVX2-NEXT: vpextrb $1, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpextrb $0, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rsp) -; AVX2-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm0 -; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 -; AVX2-NEXT: vpextrb $15, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $14, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $13, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $12, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $11, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $10, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $9, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $8, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $7, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $6, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $5, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $4, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $3, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $2, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $1, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $0, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $15, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $14, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $13, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $12, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $11, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $10, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $9, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $8, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $7, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $6, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx ; AVX2-NEXT: vpextrb $5, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $4, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $3, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $2, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, (%rsp) +; AVX2-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm0 ; AVX2-NEXT: vpextrb $1, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) -; AVX2-NEXT: vpextrb $0, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, {{[0-9]+}}(%rsp) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %eax +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, {{[0-9]+}}(%rsp) ; AVX2-NEXT: movl (%rsp), %ecx ; AVX2-NEXT: movl {{[0-9]+}}(%rsp), %eax ; AVX2-NEXT: shlq $32, %rax Index: test/CodeGen/X86/clear_upper_vector_element_bits.ll =================================================================== --- test/CodeGen/X86/clear_upper_vector_element_bits.ll +++ test/CodeGen/X86/clear_upper_vector_element_bits.ll @@ -839,234 +839,163 @@ define <16 x i8> @_clearupper16xi8b(<16 x i8>) nounwind { ; SSE2-LABEL: _clearupper16xi8b: ; SSE2: # %bb.0: -; SSE2-NEXT: pushq %r14 ; SSE2-NEXT: pushq %rbx ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] -; SSE2-NEXT: movq %xmm0, %rcx -; SSE2-NEXT: movq %rcx, %r8 -; SSE2-NEXT: movq %rcx, %r9 -; SSE2-NEXT: movq %rcx, %r10 -; SSE2-NEXT: movq %rcx, %rax -; SSE2-NEXT: movq %rcx, %rdx -; SSE2-NEXT: movq %rcx, %rsi -; SSE2-NEXT: movq %rcx, %rdi -; SSE2-NEXT: andb $15, %cl -; SSE2-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %xmm1, %rcx -; SSE2-NEXT: shrq $56, %rdi -; SSE2-NEXT: andb $15, %dil -; SSE2-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %r11 -; SSE2-NEXT: shrq $48, %rsi -; SSE2-NEXT: andb $15, %sil -; SSE2-NEXT: movb %sil, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %r14 -; SSE2-NEXT: shrq $40, %rdx -; SSE2-NEXT: andb $15, %dl -; SSE2-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rdx -; SSE2-NEXT: shrq $32, %rax -; SSE2-NEXT: andb $15, %al -; SSE2-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rax -; SSE2-NEXT: shrq $24, %r10 -; SSE2-NEXT: andb $15, %r10b -; SSE2-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rdi -; SSE2-NEXT: shrq $16, %r9 -; SSE2-NEXT: andb $15, %r9b -; SSE2-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rsi -; SSE2-NEXT: shrq $8, %r8 -; SSE2-NEXT: andb $15, %r8b -; SSE2-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rbx -; SSE2-NEXT: movb $0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: andb $15, %cl -; SSE2-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $56, %rbx -; SSE2-NEXT: andb $15, %bl -; SSE2-NEXT: movb %bl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $48, %rsi -; SSE2-NEXT: andb $15, %sil -; SSE2-NEXT: movb %sil, -{{[0-9]+}}(%rsp) +; SSE2-NEXT: movq %xmm1, %r10 +; SSE2-NEXT: movq %r10, %r8 +; SSE2-NEXT: shrq $56, %r8 +; SSE2-NEXT: andl $15, %r8d +; SSE2-NEXT: movq %r10, %r9 +; SSE2-NEXT: shrq $48, %r9 +; SSE2-NEXT: andl $15, %r9d +; SSE2-NEXT: movq %r10, %rsi +; SSE2-NEXT: shrq $40, %rsi +; SSE2-NEXT: andl $15, %esi +; SSE2-NEXT: movq %r10, %r11 +; SSE2-NEXT: shrq $32, %r11 +; SSE2-NEXT: andl $15, %r11d +; SSE2-NEXT: movq %xmm0, %rax +; SSE2-NEXT: movq %rax, %rdx +; SSE2-NEXT: shrq $56, %rdx +; SSE2-NEXT: andl $15, %edx +; SSE2-NEXT: movq %rax, %rcx +; SSE2-NEXT: shrq $48, %rcx +; SSE2-NEXT: andl $15, %ecx +; SSE2-NEXT: movq %rax, %rdi ; SSE2-NEXT: shrq $40, %rdi -; SSE2-NEXT: andb $15, %dil -; SSE2-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $32, %rax -; SSE2-NEXT: andb $15, %al -; SSE2-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $24, %rdx -; SSE2-NEXT: andb $15, %dl -; SSE2-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $16, %r14 -; SSE2-NEXT: andb $15, %r14b -; SSE2-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $8, %r11 -; SSE2-NEXT: andb $15, %r11b -; SSE2-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb $0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero -; SSE2-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero -; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] +; SSE2-NEXT: andl $15, %edi +; SSE2-NEXT: movq %rax, %rbx +; SSE2-NEXT: shrq $32, %rbx +; SSE2-NEXT: andl $15, %ebx +; SSE2-NEXT: shlq $32, %rbx +; SSE2-NEXT: andl $252645135, %eax # imm = 0xF0F0F0F +; SSE2-NEXT: orq %rbx, %rax +; SSE2-NEXT: shlq $40, %rdi +; SSE2-NEXT: orq %rax, %rdi +; SSE2-NEXT: shlq $48, %rcx +; SSE2-NEXT: orq %rdi, %rcx +; SSE2-NEXT: shlq $56, %rdx +; SSE2-NEXT: orq %rcx, %rdx +; SSE2-NEXT: shlq $32, %r11 +; SSE2-NEXT: andl $252645135, %r10d # imm = 0xF0F0F0F +; SSE2-NEXT: orq %r11, %r10 +; SSE2-NEXT: shlq $40, %rsi +; SSE2-NEXT: orq %r10, %rsi +; SSE2-NEXT: shlq $48, %r9 +; SSE2-NEXT: orq %rsi, %r9 +; SSE2-NEXT: shlq $56, %r8 +; SSE2-NEXT: orq %r9, %r8 +; SSE2-NEXT: movq %rdx, %xmm0 +; SSE2-NEXT: movq %r8, %xmm1 +; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; SSE2-NEXT: popq %rbx -; SSE2-NEXT: popq %r14 ; SSE2-NEXT: retq ; ; SSE42-LABEL: _clearupper16xi8b: ; SSE42: # %bb.0: -; SSE42-NEXT: pushq %r14 ; SSE42-NEXT: pushq %rbx -; SSE42-NEXT: movq %xmm0, %rcx -; SSE42-NEXT: movq %rcx, %r8 -; SSE42-NEXT: movq %rcx, %r9 -; SSE42-NEXT: movq %rcx, %r10 -; SSE42-NEXT: movq %rcx, %rax -; SSE42-NEXT: movq %rcx, %rdx -; SSE42-NEXT: movq %rcx, %rsi -; SSE42-NEXT: movq %rcx, %rdi -; SSE42-NEXT: andb $15, %cl -; SSE42-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: pextrq $1, %xmm0, %rcx -; SSE42-NEXT: shrq $56, %rdi -; SSE42-NEXT: andb $15, %dil -; SSE42-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %r11 -; SSE42-NEXT: shrq $48, %rsi -; SSE42-NEXT: andb $15, %sil -; SSE42-NEXT: movb %sil, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %r14 -; SSE42-NEXT: shrq $40, %rdx -; SSE42-NEXT: andb $15, %dl -; SSE42-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rdx -; SSE42-NEXT: shrq $32, %rax -; SSE42-NEXT: andb $15, %al -; SSE42-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rax -; SSE42-NEXT: shrq $24, %r10 -; SSE42-NEXT: andb $15, %r10b -; SSE42-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rdi -; SSE42-NEXT: shrq $16, %r9 -; SSE42-NEXT: andb $15, %r9b -; SSE42-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rsi -; SSE42-NEXT: shrq $8, %r8 -; SSE42-NEXT: andb $15, %r8b -; SSE42-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rbx -; SSE42-NEXT: movb $0, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: andb $15, %cl -; SSE42-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $56, %rbx -; SSE42-NEXT: andb $15, %bl -; SSE42-NEXT: movb %bl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $48, %rsi -; SSE42-NEXT: andb $15, %sil -; SSE42-NEXT: movb %sil, -{{[0-9]+}}(%rsp) +; SSE42-NEXT: pextrq $1, %xmm0, %r10 +; SSE42-NEXT: movq %r10, %r8 +; SSE42-NEXT: shrq $56, %r8 +; SSE42-NEXT: andl $15, %r8d +; SSE42-NEXT: movq %r10, %r9 +; SSE42-NEXT: shrq $48, %r9 +; SSE42-NEXT: andl $15, %r9d +; SSE42-NEXT: movq %r10, %rsi +; SSE42-NEXT: shrq $40, %rsi +; SSE42-NEXT: andl $15, %esi +; SSE42-NEXT: movq %r10, %r11 +; SSE42-NEXT: shrq $32, %r11 +; SSE42-NEXT: andl $15, %r11d +; SSE42-NEXT: movq %xmm0, %rax +; SSE42-NEXT: movq %rax, %rdx +; SSE42-NEXT: shrq $56, %rdx +; SSE42-NEXT: andl $15, %edx +; SSE42-NEXT: movq %rax, %rcx +; SSE42-NEXT: shrq $48, %rcx +; SSE42-NEXT: andl $15, %ecx +; SSE42-NEXT: movq %rax, %rdi ; SSE42-NEXT: shrq $40, %rdi -; SSE42-NEXT: andb $15, %dil -; SSE42-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $32, %rax -; SSE42-NEXT: andb $15, %al -; SSE42-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $24, %rdx -; SSE42-NEXT: andb $15, %dl -; SSE42-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $16, %r14 -; SSE42-NEXT: andb $15, %r14b -; SSE42-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $8, %r11 -; SSE42-NEXT: andb $15, %r11b -; SSE42-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movb $0, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero -; SSE42-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero -; SSE42-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] +; SSE42-NEXT: andl $15, %edi +; SSE42-NEXT: movq %rax, %rbx +; SSE42-NEXT: shrq $32, %rbx +; SSE42-NEXT: andl $15, %ebx +; SSE42-NEXT: shlq $32, %rbx +; SSE42-NEXT: andl $252645135, %eax # imm = 0xF0F0F0F +; SSE42-NEXT: orq %rbx, %rax +; SSE42-NEXT: shlq $40, %rdi +; SSE42-NEXT: orq %rax, %rdi +; SSE42-NEXT: shlq $48, %rcx +; SSE42-NEXT: orq %rdi, %rcx +; SSE42-NEXT: shlq $56, %rdx +; SSE42-NEXT: orq %rcx, %rdx +; SSE42-NEXT: shlq $32, %r11 +; SSE42-NEXT: andl $252645135, %r10d # imm = 0xF0F0F0F +; SSE42-NEXT: orq %r11, %r10 +; SSE42-NEXT: shlq $40, %rsi +; SSE42-NEXT: orq %r10, %rsi +; SSE42-NEXT: shlq $48, %r9 +; SSE42-NEXT: orq %rsi, %r9 +; SSE42-NEXT: shlq $56, %r8 +; SSE42-NEXT: orq %r9, %r8 +; SSE42-NEXT: movq %r8, %xmm1 +; SSE42-NEXT: movq %rdx, %xmm0 +; SSE42-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; SSE42-NEXT: popq %rbx -; SSE42-NEXT: popq %r14 ; SSE42-NEXT: retq ; ; AVX-LABEL: _clearupper16xi8b: ; AVX: # %bb.0: -; AVX-NEXT: pushq %rbp -; AVX-NEXT: pushq %r15 -; AVX-NEXT: pushq %r14 -; AVX-NEXT: pushq %r13 -; AVX-NEXT: pushq %r12 ; AVX-NEXT: pushq %rbx ; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) -; AVX-NEXT: movq -{{[0-9]+}}(%rsp), %rcx +; AVX-NEXT: movq -{{[0-9]+}}(%rsp), %r9 ; AVX-NEXT: movq -{{[0-9]+}}(%rsp), %rdx -; AVX-NEXT: movq %rcx, %r8 -; AVX-NEXT: movq %rcx, %r9 -; AVX-NEXT: movq %rcx, %r10 -; AVX-NEXT: movq %rcx, %r11 -; AVX-NEXT: movq %rcx, %r14 -; AVX-NEXT: movq %rcx, %r15 -; AVX-NEXT: movq %rdx, %r12 -; AVX-NEXT: movq %rdx, %r13 +; AVX-NEXT: movq %r9, %r8 +; AVX-NEXT: shrq $56, %r8 +; AVX-NEXT: andl $15, %r8d +; AVX-NEXT: movq %r9, %r10 +; AVX-NEXT: shrq $48, %r10 +; AVX-NEXT: andl $15, %r10d +; AVX-NEXT: movq %r9, %rsi +; AVX-NEXT: shrq $40, %rsi +; AVX-NEXT: andl $15, %esi +; AVX-NEXT: movq %r9, %r11 +; AVX-NEXT: shrq $32, %r11 +; AVX-NEXT: andl $15, %r11d ; AVX-NEXT: movq %rdx, %rdi +; AVX-NEXT: shrq $56, %rdi +; AVX-NEXT: andl $15, %edi ; AVX-NEXT: movq %rdx, %rax -; AVX-NEXT: movq %rdx, %rsi +; AVX-NEXT: shrq $48, %rax +; AVX-NEXT: andl $15, %eax +; AVX-NEXT: movq %rdx, %rcx +; AVX-NEXT: shrq $40, %rcx +; AVX-NEXT: andl $15, %ecx ; AVX-NEXT: movq %rdx, %rbx -; AVX-NEXT: movq %rdx, %rbp -; AVX-NEXT: andb $15, %dl -; AVX-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; AVX-NEXT: movq %rcx, %rdx -; AVX-NEXT: andb $15, %cl -; AVX-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $56, %rbp -; AVX-NEXT: andb $15, %bpl -; AVX-NEXT: movb %bpl, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $48, %rbx -; AVX-NEXT: andb $15, %bl -; AVX-NEXT: movb %bl, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $40, %rsi -; AVX-NEXT: andb $15, %sil -; AVX-NEXT: movb %sil, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $32, %rax -; AVX-NEXT: andb $15, %al -; AVX-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $24, %rdi -; AVX-NEXT: andb $15, %dil -; AVX-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $16, %r13 -; AVX-NEXT: andb $15, %r13b -; AVX-NEXT: movb %r13b, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $8, %r12 -; AVX-NEXT: andb $15, %r12b -; AVX-NEXT: movb %r12b, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $56, %rdx -; AVX-NEXT: andb $15, %dl -; AVX-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $48, %r15 -; AVX-NEXT: andb $15, %r15b -; AVX-NEXT: movb %r15b, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $40, %r14 -; AVX-NEXT: andb $15, %r14b -; AVX-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $32, %r11 -; AVX-NEXT: andb $15, %r11b -; AVX-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $24, %r10 -; AVX-NEXT: andb $15, %r10b -; AVX-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $16, %r9 -; AVX-NEXT: andb $15, %r9b -; AVX-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) -; AVX-NEXT: shrq $8, %r8 -; AVX-NEXT: andb $15, %r8b -; AVX-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) -; AVX-NEXT: movb $0, -{{[0-9]+}}(%rsp) +; AVX-NEXT: shrq $32, %rbx +; AVX-NEXT: andl $15, %ebx +; AVX-NEXT: shlq $32, %rbx +; AVX-NEXT: andl $252645135, %edx # imm = 0xF0F0F0F +; AVX-NEXT: orq %rbx, %rdx +; AVX-NEXT: shlq $40, %rcx +; AVX-NEXT: orq %rdx, %rcx +; AVX-NEXT: shlq $48, %rax +; AVX-NEXT: orq %rcx, %rax +; AVX-NEXT: shlq $56, %rdi +; AVX-NEXT: orq %rax, %rdi +; AVX-NEXT: movq %rdi, -{{[0-9]+}}(%rsp) +; AVX-NEXT: shlq $32, %r11 +; AVX-NEXT: andl $252645135, %r9d # imm = 0xF0F0F0F +; AVX-NEXT: orq %r11, %r9 +; AVX-NEXT: shlq $40, %rsi +; AVX-NEXT: orq %r9, %rsi +; AVX-NEXT: shlq $48, %r10 +; AVX-NEXT: orq %rsi, %r10 +; AVX-NEXT: shlq $56, %r8 +; AVX-NEXT: orq %r10, %r8 +; AVX-NEXT: movq %r8, -{{[0-9]+}}(%rsp) ; AVX-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0 ; AVX-NEXT: popq %rbx -; AVX-NEXT: popq %r12 -; AVX-NEXT: popq %r13 -; AVX-NEXT: popq %r14 -; AVX-NEXT: popq %r15 -; AVX-NEXT: popq %rbp ; AVX-NEXT: retq %x4 = bitcast <16 x i8> %0 to <32 x i4> %r0 = insertelement <32 x i4> %x4, i4 zeroinitializer, i32 1 @@ -1092,252 +1021,185 @@ define <32 x i8> @_clearupper32xi8b(<32 x i8>) nounwind { ; SSE2-LABEL: _clearupper32xi8b: ; SSE2: # %bb.0: -; SSE2-NEXT: pushq %r14 ; SSE2-NEXT: pushq %rbx ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1] -; SSE2-NEXT: movq %xmm0, %rcx -; SSE2-NEXT: movq %rcx, %r8 -; SSE2-NEXT: movq %rcx, %r9 -; SSE2-NEXT: movq %rcx, %r10 -; SSE2-NEXT: movq %rcx, %rax -; SSE2-NEXT: movq %rcx, %rdx -; SSE2-NEXT: movq %rcx, %rsi -; SSE2-NEXT: movq %rcx, %rdi -; SSE2-NEXT: andb $15, %cl -; SSE2-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %xmm2, %rcx -; SSE2-NEXT: shrq $56, %rdi -; SSE2-NEXT: andb $15, %dil -; SSE2-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %r11 -; SSE2-NEXT: shrq $48, %rsi -; SSE2-NEXT: andb $15, %sil -; SSE2-NEXT: movb %sil, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %r14 -; SSE2-NEXT: shrq $40, %rdx -; SSE2-NEXT: andb $15, %dl -; SSE2-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rdx -; SSE2-NEXT: shrq $32, %rax -; SSE2-NEXT: andb $15, %al -; SSE2-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rax -; SSE2-NEXT: shrq $24, %r10 -; SSE2-NEXT: andb $15, %r10b -; SSE2-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rdi -; SSE2-NEXT: shrq $16, %r9 -; SSE2-NEXT: andb $15, %r9b -; SSE2-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rsi -; SSE2-NEXT: shrq $8, %r8 -; SSE2-NEXT: andb $15, %r8b -; SSE2-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movq %rcx, %rbx -; SSE2-NEXT: movb $0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: andb $15, %cl -; SSE2-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $56, %rbx -; SSE2-NEXT: andb $15, %bl -; SSE2-NEXT: movb %bl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $48, %rsi -; SSE2-NEXT: andb $15, %sil -; SSE2-NEXT: movb %sil, -{{[0-9]+}}(%rsp) +; SSE2-NEXT: movq %xmm2, %r10 +; SSE2-NEXT: movq %r10, %r8 +; SSE2-NEXT: shrq $56, %r8 +; SSE2-NEXT: andl $15, %r8d +; SSE2-NEXT: movq %r10, %r9 +; SSE2-NEXT: shrq $48, %r9 +; SSE2-NEXT: andl $15, %r9d +; SSE2-NEXT: movq %r10, %rsi +; SSE2-NEXT: shrq $40, %rsi +; SSE2-NEXT: andl $15, %esi +; SSE2-NEXT: movq %r10, %r11 +; SSE2-NEXT: shrq $32, %r11 +; SSE2-NEXT: andl $15, %r11d +; SSE2-NEXT: movq %xmm0, %rax +; SSE2-NEXT: movq %rax, %rdx +; SSE2-NEXT: shrq $56, %rdx +; SSE2-NEXT: andl $15, %edx +; SSE2-NEXT: movq %rax, %rcx +; SSE2-NEXT: shrq $48, %rcx +; SSE2-NEXT: andl $15, %ecx +; SSE2-NEXT: movq %rax, %rdi ; SSE2-NEXT: shrq $40, %rdi -; SSE2-NEXT: andb $15, %dil -; SSE2-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $32, %rax -; SSE2-NEXT: andb $15, %al -; SSE2-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $24, %rdx -; SSE2-NEXT: andb $15, %dl -; SSE2-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $16, %r14 -; SSE2-NEXT: andb $15, %r14b -; SSE2-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: shrq $8, %r11 -; SSE2-NEXT: andb $15, %r11b -; SSE2-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb $0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero -; SSE2-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero -; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm2[0] +; SSE2-NEXT: andl $15, %edi +; SSE2-NEXT: movq %rax, %rbx +; SSE2-NEXT: shrq $32, %rbx +; SSE2-NEXT: andl $15, %ebx +; SSE2-NEXT: shlq $32, %rbx +; SSE2-NEXT: andl $252645135, %eax # imm = 0xF0F0F0F +; SSE2-NEXT: orq %rbx, %rax +; SSE2-NEXT: shlq $40, %rdi +; SSE2-NEXT: orq %rax, %rdi +; SSE2-NEXT: shlq $48, %rcx +; SSE2-NEXT: orq %rdi, %rcx +; SSE2-NEXT: shlq $56, %rdx +; SSE2-NEXT: orq %rcx, %rdx +; SSE2-NEXT: shlq $32, %r11 +; SSE2-NEXT: andl $252645135, %r10d # imm = 0xF0F0F0F +; SSE2-NEXT: orq %r11, %r10 +; SSE2-NEXT: shlq $40, %rsi +; SSE2-NEXT: orq %r10, %rsi +; SSE2-NEXT: shlq $48, %r9 +; SSE2-NEXT: orq %rsi, %r9 +; SSE2-NEXT: shlq $56, %r8 +; SSE2-NEXT: orq %r9, %r8 +; SSE2-NEXT: movq %rdx, %xmm0 +; SSE2-NEXT: movq %r8, %xmm2 +; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] ; SSE2-NEXT: popq %rbx -; SSE2-NEXT: popq %r14 ; SSE2-NEXT: retq ; ; SSE42-LABEL: _clearupper32xi8b: ; SSE42: # %bb.0: -; SSE42-NEXT: pushq %r14 ; SSE42-NEXT: pushq %rbx -; SSE42-NEXT: movq %xmm0, %rcx -; SSE42-NEXT: movq %rcx, %r8 -; SSE42-NEXT: movq %rcx, %r9 -; SSE42-NEXT: movq %rcx, %r10 -; SSE42-NEXT: movq %rcx, %rax -; SSE42-NEXT: movq %rcx, %rdx -; SSE42-NEXT: movq %rcx, %rsi -; SSE42-NEXT: movq %rcx, %rdi -; SSE42-NEXT: andb $15, %cl -; SSE42-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: pextrq $1, %xmm0, %rcx -; SSE42-NEXT: shrq $56, %rdi -; SSE42-NEXT: andb $15, %dil -; SSE42-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %r11 -; SSE42-NEXT: shrq $48, %rsi -; SSE42-NEXT: andb $15, %sil -; SSE42-NEXT: movb %sil, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %r14 -; SSE42-NEXT: shrq $40, %rdx -; SSE42-NEXT: andb $15, %dl -; SSE42-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rdx -; SSE42-NEXT: shrq $32, %rax -; SSE42-NEXT: andb $15, %al -; SSE42-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rax -; SSE42-NEXT: shrq $24, %r10 -; SSE42-NEXT: andb $15, %r10b -; SSE42-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rdi -; SSE42-NEXT: shrq $16, %r9 -; SSE42-NEXT: andb $15, %r9b -; SSE42-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rsi -; SSE42-NEXT: shrq $8, %r8 -; SSE42-NEXT: andb $15, %r8b -; SSE42-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movq %rcx, %rbx -; SSE42-NEXT: movb $0, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: andb $15, %cl -; SSE42-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $56, %rbx -; SSE42-NEXT: andb $15, %bl -; SSE42-NEXT: movb %bl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $48, %rsi -; SSE42-NEXT: andb $15, %sil -; SSE42-NEXT: movb %sil, -{{[0-9]+}}(%rsp) +; SSE42-NEXT: pextrq $1, %xmm0, %r10 +; SSE42-NEXT: movq %r10, %r8 +; SSE42-NEXT: shrq $56, %r8 +; SSE42-NEXT: andl $15, %r8d +; SSE42-NEXT: movq %r10, %r9 +; SSE42-NEXT: shrq $48, %r9 +; SSE42-NEXT: andl $15, %r9d +; SSE42-NEXT: movq %r10, %rsi +; SSE42-NEXT: shrq $40, %rsi +; SSE42-NEXT: andl $15, %esi +; SSE42-NEXT: movq %r10, %r11 +; SSE42-NEXT: shrq $32, %r11 +; SSE42-NEXT: andl $15, %r11d +; SSE42-NEXT: movq %xmm0, %rax +; SSE42-NEXT: movq %rax, %rdx +; SSE42-NEXT: shrq $56, %rdx +; SSE42-NEXT: andl $15, %edx +; SSE42-NEXT: movq %rax, %rcx +; SSE42-NEXT: shrq $48, %rcx +; SSE42-NEXT: andl $15, %ecx +; SSE42-NEXT: movq %rax, %rdi ; SSE42-NEXT: shrq $40, %rdi -; SSE42-NEXT: andb $15, %dil -; SSE42-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $32, %rax -; SSE42-NEXT: andb $15, %al -; SSE42-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $24, %rdx -; SSE42-NEXT: andb $15, %dl -; SSE42-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $16, %r14 -; SSE42-NEXT: andb $15, %r14b -; SSE42-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: shrq $8, %r11 -; SSE42-NEXT: andb $15, %r11b -; SSE42-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movb $0, -{{[0-9]+}}(%rsp) -; SSE42-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero -; SSE42-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero -; SSE42-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm2[0] +; SSE42-NEXT: andl $15, %edi +; SSE42-NEXT: movq %rax, %rbx +; SSE42-NEXT: shrq $32, %rbx +; SSE42-NEXT: andl $15, %ebx +; SSE42-NEXT: shlq $32, %rbx +; SSE42-NEXT: andl $252645135, %eax # imm = 0xF0F0F0F +; SSE42-NEXT: orq %rbx, %rax +; SSE42-NEXT: shlq $40, %rdi +; SSE42-NEXT: orq %rax, %rdi +; SSE42-NEXT: shlq $48, %rcx +; SSE42-NEXT: orq %rdi, %rcx +; SSE42-NEXT: shlq $56, %rdx +; SSE42-NEXT: orq %rcx, %rdx +; SSE42-NEXT: shlq $32, %r11 +; SSE42-NEXT: andl $252645135, %r10d # imm = 0xF0F0F0F +; SSE42-NEXT: orq %r11, %r10 +; SSE42-NEXT: shlq $40, %rsi +; SSE42-NEXT: orq %r10, %rsi +; SSE42-NEXT: shlq $48, %r9 +; SSE42-NEXT: orq %rsi, %r9 +; SSE42-NEXT: shlq $56, %r8 +; SSE42-NEXT: orq %r9, %r8 +; SSE42-NEXT: movq %r8, %xmm2 +; SSE42-NEXT: movq %rdx, %xmm0 +; SSE42-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] ; SSE42-NEXT: popq %rbx -; SSE42-NEXT: popq %r14 ; SSE42-NEXT: retq ; ; AVX1-LABEL: _clearupper32xi8b: ; AVX1: # %bb.0: -; AVX1-NEXT: pushq %rbp -; AVX1-NEXT: pushq %r15 -; AVX1-NEXT: pushq %r14 -; AVX1-NEXT: pushq %r13 -; AVX1-NEXT: pushq %r12 -; AVX1-NEXT: pushq %rbx ; AVX1-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) +; AVX1-NEXT: movq -{{[0-9]+}}(%rsp), %r9 ; AVX1-NEXT: movq -{{[0-9]+}}(%rsp), %rcx -; AVX1-NEXT: movq -{{[0-9]+}}(%rsp), %rdx -; AVX1-NEXT: movq %rcx, %r8 -; AVX1-NEXT: movq %rcx, %r9 -; AVX1-NEXT: movq %rcx, %r10 -; AVX1-NEXT: movq %rcx, %r11 -; AVX1-NEXT: movq %rcx, %r14 -; AVX1-NEXT: movq %rcx, %r15 -; AVX1-NEXT: movq %rdx, %r12 -; AVX1-NEXT: movq %rdx, %r13 -; AVX1-NEXT: movq %rdx, %rdi -; AVX1-NEXT: movq %rdx, %rax -; AVX1-NEXT: movq %rdx, %rsi -; AVX1-NEXT: movq %rdx, %rbx -; AVX1-NEXT: movq %rdx, %rbp -; AVX1-NEXT: andb $15, %dl -; AVX1-NEXT: movb %dl, -{{[0-9]+}}(%rsp) +; AVX1-NEXT: movq %r9, %r8 +; AVX1-NEXT: shrq $56, %r8 +; AVX1-NEXT: andl $15, %r8d +; AVX1-NEXT: movq %rcx, %rsi +; AVX1-NEXT: movq %rcx, %rdi ; AVX1-NEXT: movq %rcx, %rdx -; AVX1-NEXT: andb $15, %cl -; AVX1-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: shrq $56, %rbp -; AVX1-NEXT: andb $15, %bpl -; AVX1-NEXT: movb %bpl, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: shrq $48, %rbx -; AVX1-NEXT: andb $15, %bl -; AVX1-NEXT: movb %bl, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: shrq $40, %rsi -; AVX1-NEXT: andb $15, %sil -; AVX1-NEXT: movb %sil, -{{[0-9]+}}(%rsp) +; AVX1-NEXT: movq %rcx, %rax ; AVX1-NEXT: shrq $32, %rax -; AVX1-NEXT: andb $15, %al -; AVX1-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: shrq $24, %rdi -; AVX1-NEXT: andb $15, %dil -; AVX1-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: shrq $16, %r13 -; AVX1-NEXT: andb $15, %r13b -; AVX1-NEXT: movb %r13b, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: shrq $8, %r12 -; AVX1-NEXT: andb $15, %r12b -; AVX1-NEXT: movb %r12b, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: shrq $8, %r8 -; AVX1-NEXT: shrq $16, %r9 -; AVX1-NEXT: shrq $24, %r10 -; AVX1-NEXT: shrq $32, %r11 -; AVX1-NEXT: shrq $40, %r14 -; AVX1-NEXT: shrq $48, %r15 -; AVX1-NEXT: shrq $56, %rdx -; AVX1-NEXT: andb $15, %dl -; AVX1-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: andb $15, %r15b -; AVX1-NEXT: movb %r15b, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: andb $15, %r14b -; AVX1-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: andb $15, %r11b -; AVX1-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: andb $15, %r10b -; AVX1-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: andb $15, %r9b -; AVX1-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) -; AVX1-NEXT: andb $15, %r8b -; AVX1-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) +; AVX1-NEXT: andl $15, %eax +; AVX1-NEXT: shlq $32, %rax +; AVX1-NEXT: andl $252645135, %ecx # imm = 0xF0F0F0F +; AVX1-NEXT: orq %rax, %rcx +; AVX1-NEXT: movq %r9, %rax +; AVX1-NEXT: shrq $48, %rax +; AVX1-NEXT: andl $15, %eax +; AVX1-NEXT: shrq $40, %rdx +; AVX1-NEXT: andl $15, %edx +; AVX1-NEXT: shlq $40, %rdx +; AVX1-NEXT: orq %rcx, %rdx +; AVX1-NEXT: movq %r9, %rcx +; AVX1-NEXT: shrq $40, %rcx +; AVX1-NEXT: andl $15, %ecx +; AVX1-NEXT: shrq $48, %rdi +; AVX1-NEXT: andl $15, %edi +; AVX1-NEXT: shlq $48, %rdi +; AVX1-NEXT: orq %rdx, %rdi +; AVX1-NEXT: movq %r9, %rdx +; AVX1-NEXT: shrq $32, %rdx +; AVX1-NEXT: andl $15, %edx +; AVX1-NEXT: shrq $56, %rsi +; AVX1-NEXT: andl $15, %esi +; AVX1-NEXT: shlq $56, %rsi +; AVX1-NEXT: orq %rdi, %rsi +; AVX1-NEXT: movq %rsi, -{{[0-9]+}}(%rsp) +; AVX1-NEXT: shlq $32, %rdx +; AVX1-NEXT: andl $252645135, %r9d # imm = 0xF0F0F0F +; AVX1-NEXT: orq %rdx, %r9 +; AVX1-NEXT: shlq $40, %rcx +; AVX1-NEXT: orq %r9, %rcx +; AVX1-NEXT: shlq $48, %rax +; AVX1-NEXT: orq %rcx, %rax +; AVX1-NEXT: shlq $56, %r8 +; AVX1-NEXT: orq %rax, %r8 +; AVX1-NEXT: movq %r8, -{{[0-9]+}}(%rsp) ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 ; AVX1-NEXT: vmovq %xmm0, %rax -; AVX1-NEXT: movq %rax, %rcx -; AVX1-NEXT: movq %rax, %rdx +; AVX1-NEXT: movq %rax, %r8 +; AVX1-NEXT: movq %rax, %r9 ; AVX1-NEXT: movq %rax, %rsi ; AVX1-NEXT: movq %rax, %rdi -; AVX1-NEXT: movl %eax, %ebp -; AVX1-NEXT: movl %eax, %ebx +; AVX1-NEXT: movl %eax, %ecx +; AVX1-NEXT: movl %eax, %edx ; AVX1-NEXT: vmovd %eax, %xmm1 ; AVX1-NEXT: shrl $8, %eax ; AVX1-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 -; AVX1-NEXT: shrl $16, %ebx -; AVX1-NEXT: vpinsrb $2, %ebx, %xmm1, %xmm1 -; AVX1-NEXT: shrl $24, %ebp -; AVX1-NEXT: vpinsrb $3, %ebp, %xmm1, %xmm1 +; AVX1-NEXT: shrl $16, %edx +; AVX1-NEXT: vpinsrb $2, %edx, %xmm1, %xmm1 +; AVX1-NEXT: shrl $24, %ecx +; AVX1-NEXT: vpinsrb $3, %ecx, %xmm1, %xmm1 ; AVX1-NEXT: shrq $32, %rdi ; AVX1-NEXT: vpinsrb $4, %edi, %xmm1, %xmm1 ; AVX1-NEXT: shrq $40, %rsi ; AVX1-NEXT: vpinsrb $5, %esi, %xmm1, %xmm1 -; AVX1-NEXT: movb $0, -{{[0-9]+}}(%rsp) ; AVX1-NEXT: vmovdqa -{{[0-9]+}}(%rsp), %xmm2 -; AVX1-NEXT: shrq $48, %rdx -; AVX1-NEXT: vpinsrb $6, %edx, %xmm1, %xmm1 +; AVX1-NEXT: shrq $48, %r9 +; AVX1-NEXT: vpinsrb $6, %r9d, %xmm1, %xmm1 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax -; AVX1-NEXT: shrq $56, %rcx -; AVX1-NEXT: vpinsrb $7, %ecx, %xmm1, %xmm0 +; AVX1-NEXT: shrq $56, %r8 +; AVX1-NEXT: vpinsrb $7, %r8d, %xmm1, %xmm0 ; AVX1-NEXT: movl %eax, %ecx ; AVX1-NEXT: shrl $8, %ecx ; AVX1-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 @@ -1404,111 +1266,82 @@ ; AVX1-NEXT: shrq $56, %rax ; AVX1-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 -; AVX1-NEXT: popq %rbx -; AVX1-NEXT: popq %r12 -; AVX1-NEXT: popq %r13 -; AVX1-NEXT: popq %r14 -; AVX1-NEXT: popq %r15 -; AVX1-NEXT: popq %rbp ; AVX1-NEXT: retq ; ; AVX2-LABEL: _clearupper32xi8b: ; AVX2: # %bb.0: -; AVX2-NEXT: pushq %rbp -; AVX2-NEXT: pushq %r15 -; AVX2-NEXT: pushq %r14 -; AVX2-NEXT: pushq %r13 -; AVX2-NEXT: pushq %r12 -; AVX2-NEXT: pushq %rbx ; AVX2-NEXT: vmovdqa %xmm0, -{{[0-9]+}}(%rsp) +; AVX2-NEXT: movq -{{[0-9]+}}(%rsp), %r9 ; AVX2-NEXT: movq -{{[0-9]+}}(%rsp), %rcx -; AVX2-NEXT: movq -{{[0-9]+}}(%rsp), %rdx -; AVX2-NEXT: movq %rcx, %r8 -; AVX2-NEXT: movq %rcx, %r9 -; AVX2-NEXT: movq %rcx, %r10 -; AVX2-NEXT: movq %rcx, %r11 -; AVX2-NEXT: movq %rcx, %r14 -; AVX2-NEXT: movq %rcx, %r15 -; AVX2-NEXT: movq %rdx, %r12 -; AVX2-NEXT: movq %rdx, %r13 -; AVX2-NEXT: movq %rdx, %rdi -; AVX2-NEXT: movq %rdx, %rax -; AVX2-NEXT: movq %rdx, %rsi -; AVX2-NEXT: movq %rdx, %rbx -; AVX2-NEXT: movq %rdx, %rbp -; AVX2-NEXT: andb $15, %dl -; AVX2-NEXT: movb %dl, -{{[0-9]+}}(%rsp) +; AVX2-NEXT: movq %r9, %r8 +; AVX2-NEXT: shrq $56, %r8 +; AVX2-NEXT: andl $15, %r8d +; AVX2-NEXT: movq %rcx, %rsi +; AVX2-NEXT: movq %rcx, %rdi ; AVX2-NEXT: movq %rcx, %rdx -; AVX2-NEXT: andb $15, %cl -; AVX2-NEXT: movb %cl, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: shrq $56, %rbp -; AVX2-NEXT: andb $15, %bpl -; AVX2-NEXT: movb %bpl, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: shrq $48, %rbx -; AVX2-NEXT: andb $15, %bl -; AVX2-NEXT: movb %bl, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: shrq $40, %rsi -; AVX2-NEXT: andb $15, %sil -; AVX2-NEXT: movb %sil, -{{[0-9]+}}(%rsp) +; AVX2-NEXT: movq %rcx, %rax ; AVX2-NEXT: shrq $32, %rax -; AVX2-NEXT: andb $15, %al -; AVX2-NEXT: movb %al, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: shrq $24, %rdi -; AVX2-NEXT: andb $15, %dil -; AVX2-NEXT: movb %dil, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: shrq $16, %r13 -; AVX2-NEXT: andb $15, %r13b -; AVX2-NEXT: movb %r13b, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: shrq $8, %r12 -; AVX2-NEXT: andb $15, %r12b -; AVX2-NEXT: movb %r12b, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: shrq $8, %r8 -; AVX2-NEXT: shrq $16, %r9 -; AVX2-NEXT: shrq $24, %r10 -; AVX2-NEXT: shrq $32, %r11 -; AVX2-NEXT: shrq $40, %r14 -; AVX2-NEXT: shrq $48, %r15 -; AVX2-NEXT: shrq $56, %rdx -; AVX2-NEXT: andb $15, %dl -; AVX2-NEXT: movb %dl, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: andb $15, %r15b -; AVX2-NEXT: movb %r15b, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: andb $15, %r14b -; AVX2-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: andb $15, %r11b -; AVX2-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: andb $15, %r10b -; AVX2-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: andb $15, %r9b -; AVX2-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) -; AVX2-NEXT: andb $15, %r8b -; AVX2-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) +; AVX2-NEXT: andl $15, %eax +; AVX2-NEXT: shlq $32, %rax +; AVX2-NEXT: andl $252645135, %ecx # imm = 0xF0F0F0F +; AVX2-NEXT: orq %rax, %rcx +; AVX2-NEXT: movq %r9, %rax +; AVX2-NEXT: shrq $48, %rax +; AVX2-NEXT: andl $15, %eax +; AVX2-NEXT: shrq $40, %rdx +; AVX2-NEXT: andl $15, %edx +; AVX2-NEXT: shlq $40, %rdx +; AVX2-NEXT: orq %rcx, %rdx +; AVX2-NEXT: movq %r9, %rcx +; AVX2-NEXT: shrq $40, %rcx +; AVX2-NEXT: andl $15, %ecx +; AVX2-NEXT: shrq $48, %rdi +; AVX2-NEXT: andl $15, %edi +; AVX2-NEXT: shlq $48, %rdi +; AVX2-NEXT: orq %rdx, %rdi +; AVX2-NEXT: movq %r9, %rdx +; AVX2-NEXT: shrq $32, %rdx +; AVX2-NEXT: andl $15, %edx +; AVX2-NEXT: shrq $56, %rsi +; AVX2-NEXT: andl $15, %esi +; AVX2-NEXT: shlq $56, %rsi +; AVX2-NEXT: orq %rdi, %rsi +; AVX2-NEXT: movq %rsi, -{{[0-9]+}}(%rsp) +; AVX2-NEXT: shlq $32, %rdx +; AVX2-NEXT: andl $252645135, %r9d # imm = 0xF0F0F0F +; AVX2-NEXT: orq %rdx, %r9 +; AVX2-NEXT: shlq $40, %rcx +; AVX2-NEXT: orq %r9, %rcx +; AVX2-NEXT: shlq $48, %rax +; AVX2-NEXT: orq %rcx, %rax +; AVX2-NEXT: shlq $56, %r8 +; AVX2-NEXT: orq %rax, %r8 +; AVX2-NEXT: movq %r8, -{{[0-9]+}}(%rsp) ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 ; AVX2-NEXT: vmovq %xmm0, %rax -; AVX2-NEXT: movq %rax, %rcx -; AVX2-NEXT: movq %rax, %rdx +; AVX2-NEXT: movq %rax, %r8 +; AVX2-NEXT: movq %rax, %r9 ; AVX2-NEXT: movq %rax, %rsi ; AVX2-NEXT: movq %rax, %rdi -; AVX2-NEXT: movl %eax, %ebp -; AVX2-NEXT: movl %eax, %ebx +; AVX2-NEXT: movl %eax, %ecx +; AVX2-NEXT: movl %eax, %edx ; AVX2-NEXT: vmovd %eax, %xmm1 ; AVX2-NEXT: shrl $8, %eax ; AVX2-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 -; AVX2-NEXT: shrl $16, %ebx -; AVX2-NEXT: vpinsrb $2, %ebx, %xmm1, %xmm1 -; AVX2-NEXT: shrl $24, %ebp -; AVX2-NEXT: vpinsrb $3, %ebp, %xmm1, %xmm1 +; AVX2-NEXT: shrl $16, %edx +; AVX2-NEXT: vpinsrb $2, %edx, %xmm1, %xmm1 +; AVX2-NEXT: shrl $24, %ecx +; AVX2-NEXT: vpinsrb $3, %ecx, %xmm1, %xmm1 ; AVX2-NEXT: shrq $32, %rdi ; AVX2-NEXT: vpinsrb $4, %edi, %xmm1, %xmm1 ; AVX2-NEXT: shrq $40, %rsi ; AVX2-NEXT: vpinsrb $5, %esi, %xmm1, %xmm1 -; AVX2-NEXT: movb $0, -{{[0-9]+}}(%rsp) ; AVX2-NEXT: vmovdqa -{{[0-9]+}}(%rsp), %xmm2 -; AVX2-NEXT: shrq $48, %rdx -; AVX2-NEXT: vpinsrb $6, %edx, %xmm1, %xmm1 +; AVX2-NEXT: shrq $48, %r9 +; AVX2-NEXT: vpinsrb $6, %r9d, %xmm1, %xmm1 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax -; AVX2-NEXT: shrq $56, %rcx -; AVX2-NEXT: vpinsrb $7, %ecx, %xmm1, %xmm0 +; AVX2-NEXT: shrq $56, %r8 +; AVX2-NEXT: vpinsrb $7, %r8d, %xmm1, %xmm0 ; AVX2-NEXT: movl %eax, %ecx ; AVX2-NEXT: shrl $8, %ecx ; AVX2-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 @@ -1575,12 +1408,6 @@ ; AVX2-NEXT: shrq $56, %rax ; AVX2-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 -; AVX2-NEXT: popq %rbx -; AVX2-NEXT: popq %r12 -; AVX2-NEXT: popq %r13 -; AVX2-NEXT: popq %r14 -; AVX2-NEXT: popq %r15 -; AVX2-NEXT: popq %rbp ; AVX2-NEXT: retq %x4 = bitcast <32 x i8> %0 to <64 x i4> %r0 = insertelement <64 x i4> %x4, i4 zeroinitializer, i32 1 Index: test/CodeGen/X86/pr20011.ll =================================================================== --- test/CodeGen/X86/pr20011.ll +++ test/CodeGen/X86/pr20011.ll @@ -18,9 +18,10 @@ ; ; X64-LABEL: crash: ; X64: # %bb.0: -; X64-NEXT: andl $3, %esi -; X64-NEXT: movb %sil, (%rdx) -; X64-NEXT: andl $3, %edi +; X64-NEXT: shlb $2, %sil +; X64-NEXT: andb $3, %dil +; X64-NEXT: orb %sil, %dil +; X64-NEXT: andb $15, %dil ; X64-NEXT: movb %dil, (%rdx) ; X64-NEXT: retq %x1 = trunc i64 %x0 to i2 Index: test/CodeGen/X86/trunc-store.ll =================================================================== --- test/CodeGen/X86/trunc-store.ll +++ test/CodeGen/X86/trunc-store.ll @@ -32,7 +32,6 @@ ; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: .LBB0_1: # %vector.body ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 -; CHECK-NEXT: movb $0, -{{[0-9]+}}(%rsp) ; CHECK-NEXT: cmpq $8, %rax ; CHECK-NEXT: jne .LBB0_1 ; CHECK-NEXT: # %bb.2: # %middle.block Index: test/CodeGen/X86/vector-compare-results.ll =================================================================== --- test/CodeGen/X86/vector-compare-results.ll +++ test/CodeGen/X86/vector-compare-results.ll @@ -347,103 +347,125 @@ ; SSE2-NEXT: pcmpgtb %xmm2, %xmm0 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm1 ; SSE2-NEXT: movdqa %xmm1, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: retq ; @@ -451,102 +473,124 @@ ; SSE42: # %bb.0: ; SSE42-NEXT: pcmpgtb %xmm2, %xmm0 ; SSE42-NEXT: pcmpgtb %xmm3, %xmm1 -; SSE42-NEXT: pextrb $15, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $13, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $11, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $10, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $9, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $7, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $6, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $5, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $3, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $2, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) ; SSE42-NEXT: pextrb $1, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $15, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $14, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $13, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $11, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $10, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $9, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $7, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $6, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $5, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $3, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $2, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm1, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm1, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 2(%rdi) ; SSE42-NEXT: pextrb $1, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm0, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm0, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: retq ; @@ -896,208 +940,252 @@ ; SSE2-NEXT: pcmpgtw %xmm6, %xmm2 ; SSE2-NEXT: packsswb %xmm3, %xmm2 ; SSE2-NEXT: movdqa %xmm2, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: retq ; ; SSE42-LABEL: test_cmp_v32i16: ; SSE42: # %bb.0: -; SSE42-NEXT: pcmpgtw %xmm4, %xmm0 ; SSE42-NEXT: pcmpgtw %xmm5, %xmm1 -; SSE42-NEXT: pcmpgtw %xmm6, %xmm2 +; SSE42-NEXT: pcmpgtw %xmm4, %xmm0 ; SSE42-NEXT: pcmpgtw %xmm7, %xmm3 -; SSE42-NEXT: pextrb $14, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $10, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $6, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $2, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $10, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $6, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) +; SSE42-NEXT: pcmpgtw %xmm6, %xmm2 ; SSE42-NEXT: pextrb $2, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $10, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $6, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $2, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $14, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $10, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $6, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $4, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $6, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $8, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $10, %xmm2, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $12, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $14, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $2, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $4, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $6, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $10, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $14, %xmm3, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 2(%rdi) ; SSE42-NEXT: pextrb $2, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $4, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $6, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $8, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $10, %xmm0, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $12, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $14, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $2, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $4, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $6, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $10, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $14, %xmm1, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: retq ; @@ -1164,201 +1252,245 @@ ; SSE2-NEXT: pcmpgtb %xmm6, %xmm2 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm3 ; SSE2-NEXT: movdqa %xmm3, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 6(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 6(%rdi) ; SSE2-NEXT: movdqa %xmm2, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 4(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 4(%rdi) ; SSE2-NEXT: movdqa %xmm1, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: retq ; @@ -1368,403 +1500,501 @@ ; SSE42-NEXT: pcmpgtb %xmm5, %xmm1 ; SSE42-NEXT: pcmpgtb %xmm6, %xmm2 ; SSE42-NEXT: pcmpgtb %xmm7, %xmm3 -; SSE42-NEXT: pextrb $15, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $14, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $13, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $12, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $11, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $10, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $9, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $8, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $7, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $6, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $5, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $4, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $3, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $2, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) ; SSE42-NEXT: pextrb $1, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $0, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $15, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $14, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $13, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $12, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $11, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $10, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $9, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $8, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $7, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $6, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $5, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $4, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $3, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $2, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm3, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm3, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 6(%rdi) ; SSE42-NEXT: pextrb $1, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $0, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $15, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $13, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $11, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $10, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $9, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $7, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $6, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $5, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $3, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $2, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm2, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm2, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 4(%rdi) ; SSE42-NEXT: pextrb $1, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $15, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $14, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $13, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $11, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $10, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $9, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $7, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $6, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $5, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $3, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $2, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm1, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm1, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 2(%rdi) ; SSE42-NEXT: pextrb $1, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm0, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm0, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: retq ; ; AVX1-LABEL: test_cmp_v64i8: ; AVX1: # %bb.0: -; AVX1-NEXT: vpcmpgtb %xmm2, %xmm0, %xmm4 -; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 +; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 +; AVX1-NEXT: vpcmpgtb %xmm4, %xmm5, %xmm4 ; AVX1-NEXT: vpcmpgtb %xmm2, %xmm0, %xmm0 -; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm2 -; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 -; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 +; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 +; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 +; AVX1-NEXT: vpcmpgtb %xmm2, %xmm5, %xmm2 ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm1 -; AVX1-NEXT: vpextrb $15, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $13, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $11, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $9, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $7, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $5, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $3, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) ; AVX1-NEXT: vpextrb $1, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $15, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $13, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $11, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $9, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $7, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $5, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $3, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $1, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $15, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $14, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $13, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $12, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $11, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $10, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $9, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $8, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $7, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $6, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $5, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $4, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $3, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $2, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm1, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm2, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, 4(%rdi) ; AVX1-NEXT: vpextrb $1, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $0, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $15, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $14, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $13, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $12, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $11, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $10, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $9, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $8, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $7, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $6, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $5, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $4, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $3, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $2, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $1, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $0, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm0, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm4, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, (%rdi) ; AVX1-NEXT: movq %rdi, %rax ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq @@ -1773,200 +2003,254 @@ ; AVX2: # %bb.0: ; AVX2-NEXT: vpcmpgtb %ymm2, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpgtb %ymm3, %ymm1, %ymm1 -; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 -; AVX2-NEXT: vpextrb $15, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $13, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $11, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $9, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $7, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $5, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $3, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $1, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $15, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $13, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $11, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $9, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $7, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $5, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $3, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) ; AVX2-NEXT: vpextrb $1, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 -; AVX2-NEXT: vpextrb $15, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $14, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $13, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $12, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $11, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $10, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $9, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $8, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $7, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $6, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx ; AVX2-NEXT: vpextrb $5, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $4, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $3, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $2, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $1, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $0, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $15, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $14, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $13, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $12, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $11, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $10, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $9, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $8, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $7, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $6, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $5, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $4, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $3, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $2, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1 +; AVX2-NEXT: vpextrb $0, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm1, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, 4(%rdi) ; AVX2-NEXT: vpextrb $1, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $0, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %eax +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, (%rdi) ; AVX2-NEXT: movq %rdi, %rax ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq @@ -2131,103 +2415,125 @@ ; SSE2-NEXT: packssdw %xmm11, %xmm9 ; SSE2-NEXT: packsswb %xmm10, %xmm9 ; SSE2-NEXT: movdqa %xmm9, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: retq ; @@ -2241,110 +2547,132 @@ ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm10 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm9 ; SSE42-NEXT: movaps {{[0-9]+}}(%rsp), %xmm8 -; SSE42-NEXT: cmpltps %xmm0, %xmm8 -; SSE42-NEXT: cmpltps %xmm1, %xmm9 -; SSE42-NEXT: cmpltps %xmm2, %xmm10 -; SSE42-NEXT: cmpltps %xmm3, %xmm11 -; SSE42-NEXT: cmpltps %xmm4, %xmm12 -; SSE42-NEXT: cmpltps %xmm5, %xmm13 -; SSE42-NEXT: cmpltps %xmm6, %xmm14 -; SSE42-NEXT: cmpltps %xmm7, %xmm15 -; SSE42-NEXT: pextrb $12, %xmm15, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm15, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) +; SSE42-NEXT: cmpltps %xmm3, %xmm8 +; SSE42-NEXT: cmpltps %xmm2, %xmm9 +; SSE42-NEXT: cmpltps %xmm1, %xmm10 +; SSE42-NEXT: cmpltps %xmm0, %xmm11 +; SSE42-NEXT: cmpltps %xmm7, %xmm12 +; SSE42-NEXT: cmpltps %xmm6, %xmm13 +; SSE42-NEXT: cmpltps %xmm5, %xmm14 +; SSE42-NEXT: cmpltps %xmm4, %xmm15 ; SSE42-NEXT: pextrb $4, %xmm15, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm15, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm14, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm14, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm15, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $8, %xmm15, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $12, %xmm15, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $0, %xmm14, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx ; SSE42-NEXT: pextrb $4, %xmm14, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm14, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm13, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm13, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm13, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm13, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm12, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm12, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm12, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm12, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm11, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm11, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $8, %xmm14, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $12, %xmm14, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm13, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $4, %xmm13, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm13, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $12, %xmm13, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm12, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $4, %xmm12, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm12, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $12, %xmm12, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 2(%rdi) ; SSE42-NEXT: pextrb $4, %xmm11, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm11, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm10, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm10, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm11, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $8, %xmm11, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $12, %xmm11, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $0, %xmm10, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx ; SSE42-NEXT: pextrb $4, %xmm10, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm10, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm9, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm9, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm9, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm9, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $8, %xmm10, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $12, %xmm10, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm9, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $4, %xmm9, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm9, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $12, %xmm9, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $4, %xmm8, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $12, %xmm8, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: retq ; @@ -2638,212 +2966,256 @@ ; SSE2-NEXT: packssdw %xmm5, %xmm4 ; SSE2-NEXT: packsswb %xmm6, %xmm4 ; SSE2-NEXT: movdqa %xmm4, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: retq ; ; SSE42-LABEL: test_cmp_v32i32: ; SSE42: # %bb.0: -; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm0 -; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm1 -; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm2 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm3 -; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm4 -; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm5 -; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm6 +; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm2 +; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm1 +; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm0 ; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm7 -; SSE42-NEXT: pextrb $12, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) +; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm6 +; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm5 +; SSE42-NEXT: pcmpgtd {{[0-9]+}}(%rsp), %xmm4 ; SSE42-NEXT: pextrb $4, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $8, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $12, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $0, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $4, %xmm5, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $8, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $12, %xmm5, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $4, %xmm6, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $12, %xmm6, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $4, %xmm7, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $12, %xmm7, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 2(%rdi) ; SSE42-NEXT: pextrb $4, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $8, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $12, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $0, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $4, %xmm1, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $8, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $12, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $4, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $12, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $4, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $12, %xmm3, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: retq ; @@ -2946,825 +3318,1021 @@ ; SSE2-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm6 ; SSE2-NEXT: packsswb %xmm7, %xmm6 ; SSE2-NEXT: movdqa %xmm6, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 6(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 6(%rdi) ; SSE2-NEXT: movdqa %xmm4, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 4(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 4(%rdi) ; SSE2-NEXT: movdqa %xmm2, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: retq ; ; SSE42-LABEL: test_cmp_v64i16: ; SSE42: # %bb.0: -; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm0 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm1 -; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm2 +; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm0 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm3 -; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm4 +; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm2 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm5 -; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm6 +; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm4 ; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm7 -; SSE42-NEXT: pextrb $14, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $12, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $10, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $8, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $6, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $4, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $2, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $0, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $14, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $12, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $10, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $8, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $6, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $4, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) +; SSE42-NEXT: pcmpgtw {{[0-9]+}}(%rsp), %xmm6 ; SSE42-NEXT: pextrb $2, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $0, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $14, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $12, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $10, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $8, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $6, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $4, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $2, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $0, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $14, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $12, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $10, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $8, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $6, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $4, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $4, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $6, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $8, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $10, %xmm6, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $12, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $14, %xmm6, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $2, %xmm7, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $4, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $6, %xmm7, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $10, %xmm7, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $14, %xmm7, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 6(%rdi) ; SSE42-NEXT: pextrb $2, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $0, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $14, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $10, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $6, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $2, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $10, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $6, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $4, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $6, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $8, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $10, %xmm4, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $12, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $14, %xmm4, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $2, %xmm5, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $4, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $6, %xmm5, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $10, %xmm5, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $14, %xmm5, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 4(%rdi) ; SSE42-NEXT: pextrb $2, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $10, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $6, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $2, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $14, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $10, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $6, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $4, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $6, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $8, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $10, %xmm2, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $12, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $14, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $2, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $4, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $6, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $10, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $14, %xmm3, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 2(%rdi) ; SSE42-NEXT: pextrb $2, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $4, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $6, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $8, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $10, %xmm0, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $12, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $14, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $0, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $2, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $4, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $6, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $10, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $14, %xmm1, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: retq ; ; AVX1-LABEL: test_cmp_v64i16: ; AVX1: # %bb.0: -; AVX1-NEXT: vpcmpgtw %xmm4, %xmm0, %xmm8 -; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm4 -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 +; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm8 +; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm9 +; AVX1-NEXT: vpcmpgtw %xmm8, %xmm9, %xmm8 +; AVX1-NEXT: vpcmpgtw %xmm5, %xmm1, %xmm9 +; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm5 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vpcmpgtw %xmm5, %xmm1, %xmm5 ; AVX1-NEXT: vpcmpgtw %xmm4, %xmm0, %xmm0 -; AVX1-NEXT: vpcmpgtw %xmm5, %xmm1, %xmm4 -; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm5 -; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 -; AVX1-NEXT: vpcmpgtw %xmm5, %xmm1, %xmm1 -; AVX1-NEXT: vpcmpgtw %xmm6, %xmm2, %xmm5 -; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm6 -; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 -; AVX1-NEXT: vpcmpgtw %xmm6, %xmm2, %xmm2 -; AVX1-NEXT: vpcmpgtw %xmm7, %xmm3, %xmm6 -; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm7 -; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 +; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm1 +; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 +; AVX1-NEXT: vpcmpgtw %xmm1, %xmm4, %xmm4 ; AVX1-NEXT: vpcmpgtw %xmm7, %xmm3, %xmm3 -; AVX1-NEXT: vpextrb $14, %xmm3, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm3, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm3, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm3, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm3, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm3, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm3, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm3, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm6, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm6, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm6, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm6, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm6, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm6, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm6, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm6, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm2, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm2, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm2, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm2, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm2, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm2, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) +; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm1 +; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 +; AVX1-NEXT: vpcmpgtw %xmm1, %xmm7, %xmm7 +; AVX1-NEXT: vpcmpgtw %xmm6, %xmm2, %xmm2 ; AVX1-NEXT: vpextrb $2, %xmm2, %eax ; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm2, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm5, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm5, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm5, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm5, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm5, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm5, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm5, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm5, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm1, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $12, %xmm1, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $10, %xmm1, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $8, %xmm1, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $6, %xmm1, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $4, %xmm1, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $2, %xmm1, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $0, %xmm1, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $14, %xmm4, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $12, %xmm4, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $10, %xmm4, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $8, %xmm4, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $6, %xmm4, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $4, %xmm4, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $2, %xmm4, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $0, %xmm4, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $14, %xmm0, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $12, %xmm0, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $10, %xmm0, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $8, %xmm0, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $6, %xmm0, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $4, %xmm0, %eax +; AVX1-NEXT: vpextrb $0, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $4, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $6, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $8, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $10, %xmm2, %eax ; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $12, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $14, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm7, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $2, %xmm7, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm7, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $6, %xmm7, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm7, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $10, %xmm7, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm7, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $14, %xmm7, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $2, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $6, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $10, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $14, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $2, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $6, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $10, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $14, %xmm4, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, 4(%rdi) ; AVX1-NEXT: vpextrb $2, %xmm0, %eax ; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $0, %xmm0, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $14, %xmm8, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $12, %xmm8, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $10, %xmm8, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $8, %xmm8, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $6, %xmm8, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $4, %xmm8, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $2, %xmm8, %eax -; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $0, %xmm8, %eax +; AVX1-NEXT: vpextrb $0, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $4, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $6, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $8, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $10, %xmm0, %eax ; AVX1-NEXT: andl $1, %eax -; AVX1-NEXT: movb %al, (%rdi) +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $12, %xmm0, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $14, %xmm0, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $2, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $6, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $10, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $14, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $2, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $6, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $10, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $14, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $2, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $6, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $10, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $14, %xmm8, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, (%rdi) ; AVX1-NEXT: movq %rdi, %rax ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq ; ; AVX2-LABEL: test_cmp_v64i16: ; AVX2: # %bb.0: -; AVX2-NEXT: vpcmpgtw %ymm4, %ymm0, %ymm0 -; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm4 -; AVX2-NEXT: vpcmpgtw %ymm5, %ymm1, %ymm1 -; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm5 -; AVX2-NEXT: vpcmpgtw %ymm6, %ymm2, %ymm2 -; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm6 -; AVX2-NEXT: vpcmpgtw %ymm7, %ymm3, %ymm3 -; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm7 -; AVX2-NEXT: vpextrb $14, %xmm7, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm7, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm7, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm7, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm7, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm7, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm7, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm7, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm3, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm3, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm3, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm3, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm3, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm3, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm3, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm3, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm6, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm6, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm6, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm6, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm6, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm6, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) +; AVX2-NEXT: vpcmpgtw %ymm5, %ymm1, %ymm5 +; AVX2-NEXT: vextracti128 $1, %ymm5, %xmm1 +; AVX2-NEXT: vpcmpgtw %ymm4, %ymm0, %ymm4 +; AVX2-NEXT: vextracti128 $1, %ymm4, %xmm0 +; AVX2-NEXT: vpcmpgtw %ymm7, %ymm3, %ymm7 +; AVX2-NEXT: vextracti128 $1, %ymm7, %xmm3 +; AVX2-NEXT: vpcmpgtw %ymm6, %ymm2, %ymm6 +; AVX2-NEXT: vextracti128 $1, %ymm6, %xmm2 ; AVX2-NEXT: vpextrb $2, %xmm6, %eax ; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm6, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm2, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm2, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm2, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm2, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm2, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm2, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm2, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm2, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm5, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $12, %xmm5, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $10, %xmm5, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $8, %xmm5, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $6, %xmm5, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $4, %xmm5, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $2, %xmm5, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $0, %xmm5, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $14, %xmm1, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $12, %xmm1, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $10, %xmm1, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $8, %xmm1, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $6, %xmm1, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $4, %xmm1, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $2, %xmm1, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $0, %xmm1, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $14, %xmm4, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $12, %xmm4, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $10, %xmm4, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $8, %xmm4, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $6, %xmm4, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $4, %xmm4, %eax +; AVX2-NEXT: vpextrb $0, %xmm6, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $4, %xmm6, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $6, %xmm6, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $8, %xmm6, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx +; AVX2-NEXT: vpextrb $10, %xmm6, %eax ; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $12, %xmm6, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $14, %xmm6, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $0, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $2, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $6, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $10, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $14, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $0, %xmm7, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $2, %xmm7, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm7, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $6, %xmm7, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm7, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $10, %xmm7, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm7, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $14, %xmm7, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $0, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $2, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $6, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $10, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $14, %xmm3, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, 4(%rdi) ; AVX2-NEXT: vpextrb $2, %xmm4, %eax ; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $0, %xmm4, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $14, %xmm0, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $12, %xmm0, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $10, %xmm0, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $8, %xmm0, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $6, %xmm0, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $4, %xmm0, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $2, %xmm0, %eax -; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $0, %xmm0, %eax +; AVX2-NEXT: vpextrb $0, %xmm4, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $4, %xmm4, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $6, %xmm4, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $8, %xmm4, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx +; AVX2-NEXT: vpextrb $10, %xmm4, %eax ; AVX2-NEXT: andl $1, %eax -; AVX2-NEXT: movb %al, (%rdi) +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $12, %xmm4, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $14, %xmm4, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $2, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $6, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $10, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $14, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $0, %xmm5, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $2, %xmm5, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm5, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $6, %xmm5, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm5, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $10, %xmm5, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm5, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $14, %xmm5, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $0, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $2, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $6, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $10, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $14, %xmm1, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, (%rdi) ; AVX2-NEXT: movq %rdi, %rax ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq @@ -3827,397 +4395,485 @@ ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm6 ; SSE2-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm7 ; SSE2-NEXT: movdqa %xmm7, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 14(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 14(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 14(%rdi) ; SSE2-NEXT: movdqa %xmm6, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 12(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 12(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 12(%rdi) ; SSE2-NEXT: movdqa %xmm5, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 10(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 10(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 10(%rdi) ; SSE2-NEXT: movdqa %xmm4, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 8(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 8(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 8(%rdi) ; SSE2-NEXT: movdqa %xmm3, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 6(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 6(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 6(%rdi) ; SSE2-NEXT: movdqa %xmm2, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 4(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 4(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 4(%rdi) ; SSE2-NEXT: movdqa %xmm1, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: popq %rcx ; SSE2-NEXT: retq @@ -4232,795 +4888,991 @@ ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm5 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm6 ; SSE42-NEXT: pcmpgtb {{[0-9]+}}(%rsp), %xmm7 -; SSE42-NEXT: pextrb $15, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $14, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $13, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $12, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $11, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $10, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $9, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $8, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $7, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $6, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $5, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $4, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $3, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $2, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) ; SSE42-NEXT: pextrb $1, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $0, %xmm7, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 14(%rdi) -; SSE42-NEXT: pextrb $15, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $14, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $13, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $12, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $11, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $10, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $9, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $8, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $7, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $6, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $5, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $4, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $3, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $2, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm7, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm7, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm7, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm7, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm7, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm7, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm7, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 14(%rdi) ; SSE42-NEXT: pextrb $1, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $0, %xmm6, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 12(%rdi) -; SSE42-NEXT: pextrb $15, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $14, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $13, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $12, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $11, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $10, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $9, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $8, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $7, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $6, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $5, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $4, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $3, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $2, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm6, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm6, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm6, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm6, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm6, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm6, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm6, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 12(%rdi) ; SSE42-NEXT: pextrb $1, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $0, %xmm5, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 10(%rdi) -; SSE42-NEXT: pextrb $15, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $14, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $13, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $12, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $11, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $10, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $9, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $8, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $7, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $6, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $5, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $4, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $3, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $2, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm5, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm5, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm5, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm5, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm5, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm5, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm5, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 10(%rdi) ; SSE42-NEXT: pextrb $1, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $0, %xmm4, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 8(%rdi) -; SSE42-NEXT: pextrb $15, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $14, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $13, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $12, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $11, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $10, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $9, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $8, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $7, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $6, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $5, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $4, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $3, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $2, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm4, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm4, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm4, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm4, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm4, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm4, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm4, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 8(%rdi) ; SSE42-NEXT: pextrb $1, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $0, %xmm3, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 6(%rdi) -; SSE42-NEXT: pextrb $15, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $14, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $13, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $12, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $11, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $10, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $9, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $8, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $7, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $6, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $5, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $4, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $3, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $2, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm3, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm3, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm3, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm3, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 6(%rdi) ; SSE42-NEXT: pextrb $1, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $0, %xmm2, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 4(%rdi) -; SSE42-NEXT: pextrb $15, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $13, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $11, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $10, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $9, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $7, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $6, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $5, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $3, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $2, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm2, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm2, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm2, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm2, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 4(%rdi) ; SSE42-NEXT: pextrb $1, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $15, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $14, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $13, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $11, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $10, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $9, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $7, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $6, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $5, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $3, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $2, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm1, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm1, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm1, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 2(%rdi) ; SSE42-NEXT: pextrb $1, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm0, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm0, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: retq ; ; AVX1-LABEL: test_cmp_v128i8: ; AVX1: # %bb.0: -; AVX1-NEXT: vpcmpgtb %xmm4, %xmm0, %xmm8 -; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm4 -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vpcmpgtb %xmm4, %xmm0, %xmm0 -; AVX1-NEXT: vpcmpgtb %xmm5, %xmm1, %xmm4 -; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm5 -; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 +; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm8 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm9 +; AVX1-NEXT: vpcmpgtb %xmm8, %xmm9, %xmm8 +; AVX1-NEXT: vpcmpgtb %xmm4, %xmm0, %xmm9 +; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm4 +; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0 +; AVX1-NEXT: vpcmpgtb %xmm4, %xmm0, %xmm4 ; AVX1-NEXT: vpcmpgtb %xmm5, %xmm1, %xmm1 -; AVX1-NEXT: vpcmpgtb %xmm6, %xmm2, %xmm5 -; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm6 -; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 +; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm0 +; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 +; AVX1-NEXT: vpcmpgtb %xmm0, %xmm5, %xmm5 ; AVX1-NEXT: vpcmpgtb %xmm6, %xmm2, %xmm2 -; AVX1-NEXT: vpcmpgtb %xmm7, %xmm3, %xmm6 -; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm7 -; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 +; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm0 +; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 +; AVX1-NEXT: vpcmpgtb %xmm0, %xmm6, %xmm6 ; AVX1-NEXT: vpcmpgtb %xmm7, %xmm3, %xmm3 -; AVX1-NEXT: vpextrb $15, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $13, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $11, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $9, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $7, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $5, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $3, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) ; AVX1-NEXT: vpextrb $1, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm3, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $15, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $13, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $11, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $9, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $7, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $5, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $3, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $1, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm6, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 12(%rdi) -; AVX1-NEXT: vpextrb $15, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $13, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $11, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $9, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $7, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $5, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $3, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm3, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm3, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm3, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm6, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm6, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm6, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm6, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm6, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm6, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm6, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm6, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm6, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm6, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm6, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm6, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm6, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm6, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm6, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm6, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, 12(%rdi) ; AVX1-NEXT: vpextrb $1, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm2, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $15, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $13, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $11, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $9, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $7, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $5, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $3, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $1, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm5, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 8(%rdi) -; AVX1-NEXT: vpextrb $15, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $13, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $11, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $9, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $7, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $5, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $3, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm2, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm2, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm2, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm5, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm5, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm5, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, 8(%rdi) ; AVX1-NEXT: vpextrb $1, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm1, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $15, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $14, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $13, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $12, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $11, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $10, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $9, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $8, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $7, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $6, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $5, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $4, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $3, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $2, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $1, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $0, %xmm4, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, 4(%rdi) -; AVX1-NEXT: vpextrb $15, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $14, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $13, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $12, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $11, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $10, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $9, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $8, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $7, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $6, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $5, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $4, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $3, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $2, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $1, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $0, %xmm0, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $15, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $14, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $13, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $12, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $11, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $10, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $9, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $8, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $7, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $6, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $5, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $4, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $3, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $2, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $1, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) -; AVX1-NEXT: vpextrb $0, %xmm8, %eax -; AVX1-NEXT: andb $1, %al -; AVX1-NEXT: movb %al, (%rdi) +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm1, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm1, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm1, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm4, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm4, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm4, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, 4(%rdi) +; AVX1-NEXT: vpextrb $1, %xmm9, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: vpextrb $0, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rcx,%rax,2), %eax +; AVX1-NEXT: vpextrb $2, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,4), %eax +; AVX1-NEXT: vpextrb $3, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: leal (%rax,%rcx,8), %eax +; AVX1-NEXT: vpextrb $4, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $4, %ecx +; AVX1-NEXT: orl %eax, %ecx +; AVX1-NEXT: vpextrb $5, %xmm9, %eax +; AVX1-NEXT: andl $1, %eax +; AVX1-NEXT: shll $5, %eax +; AVX1-NEXT: orl %ecx, %eax +; AVX1-NEXT: vpextrb $6, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $6, %ecx +; AVX1-NEXT: vpextrb $7, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $7, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $8, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $9, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $10, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $11, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $12, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $13, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm9, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $14, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm9, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $15, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $0, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $16, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $1, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $17, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $2, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $18, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $3, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $19, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $4, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $20, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $5, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $21, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $6, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $22, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $7, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $23, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $8, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $24, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $9, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $25, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $10, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $26, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $11, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $27, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $12, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $28, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $13, %xmm8, %edx +; AVX1-NEXT: andl $1, %edx +; AVX1-NEXT: shll $29, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: vpextrb $14, %xmm8, %ecx +; AVX1-NEXT: andl $1, %ecx +; AVX1-NEXT: shll $30, %ecx +; AVX1-NEXT: orl %edx, %ecx +; AVX1-NEXT: vpextrb $15, %xmm8, %edx +; AVX1-NEXT: shll $31, %edx +; AVX1-NEXT: orl %ecx, %edx +; AVX1-NEXT: orl %eax, %edx +; AVX1-NEXT: movl %edx, (%rdi) ; AVX1-NEXT: movq %rdi, %rax ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq @@ -5031,394 +5883,502 @@ ; AVX2-NEXT: vpcmpgtb %ymm5, %ymm1, %ymm1 ; AVX2-NEXT: vpcmpgtb %ymm6, %ymm2, %ymm2 ; AVX2-NEXT: vpcmpgtb %ymm7, %ymm3, %ymm3 -; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm4 -; AVX2-NEXT: vpextrb $15, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $13, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $11, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $9, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $7, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $5, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $3, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $1, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm4, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $15, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $13, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $11, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $9, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $7, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $5, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $3, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) ; AVX2-NEXT: vpextrb $1, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 12(%rdi) -; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm3 -; AVX2-NEXT: vpextrb $15, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $13, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $11, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $9, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $7, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx ; AVX2-NEXT: vpextrb $5, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $3, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $1, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm3, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $15, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $13, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $11, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $9, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $7, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $5, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $3, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm3 +; AVX2-NEXT: vpextrb $0, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm3, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm3, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm3, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, 12(%rdi) ; AVX2-NEXT: vpextrb $1, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 8(%rdi) -; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 -; AVX2-NEXT: vpextrb $15, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $13, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $11, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $9, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $7, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx ; AVX2-NEXT: vpextrb $5, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $3, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $1, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm2, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $15, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $14, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $13, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $12, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $11, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $10, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $9, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $8, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $7, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $6, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $5, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $4, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $3, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $2, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm2 +; AVX2-NEXT: vpextrb $0, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm2, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm2, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm2, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, 8(%rdi) ; AVX2-NEXT: vpextrb $1, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vpextrb $0, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, 4(%rdi) -; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 -; AVX2-NEXT: vpextrb $15, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $14, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $13, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $12, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $11, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $10, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $9, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $8, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $7, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $6, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx ; AVX2-NEXT: vpextrb $5, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $4, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $3, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $2, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $1, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $0, %xmm1, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $15, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $14, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $13, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $12, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $11, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $10, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $9, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $8, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $7, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $6, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $5, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $4, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $3, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $2, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1 +; AVX2-NEXT: vpextrb $0, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm1, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm1, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm1, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, 4(%rdi) ; AVX2-NEXT: vpextrb $1, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) -; AVX2-NEXT: vpextrb $0, %xmm0, %eax -; AVX2-NEXT: andb $1, %al -; AVX2-NEXT: movb %al, (%rdi) +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rcx,%rax,2), %eax +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,4), %eax +; AVX2-NEXT: vpextrb $3, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: leal (%rax,%rcx,8), %eax +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $4, %ecx +; AVX2-NEXT: orl %eax, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %eax +; AVX2-NEXT: andl $1, %eax +; AVX2-NEXT: shll $5, %eax +; AVX2-NEXT: orl %ecx, %eax +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $6, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $7, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $8, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $9, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $10, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $11, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $12, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $13, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $14, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $15, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 +; AVX2-NEXT: vpextrb $0, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $16, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $1, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $17, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $2, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $18, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $3, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $19, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $4, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $20, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $5, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $21, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $6, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $22, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $7, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $23, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $8, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $24, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $9, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $25, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $10, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $26, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $11, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $27, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $12, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $28, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $13, %xmm0, %edx +; AVX2-NEXT: andl $1, %edx +; AVX2-NEXT: shll $29, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: vpextrb $14, %xmm0, %ecx +; AVX2-NEXT: andl $1, %ecx +; AVX2-NEXT: shll $30, %ecx +; AVX2-NEXT: orl %edx, %ecx +; AVX2-NEXT: vpextrb $15, %xmm0, %edx +; AVX2-NEXT: shll $31, %edx +; AVX2-NEXT: orl %ecx, %edx +; AVX2-NEXT: orl %eax, %edx +; AVX2-NEXT: movl %edx, (%rdi) ; AVX2-NEXT: movq %rdi, %rax ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq @@ -5564,103 +6524,125 @@ ; SSE2-NEXT: packssdw %xmm4, %xmm0 ; SSE2-NEXT: packsswb %xmm2, %xmm0 ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm1, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: retq ; @@ -5718,102 +6700,124 @@ ; SSE42-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2] ; SSE42-NEXT: packssdw %xmm4, %xmm0 ; SSE42-NEXT: packsswb %xmm2, %xmm0 -; SSE42-NEXT: pextrb $15, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $13, %xmm0, %r8d -; SSE42-NEXT: pextrb $12, %xmm0, %r9d -; SSE42-NEXT: pextrb $11, %xmm0, %r10d -; SSE42-NEXT: pextrb $10, %xmm0, %r11d -; SSE42-NEXT: pextrb $9, %xmm0, %r14d -; SSE42-NEXT: pextrb $8, %xmm0, %r15d -; SSE42-NEXT: pextrb $7, %xmm0, %r12d -; SSE42-NEXT: pextrb $6, %xmm0, %r13d -; SSE42-NEXT: pextrb $5, %xmm0, %ebx -; SSE42-NEXT: pextrb $4, %xmm0, %ebp -; SSE42-NEXT: pextrb $3, %xmm0, %eax +; SSE42-NEXT: pextrb $1, %xmm0, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax ; SSE42-NEXT: pextrb $2, %xmm0, %ecx -; SSE42-NEXT: pextrb $1, %xmm0, %edx -; SSE42-NEXT: pextrb $0, %xmm0, %esi -; SSE42-NEXT: andb $1, %r8b -; SSE42-NEXT: movb %r8b, 2(%rdi) -; SSE42-NEXT: andb $1, %r9b -; SSE42-NEXT: movb %r9b, 2(%rdi) -; SSE42-NEXT: andb $1, %r10b -; SSE42-NEXT: movb %r10b, 2(%rdi) -; SSE42-NEXT: andb $1, %r11b -; SSE42-NEXT: movb %r11b, 2(%rdi) -; SSE42-NEXT: andb $1, %r14b -; SSE42-NEXT: movb %r14b, 2(%rdi) -; SSE42-NEXT: andb $1, %r15b -; SSE42-NEXT: movb %r15b, 2(%rdi) -; SSE42-NEXT: andb $1, %r12b -; SSE42-NEXT: movb %r12b, 2(%rdi) -; SSE42-NEXT: andb $1, %r13b -; SSE42-NEXT: movb %r13b, 2(%rdi) -; SSE42-NEXT: andb $1, %bl -; SSE42-NEXT: movb %bl, 2(%rdi) -; SSE42-NEXT: andb $1, %bpl -; SSE42-NEXT: movb %bpl, 2(%rdi) -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: andb $1, %cl -; SSE42-NEXT: movb %cl, 2(%rdi) -; SSE42-NEXT: andb $1, %dl -; SSE42-NEXT: movb %dl, 2(%rdi) -; SSE42-NEXT: andb $1, %sil -; SSE42-NEXT: movb %sil, 2(%rdi) -; SSE42-NEXT: pextrb $15, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $14, %xmm1, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $13, %xmm1, %r8d -; SSE42-NEXT: pextrb $12, %xmm1, %r9d -; SSE42-NEXT: pextrb $11, %xmm1, %r10d -; SSE42-NEXT: pextrb $10, %xmm1, %r11d -; SSE42-NEXT: pextrb $9, %xmm1, %r14d -; SSE42-NEXT: pextrb $8, %xmm1, %r15d -; SSE42-NEXT: pextrb $7, %xmm1, %r12d -; SSE42-NEXT: pextrb $6, %xmm1, %r13d -; SSE42-NEXT: pextrb $5, %xmm1, %ebx -; SSE42-NEXT: pextrb $4, %xmm1, %ebp -; SSE42-NEXT: pextrb $3, %xmm1, %eax +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %r8d +; SSE42-NEXT: pextrb $3, %xmm0, %r9d +; SSE42-NEXT: pextrb $4, %xmm0, %r14d +; SSE42-NEXT: pextrb $5, %xmm0, %r11d +; SSE42-NEXT: pextrb $6, %xmm0, %r10d +; SSE42-NEXT: pextrb $7, %xmm0, %r15d +; SSE42-NEXT: pextrb $8, %xmm0, %r12d +; SSE42-NEXT: pextrb $9, %xmm0, %r13d +; SSE42-NEXT: pextrb $10, %xmm0, %ebx +; SSE42-NEXT: pextrb $11, %xmm0, %ebp +; SSE42-NEXT: pextrb $12, %xmm0, %esi +; SSE42-NEXT: pextrb $13, %xmm0, %edx +; SSE42-NEXT: pextrb $14, %xmm0, %ecx +; SSE42-NEXT: pextrb $15, %xmm0, %eax +; SSE42-NEXT: andl $1, %r9d +; SSE42-NEXT: leal (%r8,%r9,8), %r8d +; SSE42-NEXT: andl $1, %r14d +; SSE42-NEXT: shll $4, %r14d +; SSE42-NEXT: orl %r8d, %r14d +; SSE42-NEXT: andl $1, %r11d +; SSE42-NEXT: shll $5, %r11d +; SSE42-NEXT: orl %r14d, %r11d +; SSE42-NEXT: andl $1, %r10d +; SSE42-NEXT: shll $6, %r10d +; SSE42-NEXT: andl $1, %r15d +; SSE42-NEXT: shll $7, %r15d +; SSE42-NEXT: orl %r10d, %r15d +; SSE42-NEXT: andl $1, %r12d +; SSE42-NEXT: shll $8, %r12d +; SSE42-NEXT: orl %r15d, %r12d +; SSE42-NEXT: andl $1, %r13d +; SSE42-NEXT: shll $9, %r13d +; SSE42-NEXT: orl %r12d, %r13d +; SSE42-NEXT: andl $1, %ebx +; SSE42-NEXT: shll $10, %ebx +; SSE42-NEXT: orl %r13d, %ebx +; SSE42-NEXT: andl $1, %ebp +; SSE42-NEXT: shll $11, %ebp +; SSE42-NEXT: orl %ebx, %ebp +; SSE42-NEXT: andl $1, %esi +; SSE42-NEXT: shll $12, %esi +; SSE42-NEXT: orl %ebp, %esi +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %esi, %edx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: shll $15, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: orl %r11d, %eax +; SSE42-NEXT: movw %ax, 2(%rdi) +; SSE42-NEXT: pextrb $1, %xmm1, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm1, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax ; SSE42-NEXT: pextrb $2, %xmm1, %ecx -; SSE42-NEXT: pextrb $1, %xmm1, %edx -; SSE42-NEXT: pextrb $0, %xmm1, %esi -; SSE42-NEXT: andb $1, %r8b -; SSE42-NEXT: movb %r8b, (%rdi) -; SSE42-NEXT: andb $1, %r9b -; SSE42-NEXT: movb %r9b, (%rdi) -; SSE42-NEXT: andb $1, %r10b -; SSE42-NEXT: movb %r10b, (%rdi) -; SSE42-NEXT: andb $1, %r11b -; SSE42-NEXT: movb %r11b, (%rdi) -; SSE42-NEXT: andb $1, %r14b -; SSE42-NEXT: movb %r14b, (%rdi) -; SSE42-NEXT: andb $1, %r15b -; SSE42-NEXT: movb %r15b, (%rdi) -; SSE42-NEXT: andb $1, %r12b -; SSE42-NEXT: movb %r12b, (%rdi) -; SSE42-NEXT: andb $1, %r13b -; SSE42-NEXT: movb %r13b, (%rdi) -; SSE42-NEXT: andb $1, %bl -; SSE42-NEXT: movb %bl, (%rdi) -; SSE42-NEXT: andb $1, %bpl -; SSE42-NEXT: movb %bpl, (%rdi) -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: andb $1, %cl -; SSE42-NEXT: movb %cl, (%rdi) -; SSE42-NEXT: andb $1, %dl -; SSE42-NEXT: movb %dl, (%rdi) -; SSE42-NEXT: andb $1, %sil -; SSE42-NEXT: movb %sil, (%rdi) +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %r8d +; SSE42-NEXT: pextrb $3, %xmm1, %r9d +; SSE42-NEXT: pextrb $4, %xmm1, %r14d +; SSE42-NEXT: pextrb $5, %xmm1, %r11d +; SSE42-NEXT: pextrb $6, %xmm1, %r10d +; SSE42-NEXT: pextrb $7, %xmm1, %r15d +; SSE42-NEXT: pextrb $8, %xmm1, %r12d +; SSE42-NEXT: pextrb $9, %xmm1, %r13d +; SSE42-NEXT: pextrb $10, %xmm1, %ebx +; SSE42-NEXT: pextrb $11, %xmm1, %ebp +; SSE42-NEXT: pextrb $12, %xmm1, %edx +; SSE42-NEXT: pextrb $13, %xmm1, %esi +; SSE42-NEXT: pextrb $14, %xmm1, %ecx +; SSE42-NEXT: pextrb $15, %xmm1, %eax +; SSE42-NEXT: andl $1, %r9d +; SSE42-NEXT: leal (%r8,%r9,8), %r8d +; SSE42-NEXT: andl $1, %r14d +; SSE42-NEXT: shll $4, %r14d +; SSE42-NEXT: orl %r8d, %r14d +; SSE42-NEXT: andl $1, %r11d +; SSE42-NEXT: shll $5, %r11d +; SSE42-NEXT: orl %r14d, %r11d +; SSE42-NEXT: andl $1, %r10d +; SSE42-NEXT: shll $6, %r10d +; SSE42-NEXT: andl $1, %r15d +; SSE42-NEXT: shll $7, %r15d +; SSE42-NEXT: orl %r10d, %r15d +; SSE42-NEXT: andl $1, %r12d +; SSE42-NEXT: shll $8, %r12d +; SSE42-NEXT: orl %r15d, %r12d +; SSE42-NEXT: andl $1, %r13d +; SSE42-NEXT: shll $9, %r13d +; SSE42-NEXT: orl %r12d, %r13d +; SSE42-NEXT: andl $1, %ebx +; SSE42-NEXT: shll $10, %ebx +; SSE42-NEXT: orl %r13d, %ebx +; SSE42-NEXT: andl $1, %ebp +; SSE42-NEXT: shll $11, %ebp +; SSE42-NEXT: orl %ebx, %ebp +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $12, %edx +; SSE42-NEXT: orl %ebp, %edx +; SSE42-NEXT: andl $1, %esi +; SSE42-NEXT: shll $13, %esi +; SSE42-NEXT: orl %edx, %esi +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %esi, %ecx +; SSE42-NEXT: shll $15, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: orl %r11d, %eax +; SSE42-NEXT: movw %ax, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: popq %rbx ; SSE42-NEXT: popq %r12 @@ -6197,103 +7201,125 @@ ; SSE2-NEXT: pand %xmm9, %xmm3 ; SSE2-NEXT: packuswb %xmm1, %xmm3 ; SSE2-NEXT: movdqa %xmm3, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, 2(%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, 2(%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, 2(%rdi) ; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %cl -; SSE2-NEXT: andb $1, %cl -; SSE2-NEXT: movb %cl, (%rdi) -; SSE2-NEXT: andb $1, %al -; SSE2-NEXT: movb %al, (%rdi) +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rcx,%rax,2), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,4), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: leal (%rax,%rcx,8), %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $4, %ecx +; SSE2-NEXT: orl %eax, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax +; SSE2-NEXT: andl $1, %eax +; SSE2-NEXT: shll $5, %eax +; SSE2-NEXT: orl %ecx, %eax +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $6, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $7, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $8, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $9, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $10, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $11, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $12, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: andl $1, %edx +; SSE2-NEXT: shll $13, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %ecx +; SSE2-NEXT: andl $1, %ecx +; SSE2-NEXT: shll $14, %ecx +; SSE2-NEXT: orl %edx, %ecx +; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %edx +; SSE2-NEXT: shll $15, %edx +; SSE2-NEXT: orl %ecx, %edx +; SSE2-NEXT: orl %eax, %edx +; SSE2-NEXT: movw %dx, (%rdi) ; SSE2-NEXT: movq %rdi, %rax ; SSE2-NEXT: retq ; @@ -6337,102 +7363,124 @@ ; SSE42-NEXT: shufps {{.*#+}} xmm8 = xmm8[0,2],xmm11[0,2] ; SSE42-NEXT: packssdw %xmm10, %xmm8 ; SSE42-NEXT: packsswb %xmm9, %xmm8 -; SSE42-NEXT: pextrb $15, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $14, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $13, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $12, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $11, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $10, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $9, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $8, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $7, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $6, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $5, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $4, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $3, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $2, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) ; SSE42-NEXT: pextrb $1, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $0, %xmm8, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, 2(%rdi) -; SSE42-NEXT: pextrb $15, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $14, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $13, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $12, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $11, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $10, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $9, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $8, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $7, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $6, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $5, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $4, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $3, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $2, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm8, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm8, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm8, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm8, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm8, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm8, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm8, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, 2(%rdi) ; SSE42-NEXT: pextrb $1, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) -; SSE42-NEXT: pextrb $0, %xmm0, %eax -; SSE42-NEXT: andb $1, %al -; SSE42-NEXT: movb %al, (%rdi) +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: pextrb $0, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rcx,%rax,2), %eax +; SSE42-NEXT: pextrb $2, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,4), %eax +; SSE42-NEXT: pextrb $3, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: leal (%rax,%rcx,8), %eax +; SSE42-NEXT: pextrb $4, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $4, %ecx +; SSE42-NEXT: orl %eax, %ecx +; SSE42-NEXT: pextrb $5, %xmm0, %eax +; SSE42-NEXT: andl $1, %eax +; SSE42-NEXT: shll $5, %eax +; SSE42-NEXT: orl %ecx, %eax +; SSE42-NEXT: pextrb $6, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $6, %ecx +; SSE42-NEXT: pextrb $7, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $7, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $8, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $8, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $9, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $9, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $10, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $10, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $11, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $11, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $12, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $12, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $13, %xmm0, %edx +; SSE42-NEXT: andl $1, %edx +; SSE42-NEXT: shll $13, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: pextrb $14, %xmm0, %ecx +; SSE42-NEXT: andl $1, %ecx +; SSE42-NEXT: shll $14, %ecx +; SSE42-NEXT: orl %edx, %ecx +; SSE42-NEXT: pextrb $15, %xmm0, %edx +; SSE42-NEXT: shll $15, %edx +; SSE42-NEXT: orl %ecx, %edx +; SSE42-NEXT: orl %eax, %edx +; SSE42-NEXT: movw %dx, (%rdi) ; SSE42-NEXT: movq %rdi, %rax ; SSE42-NEXT: retq ;