[llvm] r323042 - [SelectionDAG] Fix codegen of vector stores with non byte-sized elements.
Jonas Paulsson via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 20 08:05:10 PST 2018
Author: jonpa
Date: Sat Jan 20 08:05:10 2018
New Revision: 323042
URL: http://llvm.org/viewvc/llvm-project?rev=323042&view=rev
Log:
[SelectionDAG] Fix codegen of vector stores with non byte-sized elements.
This was completely broken, but hopefully fixed by this patch.
In cases where it is needed, a vector with non byte-sized elements is stored
by extracting, zero-extending, shift:ing and or:ing the elements into an
integer of the same width as the vector, which is then stored.
Review: Eli Friedman, Ulrich Weigand
https://reviews.llvm.org/D42100#inline-369520
https://bugs.llvm.org/show_bug.cgi?id=35520
Added:
llvm/trunk/test/CodeGen/Generic/store_nonbytesized_vecs.ll
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/trunk/test/CodeGen/SystemZ/vec-move-17.ll
llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-512.ll
llvm/trunk/test/CodeGen/X86/bitcast-setcc-512.ll
llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll
llvm/trunk/test/CodeGen/X86/pr20011.ll
llvm/trunk/test/CodeGen/X86/trunc-store.ll
llvm/trunk/test/CodeGen/X86/vector-compare-results.ll
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp Sat Jan 20 08:05:10 2018
@@ -662,7 +662,6 @@ SDValue VectorLegalizer::ExpandLoad(SDVa
SDValue VectorLegalizer::ExpandStore(SDValue Op) {
StoreSDNode *ST = cast<StoreSDNode>(Op.getNode());
-
SDValue TF = TLI.scalarizeVectorStore(ST, DAG);
AddLegalizedOperand(Op, TF);
return TF;
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp Sat Jan 20 08:05:10 2018
@@ -2013,6 +2013,10 @@ SDValue DAGTypeLegalizer::SplitVecOp_STO
EVT LoMemVT, HiMemVT;
std::tie(LoMemVT, HiMemVT) = DAG.GetSplitDestVTs(MemoryVT);
+ // Scalarize if the split halves are not byte-sized.
+ if (!LoMemVT.isByteSized() || !HiMemVT.isByteSized())
+ return TLI.scalarizeVectorStore(N, DAG);
+
unsigned IncrementSize = LoMemVT.getSizeInBits()/8;
if (isTruncating)
@@ -3553,6 +3557,9 @@ SDValue DAGTypeLegalizer::WidenVecOp_STO
// vector type.
StoreSDNode *ST = cast<StoreSDNode>(N);
+ if (!ST->getMemoryVT().getScalarType().isByteSized())
+ return TLI.scalarizeVectorStore(ST, DAG);
+
SmallVector<SDValue, 16> StChain;
if (ST->isTruncatingStore())
GenWidenVectorTruncStores(StChain, ST);
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Sat Jan 20 08:05:10 2018
@@ -3419,9 +3419,6 @@ SDValue TargetLowering::scalarizeVectorL
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,40 @@ SDValue TargetLowering::scalarizeVectorS
// 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 byte-sized must therefore be stored as an integer
+ // built out of the extracted vector elements.
+ if (!MemSclVT.isByteSized()) {
+ 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, RegSclVT, Value,
+ DAG.getConstant(Idx, SL, IdxVT));
+ SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SL, MemSclVT, Elt);
+ SDValue ExtElt = DAG.getNode(ISD::ZERO_EXTEND, SL, IntVT, Trunc);
+ 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<SDValue, 8> Stores;
Added: llvm/trunk/test/CodeGen/Generic/store_nonbytesized_vecs.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/store_nonbytesized_vecs.ll?rev=323042&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Generic/store_nonbytesized_vecs.ll (added)
+++ llvm/trunk/test/CodeGen/Generic/store_nonbytesized_vecs.ll Sat Jan 20 08:05:10 2018
@@ -0,0 +1,142 @@
+; 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: stmg %r14, %r15, 112(%r15)
+; CHECK-NEXT: .cfi_offset %r14, -48
+; CHECK-NEXT: .cfi_offset %r15, -40
+; CHECK-NEXT: vlgvf %r1, %v24, 0
+; CHECK-NEXT: stc %r1, 30(%r2)
+; CHECK-NEXT: llgtr %r0, %r1
+; CHECK-NEXT: # kill: def %r1l killed %r1l killed %r1d def %r1d
+; CHECK-NEXT: srl %r1, 8
+; CHECK-NEXT: sth %r1, 28(%r2)
+; CHECK-NEXT: vlgvf %r1, %v24, 1
+; CHECK-NEXT: rosbg %r0, %r1, 2, 32, 31
+; CHECK-NEXT: srlg %r1, %r0, 24
+; CHECK-NEXT: vlgvf %r3, %v26, 0
+; CHECK-NEXT: st %r1, 24(%r2)
+; CHECK-NEXT: vlgvf %r1, %v26, 1
+; CHECK-NEXT: risbgn %r4, %r3, 37, 191, 60
+; CHECK-NEXT: vlgvf %r5, %v26, 3
+; CHECK-NEXT: sllg %r5, %r5, 25
+; CHECK-NEXT: rosbg %r4, %r1, 6, 36, 27
+; CHECK-NEXT: vlgvf %r1, %v26, 2
+; CHECK-NEXT: rosbg %r5, %r1, 39, 63, 58
+; CHECK-NEXT: rosbg %r4, %r1, 0, 5, 58
+; CHECK-NEXT: sllg %r1, %r5, 8
+; CHECK-NEXT: rosbg %r1, %r4, 56, 63, 8
+; CHECK-NEXT: vlgvf %r5, %v24, 2
+; CHECK-NEXT: rosbg %r0, %r5, 0, 1, 62
+; CHECK-NEXT: stg %r1, 0(%r2)
+; CHECK-NEXT: vlgvf %r1, %v24, 3
+; CHECK-NEXT: risbgn %r14, %r5, 35, 191, 62
+; CHECK-NEXT: rosbg %r14, %r1, 4, 34, 29
+; CHECK-NEXT: sllg %r1, %r4, 8
+; CHECK-NEXT: rosbg %r14, %r3, 0, 3, 60
+; CHECK-NEXT: rosbg %r1, %r14, 56, 63, 8
+; CHECK-NEXT: stg %r1, 8(%r2)
+; CHECK-NEXT: sllg %r1, %r14, 8
+; CHECK-NEXT: rosbg %r1, %r0, 56, 63, 8
+; CHECK-NEXT: stg %r1, 16(%r2)
+; CHECK-NEXT: lmg %r14, %r15, 112(%r15)
+; 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
+}
Modified: llvm/trunk/test/CodeGen/SystemZ/vec-move-17.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SystemZ/vec-move-17.ll?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/SystemZ/vec-move-17.ll (original)
+++ llvm/trunk/test/CodeGen/SystemZ/vec-move-17.ll Sat Jan 20 08:05:10 2018
@@ -62,7 +62,14 @@ define void @f6(<4 x i32> %val, <4 x i16
; Test a v2i64->v2i1 truncation.
define void @f7(<2 x i64> %val, <2 x i1> *%ptr) {
-; No expected output, but must compile.
+; CHECK-LABEL: f7:
+; CHECK: # %bb.0:
+; CHECK-NEXT: vlgvg %r0, %v24, 0
+; CHECK-NEXT: vlgvg %r1, %v24, 1
+; CHECK-NEXT: risbgn %r0, %r1, 32, 62, 1
+; CHECK-NEXT: nilf %r0, 3
+; CHECK-NEXT: stc %r0, 0(%r2)
+; CHECK-NEXT: br %r14
%trunc = trunc <2 x i64> %val to <2 x i1>
store <2 x i1> %trunc, <2 x i1> *%ptr
ret void
Modified: llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-512.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-512.ll?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-512.ll (original)
+++ llvm/trunk/test/CodeGen/X86/bitcast-and-setcc-512.ll Sat Jan 20 08:05:10 2018
@@ -522,198 +522,242 @@ define i64 @v64i8(<64 x i8> %a, <64 x i8
; 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 @@ define i64 @v64i8(<64 x i8> %a, <64 x i8
; 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 @@ define i64 @v64i8(<64 x i8> %a, <64 x i8
; 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
Modified: llvm/trunk/test/CodeGen/X86/bitcast-setcc-512.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bitcast-setcc-512.ll?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/bitcast-setcc-512.ll (original)
+++ llvm/trunk/test/CodeGen/X86/bitcast-setcc-512.ll Sat Jan 20 08:05:10 2018
@@ -213,201 +213,245 @@ define i64 @v64i8(<64 x i8> %a, <64 x i8
; 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 @@ define i64 @v64i8(<64 x i8> %a, <64 x i8
; 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 @@ define i64 @v64i8(<64 x i8> %a, <64 x i8
; 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
Modified: llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll (original)
+++ llvm/trunk/test/CodeGen/X86/clear_upper_vector_element_bits.ll Sat Jan 20 08:05:10 2018
@@ -839,234 +839,163 @@ define <16 x i16> @_clearupper16xi16b(<1
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 <16 x i8> @_clearupper16xi8b(<16
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 @@ define <32 x i8> @_clearupper32xi8b(<32
; 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 @@ define <32 x i8> @_clearupper32xi8b(<32
; 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
Modified: llvm/trunk/test/CodeGen/X86/pr20011.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pr20011.ll?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/pr20011.ll (original)
+++ llvm/trunk/test/CodeGen/X86/pr20011.ll Sat Jan 20 08:05:10 2018
@@ -7,20 +7,22 @@
define void @crash(i64 %x0, i64 %y0, %destTy* nocapture %dest) nounwind {
; X86-LABEL: crash:
; X86: # %bb.0:
-; X86-NEXT: movb {{[0-9]+}}(%esp), %al
-; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: movb {{[0-9]+}}(%esp), %cl
; X86-NEXT: movb {{[0-9]+}}(%esp), %dl
-; X86-NEXT: andb $3, %dl
-; X86-NEXT: movb %dl, (%ecx)
-; X86-NEXT: andb $3, %al
-; X86-NEXT: movb %al, (%ecx)
+; X86-NEXT: shlb $2, %dl
+; X86-NEXT: andb $3, %cl
+; X86-NEXT: orb %dl, %cl
+; X86-NEXT: andb $15, %cl
+; X86-NEXT: movb %cl, (%eax)
; X86-NEXT: retl
;
; 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
Modified: llvm/trunk/test/CodeGen/X86/trunc-store.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/trunc-store.ll?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/trunc-store.ll (original)
+++ llvm/trunk/test/CodeGen/X86/trunc-store.ll Sat Jan 20 08:05:10 2018
@@ -32,7 +32,6 @@ define void @fn1() {
; 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
Modified: llvm/trunk/test/CodeGen/X86/vector-compare-results.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-compare-results.ll?rev=323042&r1=323041&r2=323042&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-compare-results.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-compare-results.ll Sat Jan 20 08:05:10 2018
@@ -347,103 +347,125 @@ define <32 x i1> @test_cmp_v32i8(<32 x i
; 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 @@ define <32 x i1> @test_cmp_v32i8(<32 x i
; 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 @@ define <32 x i1> @test_cmp_v32i16(<32 x
; 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 @@ define <64 x i1> @test_cmp_v64i8(<64 x i
; 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 @@ define <64 x i1> @test_cmp_v64i8(<64 x i
; 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 @@ define <64 x i1> @test_cmp_v64i8(<64 x i
; 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 @@ define <32 x i1> @test_cmp_v32f32(<32 x
; 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 @@ define <32 x i1> @test_cmp_v32f32(<32 x
; 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 @@ define <32 x i1> @test_cmp_v32i32(<32 x
; 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 @@ define <64 x i1> @test_cmp_v64i16(<64 x
; 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 @@ define <128 x i1> @test_cmp_v128i8(<128
; 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 @@ define <128 x i1> @test_cmp_v128i8(<128
; 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 @@ define <128 x i1> @test_cmp_v128i8(<128
; 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 @@ define <32 x i1> @test_cmp_v32f64(<32 x
; 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 @@ define <32 x i1> @test_cmp_v32f64(<32 x
; 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 @@ define <32 x i1> @test_cmp_v32i64(<32 x
; 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 @@ define <32 x i1> @test_cmp_v32i64(<32 x
; 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
;
More information about the llvm-commits
mailing list