; SSE41-LABEL: eq_or_to_abs_vec4x64:
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [129,129]
-; SSE41-NEXT: movdqa %xmm1, %xmm3
+; SSE41-NEXT: movdqa %xmm0, %xmm3
; SSE41-NEXT: pcmpeqq %xmm2, %xmm3
-; SSE41-NEXT: pcmpeqq %xmm0, %xmm2
-; SSE41-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
-; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [18446744073709551487,18446744073709551487]
-; SSE41-NEXT: pcmpeqq %xmm3, %xmm1
-; SSE41-NEXT: pcmpeqq %xmm3, %xmm0
-; SSE41-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
-; SSE41-NEXT: orps %xmm2, %xmm0
+; SSE41-NEXT: pcmpeqq %xmm1, %xmm2
+; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [18446744073709551487,18446744073709551487]
+; SSE41-NEXT: pcmpeqq %xmm4, %xmm0
+; SSE41-NEXT: por %xmm3, %xmm0
+; SSE41-NEXT: pcmpeqq %xmm4, %xmm1
+; SSE41-NEXT: por %xmm2, %xmm1
+; SSE41-NEXT: packssdw %xmm1, %xmm0
; SSE41-NEXT: retq
;
; SSE2-LABEL: eq_or_to_abs_vec4x64:
; SSE41-LABEL: eq_or_to_abs_vec4x64_sext:
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [129,129]
-; SSE41-NEXT: movdqa %xmm1, %xmm3
+; SSE41-NEXT: movdqa %xmm0, %xmm3
; SSE41-NEXT: pcmpeqq %xmm2, %xmm3
-; SSE41-NEXT: pcmpeqq %xmm0, %xmm2
-; SSE41-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
-; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [18446744073709551487,18446744073709551487]
-; SSE41-NEXT: pcmpeqq %xmm3, %xmm1
-; SSE41-NEXT: pcmpeqq %xmm3, %xmm0
-; SSE41-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
-; SSE41-NEXT: orps %xmm2, %xmm0
+; SSE41-NEXT: pcmpeqq %xmm1, %xmm2
+; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [18446744073709551487,18446744073709551487]
+; SSE41-NEXT: pcmpeqq %xmm4, %xmm0
+; SSE41-NEXT: por %xmm3, %xmm0
+; SSE41-NEXT: pcmpeqq %xmm4, %xmm1
+; SSE41-NEXT: por %xmm2, %xmm1
+; SSE41-NEXT: packssdw %xmm1, %xmm0
; SSE41-NEXT: pmovsxdq %xmm0, %xmm2
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,2,3,3]
; SSE41-NEXT: pslld $31, %xmm1
; SSE41-LABEL: ne_and_to_abs_vec4x64:
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [129,129]
-; SSE41-NEXT: movdqa %xmm1, %xmm3
+; SSE41-NEXT: movdqa %xmm0, %xmm3
; SSE41-NEXT: pcmpeqq %xmm2, %xmm3
-; SSE41-NEXT: pcmpeqq %xmm0, %xmm2
-; SSE41-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
-; SSE41-NEXT: pcmpeqd %xmm3, %xmm3
-; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [18446744073709551487,18446744073709551487]
-; SSE41-NEXT: pcmpeqq %xmm4, %xmm1
-; SSE41-NEXT: pcmpeqq %xmm4, %xmm0
-; SSE41-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
-; SSE41-NEXT: orps %xmm2, %xmm0
-; SSE41-NEXT: xorps %xmm3, %xmm0
+; SSE41-NEXT: pcmpeqq %xmm1, %xmm2
+; SSE41-NEXT: pcmpeqd %xmm4, %xmm4
+; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [18446744073709551487,18446744073709551487]
+; SSE41-NEXT: pcmpeqq %xmm5, %xmm0
+; SSE41-NEXT: por %xmm3, %xmm0
+; SSE41-NEXT: pcmpeqq %xmm5, %xmm1
+; SSE41-NEXT: por %xmm2, %xmm1
+; SSE41-NEXT: packssdw %xmm1, %xmm0
+; SSE41-NEXT: pxor %xmm4, %xmm0
; SSE41-NEXT: retq
;
; SSE2-LABEL: ne_and_to_abs_vec4x64:
; SSE41-LABEL: ne_and_to_abs_vec4x64_sext:
; SSE41: # %bb.0:
; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [129,129]
-; SSE41-NEXT: movdqa %xmm1, %xmm3
+; SSE41-NEXT: movdqa %xmm0, %xmm3
; SSE41-NEXT: pcmpeqq %xmm2, %xmm3
-; SSE41-NEXT: pcmpeqq %xmm0, %xmm2
-; SSE41-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
-; SSE41-NEXT: pcmpeqd %xmm3, %xmm3
-; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [18446744073709551487,18446744073709551487]
-; SSE41-NEXT: pcmpeqq %xmm4, %xmm1
-; SSE41-NEXT: pcmpeqq %xmm4, %xmm0
-; SSE41-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
-; SSE41-NEXT: orps %xmm2, %xmm0
-; SSE41-NEXT: xorps %xmm3, %xmm0
+; SSE41-NEXT: pcmpeqq %xmm1, %xmm2
+; SSE41-NEXT: pcmpeqd %xmm4, %xmm4
+; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [18446744073709551487,18446744073709551487]
+; SSE41-NEXT: pcmpeqq %xmm5, %xmm0
+; SSE41-NEXT: por %xmm3, %xmm0
+; SSE41-NEXT: pcmpeqq %xmm5, %xmm1
+; SSE41-NEXT: por %xmm2, %xmm1
+; SSE41-NEXT: packssdw %xmm1, %xmm0
+; SSE41-NEXT: pxor %xmm4, %xmm0
; SSE41-NEXT: pmovsxdq %xmm0, %xmm2
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,2,3,3]
; SSE41-NEXT: pslld $31, %xmm1
; CHECK-NEXT: movq %rcx, %xmm0
; CHECK-NEXT: movq {{.*#+}} xmm3 = mem[0],zero
; CHECK-NEXT: pxor %xmm4, %xmm4
-; CHECK-NEXT: pcmpeqq %xmm4, %xmm0
; CHECK-NEXT: pcmpeqq %xmm4, %xmm2
-; CHECK-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm0[0,2]
-; CHECK-NEXT: pcmpeqd %xmm0, %xmm0
-; CHECK-NEXT: pcmpeqq %xmm4, %xmm3
+; CHECK-NEXT: pcmpeqq %xmm4, %xmm0
+; CHECK-NEXT: pcmpeqd %xmm5, %xmm5
; CHECK-NEXT: pcmpeqq %xmm4, %xmm1
-; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
-; CHECK-NEXT: orps %xmm2, %xmm1
-; CHECK-NEXT: xorps %xmm0, %xmm1
+; CHECK-NEXT: por %xmm2, %xmm1
+; CHECK-NEXT: pcmpeqq %xmm4, %xmm3
+; CHECK-NEXT: por %xmm0, %xmm3
+; CHECK-NEXT: packssdw %xmm3, %xmm1
+; CHECK-NEXT: pxor %xmm5, %xmm1
; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,2,2,2]
; CHECK-NEXT: pslld $31, %xmm0
; CHECK-NEXT: psrad $31, %xmm0