[llvm] d67b41a - [X86] Add clmul vector allones baseline tests for #200592 (#201321)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 3 06:06:51 PDT 2026


Author: Simon Pilgrim
Date: 2026-06-03T13:06:43Z
New Revision: d67b41a20ca55b47f4d09bdba609fc305a9d2484

URL: https://github.com/llvm/llvm-project/commit/d67b41a20ca55b47f4d09bdba609fc305a9d2484
DIFF: https://github.com/llvm/llvm-project/commit/d67b41a20ca55b47f4d09bdba609fc305a9d2484.diff

LOG: [X86] Add clmul vector allones baseline tests for #200592 (#201321)

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/clmul-vector.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/clmul-vector.ll b/llvm/test/CodeGen/X86/clmul-vector.ll
index 6fd01e446897d..c033a95850186 100644
--- a/llvm/test/CodeGen/X86/clmul-vector.ll
+++ b/llvm/test/CodeGen/X86/clmul-vector.ll
@@ -1,9 +1,10 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2    | FileCheck %s --check-prefixes=SSE2,SSE2-NOPCLMUL
-; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2,+pclmul | FileCheck %s --check-prefixes=SSE2,SSE-PCLMUL,SSE2-PCLMUL
-; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.2,+pclmul | FileCheck %s --check-prefixes=SSE-PCLMUL,SSE42
-; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+pclmul | FileCheck %s --check-prefixes=AVX2
-; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+vpclmulqdq | FileCheck %s --check-prefixes=AVX2
+; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2    | FileCheck %s --check-prefixes=SSE,SSE-NOPCLMUL,SSE2,SSE2-NOPCLMUL
+; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE-NOPCLMUL,SSE42,SSE42-NOPCLMUL
+; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2,+pclmul | FileCheck %s --check-prefixes=SSE,SSE-PCLMUL,SSE2,SSE2-PCLMUL
+; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.2,+pclmul | FileCheck %s --check-prefixes=SSE,SSE-PCLMUL,SSE42,SSE42-PCLMUL
+; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+pclmul | FileCheck %s --check-prefixes=AVX2,AVX2-PCLMUL
+; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+vpclmulqdq | FileCheck %s --check-prefixes=AVX2,AVX2-VPCLMULQDQ
 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+vpclmulqdq | FileCheck %s --check-prefixes=AVX512
 
 define <16 x i8> @clmul_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
@@ -834,6 +835,136 @@ define <4 x i32> @clmul_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: clmul_v4i32:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm2 = [2,2,2,2]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm3 = [1,1,1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm2 = [4,4,4,4]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm4 = [8,8,8,8]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm2 = [16,16,16,16]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm5 = [32,32,32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm3 = [64,64,64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovzxbd {{.*#+}} xmm2 = [128,128,128,128]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm4 = [256,256,256,256]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm5 = [512,512,512,512]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm2 = [1024,1024,1024,1024]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm3 = [2048,2048,2048,2048]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm4 = [4096,4096,4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm3 = [8192,8192,8192,8192]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm4 = [16384,16384,16384,16384]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovzxwd {{.*#+}} xmm3 = [32768,32768,32768,32768]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm4 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [16777216,16777216,16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [33554432,33554432,33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [67108864,67108864,67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [134217728,134217728,134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [268435456,268435456,268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [536870912,536870912,536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [1073741824,1073741824,1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE2-PCLMUL-LABEL: clmul_v4i32:
 ; SSE2-PCLMUL:       # %bb.0:
 ; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
@@ -850,24 +981,24 @@ define <4 x i32> @clmul_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
 ; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
 ; SSE2-PCLMUL-NEXT:    retq
 ;
-; SSE42-LABEL: clmul_v4i32:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    movdqa %xmm0, %xmm2
-; SSE42-NEXT:    pclmulqdq $0, %xmm1, %xmm2
-; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,1,1]
-; SSE42-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,1,1]
-; SSE42-NEXT:    pclmulqdq $0, %xmm3, %xmm4
-; SSE42-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
-; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[3,3,3,3]
-; SSE42-NEXT:    pclmulqdq $17, %xmm1, %xmm0
-; SSE42-NEXT:    movq %xmm0, %rax
-; SSE42-NEXT:    pinsrd $2, %eax, %xmm2
-; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[3,3,3,3]
-; SSE42-NEXT:    pclmulqdq $0, %xmm3, %xmm0
-; SSE42-NEXT:    movq %xmm0, %rax
-; SSE42-NEXT:    pinsrd $3, %eax, %xmm2
-; SSE42-NEXT:    movdqa %xmm2, %xmm0
-; SSE42-NEXT:    retq
+; SSE42-PCLMUL-LABEL: clmul_v4i32:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm2
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,1,1]
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,1,1]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm4
+; SSE42-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[3,3,3,3]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $17, %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    movq %xmm0, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %eax, %xmm2
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[3,3,3,3]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm0
+; SSE42-PCLMUL-NEXT:    movq %xmm0, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %eax, %xmm2
+; SSE42-PCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-PCLMUL-NEXT:    retq
 ;
 ; AVX2-LABEL: clmul_v4i32:
 ; AVX2:       # %bb.0:
@@ -1334,6 +1465,433 @@ define <2 x i64> @clmul_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: clmul_v2i64:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm15 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm14 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm13 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm12 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm5 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm11 = [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm11, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm6 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm4 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm2 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm10, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm1 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm1 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm1 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm15
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm14
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm15, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{.*#+}} xmm0 = [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE-PCLMUL-LABEL: clmul_v2i64:
 ; SSE-PCLMUL:       # %bb.0:
 ; SSE-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
@@ -2423,6 +2981,167 @@ define <4 x i32> @clmulr_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: clmulr_v4i32:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm2 = [2,2,2,2]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm9 = [1,1,1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm2 = [4,4,4,4]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm8 = [8,8,8,8]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm1 = [16,16,16,16]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm9 = [32,32,32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm1 = [64,64,64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovzxbd {{.*#+}} xmm9 = [128,128,128,128]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm1 = [256,256,256,256]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm8 = [512,512,512,512]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm10 = [1024,1024,1024,1024]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm1 = [2048,2048,2048,2048]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm8 = [4096,4096,4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm9 = [8192,8192,8192,8192]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm8 = [16384,16384,16384,16384]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovzxwd {{.*#+}} xmm9 = [32768,32768,32768,32768]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm10
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm9
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm9
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm10
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [16777216,16777216,16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [33554432,33554432,33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [67108864,67108864,67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [268435456,268435456,268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [536870912,536870912,536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [1073741824,1073741824,1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE2-PCLMUL-LABEL: clmulr_v4i32:
 ; SSE2-PCLMUL:       # %bb.0:
 ; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
@@ -2477,59 +3196,59 @@ define <4 x i32> @clmulr_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
 ; SSE2-PCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-PCLMUL-NEXT:    retq
 ;
-; SSE42-LABEL: clmulr_v4i32:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    pxor %xmm2, %xmm2
-; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3,4,5,6,7]
-; SSE42-NEXT:    pxor %xmm3, %xmm3
-; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm0[0,1],xmm3[2,3,4,5,6,7]
-; SSE42-NEXT:    pclmulqdq $0, %xmm2, %xmm3
-; SSE42-NEXT:    movq %xmm3, %rax
-; SSE42-NEXT:    movdqa %xmm0, %xmm3
-; SSE42-NEXT:    movdqa %xmm1, %xmm4
-; SSE42-NEXT:    movdqa %xmm0, %xmm5
-; SSE42-NEXT:    movdqa %xmm1, %xmm6
-; SSE42-NEXT:    movdqa %xmm0, %xmm7
-; SSE42-NEXT:    movdqa %xmm0, %xmm2
-; SSE42-NEXT:    pclmulqdq $0, %xmm1, %xmm2
-; SSE42-NEXT:    pshufd {{.*#+}} xmm10 = xmm1[1,1,1,1]
-; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[1,1,1,1]
-; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[3,3,3,3]
-; SSE42-NEXT:    pclmulqdq $17, %xmm1, %xmm0
-; SSE42-NEXT:    pshufd {{.*#+}} xmm11 = xmm1[3,3,3,3]
-; SSE42-NEXT:    psrlq $32, %xmm1
-; SSE42-NEXT:    psrlq $32, %xmm3
-; SSE42-NEXT:    pclmulqdq $0, %xmm1, %xmm3
-; SSE42-NEXT:    movq %xmm3, %rcx
-; SSE42-NEXT:    pxor %xmm1, %xmm1
-; SSE42-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm1[2],xmm4[3],xmm1[3]
-; SSE42-NEXT:    punpckhdq {{.*#+}} xmm5 = xmm5[2],xmm1[2],xmm5[3],xmm1[3]
-; SSE42-NEXT:    pclmulqdq $0, %xmm4, %xmm5
-; SSE42-NEXT:    movq %xmm5, %rdx
-; SSE42-NEXT:    psrldq {{.*#+}} xmm6 = xmm6[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
-; SSE42-NEXT:    psrldq {{.*#+}} xmm7 = xmm7[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
-; SSE42-NEXT:    pclmulqdq $0, %xmm6, %xmm7
-; SSE42-NEXT:    movq %xmm7, %rsi
-; SSE42-NEXT:    shrq $32, %rax
-; SSE42-NEXT:    pclmulqdq $0, %xmm10, %xmm8
-; SSE42-NEXT:    movd %eax, %xmm1
-; SSE42-NEXT:    shrq $32, %rcx
-; SSE42-NEXT:    pinsrd $1, %ecx, %xmm1
-; SSE42-NEXT:    shrq $32, %rdx
-; SSE42-NEXT:    pinsrd $2, %edx, %xmm1
-; SSE42-NEXT:    shrq $32, %rsi
-; SSE42-NEXT:    pinsrd $3, %esi, %xmm1
-; SSE42-NEXT:    paddd %xmm1, %xmm1
-; SSE42-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm8[0],xmm2[1],xmm8[1]
-; SSE42-NEXT:    movq %xmm0, %rax
-; SSE42-NEXT:    pinsrd $2, %eax, %xmm2
-; SSE42-NEXT:    pclmulqdq $0, %xmm9, %xmm11
-; SSE42-NEXT:    movq %xmm11, %rax
-; SSE42-NEXT:    pinsrd $3, %eax, %xmm2
-; SSE42-NEXT:    psrld $31, %xmm2
-; SSE42-NEXT:    por %xmm1, %xmm2
-; SSE42-NEXT:    movdqa %xmm2, %xmm0
-; SSE42-NEXT:    retq
+; SSE42-PCLMUL-LABEL: clmulr_v4i32:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    pxor %xmm2, %xmm2
+; SSE42-PCLMUL-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3,4,5,6,7]
+; SSE42-PCLMUL-NEXT:    pxor %xmm3, %xmm3
+; SSE42-PCLMUL-NEXT:    pblendw {{.*#+}} xmm3 = xmm0[0,1],xmm3[2,3,4,5,6,7]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    movq %xmm3, %rax
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-PCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-PCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm2
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm10 = xmm1[1,1,1,1]
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[1,1,1,1]
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[3,3,3,3]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $17, %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm11 = xmm1[3,3,3,3]
+; SSE42-PCLMUL-NEXT:    psrlq $32, %xmm1
+; SSE42-PCLMUL-NEXT:    psrlq $32, %xmm3
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm3
+; SSE42-PCLMUL-NEXT:    movq %xmm3, %rcx
+; SSE42-PCLMUL-NEXT:    pxor %xmm1, %xmm1
+; SSE42-PCLMUL-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm1[2],xmm4[3],xmm1[3]
+; SSE42-PCLMUL-NEXT:    punpckhdq {{.*#+}} xmm5 = xmm5[2],xmm1[2],xmm5[3],xmm1[3]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm5
+; SSE42-PCLMUL-NEXT:    movq %xmm5, %rdx
+; SSE42-PCLMUL-NEXT:    psrldq {{.*#+}} xmm6 = xmm6[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
+; SSE42-PCLMUL-NEXT:    psrldq {{.*#+}} xmm7 = xmm7[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm6, %xmm7
+; SSE42-PCLMUL-NEXT:    movq %xmm7, %rsi
+; SSE42-PCLMUL-NEXT:    shrq $32, %rax
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm10, %xmm8
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    shrq $32, %rcx
+; SSE42-PCLMUL-NEXT:    pinsrd $1, %ecx, %xmm1
+; SSE42-PCLMUL-NEXT:    shrq $32, %rdx
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %edx, %xmm1
+; SSE42-PCLMUL-NEXT:    shrq $32, %rsi
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %esi, %xmm1
+; SSE42-PCLMUL-NEXT:    paddd %xmm1, %xmm1
+; SSE42-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm8[0],xmm2[1],xmm8[1]
+; SSE42-PCLMUL-NEXT:    movq %xmm0, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %eax, %xmm2
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm9, %xmm11
+; SSE42-PCLMUL-NEXT:    movq %xmm11, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %eax, %xmm2
+; SSE42-PCLMUL-NEXT:    psrld $31, %xmm2
+; SSE42-PCLMUL-NEXT:    por %xmm1, %xmm2
+; SSE42-PCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-PCLMUL-NEXT:    retq
 ;
 ; AVX2-LABEL: clmulr_v4i32:
 ; AVX2:       # %bb.0:
@@ -3265,6 +3984,595 @@ define <2 x i64> @clmulr_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    addq $248, %rsp
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: clmulr_v2i64:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    subq $328, %rsp # imm = 0x148
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm2 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm14 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm3 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm11 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm11, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm9 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm3 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm4 = [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm0 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm0 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{.*#+}} xmm15 = [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm11 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm14 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm12 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    addq $328, %rsp # imm = 0x148
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE-PCLMUL-LABEL: clmulr_v2i64:
 ; SSE-PCLMUL:       # %bb.0:
 ; SSE-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
@@ -4377,6 +5685,168 @@ define <4 x i32> @clmulh_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    psrld $1, %xmm0
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: clmulh_v4i32:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm2 = [2,2,2,2]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm9 = [1,1,1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm2 = [4,4,4,4]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm8 = [8,8,8,8]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm1 = [16,16,16,16]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm9 = [32,32,32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbd {{.*#+}} xmm1 = [64,64,64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovzxbd {{.*#+}} xmm9 = [128,128,128,128]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm1 = [256,256,256,256]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm8 = [512,512,512,512]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm10 = [1024,1024,1024,1024]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm1 = [2048,2048,2048,2048]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm8 = [4096,4096,4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm9 = [8192,8192,8192,8192]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxwd {{.*#+}} xmm8 = [16384,16384,16384,16384]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovzxwd {{.*#+}} xmm9 = [32768,32768,32768,32768]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm10
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm9
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm9
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm10
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [16777216,16777216,16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [33554432,33554432,33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [67108864,67108864,67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [268435456,268435456,268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [536870912,536870912,536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [1073741824,1073741824,1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmulld %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psrld $1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE2-PCLMUL-LABEL: clmulh_v4i32:
 ; SSE2-PCLMUL:       # %bb.0:
 ; SSE2-PCLMUL-NEXT:    pxor %xmm2, %xmm2
@@ -4415,41 +5885,41 @@ define <4 x i32> @clmulh_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
 ; SSE2-PCLMUL-NEXT:    movdqa %xmm2, %xmm0
 ; SSE2-PCLMUL-NEXT:    retq
 ;
-; SSE42-LABEL: clmulh_v4i32:
-; SSE42:       # %bb.0:
-; SSE42-NEXT:    pxor %xmm3, %xmm3
-; SSE42-NEXT:    pxor %xmm2, %xmm2
-; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3,4,5,6,7]
-; SSE42-NEXT:    pxor %xmm4, %xmm4
-; SSE42-NEXT:    pblendw {{.*#+}} xmm4 = xmm0[0,1],xmm4[2,3,4,5,6,7]
-; SSE42-NEXT:    pclmulqdq $0, %xmm2, %xmm4
-; SSE42-NEXT:    movq %xmm4, %rax
-; SSE42-NEXT:    shrq $32, %rax
-; SSE42-NEXT:    movd %eax, %xmm2
-; SSE42-NEXT:    movdqa %xmm1, %xmm4
-; SSE42-NEXT:    psrlq $32, %xmm4
-; SSE42-NEXT:    movdqa %xmm0, %xmm5
-; SSE42-NEXT:    psrlq $32, %xmm5
-; SSE42-NEXT:    pclmulqdq $0, %xmm4, %xmm5
-; SSE42-NEXT:    movq %xmm5, %rax
-; SSE42-NEXT:    shrq $32, %rax
-; SSE42-NEXT:    pinsrd $1, %eax, %xmm2
-; SSE42-NEXT:    movdqa %xmm1, %xmm4
-; SSE42-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]
-; SSE42-NEXT:    movdqa %xmm0, %xmm5
-; SSE42-NEXT:    punpckhdq {{.*#+}} xmm5 = xmm5[2],xmm3[2],xmm5[3],xmm3[3]
-; SSE42-NEXT:    pclmulqdq $0, %xmm4, %xmm5
-; SSE42-NEXT:    movq %xmm5, %rax
-; SSE42-NEXT:    shrq $32, %rax
-; SSE42-NEXT:    pinsrd $2, %eax, %xmm2
-; SSE42-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
-; SSE42-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
-; SSE42-NEXT:    pclmulqdq $0, %xmm1, %xmm0
-; SSE42-NEXT:    movq %xmm0, %rax
-; SSE42-NEXT:    shrq $32, %rax
-; SSE42-NEXT:    pinsrd $3, %eax, %xmm2
-; SSE42-NEXT:    movdqa %xmm2, %xmm0
-; SSE42-NEXT:    retq
+; SSE42-PCLMUL-LABEL: clmulh_v4i32:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    pxor %xmm3, %xmm3
+; SSE42-PCLMUL-NEXT:    pxor %xmm2, %xmm2
+; SSE42-PCLMUL-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3,4,5,6,7]
+; SSE42-PCLMUL-NEXT:    pxor %xmm4, %xmm4
+; SSE42-PCLMUL-NEXT:    pblendw {{.*#+}} xmm4 = xmm0[0,1],xmm4[2,3,4,5,6,7]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE42-PCLMUL-NEXT:    movq %xmm4, %rax
+; SSE42-PCLMUL-NEXT:    shrq $32, %rax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm2
+; SSE42-PCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-PCLMUL-NEXT:    psrlq $32, %xmm4
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-PCLMUL-NEXT:    psrlq $32, %xmm5
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm5
+; SSE42-PCLMUL-NEXT:    movq %xmm5, %rax
+; SSE42-PCLMUL-NEXT:    shrq $32, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $1, %eax, %xmm2
+; SSE42-PCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-PCLMUL-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-PCLMUL-NEXT:    punpckhdq {{.*#+}} xmm5 = xmm5[2],xmm3[2],xmm5[3],xmm3[3]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm5
+; SSE42-PCLMUL-NEXT:    movq %xmm5, %rax
+; SSE42-PCLMUL-NEXT:    shrq $32, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %eax, %xmm2
+; SSE42-PCLMUL-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
+; SSE42-PCLMUL-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    movq %xmm0, %rax
+; SSE42-PCLMUL-NEXT:    shrq $32, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %eax, %xmm2
+; SSE42-PCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-PCLMUL-NEXT:    retq
 ;
 ; AVX2-LABEL: clmulh_v4i32:
 ; AVX2:       # %bb.0:
@@ -5154,6 +6624,596 @@ define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
 ; SSE2-NOPCLMUL-NEXT:    addq $248, %rsp
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: clmulh_v2i64:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    subq $328, %rsp # imm = 0x148
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm2 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm14 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm3 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm11 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm11, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm9 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm3 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm4 = [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm0 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm0 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{.*#+}} xmm15 = [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm11 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm14 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm12 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psrlq $1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    addq $328, %rsp # imm = 0x148
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE-PCLMUL-LABEL: clmulh_v2i64:
 ; SSE-PCLMUL:       # %bb.0:
 ; SSE-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
@@ -5749,6 +7809,569 @@ define void @commutative_clmul_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %p
 ; SSE2-NOPCLMUL-NEXT:    addq $312, %rsp # imm = 0x138
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: commutative_clmul_v2i64:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    subq $312, %rsp # imm = 0x138
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm11 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm11, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm6
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm13 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm10 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm0 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm14 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm14, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm9 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm9, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm6
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm15 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm0 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{.*#+}} xmm4 = [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm6 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm2 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm2 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm2 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm2 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm8 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm2 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movaps {{.*#+}} xmm2 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm12 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm14 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm10
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, (%rdi)
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, (%rsi)
+; SSE42-NOPCLMUL-NEXT:    addq $312, %rsp # imm = 0x138
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE-PCLMUL-LABEL: commutative_clmul_v2i64:
 ; SSE-PCLMUL:       # %bb.0:
 ; SSE-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
@@ -6422,6 +9045,586 @@ define void @commutative_clmulh_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    addq $248, %rsp
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: commutative_clmulh_v2i64:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    subq $328, %rsp # imm = 0x148
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm2 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm2 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm14 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm3 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm11 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm11, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm9 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm2 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm3 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm2 = [1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm4 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{.*#+}} xmm15 = [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm11 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm14 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm12 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pshufb {{.*#+}} xmm10 = xmm10[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psrlq $1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rdi)
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsi)
+; SSE42-NOPCLMUL-NEXT:    addq $328, %rsp # imm = 0x148
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE-PCLMUL-LABEL: commutative_clmulh_v2i64:
 ; SSE-PCLMUL:       # %bb.0:
 ; SSE-PCLMUL-NEXT:    movdqa %xmm1, %xmm2
@@ -7100,6 +10303,585 @@ define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %
 ; SSE2-NOPCLMUL-NEXT:    addq $248, %rsp
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: commutative_clmulr_v2i64:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    subq $328, %rsp # imm = 0x148
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm1, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm2 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm2 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm14 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm3 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm11 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm11, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm9 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm2 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm3 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm2 = [1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm4 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{.*#+}} xmm15 = [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm11 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm14 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm12 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm6, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm8, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pshufb {{.*#+}} xmm10 = xmm10[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psrlw $4, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pand %xmm3, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
+; SSE42-NOPCLMUL-NEXT:    pshufb %xmm10, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rdi)
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsi)
+; SSE42-NOPCLMUL-NEXT:    addq $328, %rsp # imm = 0x148
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE-PCLMUL-LABEL: commutative_clmulr_v2i64:
 ; SSE-PCLMUL:       # %bb.0:
 ; SSE-PCLMUL-NEXT:    movdqa %xmm1, %xmm2
@@ -7718,6 +11500,570 @@ define void @mul_use_commutative_clmul_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0
 ; SSE2-NOPCLMUL-NEXT:    popq %rbx
 ; SSE2-NOPCLMUL-NEXT:    retq
 ;
+; SSE42-NOPCLMUL-LABEL: mul_use_commutative_clmul_v2i64:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    pushq %rbx
+; SSE42-NOPCLMUL-NEXT:    subq $400, %rsp # imm = 0x190
+; SSE42-NOPCLMUL-NEXT:    movq %rsi, %rbx
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm11, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm14 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm15 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm0 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm13 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm13, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm10 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm0 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm0 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pand %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [1,1]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm5 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm11 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm15 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm8 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm13 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm12 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    pand %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm9, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm11, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm10
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm15 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm13
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm10
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, (%rdi)
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    callq use at PLT
+; SSE42-NOPCLMUL-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm0, (%rbx)
+; SSE42-NOPCLMUL-NEXT:    addq $400, %rsp # imm = 0x190
+; SSE42-NOPCLMUL-NEXT:    popq %rbx
+; SSE42-NOPCLMUL-NEXT:    retq
+;
 ; SSE-PCLMUL-LABEL: mul_use_commutative_clmul_v2i64:
 ; SSE-PCLMUL:       # %bb.0:
 ; SSE-PCLMUL-NEXT:    pushq %rbx
@@ -7776,3 +12122,9156 @@ define void @mul_use_commutative_clmul_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0
   store <2 x i64> %yx, ptr %p1
   ret void
 }
+
+define <16 x i8> @clmul_v16i8_allones(<16 x i8> %x) nounwind {
+; SSE2-LABEL: clmul_v16i8_allones:
+; SSE2:       # %bb.0:
+; SSE2-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
+; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2,u,2,u,2,u,2,u,2,u,2,u,2,u,2,u]
+; SSE2-NEXT:    movdqa %xmm1, %xmm4
+; SSE2-NEXT:    pmullw %xmm3, %xmm4
+; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
+; SSE2-NEXT:    pand %xmm2, %xmm4
+; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
+; SSE2-NEXT:    pmullw %xmm0, %xmm3
+; SSE2-NEXT:    pand %xmm2, %xmm3
+; SSE2-NEXT:    packuswb %xmm4, %xmm3
+; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1,u,1,u,1,u,1,u,1,u,1,u,1,u,1,u]
+; SSE2-NEXT:    movdqa %xmm1, %xmm5
+; SSE2-NEXT:    pmullw %xmm4, %xmm5
+; SSE2-NEXT:    pand %xmm2, %xmm5
+; SSE2-NEXT:    pmullw %xmm0, %xmm4
+; SSE2-NEXT:    pand %xmm2, %xmm4
+; SSE2-NEXT:    packuswb %xmm5, %xmm4
+; SSE2-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [4,u,4,u,4,u,4,u,4,u,4,u,4,u,4,u]
+; SSE2-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NEXT:    pmullw %xmm5, %xmm3
+; SSE2-NEXT:    pand %xmm2, %xmm3
+; SSE2-NEXT:    pmullw %xmm0, %xmm5
+; SSE2-NEXT:    pand %xmm2, %xmm5
+; SSE2-NEXT:    packuswb %xmm3, %xmm5
+; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [8,u,8,u,8,u,8,u,8,u,8,u,8,u,8,u]
+; SSE2-NEXT:    movdqa %xmm1, %xmm6
+; SSE2-NEXT:    pmullw %xmm3, %xmm6
+; SSE2-NEXT:    pand %xmm2, %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm3
+; SSE2-NEXT:    pand %xmm2, %xmm3
+; SSE2-NEXT:    packuswb %xmm6, %xmm3
+; SSE2-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [16,u,16,u,16,u,16,u,16,u,16,u,16,u,16,u]
+; SSE2-NEXT:    movdqa %xmm1, %xmm5
+; SSE2-NEXT:    pmullw %xmm4, %xmm5
+; SSE2-NEXT:    pand %xmm2, %xmm5
+; SSE2-NEXT:    pmullw %xmm0, %xmm4
+; SSE2-NEXT:    pand %xmm2, %xmm4
+; SSE2-NEXT:    packuswb %xmm5, %xmm4
+; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [32,u,32,u,32,u,32,u,32,u,32,u,32,u,32,u]
+; SSE2-NEXT:    movdqa %xmm1, %xmm6
+; SSE2-NEXT:    pmullw %xmm5, %xmm6
+; SSE2-NEXT:    pand %xmm2, %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm5
+; SSE2-NEXT:    pand %xmm2, %xmm5
+; SSE2-NEXT:    packuswb %xmm6, %xmm5
+; SSE2-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [64,u,64,u,64,u,64,u,64,u,64,u,64,u,64,u]
+; SSE2-NEXT:    movdqa %xmm1, %xmm6
+; SSE2-NEXT:    pmullw %xmm4, %xmm6
+; SSE2-NEXT:    pand %xmm2, %xmm6
+; SSE2-NEXT:    pmullw %xmm0, %xmm4
+; SSE2-NEXT:    pand %xmm2, %xmm4
+; SSE2-NEXT:    packuswb %xmm6, %xmm4
+; SSE2-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [128,u,128,u,128,u,128,u,128,u,128,u,128,u,128,u]
+; SSE2-NEXT:    pmullw %xmm3, %xmm1
+; SSE2-NEXT:    pand %xmm2, %xmm1
+; SSE2-NEXT:    pmullw %xmm3, %xmm0
+; SSE2-NEXT:    pand %xmm2, %xmm0
+; SSE2-NEXT:    packuswb %xmm1, %xmm0
+; SSE2-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NEXT:    retq
+;
+; SSE42-LABEL: clmul_v16i8_allones:
+; SSE42:       # %bb.0:
+; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
+; SSE42-NEXT:    pmullw %xmm0, %xmm2
+; SSE42-NEXT:    pmovzxbw {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]
+; SSE42-NEXT:    pand %xmm1, %xmm2
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2]
+; SSE42-NEXT:    psllw $8, %xmm4
+; SSE42-NEXT:    por %xmm2, %xmm4
+; SSE42-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NEXT:    pand %xmm1, %xmm2
+; SSE42-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]
+; SSE42-NEXT:    psllw $8, %xmm3
+; SSE42-NEXT:    por %xmm2, %xmm3
+; SSE42-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
+; SSE42-NEXT:    pmullw %xmm0, %xmm2
+; SSE42-NEXT:    pand %xmm1, %xmm2
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,4]
+; SSE42-NEXT:    psllw $8, %xmm4
+; SSE42-NEXT:    por %xmm2, %xmm4
+; SSE42-NEXT:    movdqa {{.*#+}} xmm5 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
+; SSE42-NEXT:    pmullw %xmm0, %xmm5
+; SSE42-NEXT:    pand %xmm1, %xmm5
+; SSE42-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,8]
+; SSE42-NEXT:    psllw $8, %xmm2
+; SSE42-NEXT:    por %xmm5, %xmm2
+; SSE42-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
+; SSE42-NEXT:    pmullw %xmm0, %xmm3
+; SSE42-NEXT:    pand %xmm1, %xmm3
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,16]
+; SSE42-NEXT:    psllw $8, %xmm4
+; SSE42-NEXT:    por %xmm3, %xmm4
+; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
+; SSE42-NEXT:    pmullw %xmm0, %xmm3
+; SSE42-NEXT:    pand %xmm1, %xmm3
+; SSE42-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32]
+; SSE42-NEXT:    psllw $8, %xmm5
+; SSE42-NEXT:    por %xmm3, %xmm5
+; SSE42-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
+; SSE42-NEXT:    pmullw %xmm0, %xmm3
+; SSE42-NEXT:    pand %xmm1, %xmm3
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64]
+; SSE42-NEXT:    psllw $8, %xmm4
+; SSE42-NEXT:    por %xmm3, %xmm4
+; SSE42-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
+; SSE42-NEXT:    pmullw %xmm0, %xmm2
+; SSE42-NEXT:    pand %xmm1, %xmm2
+; SSE42-NEXT:    pmaddubsw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [0,128,0,128,0,128,0,128,0,128,0,128,0,128,0,128]
+; SSE42-NEXT:    psllw $8, %xmm0
+; SSE42-NEXT:    por %xmm2, %xmm0
+; SSE42-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NEXT:    retq
+;
+; AVX2-LABEL: clmul_v16i8_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
+; AVX2-NEXT:    vpsllw $2, %ymm0, %ymm2
+; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
+; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm2
+; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm3
+; AVX2-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpaddw %ymm0, %ymm0, %ymm3
+; AVX2-NEXT:    vpand %ymm1, %ymm3, %ymm3
+; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
+; AVX2-NEXT:    vpackuswb %xmm4, %xmm3, %xmm3
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
+; AVX2-NEXT:    vpackuswb %xmm4, %xmm0, %xmm4
+; AVX2-NEXT:    vpxor %xmm3, %xmm4, %xmm3
+; AVX2-NEXT:    vpsllw $3, %ymm0, %ymm4
+; AVX2-NEXT:    vpand %ymm1, %ymm4, %ymm4
+; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm5
+; AVX2-NEXT:    vpackuswb %xmm5, %xmm4, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm2, %xmm2
+; AVX2-NEXT:    vpxor %xmm2, %xmm3, %xmm2
+; AVX2-NEXT:    vpsllw $4, %ymm0, %ymm3
+; AVX2-NEXT:    vpand %ymm1, %ymm3, %ymm3
+; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm4
+; AVX2-NEXT:    vpackuswb %xmm4, %xmm3, %xmm3
+; AVX2-NEXT:    vpsllw $5, %ymm0, %ymm4
+; AVX2-NEXT:    vpand %ymm1, %ymm4, %ymm4
+; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm5
+; AVX2-NEXT:    vpackuswb %xmm5, %xmm4, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm3
+; AVX2-NEXT:    vpsllw $6, %ymm0, %ymm4
+; AVX2-NEXT:    vpand %ymm1, %ymm4, %ymm4
+; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm5
+; AVX2-NEXT:    vpackuswb %xmm5, %xmm4, %xmm4
+; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm3
+; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
+; AVX2-NEXT:    vpsllw $7, %ymm0, %ymm0
+; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vpxor %xmm0, %xmm2, %xmm0
+; AVX2-NEXT:    vzeroupper
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmul_v16i8_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
+; AVX512-NEXT:    vpaddw %ymm1, %ymm1, %ymm2
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm2 = ymm2[0],zero,ymm2[1],zero,ymm2[2],zero,ymm2[3],zero,ymm2[4],zero,ymm2[5],zero,ymm2[6],zero,ymm2[7],zero,ymm2[8],zero,ymm2[9],zero,ymm2[10],zero,ymm2[11],zero,ymm2[12],zero,ymm2[13],zero,ymm2[14],zero,ymm2[15],zero
+; AVX512-NEXT:    vpmovdb %zmm2, %xmm2
+; AVX512-NEXT:    vpxor %xmm2, %xmm0, %xmm0
+; AVX512-NEXT:    vpsllw $2, %ymm1, %ymm2
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm2 = ymm2[0],zero,ymm2[1],zero,ymm2[2],zero,ymm2[3],zero,ymm2[4],zero,ymm2[5],zero,ymm2[6],zero,ymm2[7],zero,ymm2[8],zero,ymm2[9],zero,ymm2[10],zero,ymm2[11],zero,ymm2[12],zero,ymm2[13],zero,ymm2[14],zero,ymm2[15],zero
+; AVX512-NEXT:    vpmovdb %zmm2, %xmm2
+; AVX512-NEXT:    vpsllw $3, %ymm1, %ymm3
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm3 = ymm3[0],zero,ymm3[1],zero,ymm3[2],zero,ymm3[3],zero,ymm3[4],zero,ymm3[5],zero,ymm3[6],zero,ymm3[7],zero,ymm3[8],zero,ymm3[9],zero,ymm3[10],zero,ymm3[11],zero,ymm3[12],zero,ymm3[13],zero,ymm3[14],zero,ymm3[15],zero
+; AVX512-NEXT:    vpmovdb %zmm3, %xmm3
+; AVX512-NEXT:    vpternlogq {{.*#+}} xmm3 = xmm3 ^ xmm0 ^ xmm2
+; AVX512-NEXT:    vpsllw $4, %ymm1, %ymm0
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
+; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
+; AVX512-NEXT:    vpsllw $5, %ymm1, %ymm2
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm2 = ymm2[0],zero,ymm2[1],zero,ymm2[2],zero,ymm2[3],zero,ymm2[4],zero,ymm2[5],zero,ymm2[6],zero,ymm2[7],zero,ymm2[8],zero,ymm2[9],zero,ymm2[10],zero,ymm2[11],zero,ymm2[12],zero,ymm2[13],zero,ymm2[14],zero,ymm2[15],zero
+; AVX512-NEXT:    vpmovdb %zmm2, %xmm2
+; AVX512-NEXT:    vpternlogq {{.*#+}} xmm2 = xmm2 ^ xmm3 ^ xmm0
+; AVX512-NEXT:    vpsllw $6, %ymm1, %ymm0
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
+; AVX512-NEXT:    vpmovdb %zmm0, %xmm3
+; AVX512-NEXT:    vpsllw $7, %ymm1, %ymm0
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
+; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
+; AVX512-NEXT:    vpternlogq {{.*#+}} xmm0 = xmm0 ^ xmm2 ^ xmm3
+; AVX512-NEXT:    vzeroupper
+; AVX512-NEXT:    retq
+  %r = call <16 x i8> @llvm.clmul.v16i8(<16 x i8> %x, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
+  ret <16 x i8> %r
+}
+
+define <8 x i16> @clmul_v8i16_allones(<8 x i16> %x) nounwind {
+; SSE-LABEL: clmul_v8i16_allones:
+; SSE:       # %bb.0:
+; SSE-NEXT:    movdqa %xmm0, %xmm1
+; SSE-NEXT:    paddw %xmm1, %xmm1
+; SSE-NEXT:    pxor %xmm0, %xmm1
+; SSE-NEXT:    movdqa %xmm0, %xmm2
+; SSE-NEXT:    psllw $2, %xmm2
+; SSE-NEXT:    movdqa %xmm0, %xmm3
+; SSE-NEXT:    psllw $3, %xmm3
+; SSE-NEXT:    pxor %xmm2, %xmm3
+; SSE-NEXT:    pxor %xmm1, %xmm3
+; SSE-NEXT:    movdqa %xmm0, %xmm1
+; SSE-NEXT:    psllw $4, %xmm1
+; SSE-NEXT:    movdqa %xmm0, %xmm2
+; SSE-NEXT:    psllw $5, %xmm2
+; SSE-NEXT:    pxor %xmm1, %xmm2
+; SSE-NEXT:    movdqa %xmm0, %xmm1
+; SSE-NEXT:    psllw $6, %xmm1
+; SSE-NEXT:    pxor %xmm2, %xmm1
+; SSE-NEXT:    pxor %xmm3, %xmm1
+; SSE-NEXT:    movdqa %xmm0, %xmm2
+; SSE-NEXT:    psllw $7, %xmm2
+; SSE-NEXT:    movdqa %xmm0, %xmm3
+; SSE-NEXT:    psllw $8, %xmm3
+; SSE-NEXT:    pxor %xmm2, %xmm3
+; SSE-NEXT:    movdqa %xmm0, %xmm2
+; SSE-NEXT:    psllw $9, %xmm2
+; SSE-NEXT:    pxor %xmm3, %xmm2
+; SSE-NEXT:    movdqa %xmm0, %xmm3
+; SSE-NEXT:    psllw $10, %xmm3
+; SSE-NEXT:    pxor %xmm2, %xmm3
+; SSE-NEXT:    pxor %xmm1, %xmm3
+; SSE-NEXT:    movdqa %xmm0, %xmm1
+; SSE-NEXT:    psllw $11, %xmm1
+; SSE-NEXT:    movdqa %xmm0, %xmm2
+; SSE-NEXT:    psllw $12, %xmm2
+; SSE-NEXT:    pxor %xmm1, %xmm2
+; SSE-NEXT:    movdqa %xmm0, %xmm1
+; SSE-NEXT:    psllw $13, %xmm1
+; SSE-NEXT:    pxor %xmm2, %xmm1
+; SSE-NEXT:    movdqa %xmm0, %xmm2
+; SSE-NEXT:    psllw $14, %xmm2
+; SSE-NEXT:    pxor %xmm1, %xmm2
+; SSE-NEXT:    psllw $15, %xmm0
+; SSE-NEXT:    pxor %xmm2, %xmm0
+; SSE-NEXT:    pxor %xmm3, %xmm0
+; SSE-NEXT:    retq
+;
+; AVX2-LABEL: clmul_v8i16_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    movl $65535, %eax # imm = 0xFFFF
+; AVX2-NEXT:    vmovq %rax, %xmm1
+; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm4 = xmm2[1,1,1,1]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm2, %xmm4
+; AVX2-NEXT:    vmovq %xmm4, %rax
+; AVX2-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[3,3,3,3]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX2-NEXT:    vmovq %xmm2, %rax
+; AVX2-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm2
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm4 = xmm0[1,1,1,1]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vmovq %xmm4, %rax
+; AVX2-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vmovq %xmm0, %rax
+; AVX2-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm0
+; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28,29,u,u,u,u,u,u,u,u]
+; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
+; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
+; AVX2-NEXT:    vzeroupper
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmul_v8i16_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    movl $65535, %eax # imm = 0xFFFF
+; AVX512-NEXT:    vmovq %rax, %xmm1
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
+; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm4 = xmm2[1,1,1,1]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm2, %xmm4
+; AVX512-NEXT:    vmovq %xmm4, %rax
+; AVX512-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[3,3,3,3]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX512-NEXT:    vmovq %xmm2, %rax
+; AVX512-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm2
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm4 = xmm0[1,1,1,1]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm4
+; AVX512-NEXT:    vmovq %xmm4, %rax
+; AVX512-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vmovq %xmm0, %rax
+; AVX512-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm0
+; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX512-NEXT:    vpmovdw %ymm0, %xmm0
+; AVX512-NEXT:    vzeroupper
+; AVX512-NEXT:    retq
+  %r = call <8 x i16> @llvm.clmul.v8i16(<8 x i16> %x, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
+  ret <8 x i16> %r
+}
+
+define <4 x i32> @clmul_v4i32_allones(<4 x i32> %x) nounwind {
+; SSE2-NOPCLMUL-LABEL: clmul_v4i32_allones:
+; SSE2-NOPCLMUL:       # %bb.0:
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [4,4,4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [8,8,8,8]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [16,16,16,16]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [32,32,32,32]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [64,64,64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [128,128,128,128]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [256,256,256,256]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [512,512,512,512]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [1024,1024,1024,1024]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [4096,4096,4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [8192,8192,8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [16384,16384,16384,16384]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [65536,65536,65536,65536]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [131072,131072,131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [262144,262144,262144,262144]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [1048576,1048576,1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [2097152,2097152,2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [4194304,4194304,4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [8388608,8388608,8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [16777216,16777216,16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [33554432,33554432,33554432,33554432]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [67108864,67108864,67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [134217728,134217728,134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [268435456,268435456,268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [536870912,536870912,536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [1073741824,1073741824,1073741824,1073741824]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    retq
+;
+; SSE42-NOPCLMUL-LABEL: clmul_v4i32_allones:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    paddd %xmm1, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $2, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $3, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $5, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $7, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $10, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $11, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $13, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $14, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $15, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $16, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $17, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $18, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $19, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $20, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $21, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $22, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $23, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $24, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $25, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $26, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $27, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pslld $28, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $29, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $30, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $31, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    retq
+;
+; SSE2-PCLMUL-LABEL: clmul_v4i32_allones:
+; SSE2-PCLMUL:       # %bb.0:
+; SSE2-PCLMUL-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; SSE2-PCLMUL-NEXT:    movq %rax, %xmm1
+; SSE2-PCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[3,3,3,3]
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm2
+; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-PCLMUL-NEXT:    pclmulqdq $1, %xmm1, %xmm3
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
+; SSE2-PCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,1,1]
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm2
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm0
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]
+; SSE2-PCLMUL-NEXT:    retq
+;
+; SSE42-PCLMUL-LABEL: clmul_v4i32_allones:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; SSE42-PCLMUL-NEXT:    movq %rax, %xmm2
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,1,1]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm1
+; SSE42-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
+; SSE42-PCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[3,3,3,3]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $1, %xmm2, %xmm0
+; SSE42-PCLMUL-NEXT:    movq %xmm0, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    movq %xmm3, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    retq
+;
+; AVX2-LABEL: clmul_v4i32_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; AVX2-NEXT:    vmovq %rax, %xmm1
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[1,1,1,1]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm3
+; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm3
+; AVX2-NEXT:    vmovq %xmm3, %rax
+; AVX2-NEXT:    vpinsrd $2, %eax, %xmm2, %xmm2
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vmovq %xmm0, %rax
+; AVX2-NEXT:    vpinsrd $3, %eax, %xmm2, %xmm0
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmul_v4i32_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; AVX512-NEXT:    vmovq %rax, %xmm1
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[1,1,1,1]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm3
+; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm3
+; AVX512-NEXT:    vmovq %xmm3, %rax
+; AVX512-NEXT:    vpinsrd $2, %eax, %xmm2, %xmm2
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vmovq %xmm0, %rax
+; AVX512-NEXT:    vpinsrd $3, %eax, %xmm2, %xmm0
+; AVX512-NEXT:    retq
+  %r = call <4 x i32> @llvm.clmul.v4i32(<4 x i32> %x, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
+  ret <4 x i32> %r
+}
+
+define <2 x i64> @clmul_v2i64_allones(<2 x i64> %x) nounwind {
+; SSE2-NOPCLMUL-LABEL: clmul_v2i64_allones:
+; SSE2-NOPCLMUL:       # %bb.0:
+; SSE2-NOPCLMUL-NEXT:    subq $200, %rsp
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm14
+; SSE2-NOPCLMUL-NEXT:    psrlq $32, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [8,8]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [16,16]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [32,32]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [128,128]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [256,256]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [512,512]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [1024,1024]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2048,2048]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, (%rsp) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [16384,16384]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [32768,32768]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [65536,65536]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm13, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm12, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm11, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm10, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm9, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [33554432,33554432]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    por %xmm6, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [1073741824,1073741824]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm14
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE2-NOPCLMUL-NEXT:    por %xmm1, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm14
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm14, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm13
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    addq $200, %rsp
+; SSE2-NOPCLMUL-NEXT:    retq
+;
+; SSE42-NOPCLMUL-LABEL: clmul_v2i64_allones:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    subq $200, %rsp
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm14
+; SSE42-NOPCLMUL-NEXT:    psrlq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm15, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm1 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm1 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm4 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm4 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm3 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm13, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm12, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm11, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm3 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm10, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm9, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm8, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm3 = [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    por %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm2 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    por %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    por %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    por %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{.*#+}} xmm4 = [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm14
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    por %xmm1, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm14
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE42-NOPCLMUL-NEXT:    addq $200, %rsp
+; SSE42-NOPCLMUL-NEXT:    retq
+;
+; SSE-PCLMUL-LABEL: clmul_v2i64_allones:
+; SSE-PCLMUL:       # %bb.0:
+; SSE-PCLMUL-NEXT:    movq $-1, %rax
+; SSE-PCLMUL-NEXT:    movq %rax, %xmm1
+; SSE-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE-PCLMUL-NEXT:    pclmulqdq $1, %xmm1, %xmm2
+; SSE-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm0
+; SSE-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
+; SSE-PCLMUL-NEXT:    retq
+;
+; AVX2-LABEL: clmul_v2i64_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    movq $-1, %rax
+; AVX2-NEXT:    vmovq %rax, %xmm1
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm2
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmul_v2i64_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    movq $-1, %rax
+; AVX512-NEXT:    vmovq %rax, %xmm1
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm2
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
+; AVX512-NEXT:    retq
+  %r = call <2 x i64> @llvm.clmul.v2i64(<2 x i64> %x, <2 x i64> <i64 -1, i64 -1>)
+  ret <2 x i64> %r
+}
+
+define <16 x i8> @clmulr_v16i8_allones(<16 x i8> %x) nounwind {
+; SSE2-LABEL: clmulr_v16i8_allones:
+; SSE2:       # %bb.0:
+; SSE2-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NEXT:    pxor %xmm3, %xmm3
+; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
+; SSE2-NEXT:    movdqa %xmm1, %xmm2
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    paddw %xmm4, %xmm4
+; SSE2-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NEXT:    psllw $2, %xmm5
+; SSE2-NEXT:    movdqa %xmm2, %xmm6
+; SSE2-NEXT:    psllw $3, %xmm6
+; SSE2-NEXT:    pxor %xmm5, %xmm6
+; SSE2-NEXT:    pxor %xmm4, %xmm6
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    psllw $4, %xmm4
+; SSE2-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NEXT:    psllw $5, %xmm5
+; SSE2-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    psllw $6, %xmm4
+; SSE2-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NEXT:    pxor %xmm6, %xmm4
+; SSE2-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NEXT:    psllw $7, %xmm5
+; SSE2-NEXT:    pxor %xmm6, %xmm6
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm1[8],xmm6[9],xmm1[9],xmm6[10],xmm1[10],xmm6[11],xmm1[11],xmm6[12],xmm1[12],xmm6[13],xmm1[13],xmm6[14],xmm1[14],xmm6[15],xmm1[15]
+; SSE2-NEXT:    pxor %xmm5, %xmm6
+; SSE2-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NEXT:    psllw $9, %xmm5
+; SSE2-NEXT:    pxor %xmm6, %xmm5
+; SSE2-NEXT:    movdqa %xmm2, %xmm6
+; SSE2-NEXT:    psllw $10, %xmm6
+; SSE2-NEXT:    pxor %xmm5, %xmm6
+; SSE2-NEXT:    pxor %xmm4, %xmm6
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    psllw $11, %xmm4
+; SSE2-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NEXT:    psllw $12, %xmm5
+; SSE2-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    psllw $13, %xmm4
+; SSE2-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NEXT:    psllw $14, %xmm2
+; SSE2-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NEXT:    pxor %xmm6, %xmm2
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    paddw %xmm4, %xmm4
+; SSE2-NEXT:    pxor %xmm0, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $2, %xmm5
+; SSE2-NEXT:    movdqa %xmm0, %xmm6
+; SSE2-NEXT:    psllw $3, %xmm6
+; SSE2-NEXT:    pxor %xmm5, %xmm6
+; SSE2-NEXT:    pxor %xmm4, %xmm6
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    psllw $4, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $5, %xmm5
+; SSE2-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    psllw $6, %xmm4
+; SSE2-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NEXT:    pxor %xmm6, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $7, %xmm5
+; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
+; SSE2-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NEXT:    psllw $9, %xmm1
+; SSE2-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-NEXT:    psllw $10, %xmm3
+; SSE2-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NEXT:    psllw $11, %xmm1
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    psllw $12, %xmm4
+; SSE2-NEXT:    pxor %xmm1, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NEXT:    psllw $13, %xmm1
+; SSE2-NEXT:    pxor %xmm4, %xmm1
+; SSE2-NEXT:    psllw $14, %xmm0
+; SSE2-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NEXT:    psrlw $7, %xmm0
+; SSE2-NEXT:    psrlw $7, %xmm2
+; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
+; SSE2-NEXT:    pand %xmm1, %xmm2
+; SSE2-NEXT:    pand %xmm1, %xmm0
+; SSE2-NEXT:    packuswb %xmm2, %xmm0
+; SSE2-NEXT:    retq
+;
+; SSE42-LABEL: clmulr_v16i8_allones:
+; SSE42:       # %bb.0:
+; SSE42-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NEXT:    pxor %xmm3, %xmm3
+; SSE42-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]
+; SSE42-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    paddw %xmm4, %xmm4
+; SSE42-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NEXT:    psllw $2, %xmm5
+; SSE42-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NEXT:    psllw $3, %xmm6
+; SSE42-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    psllw $4, %xmm4
+; SSE42-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NEXT:    psllw $5, %xmm5
+; SSE42-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    psllw $6, %xmm4
+; SSE42-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NEXT:    psllw $7, %xmm5
+; SSE42-NEXT:    pxor %xmm6, %xmm6
+; SSE42-NEXT:    punpckhbw {{.*#+}} xmm6 = xmm6[8],xmm1[8],xmm6[9],xmm1[9],xmm6[10],xmm1[10],xmm6[11],xmm1[11],xmm6[12],xmm1[12],xmm6[13],xmm1[13],xmm6[14],xmm1[14],xmm6[15],xmm1[15]
+; SSE42-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NEXT:    psllw $9, %xmm5
+; SSE42-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NEXT:    psllw $10, %xmm6
+; SSE42-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    psllw $11, %xmm4
+; SSE42-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NEXT:    psllw $12, %xmm5
+; SSE42-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    psllw $13, %xmm4
+; SSE42-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NEXT:    psllw $14, %xmm2
+; SSE42-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NEXT:    pxor %xmm6, %xmm2
+; SSE42-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
+; SSE42-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NEXT:    paddw %xmm1, %xmm1
+; SSE42-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    psllw $2, %xmm4
+; SSE42-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NEXT:    psllw $3, %xmm5
+; SSE42-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NEXT:    pxor %xmm1, %xmm5
+; SSE42-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NEXT:    psllw $4, %xmm1
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    psllw $5, %xmm4
+; SSE42-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NEXT:    psllw $6, %xmm1
+; SSE42-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NEXT:    pxor %xmm5, %xmm1
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    psllw $7, %xmm4
+; SSE42-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NEXT:    psllw $9, %xmm3
+; SSE42-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    psllw $10, %xmm4
+; SSE42-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NEXT:    psllw $11, %xmm1
+; SSE42-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NEXT:    psllw $12, %xmm3
+; SSE42-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NEXT:    psllw $13, %xmm1
+; SSE42-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NEXT:    psllw $14, %xmm0
+; SSE42-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NEXT:    psrlw $7, %xmm0
+; SSE42-NEXT:    psrlw $7, %xmm2
+; SSE42-NEXT:    pmovzxbw {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]
+; SSE42-NEXT:    pand %xmm1, %xmm2
+; SSE42-NEXT:    pand %xmm1, %xmm0
+; SSE42-NEXT:    packuswb %xmm2, %xmm0
+; SSE42-NEXT:    retq
+;
+; AVX2-LABEL: clmulr_v16i8_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
+; AVX2-NEXT:    vpaddw %ymm0, %ymm0, %ymm1
+; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm1
+; AVX2-NEXT:    vpsllw $2, %ymm0, %ymm2
+; AVX2-NEXT:    vpsllw $3, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm1
+; AVX2-NEXT:    vpsllw $4, %ymm0, %ymm2
+; AVX2-NEXT:    vpsllw $5, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $6, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm1
+; AVX2-NEXT:    vpsllw $7, %ymm0, %ymm2
+; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $9, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $10, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm1
+; AVX2-NEXT:    vpsllw $11, %ymm0, %ymm2
+; AVX2-NEXT:    vpsllw $12, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $13, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $14, %ymm0, %ymm0
+; AVX2-NEXT:    vpxor %ymm0, %ymm2, %ymm0
+; AVX2-NEXT:    vpxor %ymm0, %ymm1, %ymm0
+; AVX2-NEXT:    vpsrlw $7, %ymm0, %ymm0
+; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vzeroupper
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmulr_v16i8_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
+; AVX512-NEXT:    vpaddw %ymm0, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $2, %ymm0, %ymm2
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm2 ^ ymm0 ^ ymm1
+; AVX512-NEXT:    vpsllw $3, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $4, %ymm0, %ymm3
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm3 = ymm3 ^ ymm2 ^ ymm1
+; AVX512-NEXT:    vpsllw $5, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $6, %ymm0, %ymm2
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm2 ^ ymm3 ^ ymm1
+; AVX512-NEXT:    vpsllw $7, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $8, %ymm0, %ymm3
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm3 = ymm3 ^ ymm2 ^ ymm1
+; AVX512-NEXT:    vpsllw $9, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $10, %ymm0, %ymm2
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm2 ^ ymm3 ^ ymm1
+; AVX512-NEXT:    vpsllw $11, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $12, %ymm0, %ymm3
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm3 = ymm3 ^ ymm2 ^ ymm1
+; AVX512-NEXT:    vpsllw $13, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $14, %ymm0, %ymm0
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm0 ^ ymm3 ^ ymm1
+; AVX512-NEXT:    vpsrlw $7, %ymm0, %ymm0
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
+; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
+; AVX512-NEXT:    vzeroupper
+; AVX512-NEXT:    retq
+  %x.ext = zext <16 x i8> %x to <16 x i16>
+  %clmul = call <16 x i16> @llvm.clmul.v16i16(<16 x i16> %x.ext, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
+  %res.ext = lshr <16 x i16> %clmul, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
+  %res = trunc <16 x i16> %res.ext to <16 x i8>
+  ret <16 x i8> %res
+}
+
+define <8 x i16> @clmulr_v8i16_allones(<8 x i16> %x) nounwind {
+; SSE2-NOPCLMUL-LABEL: clmulr_v8i16_allones:
+; SSE2-NOPCLMUL:       # %bb.0:
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
+; SSE2-NOPCLMUL-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4],xmm1[4],xmm8[5],xmm1[5],xmm8[6],xmm1[6],xmm8[7],xmm1[7]
+; SSE2-NOPCLMUL-NEXT:    punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2,2,2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [16,16,16,16]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [32,32,32,32]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [64,64,64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [128,128,128,128]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [256,256,256,256]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [512,512,512,512]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm6 = xmm6[0],xmm3[0],xmm6[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [1024,1024,1024,1024]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4096,4096,4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [8192,8192,8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [16384,16384,16384,16384]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm6 = xmm6[0],xmm4[0],xmm6[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [65536,65536,65536,65536]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [131072,131072,131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [262144,262144,262144,262144]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm13 = [1048576,1048576,1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm13, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm13, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2097152,2097152,2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4194304,4194304,4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [8388608,8388608,8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [16777216,16777216,16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm15, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [33554432,33554432,33554432,33554432]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [67108864,67108864,67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [134217728,134217728,134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [268435456,268435456,268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [536870912,536870912,536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [1073741824,1073741824,1073741824,1073741824]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm6 = xmm6[0],xmm1[0],xmm6[1],xmm1[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [4,4,4,4]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm8[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [2,2,2,2]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm0[0],xmm5[1],xmm0[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [8,8,8,8]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [16,16,16,16]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [32,32,32,32]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [64,64,64,64]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [128,128,128,128]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [256,256,256,256]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [512,512,512,512]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm0[0],xmm7[1],xmm0[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [1024,1024,1024,1024]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [4096,4096,4096,4096]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [8192,8192,8192,8192]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [16384,16384,16384,16384]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [32768,32768,32768,32768]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [65536,65536,65536,65536]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [131072,131072,131072,131072]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [262144,262144,262144,262144]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm13, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm13[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [2097152,2097152,2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm13 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm13 = xmm13[0],xmm5[0],xmm13[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm13
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [4194304,4194304,4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [8388608,8388608,8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm15[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm14[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm8[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    paddd %xmm2, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psrad $16, %xmm2
+; SSE2-NOPCLMUL-NEXT:    paddd %xmm6, %xmm6
+; SSE2-NOPCLMUL-NEXT:    psrad $16, %xmm6
+; SSE2-NOPCLMUL-NEXT:    packssdw %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm0
+; SSE2-NOPCLMUL-NEXT:    retq
+;
+; SSE42-NOPCLMUL-LABEL: clmulr_v8i16_allones:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm4
+; SSE42-NOPCLMUL-NEXT:    punpckhwd {{.*#+}} xmm4 = xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm3
+; SSE42-NOPCLMUL-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
+; SSE42-NOPCLMUL-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    paddd %xmm5, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pslld $3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pslld $8, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $9, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pslld $10, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $11, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $12, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $14, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $15, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $17, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $18, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $19, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $20, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $21, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $22, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $23, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $24, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $25, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $26, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $27, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $28, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $29, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $30, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    paddd %xmm4, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $4, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $5, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $8, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $9, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $10, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $11, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $14, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $15, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $17, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $18, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $19, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $20, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $21, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $22, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $23, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $24, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $25, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $26, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $27, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $28, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $29, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $30, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psrld $15, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psrld $15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
+; SSE42-NOPCLMUL-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
+; SSE42-NOPCLMUL-NEXT:    packusdw %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    retq
+;
+; SSE2-PCLMUL-LABEL: clmulr_v8i16_allones:
+; SSE2-PCLMUL:       # %bb.0:
+; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-PCLMUL-NEXT:    pxor %xmm3, %xmm3
+; SSE2-PCLMUL-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; SSE2-PCLMUL-NEXT:    movq %rax, %xmm2
+; SSE2-PCLMUL-NEXT:    pextrw $3, %xmm0, %eax
+; SSE2-PCLMUL-NEXT:    movd %eax, %xmm4
+; SSE2-PCLMUL-NEXT:    pextrw $1, %xmm0, %eax
+; SSE2-PCLMUL-NEXT:    movd %eax, %xmm5
+; SSE2-PCLMUL-NEXT:    pextrw $7, %xmm0, %eax
+; SSE2-PCLMUL-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
+; SSE2-PCLMUL-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
+; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-PCLMUL-NEXT:    pclmulqdq $1, %xmm2, %xmm3
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm0
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm5
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]
+; SSE2-PCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-PCLMUL-NEXT:    pclmulqdq $1, %xmm2, %xmm3
+; SSE2-PCLMUL-NEXT:    movd %eax, %xmm4
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-PCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[1,1,1,1]
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm1
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
+; SSE2-PCLMUL-NEXT:    paddd %xmm1, %xmm1
+; SSE2-PCLMUL-NEXT:    psrad $16, %xmm1
+; SSE2-PCLMUL-NEXT:    paddd %xmm0, %xmm0
+; SSE2-PCLMUL-NEXT:    psrad $16, %xmm0
+; SSE2-PCLMUL-NEXT:    packssdw %xmm1, %xmm0
+; SSE2-PCLMUL-NEXT:    retq
+;
+; SSE42-PCLMUL-LABEL: clmulr_v8i16_allones:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    pxor %xmm2, %xmm2
+; SSE42-PCLMUL-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; SSE42-PCLMUL-NEXT:    movq %rax, %xmm4
+; SSE42-PCLMUL-NEXT:    pextrw $5, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm1
+; SSE42-PCLMUL-NEXT:    pextrw $4, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm3
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm3
+; SSE42-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
+; SSE42-PCLMUL-NEXT:    pextrw $6, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm1
+; SSE42-PCLMUL-NEXT:    movq %xmm1, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %eax, %xmm3
+; SSE42-PCLMUL-NEXT:    pextrw $7, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm1
+; SSE42-PCLMUL-NEXT:    movq %xmm1, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %eax, %xmm3
+; SSE42-PCLMUL-NEXT:    pextrw $1, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm5
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm5
+; SSE42-PCLMUL-NEXT:    pextrw $0, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm1
+; SSE42-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1]
+; SSE42-PCLMUL-NEXT:    pextrw $2, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm5
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm5
+; SSE42-PCLMUL-NEXT:    movq %xmm5, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    pextrw $3, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm0
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm4, %xmm0
+; SSE42-PCLMUL-NEXT:    movq %xmm0, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    psrld $15, %xmm1
+; SSE42-PCLMUL-NEXT:    psrld $15, %xmm3
+; SSE42-PCLMUL-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0],xmm2[1],xmm3[2],xmm2[3],xmm3[4],xmm2[5],xmm3[6],xmm2[7]
+; SSE42-PCLMUL-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
+; SSE42-PCLMUL-NEXT:    packusdw %xmm3, %xmm1
+; SSE42-PCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    retq
+;
+; AVX2-LABEL: clmulr_v8i16_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
+; AVX2-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; AVX2-NEXT:    vmovq %rax, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm4 = xmm2[1,1,1,1]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm2, %xmm4
+; AVX2-NEXT:    vmovq %xmm4, %rax
+; AVX2-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[3,3,3,3]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX2-NEXT:    vmovq %xmm2, %rax
+; AVX2-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm2
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm4 = xmm0[1,1,1,1]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vmovq %xmm4, %rax
+; AVX2-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vmovq %xmm0, %rax
+; AVX2-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm0
+; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX2-NEXT:    vpsrld $15, %ymm0, %ymm0
+; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28,29,u,u,u,u,u,u,u,u]
+; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
+; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
+; AVX2-NEXT:    vzeroupper
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmulr_v8i16_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
+; AVX512-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; AVX512-NEXT:    vmovq %rax, %xmm1
+; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm4 = xmm2[1,1,1,1]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm2, %xmm4
+; AVX512-NEXT:    vmovq %xmm4, %rax
+; AVX512-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[3,3,3,3]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX512-NEXT:    vmovq %xmm2, %rax
+; AVX512-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm2
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm4 = xmm0[1,1,1,1]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm4
+; AVX512-NEXT:    vmovq %xmm4, %rax
+; AVX512-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vmovq %xmm0, %rax
+; AVX512-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm0
+; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX512-NEXT:    vpsrld $15, %ymm0, %ymm0
+; AVX512-NEXT:    vpmovdw %ymm0, %xmm0
+; AVX512-NEXT:    vzeroupper
+; AVX512-NEXT:    retq
+  %x.ext = zext <8 x i16> %x to <8 x i32>
+  %clmul = call <8 x i32> @llvm.clmul.v8i32(<8 x i32> %x.ext, <8 x i32> <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>)
+  %res.ext = lshr <8 x i32> %clmul, <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>
+  %res = trunc <8 x i32> %res.ext to <8 x i16>
+  ret <8 x i16> %res
+}
+
+define <4 x i32> @clmulr_v4i32_allones(<4 x i32> %x) nounwind {
+; SSE2-NOPCLMUL-LABEL: clmulr_v4i32_allones:
+; SSE2-NOPCLMUL:       # %bb.0:
+; SSE2-NOPCLMUL-NEXT:    subq $200, %rsp
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm14
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm14 = xmm14[0],xmm1[0],xmm14[1],xmm1[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [8,8]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [16,16]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [32,32]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [128,128]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, (%rsp) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [256,256]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [512,512]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [1024,1024]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [2048,2048]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [16384,16384]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [32768,32768]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [65536,65536]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm15 # [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13 # [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12 # [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11 # [2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm10 # [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm9 # [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8 # [33554432,33554432]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7 # [67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6 # [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [1073741824,1073741824]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm14 # [2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm0
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm15
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm13
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm10
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm14
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm0
+; SSE2-NOPCLMUL-NEXT:    punpckhdq {{.*#+}} xmm14 = xmm14[2],xmm0[2],xmm14[3],xmm0[3]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [2,2]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [4,4]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [8,8]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [16,16]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [32,32]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [64,64]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [128,128]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm8 = [256,256]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [512,512]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [1024,1024]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm2 = [2048,2048]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm13 = [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [16384,16384]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [65536,65536]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [33554432,33554432]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [1073741824,1073741824]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm14 # [2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm3
+; SSE2-NOPCLMUL-NEXT:    punpckhdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    # xmm3 = xmm3[2],mem[2],xmm3[3],mem[3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm14, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm8
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm9
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm14
+; SSE2-NOPCLMUL-NEXT:    psrlq $31, %xmm14
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psrlq $31, %xmm0
+; SSE2-NOPCLMUL-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm14[0,2]
+; SSE2-NOPCLMUL-NEXT:    addq $200, %rsp
+; SSE2-NOPCLMUL-NEXT:    retq
+;
+; SSE42-NOPCLMUL-LABEL: clmulr_v4i32_allones:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    subq $200, %rsp
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{.*#+}} xmm14 = xmm0[0],zero,xmm0[1],zero
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [4,4]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [2,2]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [8,8]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [16,16]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [32,32]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [64,64]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [128,128]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [512,512]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [65536,65536]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [131072,131072]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm15 # [262144,262144]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13 # [524288,524288]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12 # [1048576,1048576]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11 # [2097152,2097152]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4194304,4194304]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm10 # [8388608,8388608]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm9 # [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8 # [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7 # [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6 # [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm14 # [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm0
+; SSE42-NOPCLMUL-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm15
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm15, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm10
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    punpckhdq {{.*#+}} xmm14 = xmm14[2],xmm2[2],xmm14[3],xmm2[3]
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm8 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm5 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm13 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm7 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm9 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm4 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm10 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm11 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm12 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm3 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm15 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm15, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm0 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm4 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm0 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm6 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm0 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm0 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm4 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm14 # [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    punpckhdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    # xmm2 = xmm2[2],mem[2],xmm2[3],mem[3]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm13, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm9
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm10
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm14
+; SSE42-NOPCLMUL-NEXT:    psrlq $31, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psrlq $31, %xmm0
+; SSE42-NOPCLMUL-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm14[0,2]
+; SSE42-NOPCLMUL-NEXT:    addq $200, %rsp
+; SSE42-NOPCLMUL-NEXT:    retq
+;
+; SSE2-PCLMUL-LABEL: clmulr_v4i32_allones:
+; SSE2-PCLMUL:       # %bb.0:
+; SSE2-PCLMUL-NEXT:    xorps %xmm1, %xmm1
+; SSE2-PCLMUL-NEXT:    movaps %xmm0, %xmm2
+; SSE2-PCLMUL-NEXT:    unpckhps {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
+; SSE2-PCLMUL-NEXT:    movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]
+; SSE2-PCLMUL-NEXT:    movq $-1, %rax
+; SSE2-PCLMUL-NEXT:    movq %rax, %xmm3
+; SSE2-PCLMUL-NEXT:    movaps %xmm0, %xmm4
+; SSE2-PCLMUL-NEXT:    psrlq $32, %xmm4
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm4
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm1
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
+; SSE2-PCLMUL-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm0
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm2
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]
+; SSE2-PCLMUL-NEXT:    psrlq $31, %xmm2
+; SSE2-PCLMUL-NEXT:    psrlq $31, %xmm1
+; SSE2-PCLMUL-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
+; SSE2-PCLMUL-NEXT:    movaps %xmm1, %xmm0
+; SSE2-PCLMUL-NEXT:    retq
+;
+; SSE42-PCLMUL-LABEL: clmulr_v4i32_allones:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    movq $-1, %rax
+; SSE42-PCLMUL-NEXT:    movq %rax, %xmm2
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-PCLMUL-NEXT:    psrlq $32, %xmm3
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    pxor %xmm4, %xmm4
+; SSE42-PCLMUL-NEXT:    pxor %xmm1, %xmm1
+; SSE42-PCLMUL-NEXT:    pblendw {{.*#+}} xmm1 = xmm0[0,1],xmm1[2,3,4,5,6,7]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm1
+; SSE42-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-PCLMUL-NEXT:    psrldq {{.*#+}} xmm3 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm4[2],xmm0[3],xmm4[3]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm0
+; SSE42-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]
+; SSE42-PCLMUL-NEXT:    psrlq $31, %xmm0
+; SSE42-PCLMUL-NEXT:    psrlq $31, %xmm1
+; SSE42-PCLMUL-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm0[0,2]
+; SSE42-PCLMUL-NEXT:    movaps %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    retq
+;
+; AVX2-PCLMUL-LABEL: clmulr_v4i32_allones:
+; AVX2-PCLMUL:       # %bb.0:
+; AVX2-PCLMUL-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
+; AVX2-PCLMUL-NEXT:    movq $-1, %rax
+; AVX2-PCLMUL-NEXT:    vmovq %rax, %xmm1
+; AVX2-PCLMUL-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX2-PCLMUL-NEXT:    vpclmulqdq $1, %xmm1, %xmm2, %xmm3
+; AVX2-PCLMUL-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm4
+; AVX2-PCLMUL-NEXT:    vinserti128 $1, %xmm3, %ymm4, %ymm3
+; AVX2-PCLMUL-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX2-PCLMUL-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-PCLMUL-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX2-PCLMUL-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
+; AVX2-PCLMUL-NEXT:    vpsrlq $31, %ymm0, %ymm0
+; AVX2-PCLMUL-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-PCLMUL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
+; AVX2-PCLMUL-NEXT:    vzeroupper
+; AVX2-PCLMUL-NEXT:    retq
+;
+; AVX2-VPCLMULQDQ-LABEL: clmulr_v4i32_allones:
+; AVX2-VPCLMULQDQ:       # %bb.0:
+; AVX2-VPCLMULQDQ-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
+; AVX2-VPCLMULQDQ-NEXT:    movq $-1, %rax
+; AVX2-VPCLMULQDQ-NEXT:    vmovq %rax, %xmm1
+; AVX2-VPCLMULQDQ-NEXT:    vpbroadcastq %xmm1, %ymm1
+; AVX2-VPCLMULQDQ-NEXT:    vpclmulqdq $1, %ymm1, %ymm0, %ymm2
+; AVX2-VPCLMULQDQ-NEXT:    vpclmulqdq $0, %ymm1, %ymm0, %ymm0
+; AVX2-VPCLMULQDQ-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[2],ymm2[2]
+; AVX2-VPCLMULQDQ-NEXT:    vpsrlq $31, %ymm0, %ymm0
+; AVX2-VPCLMULQDQ-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-VPCLMULQDQ-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
+; AVX2-VPCLMULQDQ-NEXT:    vzeroupper
+; AVX2-VPCLMULQDQ-NEXT:    retq
+;
+; AVX512-LABEL: clmulr_v4i32_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
+; AVX512-NEXT:    movq $-1, %rax
+; AVX512-NEXT:    vpbroadcastq %rax, %ymm1
+; AVX512-NEXT:    vpclmulqdq $1, %ymm1, %ymm0, %ymm2
+; AVX512-NEXT:    vpclmulqdq $0, %ymm1, %ymm0, %ymm0
+; AVX512-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[2],ymm2[2]
+; AVX512-NEXT:    vpsrlq $31, %ymm0, %ymm0
+; AVX512-NEXT:    vpmovqd %ymm0, %xmm0
+; AVX512-NEXT:    vzeroupper
+; AVX512-NEXT:    retq
+  %x.ext = zext <4 x i32> %x to <4 x i64>
+  %clmul = call <4 x i64> @llvm.clmul.v4i64(<4 x i64> %x.ext, <4 x i64> <i64 -1, i64 -1, i64 -1, i64 -1>)
+  %res.ext = lshr <4 x i64> %clmul, <i64 31, i64 31, i64 31, i64 31>
+  %res = trunc <4 x i64> %res.ext to <4 x i32>
+  ret <4 x i32> %res
+}
+
+define <2 x i64> @clmulr_v2i64_allones(<2 x i64> %x) nounwind {
+; SSE2-NOPCLMUL-LABEL: clmulr_v2i64_allones:
+; SSE2-NOPCLMUL:       # %bb.0:
+; SSE2-NOPCLMUL-NEXT:    pushq %r15
+; SSE2-NOPCLMUL-NEXT:    pushq %r14
+; SSE2-NOPCLMUL-NEXT:    pushq %r13
+; SSE2-NOPCLMUL-NEXT:    pushq %r12
+; SSE2-NOPCLMUL-NEXT:    pushq %rbx
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
+; SSE2-NOPCLMUL-NEXT:    movq %xmm1, %rax
+; SSE2-NOPCLMUL-NEXT:    movq %xmm0, %rcx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rsi
+; SSE2-NOPCLMUL-NEXT:    bswapq %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rsi, %rdx
+; SSE2-NOPCLMUL-NEXT:    shrq $4, %rdx
+; SSE2-NOPCLMUL-NEXT:    movabsq $1085102592571150095, %rdi # imm = 0xF0F0F0F0F0F0F0F
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %rdx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %rsi
+; SSE2-NOPCLMUL-NEXT:    orq %rdx, %rsi
+; SSE2-NOPCLMUL-NEXT:    movabsq $3689348814741910323, %rdx # imm = 0x3333333333333333
+; SSE2-NOPCLMUL-NEXT:    movq %rsi, %r8
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r8
+; SSE2-NOPCLMUL-NEXT:    shrq $2, %rsi
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %rsi
+; SSE2-NOPCLMUL-NEXT:    leaq (%rsi,%r8,4), %r8
+; SSE2-NOPCLMUL-NEXT:    movabsq $6148914691236517205, %rsi # imm = 0x5555555555555555
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %r9
+; SSE2-NOPCLMUL-NEXT:    shrq %r8
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r10
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    leaq (%r10,%r9,2), %r9
+; SSE2-NOPCLMUL-NEXT:    leaq (%r9,%r9), %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    leaq (,%r9,4), %r11
+; SSE2-NOPCLMUL-NEXT:    leaq (,%r9,8), %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $5, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $6, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $7, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $8, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $9, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $10, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $12, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $13, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $15, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $16, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $17, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $18, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $19, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $20, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $21, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $22, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $23, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $24, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $25, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $26, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $27, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $28, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $29, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $30, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $31, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $32, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $33, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $34, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $35, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $36, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $37, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $38, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $39, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $40, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $41, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $42, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $43, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $44, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $45, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $46, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $47, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $48, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $49, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $50, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $51, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $52, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $53, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $54, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $55, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $56, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $57, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $58, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $59, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $60, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $61, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $62, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $63, %r8
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r8
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r8
+; SSE2-NOPCLMUL-NEXT:    bswapq %r8
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE2-NOPCLMUL-NEXT:    shrq $4, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %r8
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r8
+; SSE2-NOPCLMUL-NEXT:    orq %r9, %r8
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r9
+; SSE2-NOPCLMUL-NEXT:    shrq $2, %r8
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r8
+; SSE2-NOPCLMUL-NEXT:    leaq (%r8,%r9,4), %r8
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %r9
+; SSE2-NOPCLMUL-NEXT:    shrq %r8
+; SSE2-NOPCLMUL-NEXT:    movabsq $6148914691236517204, %r10 # imm = 0x5555555555555554
+; SSE2-NOPCLMUL-NEXT:    andq %r10, %r8
+; SSE2-NOPCLMUL-NEXT:    leaq (%r8,%r9,2), %r8
+; SSE2-NOPCLMUL-NEXT:    shrq %r8
+; SSE2-NOPCLMUL-NEXT:    leaq (%rcx,%rcx), %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rcx,4), %r11
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rcx,8), %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $5, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $6, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $7, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $8, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $9, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $10, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $12, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $13, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $15, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $16, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $17, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $18, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $19, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $20, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $21, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $22, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $23, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $24, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $25, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $26, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $27, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $28, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $29, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $30, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $31, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $32, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $33, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $34, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $35, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $36, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $37, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $38, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $39, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $40, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $41, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $42, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $43, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $44, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $45, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $46, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $47, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $48, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $49, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $50, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $51, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $52, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $53, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $54, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $55, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $56, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $57, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $58, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $59, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $60, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $61, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $62, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r8
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE2-NOPCLMUL-NEXT:    bswapq %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    shrq $4, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r11
+; SSE2-NOPCLMUL-NEXT:    orq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shrq $2, %r11
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r11
+; SSE2-NOPCLMUL-NEXT:    leaq (%r11,%rbx,4), %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %rbx
+; SSE2-NOPCLMUL-NEXT:    shrq %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %r14
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %r14
+; SSE2-NOPCLMUL-NEXT:    leaq (%r14,%rbx,2), %rbx
+; SSE2-NOPCLMUL-NEXT:    leaq (%rbx,%rbx), %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rbx,4), %r15
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rbx,8), %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $5, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $6, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $7, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $8, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $9, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $10, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $11, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $12, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $13, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $14, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $15, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $16, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $17, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $18, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $19, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE2-NOPCLMUL-NEXT:    shlq $20, %r13
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $21, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $22, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $23, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $24, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $25, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $26, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $27, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $28, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $29, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $30, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $31, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $32, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $33, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $34, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE2-NOPCLMUL-NEXT:    shlq $35, %r13
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $36, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $37, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $38, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $39, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $40, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $41, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $42, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $43, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $44, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $45, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $46, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $47, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $48, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $49, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $50, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $51, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $52, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $53, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE2-NOPCLMUL-NEXT:    shlq $54, %r13
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $55, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $56, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $57, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $58, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $59, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $60, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $61, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $62, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $63, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r11
+; SSE2-NOPCLMUL-NEXT:    bswapq %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    shrq $4, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r11
+; SSE2-NOPCLMUL-NEXT:    orq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rdi
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %rdi
+; SSE2-NOPCLMUL-NEXT:    shrq $2, %r11
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r11
+; SSE2-NOPCLMUL-NEXT:    leaq (%r11,%rdi,4), %rdx
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %rsi
+; SSE2-NOPCLMUL-NEXT:    shrq %rdx
+; SSE2-NOPCLMUL-NEXT:    andq %r10, %rdx
+; SSE2-NOPCLMUL-NEXT:    leaq (%rdx,%rsi,2), %rdx
+; SSE2-NOPCLMUL-NEXT:    shrq %rdx
+; SSE2-NOPCLMUL-NEXT:    leaq (%rax,%rax), %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rax,4), %rdi
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rax,8), %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $5, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $6, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $7, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $8, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $9, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $10, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $11, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $12, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $13, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $14, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $15, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $16, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $17, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $18, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $19, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $20, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $21, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $22, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $23, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $24, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $25, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $26, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $27, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $28, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $29, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $30, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $31, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $32, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $33, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $34, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $35, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $36, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $37, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $38, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $39, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $40, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $41, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $42, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $43, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $44, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $45, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $46, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $47, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $48, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $49, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $50, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $51, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $52, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $53, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $54, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $55, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $56, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $57, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $58, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $59, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $60, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $61, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $62, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdx
+; SSE2-NOPCLMUL-NEXT:    shlq $63, %rcx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rcx
+; SSE2-NOPCLMUL-NEXT:    shrdq $63, %r8, %rcx
+; SSE2-NOPCLMUL-NEXT:    shlq $63, %rax
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rax
+; SSE2-NOPCLMUL-NEXT:    shrdq $63, %rdx, %rax
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %xmm1
+; SSE2-NOPCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE2-NOPCLMUL-NEXT:    popq %rbx
+; SSE2-NOPCLMUL-NEXT:    popq %r12
+; SSE2-NOPCLMUL-NEXT:    popq %r13
+; SSE2-NOPCLMUL-NEXT:    popq %r14
+; SSE2-NOPCLMUL-NEXT:    popq %r15
+; SSE2-NOPCLMUL-NEXT:    retq
+;
+; SSE42-NOPCLMUL-LABEL: clmulr_v2i64_allones:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    pushq %r15
+; SSE42-NOPCLMUL-NEXT:    pushq %r14
+; SSE42-NOPCLMUL-NEXT:    pushq %r13
+; SSE42-NOPCLMUL-NEXT:    pushq %r12
+; SSE42-NOPCLMUL-NEXT:    pushq %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %xmm0, %rax
+; SSE42-NOPCLMUL-NEXT:    pextrq $1, %xmm0, %rcx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rsi
+; SSE42-NOPCLMUL-NEXT:    bswapq %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rsi, %rdx
+; SSE42-NOPCLMUL-NEXT:    shrq $4, %rdx
+; SSE42-NOPCLMUL-NEXT:    movabsq $1085102592571150095, %rdi # imm = 0xF0F0F0F0F0F0F0F
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %rdx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %rsi
+; SSE42-NOPCLMUL-NEXT:    orq %rdx, %rsi
+; SSE42-NOPCLMUL-NEXT:    movabsq $3689348814741910323, %rdx # imm = 0x3333333333333333
+; SSE42-NOPCLMUL-NEXT:    movq %rsi, %r8
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r8
+; SSE42-NOPCLMUL-NEXT:    shrq $2, %rsi
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %rsi
+; SSE42-NOPCLMUL-NEXT:    leaq (%rsi,%r8,4), %r8
+; SSE42-NOPCLMUL-NEXT:    movabsq $6148914691236517205, %rsi # imm = 0x5555555555555555
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %r9
+; SSE42-NOPCLMUL-NEXT:    shrq %r8
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r10
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    leaq (%r10,%r9,2), %r9
+; SSE42-NOPCLMUL-NEXT:    leaq (%r9,%r9), %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    leaq (,%r9,4), %r11
+; SSE42-NOPCLMUL-NEXT:    leaq (,%r9,8), %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $5, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $6, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $7, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $8, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $9, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $10, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $12, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $13, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $15, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $16, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $17, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $18, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $19, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $20, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $21, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $22, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $23, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $24, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $25, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $26, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $27, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $28, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $29, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $30, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $31, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $32, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $33, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $34, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $35, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $36, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $37, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $38, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $39, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $40, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $41, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $42, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $43, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $44, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $45, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $46, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $47, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $48, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $49, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $50, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $51, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $52, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $53, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $54, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $55, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $56, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $57, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $58, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $59, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $60, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $61, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $62, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $63, %r8
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r8
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r8
+; SSE42-NOPCLMUL-NEXT:    bswapq %r8
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE42-NOPCLMUL-NEXT:    shrq $4, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %r8
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r8
+; SSE42-NOPCLMUL-NEXT:    orq %r9, %r8
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r9
+; SSE42-NOPCLMUL-NEXT:    shrq $2, %r8
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r8
+; SSE42-NOPCLMUL-NEXT:    leaq (%r8,%r9,4), %r8
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %r9
+; SSE42-NOPCLMUL-NEXT:    shrq %r8
+; SSE42-NOPCLMUL-NEXT:    movabsq $6148914691236517204, %r10 # imm = 0x5555555555555554
+; SSE42-NOPCLMUL-NEXT:    andq %r10, %r8
+; SSE42-NOPCLMUL-NEXT:    leaq (%r8,%r9,2), %r8
+; SSE42-NOPCLMUL-NEXT:    shrq %r8
+; SSE42-NOPCLMUL-NEXT:    leaq (%rcx,%rcx), %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rcx,4), %r11
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rcx,8), %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $5, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $6, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $7, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $8, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $9, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $10, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $12, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $13, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $15, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $16, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $17, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $18, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $19, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $20, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $21, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $22, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $23, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $24, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $25, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $26, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $27, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $28, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $29, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $30, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $31, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $32, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $33, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $34, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $35, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $36, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $37, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $38, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $39, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $40, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $41, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $42, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $43, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $44, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $45, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $46, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $47, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $48, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $49, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $50, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $51, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $52, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $53, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $54, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $55, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $56, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $57, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $58, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $59, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $60, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $61, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $62, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r8
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE42-NOPCLMUL-NEXT:    bswapq %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    shrq $4, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r11
+; SSE42-NOPCLMUL-NEXT:    orq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shrq $2, %r11
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r11
+; SSE42-NOPCLMUL-NEXT:    leaq (%r11,%rbx,4), %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %rbx
+; SSE42-NOPCLMUL-NEXT:    shrq %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %r14
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %r14
+; SSE42-NOPCLMUL-NEXT:    leaq (%r14,%rbx,2), %rbx
+; SSE42-NOPCLMUL-NEXT:    leaq (%rbx,%rbx), %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rbx,4), %r15
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rbx,8), %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $5, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $6, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $7, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $8, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $9, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $10, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $11, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $12, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $13, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $14, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $15, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $16, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $17, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $18, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $19, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE42-NOPCLMUL-NEXT:    shlq $20, %r13
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $21, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $22, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $23, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $24, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $25, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $26, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $27, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $28, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $29, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $30, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $31, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $32, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $33, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $34, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE42-NOPCLMUL-NEXT:    shlq $35, %r13
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $36, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $37, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $38, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $39, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $40, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $41, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $42, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $43, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $44, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $45, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $46, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $47, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $48, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $49, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $50, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $51, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $52, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $53, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE42-NOPCLMUL-NEXT:    shlq $54, %r13
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $55, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $56, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $57, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $58, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $59, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $60, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $61, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $62, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $63, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r11
+; SSE42-NOPCLMUL-NEXT:    bswapq %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    shrq $4, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r11
+; SSE42-NOPCLMUL-NEXT:    orq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rdi
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %rdi
+; SSE42-NOPCLMUL-NEXT:    shrq $2, %r11
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r11
+; SSE42-NOPCLMUL-NEXT:    leaq (%r11,%rdi,4), %rdx
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %rsi
+; SSE42-NOPCLMUL-NEXT:    shrq %rdx
+; SSE42-NOPCLMUL-NEXT:    andq %r10, %rdx
+; SSE42-NOPCLMUL-NEXT:    leaq (%rdx,%rsi,2), %rdx
+; SSE42-NOPCLMUL-NEXT:    shrq %rdx
+; SSE42-NOPCLMUL-NEXT:    leaq (%rax,%rax), %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rax,4), %rdi
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rax,8), %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $5, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $6, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $7, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $8, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $9, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $10, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $11, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $12, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $13, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $14, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $15, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $16, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $17, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $18, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $19, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $20, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $21, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $22, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $23, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $24, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $25, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $26, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $27, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $28, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $29, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $30, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $31, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $32, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $33, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $34, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $35, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $36, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $37, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $38, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $39, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $40, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $41, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $42, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $43, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $44, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $45, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $46, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $47, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $48, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $49, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $50, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $51, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $52, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $53, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $54, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $55, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $56, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $57, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $58, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $59, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $60, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $61, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $62, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdx
+; SSE42-NOPCLMUL-NEXT:    shlq $63, %rcx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rcx
+; SSE42-NOPCLMUL-NEXT:    shrdq $63, %r8, %rcx
+; SSE42-NOPCLMUL-NEXT:    shlq $63, %rax
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rax
+; SSE42-NOPCLMUL-NEXT:    shrdq $63, %rdx, %rax
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %xmm0
+; SSE42-NOPCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE42-NOPCLMUL-NEXT:    popq %rbx
+; SSE42-NOPCLMUL-NEXT:    popq %r12
+; SSE42-NOPCLMUL-NEXT:    popq %r13
+; SSE42-NOPCLMUL-NEXT:    popq %r14
+; SSE42-NOPCLMUL-NEXT:    popq %r15
+; SSE42-NOPCLMUL-NEXT:    retq
+;
+; SSE2-PCLMUL-LABEL: clmulr_v2i64_allones:
+; SSE2-PCLMUL:       # %bb.0:
+; SSE2-PCLMUL-NEXT:    movq $-1, %rax
+; SSE2-PCLMUL-NEXT:    movq %rax, %xmm1
+; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-PCLMUL-NEXT:    pclmulqdq $1, %xmm1, %xmm2
+; SSE2-PCLMUL-NEXT:    movq %xmm2, %rax
+; SSE2-PCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]
+; SSE2-PCLMUL-NEXT:    movq %xmm2, %rcx
+; SSE2-PCLMUL-NEXT:    xorq %rax, %rcx
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm0
+; SSE2-PCLMUL-NEXT:    movq %xmm0, %rdx
+; SSE2-PCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
+; SSE2-PCLMUL-NEXT:    movq %xmm0, %rsi
+; SSE2-PCLMUL-NEXT:    xorq %rdx, %rsi
+; SSE2-PCLMUL-NEXT:    shldq $1, %rdx, %rsi
+; SSE2-PCLMUL-NEXT:    shldq $1, %rax, %rcx
+; SSE2-PCLMUL-NEXT:    movq %rcx, %xmm1
+; SSE2-PCLMUL-NEXT:    movq %rsi, %xmm0
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE2-PCLMUL-NEXT:    retq
+;
+; SSE42-PCLMUL-LABEL: clmulr_v2i64_allones:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    movq $-1, %rax
+; SSE42-PCLMUL-NEXT:    movq %rax, %xmm1
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-PCLMUL-NEXT:    pclmulqdq $1, %xmm1, %xmm2
+; SSE42-PCLMUL-NEXT:    movq %xmm2, %rax
+; SSE42-PCLMUL-NEXT:    pextrq $1, %xmm2, %rcx
+; SSE42-PCLMUL-NEXT:    xorq %rax, %rcx
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    movq %xmm0, %rdx
+; SSE42-PCLMUL-NEXT:    pextrq $1, %xmm0, %rsi
+; SSE42-PCLMUL-NEXT:    xorq %rdx, %rsi
+; SSE42-PCLMUL-NEXT:    shldq $1, %rdx, %rsi
+; SSE42-PCLMUL-NEXT:    shldq $1, %rax, %rcx
+; SSE42-PCLMUL-NEXT:    movq %rcx, %xmm1
+; SSE42-PCLMUL-NEXT:    movq %rsi, %xmm0
+; SSE42-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE42-PCLMUL-NEXT:    retq
+;
+; AVX2-LABEL: clmulr_v2i64_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    movq $-1, %rax
+; AVX2-NEXT:    vmovq %rax, %xmm1
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm2
+; AVX2-NEXT:    vmovq %xmm2, %rax
+; AVX2-NEXT:    vpextrq $1, %xmm2, %rcx
+; AVX2-NEXT:    xorq %rax, %rcx
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vmovq %xmm0, %rdx
+; AVX2-NEXT:    vpextrq $1, %xmm0, %rsi
+; AVX2-NEXT:    xorq %rdx, %rsi
+; AVX2-NEXT:    shldq $1, %rdx, %rsi
+; AVX2-NEXT:    shldq $1, %rax, %rcx
+; AVX2-NEXT:    vmovq %rcx, %xmm0
+; AVX2-NEXT:    vmovq %rsi, %xmm1
+; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmulr_v2i64_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    movq $-1, %rax
+; AVX512-NEXT:    vmovq %rax, %xmm1
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm2
+; AVX512-NEXT:    vmovq %xmm2, %rax
+; AVX512-NEXT:    vpextrq $1, %xmm2, %rcx
+; AVX512-NEXT:    xorq %rax, %rcx
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vmovq %xmm0, %rdx
+; AVX512-NEXT:    vpextrq $1, %xmm0, %rsi
+; AVX512-NEXT:    xorq %rdx, %rsi
+; AVX512-NEXT:    shldq $1, %rdx, %rsi
+; AVX512-NEXT:    shldq $1, %rax, %rcx
+; AVX512-NEXT:    vmovq %rcx, %xmm0
+; AVX512-NEXT:    vmovq %rsi, %xmm1
+; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
+; AVX512-NEXT:    retq
+  %x.ext = zext <2 x i64> %x to <2 x i128>
+  %clmul = call <2 x i128> @llvm.clmul.v2i128(<2 x i128> %x.ext, <2 x i128> <i128 -1, i128 -1>)
+  %res.ext = lshr <2 x i128> %clmul, <i128 63, i128 63>
+  %res = trunc <2 x i128> %res.ext to <2 x i64>
+  ret <2 x i64> %res
+}
+
+define <16 x i8> @clmulh_v16i8_allones(<16 x i8> %x) nounwind {
+; SSE2-LABEL: clmulh_v16i8_allones:
+; SSE2:       # %bb.0:
+; SSE2-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-NEXT:    pxor %xmm3, %xmm3
+; SSE2-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]
+; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    paddw %xmm4, %xmm4
+; SSE2-NEXT:    pxor %xmm0, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $2, %xmm5
+; SSE2-NEXT:    movdqa %xmm0, %xmm6
+; SSE2-NEXT:    psllw $3, %xmm6
+; SSE2-NEXT:    pxor %xmm5, %xmm6
+; SSE2-NEXT:    pxor %xmm4, %xmm6
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    psllw $4, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $5, %xmm5
+; SSE2-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    psllw $6, %xmm4
+; SSE2-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NEXT:    pxor %xmm6, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $7, %xmm5
+; SSE2-NEXT:    pxor %xmm6, %xmm6
+; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm1[0],xmm6[1],xmm1[1],xmm6[2],xmm1[2],xmm6[3],xmm1[3],xmm6[4],xmm1[4],xmm6[5],xmm1[5],xmm6[6],xmm1[6],xmm6[7],xmm1[7]
+; SSE2-NEXT:    pxor %xmm5, %xmm6
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $9, %xmm5
+; SSE2-NEXT:    pxor %xmm6, %xmm5
+; SSE2-NEXT:    movdqa %xmm0, %xmm6
+; SSE2-NEXT:    psllw $10, %xmm6
+; SSE2-NEXT:    pxor %xmm5, %xmm6
+; SSE2-NEXT:    pxor %xmm4, %xmm6
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    psllw $11, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $12, %xmm5
+; SSE2-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NEXT:    psllw $13, %xmm4
+; SSE2-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NEXT:    psllw $14, %xmm5
+; SSE2-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NEXT:    psllw $15, %xmm0
+; SSE2-NEXT:    pxor %xmm5, %xmm0
+; SSE2-NEXT:    pxor %xmm6, %xmm0
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    paddw %xmm4, %xmm4
+; SSE2-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NEXT:    psllw $2, %xmm5
+; SSE2-NEXT:    movdqa %xmm2, %xmm6
+; SSE2-NEXT:    psllw $3, %xmm6
+; SSE2-NEXT:    pxor %xmm5, %xmm6
+; SSE2-NEXT:    pxor %xmm4, %xmm6
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    psllw $4, %xmm4
+; SSE2-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NEXT:    psllw $5, %xmm5
+; SSE2-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    psllw $6, %xmm4
+; SSE2-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NEXT:    pxor %xmm6, %xmm4
+; SSE2-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NEXT:    psllw $7, %xmm5
+; SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]
+; SSE2-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NEXT:    psllw $9, %xmm1
+; SSE2-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NEXT:    psllw $10, %xmm3
+; SSE2-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NEXT:    psllw $11, %xmm1
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    psllw $12, %xmm4
+; SSE2-NEXT:    pxor %xmm1, %xmm4
+; SSE2-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NEXT:    psllw $13, %xmm1
+; SSE2-NEXT:    pxor %xmm4, %xmm1
+; SSE2-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NEXT:    psllw $14, %xmm4
+; SSE2-NEXT:    pxor %xmm1, %xmm4
+; SSE2-NEXT:    psllw $15, %xmm2
+; SSE2-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NEXT:    psrlw $8, %xmm2
+; SSE2-NEXT:    psrlw $8, %xmm0
+; SSE2-NEXT:    packuswb %xmm2, %xmm0
+; SSE2-NEXT:    retq
+;
+; SSE42-LABEL: clmulh_v16i8_allones:
+; SSE42:       # %bb.0:
+; SSE42-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NEXT:    pxor %xmm3, %xmm3
+; SSE42-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm3[8],xmm2[9],xmm3[9],xmm2[10],xmm3[10],xmm2[11],xmm3[11],xmm2[12],xmm3[12],xmm2[13],xmm3[13],xmm2[14],xmm3[14],xmm2[15],xmm3[15]
+; SSE42-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
+; SSE42-NEXT:    pxor %xmm4, %xmm4
+; SSE42-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1],xmm4[2],xmm1[2],xmm4[3],xmm1[3],xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7]
+; SSE42-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NEXT:    paddw %xmm5, %xmm5
+; SSE42-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NEXT:    psllw $2, %xmm6
+; SSE42-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-NEXT:    psllw $3, %xmm7
+; SSE42-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NEXT:    pxor %xmm5, %xmm7
+; SSE42-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NEXT:    psllw $4, %xmm5
+; SSE42-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NEXT:    psllw $5, %xmm6
+; SSE42-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NEXT:    psllw $6, %xmm5
+; SSE42-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NEXT:    pxor %xmm7, %xmm5
+; SSE42-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NEXT:    psllw $7, %xmm6
+; SSE42-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    psllw $9, %xmm4
+; SSE42-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NEXT:    psllw $10, %xmm6
+; SSE42-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    psllw $11, %xmm4
+; SSE42-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NEXT:    psllw $12, %xmm5
+; SSE42-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NEXT:    psllw $13, %xmm4
+; SSE42-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NEXT:    psllw $14, %xmm5
+; SSE42-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NEXT:    psllw $15, %xmm0
+; SSE42-NEXT:    pxor %xmm5, %xmm0
+; SSE42-NEXT:    pxor %xmm6, %xmm0
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    paddw %xmm4, %xmm4
+; SSE42-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NEXT:    psllw $2, %xmm5
+; SSE42-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NEXT:    psllw $3, %xmm6
+; SSE42-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    psllw $4, %xmm4
+; SSE42-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NEXT:    psllw $5, %xmm5
+; SSE42-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    psllw $6, %xmm4
+; SSE42-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NEXT:    psllw $7, %xmm5
+; SSE42-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]
+; SSE42-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NEXT:    psllw $9, %xmm1
+; SSE42-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NEXT:    psllw $10, %xmm3
+; SSE42-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NEXT:    psllw $11, %xmm1
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    psllw $12, %xmm4
+; SSE42-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NEXT:    psllw $13, %xmm1
+; SSE42-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NEXT:    psllw $14, %xmm4
+; SSE42-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NEXT:    psllw $15, %xmm2
+; SSE42-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NEXT:    psrlw $8, %xmm2
+; SSE42-NEXT:    psrlw $8, %xmm0
+; SSE42-NEXT:    packuswb %xmm2, %xmm0
+; SSE42-NEXT:    retq
+;
+; AVX2-LABEL: clmulh_v16i8_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
+; AVX2-NEXT:    vpaddw %ymm0, %ymm0, %ymm1
+; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm1
+; AVX2-NEXT:    vpsllw $2, %ymm0, %ymm2
+; AVX2-NEXT:    vpsllw $3, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm1
+; AVX2-NEXT:    vpsllw $4, %ymm0, %ymm2
+; AVX2-NEXT:    vpsllw $5, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $6, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm1
+; AVX2-NEXT:    vpsllw $7, %ymm0, %ymm2
+; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $9, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $10, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm1
+; AVX2-NEXT:    vpsllw $11, %ymm0, %ymm2
+; AVX2-NEXT:    vpsllw $12, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $13, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $14, %ymm0, %ymm3
+; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
+; AVX2-NEXT:    vpsllw $15, %ymm0, %ymm0
+; AVX2-NEXT:    vpxor %ymm0, %ymm2, %ymm0
+; AVX2-NEXT:    vpxor %ymm0, %ymm1, %ymm0
+; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vzeroupper
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmulh_v16i8_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
+; AVX512-NEXT:    vpaddw %ymm0, %ymm0, %ymm1
+; AVX512-NEXT:    vpxor %ymm1, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $2, %ymm0, %ymm2
+; AVX512-NEXT:    vpsllw $3, %ymm0, %ymm3
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm3 = ymm3 ^ ymm1 ^ ymm2
+; AVX512-NEXT:    vpsllw $4, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $5, %ymm0, %ymm2
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm2 ^ ymm3 ^ ymm1
+; AVX512-NEXT:    vpsllw $6, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $7, %ymm0, %ymm3
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm3 = ymm3 ^ ymm2 ^ ymm1
+; AVX512-NEXT:    vpsllw $8, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $9, %ymm0, %ymm2
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm2 ^ ymm3 ^ ymm1
+; AVX512-NEXT:    vpsllw $10, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $11, %ymm0, %ymm3
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm3 = ymm3 ^ ymm2 ^ ymm1
+; AVX512-NEXT:    vpsllw $12, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $13, %ymm0, %ymm2
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm2 ^ ymm3 ^ ymm1
+; AVX512-NEXT:    vpsllw $14, %ymm0, %ymm1
+; AVX512-NEXT:    vpsllw $15, %ymm0, %ymm0
+; AVX512-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm0 ^ ymm2 ^ ymm1
+; AVX512-NEXT:    vpsrlw $8, %ymm0, %ymm0
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
+; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
+; AVX512-NEXT:    vzeroupper
+; AVX512-NEXT:    retq
+  %x.ext = zext <16 x i8> %x to <16 x i16>
+  %clmul = call <16 x i16> @llvm.clmul.v16i16(<16 x i16> %x.ext, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
+  %res.ext = lshr <16 x i16> %clmul, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
+  %res = trunc <16 x i16> %res.ext to <16 x i8>
+  ret <16 x i8> %res
+}
+
+define <8 x i16> @clmulh_v8i16_allones(<8 x i16> %x) nounwind {
+; SSE2-NOPCLMUL-LABEL: clmulh_v8i16_allones:
+; SSE2-NOPCLMUL:       # %bb.0:
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm8
+; SSE2-NOPCLMUL-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4],xmm1[4],xmm8[5],xmm1[5],xmm8[6],xmm1[6],xmm8[7],xmm1[7]
+; SSE2-NOPCLMUL-NEXT:    punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2,2,2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [16,16,16,16]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [32,32,32,32]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [64,64,64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [128,128,128,128]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [256,256,256,256]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [512,512,512,512]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm6 = xmm6[0],xmm3[0],xmm6[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [1024,1024,1024,1024]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4096,4096,4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [8192,8192,8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [16384,16384,16384,16384]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm6 = xmm6[0],xmm4[0],xmm6[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [65536,65536,65536,65536]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [131072,131072,131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [262144,262144,262144,262144]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm13 = [1048576,1048576,1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm13, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm13, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2097152,2097152,2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [4194304,4194304,4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [8388608,8388608,8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [16777216,16777216,16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm15, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm15, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [33554432,33554432,33554432,33554432]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [67108864,67108864,67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [134217728,134217728,134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [268435456,268435456,268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [536870912,536870912,536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [1073741824,1073741824,1073741824,1073741824]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm6 = xmm6[0],xmm1[0],xmm6[1],xmm1[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [4,4,4,4]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm3 = xmm8[1,1,3,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [2,2,2,2]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm0[0],xmm5[1],xmm0[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [8,8,8,8]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [16,16,16,16]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [32,32,32,32]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [64,64,64,64]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [128,128,128,128]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [256,256,256,256]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [512,512,512,512]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm0[0],xmm7[1],xmm0[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [1024,1024,1024,1024]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [2048,2048,2048,2048]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [4096,4096,4096,4096]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [8192,8192,8192,8192]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [16384,16384,16384,16384]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm7, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [32768,32768,32768,32768]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [65536,65536,65536,65536]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [131072,131072,131072,131072]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [262144,262144,262144,262144]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [524288,524288,524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm13, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm7 = xmm13[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [2097152,2097152,2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm13 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm13 = xmm13[0],xmm5[0],xmm13[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm13
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [4194304,4194304,4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [8388608,8388608,8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm15[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm14, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm14[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm12, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm12[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm11, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm11[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm10, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm9, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm8, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm8[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psrad $16, %xmm2
+; SSE2-NOPCLMUL-NEXT:    psrad $16, %xmm6
+; SSE2-NOPCLMUL-NEXT:    packssdw %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm0
+; SSE2-NOPCLMUL-NEXT:    retq
+;
+; SSE42-NOPCLMUL-LABEL: clmulh_v8i16_allones:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
+; SSE42-NOPCLMUL-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm4
+; SSE42-NOPCLMUL-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1],xmm4[2],xmm1[2],xmm4[3],xmm1[3]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    paddd %xmm5, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pslld $3, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pslld $8, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $9, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pslld $10, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $11, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $12, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $13, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $14, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $15, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $17, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $18, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $19, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pslld $20, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $21, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $22, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $23, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $24, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $25, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $26, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $27, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $28, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $29, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $30, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $31, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    paddd %xmm4, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $4, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $5, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $7, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $8, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $9, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pslld $10, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm6
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $11, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $12, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $13, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pslld $14, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $15, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $17, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $18, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $19, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $20, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $21, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $22, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $23, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $24, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $25, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $26, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $27, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pslld $28, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pslld $29, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $30, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pslld $31, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psrld $16, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psrld $16, %xmm0
+; SSE42-NOPCLMUL-NEXT:    packusdw %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    retq
+;
+; SSE2-PCLMUL-LABEL: clmulh_v8i16_allones:
+; SSE2-PCLMUL:       # %bb.0:
+; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE2-PCLMUL-NEXT:    pxor %xmm3, %xmm3
+; SSE2-PCLMUL-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; SSE2-PCLMUL-NEXT:    movq %rax, %xmm2
+; SSE2-PCLMUL-NEXT:    pextrw $3, %xmm0, %eax
+; SSE2-PCLMUL-NEXT:    movd %eax, %xmm4
+; SSE2-PCLMUL-NEXT:    pextrw $1, %xmm0, %eax
+; SSE2-PCLMUL-NEXT:    movd %eax, %xmm5
+; SSE2-PCLMUL-NEXT:    pextrw $7, %xmm0, %eax
+; SSE2-PCLMUL-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
+; SSE2-PCLMUL-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
+; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE2-PCLMUL-NEXT:    pclmulqdq $1, %xmm2, %xmm3
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm0
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm5
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]
+; SSE2-PCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-PCLMUL-NEXT:    pclmulqdq $1, %xmm2, %xmm3
+; SSE2-PCLMUL-NEXT:    movd %eax, %xmm4
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; SSE2-PCLMUL-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[1,1,1,1]
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm1
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE2-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
+; SSE2-PCLMUL-NEXT:    psrad $16, %xmm1
+; SSE2-PCLMUL-NEXT:    psrad $16, %xmm0
+; SSE2-PCLMUL-NEXT:    packssdw %xmm1, %xmm0
+; SSE2-PCLMUL-NEXT:    retq
+;
+; SSE42-PCLMUL-LABEL: clmulh_v8i16_allones:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm1
+; SSE42-PCLMUL-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; SSE42-PCLMUL-NEXT:    movq %rax, %xmm2
+; SSE42-PCLMUL-NEXT:    pextrw $1, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm3
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    pextrw $0, %xmm0, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm0
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm0
+; SSE42-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
+; SSE42-PCLMUL-NEXT:    pextrw $2, %xmm1, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm3
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    movq %xmm3, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %eax, %xmm0
+; SSE42-PCLMUL-NEXT:    pextrw $3, %xmm1, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm3
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    movq %xmm3, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %eax, %xmm0
+; SSE42-PCLMUL-NEXT:    pextrw $5, %xmm1, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm3
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    pextrw $4, %xmm1, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm4
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE42-PCLMUL-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; SSE42-PCLMUL-NEXT:    pextrw $6, %xmm1, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm3
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    movq %xmm3, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $2, %eax, %xmm4
+; SSE42-PCLMUL-NEXT:    pextrw $7, %xmm1, %eax
+; SSE42-PCLMUL-NEXT:    movd %eax, %xmm1
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm1
+; SSE42-PCLMUL-NEXT:    movq %xmm1, %rax
+; SSE42-PCLMUL-NEXT:    pinsrd $3, %eax, %xmm4
+; SSE42-PCLMUL-NEXT:    psrld $16, %xmm4
+; SSE42-PCLMUL-NEXT:    psrld $16, %xmm0
+; SSE42-PCLMUL-NEXT:    packusdw %xmm4, %xmm0
+; SSE42-PCLMUL-NEXT:    retq
+;
+; AVX2-LABEL: clmulh_v8i16_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
+; AVX2-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; AVX2-NEXT:    vmovq %rax, %xmm1
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm4 = xmm2[1,1,1,1]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm2, %xmm4
+; AVX2-NEXT:    vmovq %xmm4, %rax
+; AVX2-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[3,3,3,3]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX2-NEXT:    vmovq %xmm2, %rax
+; AVX2-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm2
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm4 = xmm0[1,1,1,1]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm4
+; AVX2-NEXT:    vmovq %xmm4, %rax
+; AVX2-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vmovq %xmm0, %rax
+; AVX2-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm0
+; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0
+; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vzeroupper
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmulh_v8i16_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
+; AVX512-NEXT:    movl $4294967295, %eax # imm = 0xFFFFFFFF
+; AVX512-NEXT:    vmovq %rax, %xmm1
+; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm4 = xmm2[1,1,1,1]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm2, %xmm4
+; AVX512-NEXT:    vmovq %xmm4, %rax
+; AVX512-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[3,3,3,3]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX512-NEXT:    vmovq %xmm2, %rax
+; AVX512-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm2
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm4 = xmm0[1,1,1,1]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm4, %xmm4
+; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm4
+; AVX512-NEXT:    vmovq %xmm4, %rax
+; AVX512-NEXT:    vpinsrd $2, %eax, %xmm3, %xmm3
+; AVX512-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vmovq %xmm0, %rax
+; AVX512-NEXT:    vpinsrd $3, %eax, %xmm3, %xmm0
+; AVX512-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX512-NEXT:    vpsrld $16, %ymm0, %ymm0
+; AVX512-NEXT:    vpmovdw %ymm0, %xmm0
+; AVX512-NEXT:    vzeroupper
+; AVX512-NEXT:    retq
+  %x.ext = zext <8 x i16> %x to <8 x i32>
+  %clmul = call <8 x i32> @llvm.clmul.v8i32(<8 x i32> %x.ext, <8 x i32> <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>)
+  %res.ext = lshr <8 x i32> %clmul, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
+  %res = trunc <8 x i32> %res.ext to <8 x i16>
+  ret <8 x i16> %res
+}
+
+define <4 x i32> @clmulh_v4i32_allones(<4 x i32> %x) nounwind {
+; SSE2-NOPCLMUL-LABEL: clmulh_v4i32_allones:
+; SSE2-NOPCLMUL:       # %bb.0:
+; SSE2-NOPCLMUL-NEXT:    subq $200, %rsp
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [2,2]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4,4]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [8,8]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [16,16]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [32,32]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [64,64]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [128,128]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [256,256]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [512,512]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [1024,1024]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [2048,2048]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [16384,16384]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [32768,32768]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [65536,65536]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm15 # [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm14 # [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm14, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13 # [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12 # [2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11 # [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm10 # [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm9 # [33554432,33554432]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8 # [67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7 # [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6 # [268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [1073741824,1073741824]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm0
+; SSE2-NOPCLMUL-NEXT:    punpckhdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    # xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm15
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm14
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm14, %xmm13
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm12
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm11
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm7
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm6
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm2
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm0
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm4 = [2,2]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [4,4]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm5 = [8,8]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [16,16]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm12 = [32,32]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm7 = [64,64]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [128,128]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm9 = [256,256]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm10 = [512,512]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm11 = [1024,1024]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm0 = [2048,2048]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [4096,4096]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm14 = [8192,8192]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm14
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm14, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm15 = [16384,16384]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [32768,32768]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm3 = [65536,65536]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [131072,131072]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [262144,262144]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [524288,524288]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [1048576,1048576]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [2097152,2097152]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm6 = [4194304,4194304]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [8388608,8388608]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm6, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [16777216,16777216]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [33554432,33554432]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [67108864,67108864]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [134217728,134217728]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [268435456,268435456]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm1 = [536870912,536870912]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE2-NOPCLMUL-NEXT:    movdqa {{.*#+}} xmm13 = [1073741824,1073741824]
+; SSE2-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [2147483648,2147483648]
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm8
+; SSE2-NOPCLMUL-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    # xmm8 = xmm8[0],mem[0],xmm8[1],mem[1]
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm8
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm8, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm12, %xmm7
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm7, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm9
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm11, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm14, %xmm15
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm15, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm6, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE2-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm1, %xmm13
+; SSE2-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
+; SSE2-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE2-NOPCLMUL-NEXT:    shufps $221, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload
+; SSE2-NOPCLMUL-NEXT:    # xmm2 = xmm2[1,3],mem[1,3]
+; SSE2-NOPCLMUL-NEXT:    movaps %xmm2, %xmm0
+; SSE2-NOPCLMUL-NEXT:    addq $200, %rsp
+; SSE2-NOPCLMUL-NEXT:    retq
+;
+; SSE42-NOPCLMUL-LABEL: clmulh_v4i32_allones:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    subq $200, %rsp
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm15
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm1
+; SSE42-NOPCLMUL-NEXT:    punpckhdq {{.*#+}} xmm15 = xmm15[2],xmm1[2],xmm15[3],xmm1[3]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [2,2]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4,4]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [8,8]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [16,16]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [32,32]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [64,64]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [128,128]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [256,256]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [512,512]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [65536,65536]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [131072,131072]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [262144,262144]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm14 # [524288,524288]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13 # [1048576,1048576]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12 # [2097152,2097152]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4194304,4194304]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11 # [8388608,8388608]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm10 # [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm9 # [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm8 # [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm7 # [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6 # [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm15, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm15 # [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm15, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm0
+; SSE42-NOPCLMUL-NEXT:    punpckhdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    # xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm2
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm12
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm11
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm10
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm8
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm7
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm6
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm6
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm5
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm15
+; SSE42-NOPCLMUL-NEXT:    pmovzxdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    # xmm2 = mem[0],zero,mem[1],zero
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm3 = [4,4]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm4 = [2,2]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm5 = [8,8]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm0 = [16,16]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm12 = [32,32]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm12
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbq {{.*#+}} xmm8 = [64,64]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxbq {{.*#+}} xmm3 = [128,128]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm9 = [256,256]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm10 = [512,512]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm11 = [1024,1024]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm0 = [2048,2048]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [4096,4096]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm14 = [8192,8192]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm14
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxwq {{.*#+}} xmm1 = [16384,16384]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovzxwq {{.*#+}} xmm1 = [32768,32768]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm3 = [0,1,0,0,0,1,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,2,0,0,0,2,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,4,0,0,0,4,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,8,0,0,0,8,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,16,0,0,0,16,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm1 = [0,32,0,0,0,32,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pmovsxbw {{.*#+}} xmm7 = [0,64,0,0,0,64,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm7
+; SSE42-NOPCLMUL-NEXT:    pmovzxbw {{.*#+}} xmm1 = [0,128,0,0,0,128,0,0]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm7, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [16777216,16777216]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [33554432,33554432]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [67108864,67108864]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [134217728,134217728]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [268435456,268435456]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm1 = [536870912,536870912]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pmovsxdq {{.*#+}} xmm13 = [1073741824,1073741824]
+; SSE42-NOPCLMUL-NEXT:    pmuludq %xmm2, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [2147483648,2147483648]
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm6
+; SSE42-NOPCLMUL-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Folded Reload
+; SSE42-NOPCLMUL-NEXT:    # xmm6 = xmm6[0],mem[0],xmm6[1],mem[1]
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm1, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm2, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm6
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm6, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm5
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm5
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm5, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm12
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm8
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm12, %xmm8
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm8, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm9
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm9
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm10
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm9, %xmm10
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm11
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm10, %xmm11
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm11, %xmm0
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm0
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm14
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm14, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa %xmm3, %xmm0
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm7
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm7, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa (%rsp), %xmm4 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm3
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm3
+; SSE42-NOPCLMUL-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm4
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm3, %xmm4
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm1
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm4, %xmm1
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm13
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm1, %xmm13
+; SSE42-NOPCLMUL-NEXT:    psllq $32, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm13, %xmm2
+; SSE42-NOPCLMUL-NEXT:    pxor %xmm0, %xmm2
+; SSE42-NOPCLMUL-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,3],xmm15[1,3]
+; SSE42-NOPCLMUL-NEXT:    movaps %xmm2, %xmm0
+; SSE42-NOPCLMUL-NEXT:    addq $200, %rsp
+; SSE42-NOPCLMUL-NEXT:    retq
+;
+; SSE2-PCLMUL-LABEL: clmulh_v4i32_allones:
+; SSE2-PCLMUL:       # %bb.0:
+; SSE2-PCLMUL-NEXT:    xorps %xmm1, %xmm1
+; SSE2-PCLMUL-NEXT:    movaps %xmm0, %xmm2
+; SSE2-PCLMUL-NEXT:    unpckhps {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
+; SSE2-PCLMUL-NEXT:    movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]
+; SSE2-PCLMUL-NEXT:    movq $-1, %rax
+; SSE2-PCLMUL-NEXT:    movq %rax, %xmm3
+; SSE2-PCLMUL-NEXT:    movaps %xmm0, %xmm4
+; SSE2-PCLMUL-NEXT:    psrldq {{.*#+}} xmm4 = xmm4[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm4
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm2
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]
+; SSE2-PCLMUL-NEXT:    psrlq $32, %xmm0
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm0
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm3, %xmm1
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
+; SSE2-PCLMUL-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,3],xmm2[1,3]
+; SSE2-PCLMUL-NEXT:    movaps %xmm1, %xmm0
+; SSE2-PCLMUL-NEXT:    retq
+;
+; SSE42-PCLMUL-LABEL: clmulh_v4i32_allones:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    movq $-1, %rax
+; SSE42-PCLMUL-NEXT:    movq %rax, %xmm2
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm3
+; SSE42-PCLMUL-NEXT:    psrldq {{.*#+}} xmm3 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm3
+; SSE42-PCLMUL-NEXT:    pxor %xmm1, %xmm1
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm4
+; SSE42-PCLMUL-NEXT:    punpckhdq {{.*#+}} xmm4 = xmm4[2],xmm1[2],xmm4[3],xmm1[3]
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm4
+; SSE42-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm3[0]
+; SSE42-PCLMUL-NEXT:    pblendw {{.*#+}} xmm1 = xmm0[0,1],xmm1[2,3,4,5,6,7]
+; SSE42-PCLMUL-NEXT:    psrlq $32, %xmm0
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm0
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm2, %xmm1
+; SSE42-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
+; SSE42-PCLMUL-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,3],xmm4[1,3]
+; SSE42-PCLMUL-NEXT:    movaps %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    retq
+;
+; AVX2-PCLMUL-LABEL: clmulh_v4i32_allones:
+; AVX2-PCLMUL:       # %bb.0:
+; AVX2-PCLMUL-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
+; AVX2-PCLMUL-NEXT:    movq $-1, %rax
+; AVX2-PCLMUL-NEXT:    vmovq %rax, %xmm1
+; AVX2-PCLMUL-NEXT:    vextracti128 $1, %ymm0, %xmm2
+; AVX2-PCLMUL-NEXT:    vpclmulqdq $1, %xmm1, %xmm2, %xmm3
+; AVX2-PCLMUL-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm4
+; AVX2-PCLMUL-NEXT:    vinserti128 $1, %xmm3, %ymm4, %ymm3
+; AVX2-PCLMUL-NEXT:    vpclmulqdq $0, %xmm1, %xmm2, %xmm2
+; AVX2-PCLMUL-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-PCLMUL-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
+; AVX2-PCLMUL-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
+; AVX2-PCLMUL-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-PCLMUL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]
+; AVX2-PCLMUL-NEXT:    vzeroupper
+; AVX2-PCLMUL-NEXT:    retq
+;
+; AVX2-VPCLMULQDQ-LABEL: clmulh_v4i32_allones:
+; AVX2-VPCLMULQDQ:       # %bb.0:
+; AVX2-VPCLMULQDQ-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
+; AVX2-VPCLMULQDQ-NEXT:    movq $-1, %rax
+; AVX2-VPCLMULQDQ-NEXT:    vmovq %rax, %xmm1
+; AVX2-VPCLMULQDQ-NEXT:    vpbroadcastq %xmm1, %ymm1
+; AVX2-VPCLMULQDQ-NEXT:    vpclmulqdq $1, %ymm1, %ymm0, %ymm2
+; AVX2-VPCLMULQDQ-NEXT:    vpclmulqdq $0, %ymm1, %ymm0, %ymm0
+; AVX2-VPCLMULQDQ-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[2],ymm2[2]
+; AVX2-VPCLMULQDQ-NEXT:    vextracti128 $1, %ymm0, %xmm1
+; AVX2-VPCLMULQDQ-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]
+; AVX2-VPCLMULQDQ-NEXT:    vzeroupper
+; AVX2-VPCLMULQDQ-NEXT:    retq
+;
+; AVX512-LABEL: clmulh_v4i32_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
+; AVX512-NEXT:    movq $-1, %rax
+; AVX512-NEXT:    vpbroadcastq %rax, %ymm1
+; AVX512-NEXT:    vpclmulqdq $1, %ymm1, %ymm0, %ymm2
+; AVX512-NEXT:    vpclmulqdq $0, %ymm1, %ymm0, %ymm0
+; AVX512-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[2],ymm2[2]
+; AVX512-NEXT:    vpsrlq $32, %ymm0, %ymm0
+; AVX512-NEXT:    vpmovqd %ymm0, %xmm0
+; AVX512-NEXT:    vzeroupper
+; AVX512-NEXT:    retq
+  %x.ext = zext <4 x i32> %x to <4 x i64>
+  %clmul = call <4 x i64> @llvm.clmul.v4i64(<4 x i64> %x.ext, <4 x i64> <i64 -1, i64 -1, i64 -1, i64 -1>)
+  %res.ext = lshr <4 x i64> %clmul, <i64 32, i64 32, i64 32, i64 32>
+  %res = trunc <4 x i64> %res.ext to <4 x i32>
+  ret <4 x i32> %res
+}
+
+define <2 x i64> @clmulh_v2i64_allones(<2 x i64> %x) nounwind {
+; SSE2-NOPCLMUL-LABEL: clmulh_v2i64_allones:
+; SSE2-NOPCLMUL:       # %bb.0:
+; SSE2-NOPCLMUL-NEXT:    pushq %r15
+; SSE2-NOPCLMUL-NEXT:    pushq %r14
+; SSE2-NOPCLMUL-NEXT:    pushq %r13
+; SSE2-NOPCLMUL-NEXT:    pushq %r12
+; SSE2-NOPCLMUL-NEXT:    pushq %rbx
+; SSE2-NOPCLMUL-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
+; SSE2-NOPCLMUL-NEXT:    movq %xmm1, %rax
+; SSE2-NOPCLMUL-NEXT:    movq %xmm0, %rcx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rsi
+; SSE2-NOPCLMUL-NEXT:    bswapq %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rsi, %rdx
+; SSE2-NOPCLMUL-NEXT:    shrq $4, %rdx
+; SSE2-NOPCLMUL-NEXT:    movabsq $1085102592571150095, %rdi # imm = 0xF0F0F0F0F0F0F0F
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %rdx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %rsi
+; SSE2-NOPCLMUL-NEXT:    orq %rdx, %rsi
+; SSE2-NOPCLMUL-NEXT:    movabsq $3689348814741910323, %rdx # imm = 0x3333333333333333
+; SSE2-NOPCLMUL-NEXT:    movq %rsi, %r8
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r8
+; SSE2-NOPCLMUL-NEXT:    shrq $2, %rsi
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %rsi
+; SSE2-NOPCLMUL-NEXT:    leaq (%rsi,%r8,4), %r8
+; SSE2-NOPCLMUL-NEXT:    movabsq $6148914691236517205, %rsi # imm = 0x5555555555555555
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %r9
+; SSE2-NOPCLMUL-NEXT:    shrq %r8
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r10
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    leaq (%r10,%r9,2), %r9
+; SSE2-NOPCLMUL-NEXT:    leaq (%r9,%r9), %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    leaq (,%r9,4), %r11
+; SSE2-NOPCLMUL-NEXT:    leaq (,%r9,8), %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $5, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $6, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $7, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $8, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $9, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $10, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $12, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $13, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $15, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $16, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $17, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $18, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $19, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $20, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $21, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $22, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $23, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $24, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $25, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $26, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $27, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $28, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $29, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $30, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $31, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $32, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $33, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $34, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $35, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $36, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $37, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $38, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $39, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $40, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $41, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $42, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $43, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $44, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $45, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $46, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $47, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $48, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $49, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $50, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $51, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $52, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $53, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $54, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $55, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $56, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $57, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $58, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $59, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $60, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $61, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $62, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $63, %r8
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r8
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r8
+; SSE2-NOPCLMUL-NEXT:    bswapq %r8
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE2-NOPCLMUL-NEXT:    shrq $4, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %r8
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r8
+; SSE2-NOPCLMUL-NEXT:    orq %r9, %r8
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r9
+; SSE2-NOPCLMUL-NEXT:    shrq $2, %r8
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r8
+; SSE2-NOPCLMUL-NEXT:    leaq (%r8,%r9,4), %r8
+; SSE2-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %r9
+; SSE2-NOPCLMUL-NEXT:    shrq %r8
+; SSE2-NOPCLMUL-NEXT:    movabsq $6148914691236517204, %r10 # imm = 0x5555555555555554
+; SSE2-NOPCLMUL-NEXT:    andq %r10, %r8
+; SSE2-NOPCLMUL-NEXT:    leaq (%r8,%r9,2), %r8
+; SSE2-NOPCLMUL-NEXT:    shrq %r8
+; SSE2-NOPCLMUL-NEXT:    leaq (%rcx,%rcx), %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rcx,4), %r11
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rcx,8), %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $5, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $6, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $7, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $8, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $9, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $10, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $12, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $13, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $15, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $16, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $17, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $18, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $19, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $20, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $21, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $22, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $23, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $24, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $25, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $26, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $27, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $28, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $29, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $30, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $31, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $32, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $33, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $34, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $35, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $36, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $37, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $38, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $39, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $40, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $41, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $42, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $43, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $44, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $45, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $46, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $47, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $48, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $49, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $50, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $51, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $52, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $53, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $54, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $55, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $56, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $57, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $58, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $59, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $60, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $61, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE2-NOPCLMUL-NEXT:    shlq $62, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %r8
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE2-NOPCLMUL-NEXT:    bswapq %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    shrq $4, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r11
+; SSE2-NOPCLMUL-NEXT:    orq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %rbx
+; SSE2-NOPCLMUL-NEXT:    shrq $2, %r11
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r11
+; SSE2-NOPCLMUL-NEXT:    leaq (%r11,%rbx,4), %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %rbx
+; SSE2-NOPCLMUL-NEXT:    shrq %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %r14
+; SSE2-NOPCLMUL-NEXT:    andq %rsi, %r14
+; SSE2-NOPCLMUL-NEXT:    leaq (%r14,%rbx,2), %rbx
+; SSE2-NOPCLMUL-NEXT:    leaq (%rbx,%rbx), %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rbx,4), %r15
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rbx,8), %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $5, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $6, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $7, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $8, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $9, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $10, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $11, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $12, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $13, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $14, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $15, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $16, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $17, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $18, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $19, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE2-NOPCLMUL-NEXT:    shlq $20, %r13
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $21, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $22, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $23, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $24, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $25, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $26, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $27, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $28, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $29, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $30, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $31, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $32, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $33, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $34, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE2-NOPCLMUL-NEXT:    shlq $35, %r13
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $36, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $37, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $38, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $39, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $40, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $41, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $42, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $43, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $44, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $45, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $46, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $47, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $48, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $49, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $50, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $51, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $52, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $53, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE2-NOPCLMUL-NEXT:    shlq $54, %r13
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE2-NOPCLMUL-NEXT:    shlq $55, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $56, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $57, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $58, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $59, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE2-NOPCLMUL-NEXT:    shlq $60, %r14
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE2-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $61, %r12
+; SSE2-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE2-NOPCLMUL-NEXT:    shlq $62, %rbx
+; SSE2-NOPCLMUL-NEXT:    xorq %r12, %rbx
+; SSE2-NOPCLMUL-NEXT:    shlq $63, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r15, %r11
+; SSE2-NOPCLMUL-NEXT:    bswapq %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE2-NOPCLMUL-NEXT:    shrq $4, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %rbx
+; SSE2-NOPCLMUL-NEXT:    andq %rdi, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %r11
+; SSE2-NOPCLMUL-NEXT:    orq %rbx, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %r11, %rdi
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %rdi
+; SSE2-NOPCLMUL-NEXT:    shrq $2, %r11
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %r11
+; SSE2-NOPCLMUL-NEXT:    leaq (%r11,%rdi,4), %rdx
+; SSE2-NOPCLMUL-NEXT:    andq %rdx, %rsi
+; SSE2-NOPCLMUL-NEXT:    shrq %rdx
+; SSE2-NOPCLMUL-NEXT:    andq %r10, %rdx
+; SSE2-NOPCLMUL-NEXT:    leaq (%rdx,%rsi,2), %rdx
+; SSE2-NOPCLMUL-NEXT:    shrq %rdx
+; SSE2-NOPCLMUL-NEXT:    leaq (%rax,%rax), %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rax,4), %rdi
+; SSE2-NOPCLMUL-NEXT:    leaq (,%rax,8), %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $4, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $5, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $6, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $7, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $8, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $9, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $10, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $11, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $12, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $13, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $14, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $15, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $16, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $17, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $18, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $19, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $20, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $21, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $22, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $23, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $24, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $25, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $26, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $27, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $28, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $29, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $30, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $31, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $32, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $33, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $34, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $35, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $36, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $37, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $38, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $39, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $40, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $41, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $42, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $43, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $44, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $45, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $46, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $47, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $48, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $49, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $50, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $51, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $52, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $53, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE2-NOPCLMUL-NEXT:    shlq $54, %r11
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE2-NOPCLMUL-NEXT:    shlq $55, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $56, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $57, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $58, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $59, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $60, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE2-NOPCLMUL-NEXT:    shlq $61, %r10
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE2-NOPCLMUL-NEXT:    shlq $62, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rdx
+; SSE2-NOPCLMUL-NEXT:    shlq $63, %rcx
+; SSE2-NOPCLMUL-NEXT:    xorq %r9, %rcx
+; SSE2-NOPCLMUL-NEXT:    shrdq $63, %r8, %rcx
+; SSE2-NOPCLMUL-NEXT:    shlq $63, %rax
+; SSE2-NOPCLMUL-NEXT:    xorq %rsi, %rax
+; SSE2-NOPCLMUL-NEXT:    shrdq $63, %rdx, %rax
+; SSE2-NOPCLMUL-NEXT:    movq %rcx, %xmm0
+; SSE2-NOPCLMUL-NEXT:    movq %rax, %xmm1
+; SSE2-NOPCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE2-NOPCLMUL-NEXT:    popq %rbx
+; SSE2-NOPCLMUL-NEXT:    popq %r12
+; SSE2-NOPCLMUL-NEXT:    popq %r13
+; SSE2-NOPCLMUL-NEXT:    popq %r14
+; SSE2-NOPCLMUL-NEXT:    popq %r15
+; SSE2-NOPCLMUL-NEXT:    retq
+;
+; SSE42-NOPCLMUL-LABEL: clmulh_v2i64_allones:
+; SSE42-NOPCLMUL:       # %bb.0:
+; SSE42-NOPCLMUL-NEXT:    pushq %r15
+; SSE42-NOPCLMUL-NEXT:    pushq %r14
+; SSE42-NOPCLMUL-NEXT:    pushq %r13
+; SSE42-NOPCLMUL-NEXT:    pushq %r12
+; SSE42-NOPCLMUL-NEXT:    pushq %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %xmm0, %rax
+; SSE42-NOPCLMUL-NEXT:    pextrq $1, %xmm0, %rcx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rsi
+; SSE42-NOPCLMUL-NEXT:    bswapq %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rsi, %rdx
+; SSE42-NOPCLMUL-NEXT:    shrq $4, %rdx
+; SSE42-NOPCLMUL-NEXT:    movabsq $1085102592571150095, %rdi # imm = 0xF0F0F0F0F0F0F0F
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %rdx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %rsi
+; SSE42-NOPCLMUL-NEXT:    orq %rdx, %rsi
+; SSE42-NOPCLMUL-NEXT:    movabsq $3689348814741910323, %rdx # imm = 0x3333333333333333
+; SSE42-NOPCLMUL-NEXT:    movq %rsi, %r8
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r8
+; SSE42-NOPCLMUL-NEXT:    shrq $2, %rsi
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %rsi
+; SSE42-NOPCLMUL-NEXT:    leaq (%rsi,%r8,4), %r8
+; SSE42-NOPCLMUL-NEXT:    movabsq $6148914691236517205, %rsi # imm = 0x5555555555555555
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %r9
+; SSE42-NOPCLMUL-NEXT:    shrq %r8
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r10
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    leaq (%r10,%r9,2), %r9
+; SSE42-NOPCLMUL-NEXT:    leaq (%r9,%r9), %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    leaq (,%r9,4), %r11
+; SSE42-NOPCLMUL-NEXT:    leaq (,%r9,8), %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $5, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $6, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $7, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $8, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $9, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $10, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $12, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $13, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $15, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $16, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $17, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $18, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $19, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $20, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $21, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $22, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $23, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $24, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $25, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $26, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $27, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $28, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $29, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $30, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $31, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $32, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $33, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $34, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $35, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $36, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $37, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $38, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $39, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $40, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $41, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $42, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $43, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $44, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $45, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $46, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $47, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $48, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $49, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $50, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $51, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $52, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $53, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $54, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $55, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $56, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $57, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $58, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $59, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $60, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $61, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $62, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $63, %r8
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r8
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r8
+; SSE42-NOPCLMUL-NEXT:    bswapq %r8
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE42-NOPCLMUL-NEXT:    shrq $4, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %r8
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r8
+; SSE42-NOPCLMUL-NEXT:    orq %r9, %r8
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r9
+; SSE42-NOPCLMUL-NEXT:    shrq $2, %r8
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r8
+; SSE42-NOPCLMUL-NEXT:    leaq (%r8,%r9,4), %r8
+; SSE42-NOPCLMUL-NEXT:    movq %r8, %r9
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %r9
+; SSE42-NOPCLMUL-NEXT:    shrq %r8
+; SSE42-NOPCLMUL-NEXT:    movabsq $6148914691236517204, %r10 # imm = 0x5555555555555554
+; SSE42-NOPCLMUL-NEXT:    andq %r10, %r8
+; SSE42-NOPCLMUL-NEXT:    leaq (%r8,%r9,2), %r8
+; SSE42-NOPCLMUL-NEXT:    shrq %r8
+; SSE42-NOPCLMUL-NEXT:    leaq (%rcx,%rcx), %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rcx,4), %r11
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rcx,8), %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $5, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $6, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $7, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $8, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $9, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $10, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $12, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $13, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $15, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $16, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $17, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $18, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $19, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $20, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $21, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $22, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $23, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $24, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $25, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $26, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $27, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $28, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $29, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $30, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $31, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $32, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $33, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $34, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $35, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $36, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $37, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $38, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $39, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $40, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $41, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $42, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $43, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $44, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $45, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $46, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $47, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $48, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $49, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $50, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $51, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $52, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $53, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $54, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $55, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $56, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $57, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $58, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $59, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $60, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $61, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rbx
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %r9
+; SSE42-NOPCLMUL-NEXT:    shlq $62, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %r9
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %r8
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE42-NOPCLMUL-NEXT:    bswapq %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    shrq $4, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r11
+; SSE42-NOPCLMUL-NEXT:    orq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %rbx
+; SSE42-NOPCLMUL-NEXT:    shrq $2, %r11
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r11
+; SSE42-NOPCLMUL-NEXT:    leaq (%r11,%rbx,4), %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %rbx
+; SSE42-NOPCLMUL-NEXT:    shrq %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %r14
+; SSE42-NOPCLMUL-NEXT:    andq %rsi, %r14
+; SSE42-NOPCLMUL-NEXT:    leaq (%r14,%rbx,2), %rbx
+; SSE42-NOPCLMUL-NEXT:    leaq (%rbx,%rbx), %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rbx,4), %r15
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rbx,8), %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $5, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $6, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $7, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $8, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $9, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $10, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $11, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $12, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $13, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $14, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $15, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $16, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $17, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $18, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $19, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE42-NOPCLMUL-NEXT:    shlq $20, %r13
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $21, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $22, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $23, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $24, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $25, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $26, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $27, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $28, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $29, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $30, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $31, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $32, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $33, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $34, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE42-NOPCLMUL-NEXT:    shlq $35, %r13
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $36, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $37, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $38, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $39, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $40, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $41, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $42, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $43, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $44, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $45, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $46, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $47, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $48, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $49, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $50, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $51, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $52, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $53, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r13
+; SSE42-NOPCLMUL-NEXT:    shlq $54, %r13
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r13
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r15
+; SSE42-NOPCLMUL-NEXT:    shlq $55, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r13, %r15
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r15
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $56, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $57, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $58, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $59, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r14
+; SSE42-NOPCLMUL-NEXT:    shlq $60, %r14
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %r14
+; SSE42-NOPCLMUL-NEXT:    movq %rbx, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $61, %r12
+; SSE42-NOPCLMUL-NEXT:    xorq %r14, %r12
+; SSE42-NOPCLMUL-NEXT:    shlq $62, %rbx
+; SSE42-NOPCLMUL-NEXT:    xorq %r12, %rbx
+; SSE42-NOPCLMUL-NEXT:    shlq $63, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r15, %r11
+; SSE42-NOPCLMUL-NEXT:    bswapq %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rbx
+; SSE42-NOPCLMUL-NEXT:    shrq $4, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %rbx
+; SSE42-NOPCLMUL-NEXT:    andq %rdi, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %r11
+; SSE42-NOPCLMUL-NEXT:    orq %rbx, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %r11, %rdi
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %rdi
+; SSE42-NOPCLMUL-NEXT:    shrq $2, %r11
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %r11
+; SSE42-NOPCLMUL-NEXT:    leaq (%r11,%rdi,4), %rdx
+; SSE42-NOPCLMUL-NEXT:    andq %rdx, %rsi
+; SSE42-NOPCLMUL-NEXT:    shrq %rdx
+; SSE42-NOPCLMUL-NEXT:    andq %r10, %rdx
+; SSE42-NOPCLMUL-NEXT:    leaq (%rdx,%rsi,2), %rdx
+; SSE42-NOPCLMUL-NEXT:    shrq %rdx
+; SSE42-NOPCLMUL-NEXT:    leaq (%rax,%rax), %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rax,4), %rdi
+; SSE42-NOPCLMUL-NEXT:    leaq (,%rax,8), %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $4, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $5, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $6, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $7, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $8, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $9, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $10, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $11, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $12, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $13, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $14, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $15, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $16, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $17, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $18, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $19, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $20, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $21, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $22, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $23, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $24, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $25, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $26, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $27, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $28, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $29, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $30, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $31, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $32, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $33, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $34, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $35, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $36, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $37, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $38, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $39, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $40, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $41, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $42, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $43, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $44, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $45, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $46, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $47, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $48, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $49, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $50, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $51, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $52, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $53, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r11
+; SSE42-NOPCLMUL-NEXT:    shlq $54, %r11
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %r11
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rdi
+; SSE42-NOPCLMUL-NEXT:    shlq $55, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %r11, %rdi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $56, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $57, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $58, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $59, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $60, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %r10
+; SSE42-NOPCLMUL-NEXT:    shlq $61, %r10
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %r10
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %rsi
+; SSE42-NOPCLMUL-NEXT:    shlq $62, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %r10, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rdi, %rsi
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rdx
+; SSE42-NOPCLMUL-NEXT:    shlq $63, %rcx
+; SSE42-NOPCLMUL-NEXT:    xorq %r9, %rcx
+; SSE42-NOPCLMUL-NEXT:    shrdq $63, %r8, %rcx
+; SSE42-NOPCLMUL-NEXT:    shlq $63, %rax
+; SSE42-NOPCLMUL-NEXT:    xorq %rsi, %rax
+; SSE42-NOPCLMUL-NEXT:    shrdq $63, %rdx, %rax
+; SSE42-NOPCLMUL-NEXT:    movq %rcx, %xmm1
+; SSE42-NOPCLMUL-NEXT:    movq %rax, %xmm0
+; SSE42-NOPCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE42-NOPCLMUL-NEXT:    popq %rbx
+; SSE42-NOPCLMUL-NEXT:    popq %r12
+; SSE42-NOPCLMUL-NEXT:    popq %r13
+; SSE42-NOPCLMUL-NEXT:    popq %r14
+; SSE42-NOPCLMUL-NEXT:    popq %r15
+; SSE42-NOPCLMUL-NEXT:    retq
+;
+; SSE2-PCLMUL-LABEL: clmulh_v2i64_allones:
+; SSE2-PCLMUL:       # %bb.0:
+; SSE2-PCLMUL-NEXT:    movq $-1, %rax
+; SSE2-PCLMUL-NEXT:    movq %rax, %xmm1
+; SSE2-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE2-PCLMUL-NEXT:    pclmulqdq $1, %xmm1, %xmm2
+; SSE2-PCLMUL-NEXT:    movq %xmm2, %rax
+; SSE2-PCLMUL-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]
+; SSE2-PCLMUL-NEXT:    movq %xmm2, %rcx
+; SSE2-PCLMUL-NEXT:    xorq %rax, %rcx
+; SSE2-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm0
+; SSE2-PCLMUL-NEXT:    movq %xmm0, %rdx
+; SSE2-PCLMUL-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
+; SSE2-PCLMUL-NEXT:    movq %xmm0, %rsi
+; SSE2-PCLMUL-NEXT:    xorq %rdx, %rsi
+; SSE2-PCLMUL-NEXT:    shldq $1, %rdx, %rsi
+; SSE2-PCLMUL-NEXT:    shldq $1, %rax, %rcx
+; SSE2-PCLMUL-NEXT:    movq %rcx, %xmm1
+; SSE2-PCLMUL-NEXT:    movq %rsi, %xmm0
+; SSE2-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE2-PCLMUL-NEXT:    retq
+;
+; SSE42-PCLMUL-LABEL: clmulh_v2i64_allones:
+; SSE42-PCLMUL:       # %bb.0:
+; SSE42-PCLMUL-NEXT:    movq $-1, %rax
+; SSE42-PCLMUL-NEXT:    movq %rax, %xmm1
+; SSE42-PCLMUL-NEXT:    movdqa %xmm0, %xmm2
+; SSE42-PCLMUL-NEXT:    pclmulqdq $1, %xmm1, %xmm2
+; SSE42-PCLMUL-NEXT:    movq %xmm2, %rax
+; SSE42-PCLMUL-NEXT:    pextrq $1, %xmm2, %rcx
+; SSE42-PCLMUL-NEXT:    xorq %rax, %rcx
+; SSE42-PCLMUL-NEXT:    pclmulqdq $0, %xmm1, %xmm0
+; SSE42-PCLMUL-NEXT:    movq %xmm0, %rdx
+; SSE42-PCLMUL-NEXT:    pextrq $1, %xmm0, %rsi
+; SSE42-PCLMUL-NEXT:    xorq %rdx, %rsi
+; SSE42-PCLMUL-NEXT:    shldq $1, %rdx, %rsi
+; SSE42-PCLMUL-NEXT:    shldq $1, %rax, %rcx
+; SSE42-PCLMUL-NEXT:    movq %rcx, %xmm1
+; SSE42-PCLMUL-NEXT:    movq %rsi, %xmm0
+; SSE42-PCLMUL-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE42-PCLMUL-NEXT:    retq
+;
+; AVX2-LABEL: clmulh_v2i64_allones:
+; AVX2:       # %bb.0:
+; AVX2-NEXT:    movq $-1, %rax
+; AVX2-NEXT:    vmovq %rax, %xmm1
+; AVX2-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm2
+; AVX2-NEXT:    vmovq %xmm2, %rax
+; AVX2-NEXT:    vpextrq $1, %xmm2, %rcx
+; AVX2-NEXT:    xorq %rax, %rcx
+; AVX2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX2-NEXT:    vmovq %xmm0, %rdx
+; AVX2-NEXT:    vpextrq $1, %xmm0, %rsi
+; AVX2-NEXT:    xorq %rdx, %rsi
+; AVX2-NEXT:    shldq $1, %rdx, %rsi
+; AVX2-NEXT:    shldq $1, %rax, %rcx
+; AVX2-NEXT:    vmovq %rcx, %xmm0
+; AVX2-NEXT:    vmovq %rsi, %xmm1
+; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
+; AVX2-NEXT:    retq
+;
+; AVX512-LABEL: clmulh_v2i64_allones:
+; AVX512:       # %bb.0:
+; AVX512-NEXT:    movq $-1, %rax
+; AVX512-NEXT:    vmovq %rax, %xmm1
+; AVX512-NEXT:    vpclmulqdq $1, %xmm1, %xmm0, %xmm2
+; AVX512-NEXT:    vmovq %xmm2, %rax
+; AVX512-NEXT:    vpextrq $1, %xmm2, %rcx
+; AVX512-NEXT:    xorq %rax, %rcx
+; AVX512-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0
+; AVX512-NEXT:    vmovq %xmm0, %rdx
+; AVX512-NEXT:    vpextrq $1, %xmm0, %rsi
+; AVX512-NEXT:    xorq %rdx, %rsi
+; AVX512-NEXT:    shldq $1, %rdx, %rsi
+; AVX512-NEXT:    shldq $1, %rax, %rcx
+; AVX512-NEXT:    vmovq %rcx, %xmm0
+; AVX512-NEXT:    vmovq %rsi, %xmm1
+; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
+; AVX512-NEXT:    retq
+  %x.ext = zext <2 x i64> %x to <2 x i128>
+  %clmul = call <2 x i128> @llvm.clmul.v2i128(<2 x i128> %x.ext, <2 x i128> <i128 -1, i128 -1>)
+  %res.ext = lshr <2 x i128> %clmul, <i128 63, i128 63>
+  %res = trunc <2 x i128> %res.ext to <2 x i64>
+  ret <2 x i64> %res
+}
+
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; SSE-NOPCLMUL: {{.*}}


        


More information about the llvm-commits mailing list