summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorCoby Tayree <coby.tayree@intel.com>2017-11-26 09:36:41 +0000
committerCoby Tayree <coby.tayree@intel.com>2017-11-26 09:36:41 +0000
commitd8b17bedfacc1678913e5d81c02c6a55282f945d (patch)
tree8e346ad28fda632a8d4245fae1ceea71908bb397 /llvm/test
parent3fddff51ba2b4d713dad95ca97681f004dc822c9 (diff)
downloadbcm5719-llvm-d8b17bedfacc1678913e5d81c02c6a55282f945d.tar.gz
bcm5719-llvm-d8b17bedfacc1678913e5d81c02c6a55282f945d.zip
[x86][icelake]GFNI
galois field arithmetic (GF(2^8)) insns: gf2p8affineinvqb gf2p8affineqb gf2p8mulb Differential Revision: https://reviews.llvm.org/D40373 llvm-svn: 318993
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/X86/avx-gfni-intrinsics.ll63
-rw-r--r--llvm/test/CodeGen/X86/avx512-gfni-intrinsics.ll183
-rw-r--r--llvm/test/CodeGen/X86/gfni-intrinsics.ll33
-rw-r--r--llvm/test/MC/X86/avx512gfni-encoding.s178
-rw-r--r--llvm/test/MC/X86/avx512vl_gfni-encoding.s354
-rw-r--r--llvm/test/MC/X86/gfni-encoding.s254
6 files changed, 1065 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/avx-gfni-intrinsics.ll b/llvm/test/CodeGen/X86/avx-gfni-intrinsics.ll
new file mode 100644
index 00000000000..b10d508b8cf
--- /dev/null
+++ b/llvm/test/CodeGen/X86/avx-gfni-intrinsics.ll
@@ -0,0 +1,63 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=+gfni,+avx -show-mc-encoding | FileCheck %s
+
+declare <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8>, <16 x i8>, i8)
+define <16 x i8> @test_vgf2p8affineinvqb_128(<16 x i8> %src1, <16 x i8> %src2) {
+; CHECK-LABEL: test_vgf2p8affineinvqb_128:
+; CHECK: ## BB#0:
+; CHECK-NEXT: vgf2p8affineinvqb $11, %xmm1, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0xf9,0xcf,0xc1,0x0b]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8> %src1, <16 x i8> %src2, i8 11)
+ ret <16 x i8> %1
+}
+
+declare <32 x i8> @llvm.x86.vgf2p8affineinvqb.256(<32 x i8>, <32 x i8>, i8)
+define <32 x i8> @test_vgf2p8affineinvqb_256(<32 x i8> %src1, <32 x i8> %src2) {
+; CHECK-LABEL: test_vgf2p8affineinvqb_256:
+; CHECK: ## BB#0:
+; CHECK-NEXT: vgf2p8affineinvqb $11, %ymm1, %ymm0, %ymm0 ## encoding: [0xc4,0xe3,0xfd,0xcf,0xc1,0x0b]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <32 x i8> @llvm.x86.vgf2p8affineinvqb.256(<32 x i8> %src1, <32 x i8> %src2, i8 11)
+ ret <32 x i8> %1
+}
+
+declare <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8>, <16 x i8>, i8)
+define <16 x i8> @test_vgf2p8affineqb(<16 x i8> %src1, <16 x i8> %src2) {
+; CHECK-LABEL: test_vgf2p8affineqb:
+; CHECK: ## BB#0:
+; CHECK-NEXT: vgf2p8affineqb $11, %xmm1, %xmm0, %xmm0 ## encoding: [0xc4,0xe3,0xf9,0xce,0xc1,0x0b]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8> %src1, <16 x i8> %src2, i8 11)
+ ret <16 x i8> %1
+}
+
+declare <32 x i8> @llvm.x86.vgf2p8affineqb.256(<32 x i8>, <32 x i8>, i8)
+define <32 x i8> @test_vgf2p8affineqb_256(<32 x i8> %src1, <32 x i8> %src2) {
+; CHECK-LABEL: test_vgf2p8affineqb_256:
+; CHECK: ## BB#0:
+; CHECK-NEXT: vgf2p8affineqb $11, %ymm1, %ymm0, %ymm0 ## encoding: [0xc4,0xe3,0xfd,0xce,0xc1,0x0b]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <32 x i8> @llvm.x86.vgf2p8affineqb.256(<32 x i8> %src1, <32 x i8> %src2, i8 11)
+ ret <32 x i8> %1
+}
+
+declare <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8>, <16 x i8>)
+define <16 x i8> @test_vgf2p8mulb_128(<16 x i8> %src1, <16 x i8> %src2) {
+; CHECK-LABEL: test_vgf2p8mulb_128:
+; CHECK: ## BB#0:
+; CHECK-NEXT: vgf2p8mulb %xmm1, %xmm0, %xmm0 ## encoding: [0xc4,0xe2,0x79,0xcf,0xc1]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8> %src1, <16 x i8> %src2)
+ ret <16 x i8> %1
+}
+
+declare <32 x i8> @llvm.x86.vgf2p8mulb.256(<32 x i8>, <32 x i8>)
+define <32 x i8> @test_vgf2p8mulb_256(<32 x i8> %src1, <32 x i8> %src2) {
+; CHECK-LABEL: test_vgf2p8mulb_256:
+; CHECK: ## BB#0:
+; CHECK-NEXT: vgf2p8mulb %ymm1, %ymm0, %ymm0 ## encoding: [0xc4,0xe2,0x7d,0xcf,0xc1]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <32 x i8> @llvm.x86.vgf2p8mulb.256(<32 x i8> %src1, <32 x i8> %src2)
+ ret <32 x i8> %1
+}
+
diff --git a/llvm/test/CodeGen/X86/avx512-gfni-intrinsics.ll b/llvm/test/CodeGen/X86/avx512-gfni-intrinsics.ll
new file mode 100644
index 00000000000..b975b64e0b4
--- /dev/null
+++ b/llvm/test/CodeGen/X86/avx512-gfni-intrinsics.ll
@@ -0,0 +1,183 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512vl,+gfni,+avx512bw --show-mc-encoding | FileCheck %s
+
+declare <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8>, <16 x i8>, i8)
+define <16 x i8> @test_vgf2p8affineinvqb_128(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %passthru, i16 %mask) {
+; CHECK-LABEL: test_vgf2p8affineinvqb_128:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovd %edi, %k1 ## encoding: [0xc5,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %xmm1, %xmm0, %xmm3 ## EVEX TO VEX Compression encoding: [0xc4,0xe3,0xf9,0xcf,0xd9,0x03]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %xmm1, %xmm0, %xmm4 {%k1} {z} ## encoding: [0x62,0xf3,0xfd,0x89,0xcf,0xe1,0x03]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf3,0xfd,0x09,0xcf,0xd1,0x03]
+; CHECK-NEXT: vpxor %xmm3, %xmm2, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0xef,0xc3]
+; CHECK-NEXT: vpxor %xmm0, %xmm4, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xd9,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i16 %mask to <16 x i1>
+ %2 = call <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8> %src1, <16 x i8> %src2, i8 3)
+ %3 = select <16 x i1> %1, <16 x i8> %2, <16 x i8> zeroinitializer
+ %4 = select <16 x i1> %1, <16 x i8> %2, <16 x i8> %passthru
+ %5 = xor <16 x i8> %3, %4
+ %6 = xor <16 x i8> %5, %2
+ ret <16 x i8> %6
+}
+
+declare <32 x i8> @llvm.x86.vgf2p8affineinvqb.256(<32 x i8>, <32 x i8>, i8)
+define <32 x i8> @test_vgf2p8affineinvqb_256(<32 x i8> %src1, <32 x i8> %src2, <32 x i8> %passthru, i32 %mask) {
+; CHECK-LABEL: test_vgf2p8affineinvqb_256:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovd %edi, %k1 ## encoding: [0xc5,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %ymm1, %ymm0, %ymm3 ## EVEX TO VEX Compression encoding: [0xc4,0xe3,0xfd,0xcf,0xd9,0x03]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %ymm1, %ymm0, %ymm4 {%k1} {z} ## encoding: [0x62,0xf3,0xfd,0xa9,0xcf,0xe1,0x03]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %ymm1, %ymm0, %ymm2 {%k1} ## encoding: [0x62,0xf3,0xfd,0x29,0xcf,0xd1,0x03]
+; CHECK-NEXT: vpxor %ymm3, %ymm2, %ymm0 ## EVEX TO VEX Compression encoding: [0xc5,0xed,0xef,0xc3]
+; CHECK-NEXT: vpxor %ymm0, %ymm4, %ymm0 ## EVEX TO VEX Compression encoding: [0xc5,0xdd,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i32 %mask to <32 x i1>
+ %2 = call <32 x i8> @llvm.x86.vgf2p8affineinvqb.256(<32 x i8> %src1, <32 x i8> %src2, i8 3)
+ %3 = select <32 x i1> %1, <32 x i8> %2, <32 x i8> zeroinitializer
+ %4 = select <32 x i1> %1, <32 x i8> %2, <32 x i8> %passthru
+ %5 = xor <32 x i8> %3, %4
+ %6 = xor <32 x i8> %5, %2
+ ret <32 x i8> %6
+}
+
+declare <64 x i8> @llvm.x86.vgf2p8affineinvqb.512(<64 x i8>, <64 x i8>, i8)
+define <64 x i8> @test_vgf2p8affineinvqb_512(<64 x i8> %src1, <64 x i8> %src2, <64 x i8> %passthru, i64 %mask) {
+; CHECK-LABEL: test_vgf2p8affineinvqb_512:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovq %rdi, %k1 ## encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %zmm1, %zmm0, %zmm3 ## encoding: [0x62,0xf3,0xfd,0x48,0xcf,0xd9,0x03]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %zmm1, %zmm0, %zmm4 {%k1} {z} ## encoding: [0x62,0xf3,0xfd,0xc9,0xcf,0xe1,0x03]
+; CHECK-NEXT: vgf2p8affineinvqb $3, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf3,0xfd,0x49,0xcf,0xd1,0x03]
+; CHECK-NEXT: vpxorq %zmm3, %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xed,0x48,0xef,0xc3]
+; CHECK-NEXT: vpxorq %zmm0, %zmm4, %zmm0 ## encoding: [0x62,0xf1,0xdd,0x48,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i64 %mask to <64 x i1>
+ %2 = call <64 x i8> @llvm.x86.vgf2p8affineinvqb.512(<64 x i8> %src1, <64 x i8> %src2, i8 3)
+ %3 = select <64 x i1> %1, <64 x i8> %2, <64 x i8> zeroinitializer
+ %4 = select <64 x i1> %1, <64 x i8> %2, <64 x i8> %passthru
+ %5 = xor <64 x i8> %3, %4
+ %6 = xor <64 x i8> %5, %2
+ ret <64 x i8> %6
+}
+
+declare <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8>, <16 x i8>, i8)
+define <16 x i8> @test_vgf2p8affineqb_128(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %passthru, i16 %mask) {
+; CHECK-LABEL: test_vgf2p8affineqb_128:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovd %edi, %k1 ## encoding: [0xc5,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8affineqb $3, %xmm1, %xmm0, %xmm3 ## EVEX TO VEX Compression encoding: [0xc4,0xe3,0xf9,0xce,0xd9,0x03]
+; CHECK-NEXT: vgf2p8affineqb $3, %xmm1, %xmm0, %xmm4 {%k1} {z} ## encoding: [0x62,0xf3,0xfd,0x89,0xce,0xe1,0x03]
+; CHECK-NEXT: vgf2p8affineqb $3, %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf3,0xfd,0x09,0xce,0xd1,0x03]
+; CHECK-NEXT: vpxor %xmm3, %xmm2, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0xef,0xc3]
+; CHECK-NEXT: vpxor %xmm0, %xmm4, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xd9,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i16 %mask to <16 x i1>
+ %2 = call <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8> %src1, <16 x i8> %src2, i8 3)
+ %3 = select <16 x i1> %1, <16 x i8> %2, <16 x i8> zeroinitializer
+ %4 = select <16 x i1> %1, <16 x i8> %2, <16 x i8> %passthru
+ %5 = xor <16 x i8> %3, %4
+ %6 = xor <16 x i8> %5, %2
+ ret <16 x i8> %6
+}
+
+declare <32 x i8> @llvm.x86.vgf2p8affineqb.256(<32 x i8>, <32 x i8>, i8)
+define <32 x i8> @test_vgf2p8affineqb_256(<32 x i8> %src1, <32 x i8> %src2, <32 x i8> %passthru, i32 %mask) {
+; CHECK-LABEL: test_vgf2p8affineqb_256:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovd %edi, %k1 ## encoding: [0xc5,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8affineqb $3, %ymm1, %ymm0, %ymm3 ## EVEX TO VEX Compression encoding: [0xc4,0xe3,0xfd,0xce,0xd9,0x03]
+; CHECK-NEXT: vgf2p8affineqb $3, %ymm1, %ymm0, %ymm4 {%k1} {z} ## encoding: [0x62,0xf3,0xfd,0xa9,0xce,0xe1,0x03]
+; CHECK-NEXT: vgf2p8affineqb $3, %ymm1, %ymm0, %ymm2 {%k1} ## encoding: [0x62,0xf3,0xfd,0x29,0xce,0xd1,0x03]
+; CHECK-NEXT: vpxor %ymm3, %ymm2, %ymm0 ## EVEX TO VEX Compression encoding: [0xc5,0xed,0xef,0xc3]
+; CHECK-NEXT: vpxor %ymm0, %ymm4, %ymm0 ## EVEX TO VEX Compression encoding: [0xc5,0xdd,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i32 %mask to <32 x i1>
+ %2 = call <32 x i8> @llvm.x86.vgf2p8affineqb.256(<32 x i8> %src1, <32 x i8> %src2, i8 3)
+ %3 = select <32 x i1> %1, <32 x i8> %2, <32 x i8> zeroinitializer
+ %4 = select <32 x i1> %1, <32 x i8> %2, <32 x i8> %passthru
+ %5 = xor <32 x i8> %3, %4
+ %6 = xor <32 x i8> %5, %2
+ ret <32 x i8> %6
+}
+
+declare <64 x i8> @llvm.x86.vgf2p8affineqb.512(<64 x i8>, <64 x i8>, i8)
+define <64 x i8> @test_vgf2p8affineqb_512(<64 x i8> %src1, <64 x i8> %src2, <64 x i8> %passthru, i64 %mask) {
+; CHECK-LABEL: test_vgf2p8affineqb_512:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovq %rdi, %k1 ## encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8affineqb $3, %zmm1, %zmm0, %zmm3 ## encoding: [0x62,0xf3,0xfd,0x48,0xce,0xd9,0x03]
+; CHECK-NEXT: vgf2p8affineqb $3, %zmm1, %zmm0, %zmm4 {%k1} {z} ## encoding: [0x62,0xf3,0xfd,0xc9,0xce,0xe1,0x03]
+; CHECK-NEXT: vgf2p8affineqb $3, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf3,0xfd,0x49,0xce,0xd1,0x03]
+; CHECK-NEXT: vpxorq %zmm3, %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xed,0x48,0xef,0xc3]
+; CHECK-NEXT: vpxorq %zmm0, %zmm4, %zmm0 ## encoding: [0x62,0xf1,0xdd,0x48,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i64 %mask to <64 x i1>
+ %2 = call <64 x i8> @llvm.x86.vgf2p8affineqb.512(<64 x i8> %src1, <64 x i8> %src2, i8 3)
+ %3 = select <64 x i1> %1, <64 x i8> %2, <64 x i8> zeroinitializer
+ %4 = select <64 x i1> %1, <64 x i8> %2, <64 x i8> %passthru
+ %5 = xor <64 x i8> %3, %4
+ %6 = xor <64 x i8> %5, %2
+ ret <64 x i8> %6
+}
+
+declare <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8>, <16 x i8>)
+define <16 x i8> @test_vgf2p8mulb_128(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %passthru, i16 %mask) {
+; CHECK-LABEL: test_vgf2p8mulb_128:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovd %edi, %k1 ## encoding: [0xc5,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8mulb %xmm1, %xmm0, %xmm3 ## EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xcf,0xd9]
+; CHECK-NEXT: vgf2p8mulb %xmm1, %xmm0, %xmm4 {%k1} {z} ## encoding: [0x62,0xf2,0x7d,0x89,0xcf,0xe1]
+; CHECK-NEXT: vgf2p8mulb %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xcf,0xd1]
+; CHECK-NEXT: vpxor %xmm3, %xmm2, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xe9,0xef,0xc3]
+; CHECK-NEXT: vpxor %xmm0, %xmm4, %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xd9,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i16 %mask to <16 x i1>
+ %2 = call <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8> %src1, <16 x i8> %src2)
+ %3 = select <16 x i1> %1, <16 x i8> %2, <16 x i8> zeroinitializer
+ %4 = select <16 x i1> %1, <16 x i8> %2, <16 x i8> %passthru
+ %5 = xor <16 x i8> %3, %4
+ %6 = xor <16 x i8> %5, %2
+ ret <16 x i8> %6
+}
+
+declare <32 x i8> @llvm.x86.vgf2p8mulb.256(<32 x i8>, <32 x i8>)
+define <32 x i8> @test_vgf2p8mulb_256(<32 x i8> %src1, <32 x i8> %src2, <32 x i8> %passthru, i32 %mask) {
+; CHECK-LABEL: test_vgf2p8mulb_256:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovd %edi, %k1 ## encoding: [0xc5,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8mulb %ymm1, %ymm0, %ymm3 ## EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0xcf,0xd9]
+; CHECK-NEXT: vgf2p8mulb %ymm1, %ymm0, %ymm4 {%k1} {z} ## encoding: [0x62,0xf2,0x7d,0xa9,0xcf,0xe1]
+; CHECK-NEXT: vgf2p8mulb %ymm1, %ymm0, %ymm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x29,0xcf,0xd1]
+; CHECK-NEXT: vpxor %ymm3, %ymm2, %ymm0 ## EVEX TO VEX Compression encoding: [0xc5,0xed,0xef,0xc3]
+; CHECK-NEXT: vpxor %ymm0, %ymm4, %ymm0 ## EVEX TO VEX Compression encoding: [0xc5,0xdd,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i32 %mask to <32 x i1>
+ %2 = call <32 x i8> @llvm.x86.vgf2p8mulb.256(<32 x i8> %src1, <32 x i8> %src2)
+ %3 = select <32 x i1> %1, <32 x i8> %2, <32 x i8> zeroinitializer
+ %4 = select <32 x i1> %1, <32 x i8> %2, <32 x i8> %passthru
+ %5 = xor <32 x i8> %3, %4
+ %6 = xor <32 x i8> %5, %2
+ ret <32 x i8> %6
+}
+
+declare <64 x i8> @llvm.x86.vgf2p8mulb.512(<64 x i8>, <64 x i8>)
+define <64 x i8> @test_vgf2p8mulb_512(<64 x i8> %src1, <64 x i8> %src2, <64 x i8> %passthru, i64 %mask) {
+; CHECK-LABEL: test_vgf2p8mulb_512:
+; CHECK: ## BB#0:
+; CHECK-NEXT: kmovq %rdi, %k1 ## encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
+; CHECK-NEXT: vgf2p8mulb %zmm1, %zmm0, %zmm3 ## encoding: [0x62,0xf2,0x7d,0x48,0xcf,0xd9]
+; CHECK-NEXT: vgf2p8mulb %zmm1, %zmm0, %zmm4 {%k1} {z} ## encoding: [0x62,0xf2,0x7d,0xc9,0xcf,0xe1]
+; CHECK-NEXT: vgf2p8mulb %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xcf,0xd1]
+; CHECK-NEXT: vpxorq %zmm3, %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xed,0x48,0xef,0xc3]
+; CHECK-NEXT: vpxorq %zmm0, %zmm4, %zmm0 ## encoding: [0x62,0xf1,0xdd,0x48,0xef,0xc0]
+; CHECK-NEXT: retq ## encoding: [0xc3]
+ %1 = bitcast i64 %mask to <64 x i1>
+ %2 = call <64 x i8> @llvm.x86.vgf2p8mulb.512(<64 x i8> %src1, <64 x i8> %src2)
+ %3 = select <64 x i1> %1, <64 x i8> %2, <64 x i8> zeroinitializer
+ %4 = select <64 x i1> %1, <64 x i8> %2, <64 x i8> %passthru
+ %5 = xor <64 x i8> %3, %4
+ %6 = xor <64 x i8> %5, %2
+ ret <64 x i8> %6
+}
+
diff --git a/llvm/test/CodeGen/X86/gfni-intrinsics.ll b/llvm/test/CodeGen/X86/gfni-intrinsics.ll
new file mode 100644
index 00000000000..46e9efc12ca
--- /dev/null
+++ b/llvm/test/CodeGen/X86/gfni-intrinsics.ll
@@ -0,0 +1,33 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=+gfni -show-mc-encoding | FileCheck %s
+
+declare <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8>, <16 x i8>, i8)
+define <16 x i8> @test_gf2p8affineinvqb_128(<16 x i8> %src1, <16 x i8> %src2) {
+; CHECK-LABEL: test_gf2p8affineinvqb_128:
+; CHECK: ## BB#0:
+; CHECK-NEXT: gf2p8affineinvqb $11, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0xcf,0xc1,0x0b]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <16 x i8> @llvm.x86.vgf2p8affineinvqb.128(<16 x i8> %src1, <16 x i8> %src2, i8 11)
+ ret <16 x i8> %1
+}
+
+declare <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8>, <16 x i8>, i8)
+define <16 x i8> @test_gf2p8affineqb_128(<16 x i8> %src1, <16 x i8> %src2) {
+; CHECK-LABEL: test_gf2p8affineqb_128:
+; CHECK: ## BB#0:
+; CHECK-NEXT: gf2p8affineqb $11, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0xce,0xc1,0x0b]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <16 x i8> @llvm.x86.vgf2p8affineqb.128(<16 x i8> %src1, <16 x i8> %src2, i8 11)
+ ret <16 x i8> %1
+}
+
+declare <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8>, <16 x i8>)
+define <16 x i8> @test_gf2p8mulb_128(<16 x i8> %src1, <16 x i8> %src2) {
+; CHECK-LABEL: test_gf2p8mulb_128:
+; CHECK: ## BB#0:
+; CHECK-NEXT: gf2p8mulb %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x38,0xcf,0xc1]
+; CHECK-NEXT: retl ## encoding: [0xc3]
+ %1 = call <16 x i8> @llvm.x86.vgf2p8mulb.128(<16 x i8> %src1, <16 x i8> %src2)
+ ret <16 x i8> %1
+}
+
diff --git a/llvm/test/MC/X86/avx512gfni-encoding.s b/llvm/test/MC/X86/avx512gfni-encoding.s
new file mode 100644
index 00000000000..4dd75213cfb
--- /dev/null
+++ b/llvm/test/MC/X86/avx512gfni-encoding.s
@@ -0,0 +1,178 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown -mattr=+gfni,+avx512f,+avx512bw --show-encoding < %s | FileCheck %s
+
+// CHECK: vgf2p8affineinvqb $7, %zmm2, %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x40,0xcf,0xca,0x07]
+ vgf2p8affineinvqb $7, %zmm2, %zmm20, %zmm1
+
+// CHECK: vgf2p8affineqb $7, %zmm2, %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x40,0xce,0xca,0x07]
+ vgf2p8affineqb $7, %zmm2, %zmm20, %zmm1
+
+// CHECK: vgf2p8affineinvqb $7, %zmm2, %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x42,0xcf,0xca,0x07]
+ vgf2p8affineinvqb $7, %zmm2, %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, %zmm2, %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x42,0xce,0xca,0x07]
+ vgf2p8affineqb $7, %zmm2, %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x40,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineinvqb $7, -256(%rsp), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x40,0xcf,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineinvqb $7, -256(%rsp), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineinvqb $7, 256(%rsp), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x40,0xcf,0x4c,0x24,0x04,0x07]
+ vgf2p8affineinvqb $7, 256(%rsp), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x40,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x40,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x40,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineqb $7, (%rcx), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x40,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineqb $7, -256(%rsp), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x40,0xce,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineqb $7, -256(%rsp), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineqb $7, 256(%rsp), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x40,0xce,0x4c,0x24,0x04,0x07]
+ vgf2p8affineqb $7, 256(%rsp), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x40,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x40,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x40,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x42,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -256(%rsp), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x42,0xcf,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineinvqb $7, -256(%rsp), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, 256(%rsp), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x42,0xcf,0x4c,0x24,0x04,0x07]
+ vgf2p8affineinvqb $7, 256(%rsp), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x42,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x42,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x42,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, (%rcx), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x42,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -256(%rsp), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x42,0xce,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineqb $7, -256(%rsp), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, 256(%rsp), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x42,0xce,0x4c,0x24,0x04,0x07]
+ vgf2p8affineqb $7, 256(%rsp), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x42,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x42,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x42,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8mulb %zmm2, %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x40,0xcf,0xca]
+ vgf2p8mulb %zmm2, %zmm20, %zmm1
+
+// CHECK: vgf2p8mulb %zmm2, %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x42,0xcf,0xca]
+ vgf2p8mulb %zmm2, %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8mulb (%rcx), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x40,0xcf,0x09]
+ vgf2p8mulb (%rcx), %zmm20, %zmm1
+
+// CHECK: vgf2p8mulb -256(%rsp), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x40,0xcf,0x4c,0x24,0xfc]
+ vgf2p8mulb -256(%rsp), %zmm20, %zmm1
+
+// CHECK: vgf2p8mulb 256(%rsp), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x40,0xcf,0x4c,0x24,0x04]
+ vgf2p8mulb 256(%rsp), %zmm20, %zmm1
+
+// CHECK: vgf2p8mulb 268435456(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x40,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ vgf2p8mulb 268435456(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8mulb -536870912(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x40,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ vgf2p8mulb -536870912(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8mulb -536870910(%rcx,%r14,8), %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x40,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ vgf2p8mulb -536870910(%rcx,%r14,8), %zmm20, %zmm1
+
+// CHECK: vgf2p8mulb (%rcx), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x42,0xcf,0x09]
+ vgf2p8mulb (%rcx), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8mulb -256(%rsp), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x42,0xcf,0x4c,0x24,0xfc]
+ vgf2p8mulb -256(%rsp), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8mulb 256(%rsp), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x42,0xcf,0x4c,0x24,0x04]
+ vgf2p8mulb 256(%rsp), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8mulb 268435456(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x42,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ vgf2p8mulb 268435456(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8mulb -536870912(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x42,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ vgf2p8mulb -536870912(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8mulb -536870910(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x42,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ vgf2p8mulb -536870910(%rcx,%r14,8), %zmm20, %zmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx){1to8}, %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x50,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx){1to8}, %zmm20, %zmm1
+
+// CHECK: vgf2p8affineqb $7, (%rcx){1to8}, %zmm20, %zmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x50,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx){1to8}, %zmm20, %zmm1
+
diff --git a/llvm/test/MC/X86/avx512vl_gfni-encoding.s b/llvm/test/MC/X86/avx512vl_gfni-encoding.s
new file mode 100644
index 00000000000..706ce90c7b8
--- /dev/null
+++ b/llvm/test/MC/X86/avx512vl_gfni-encoding.s
@@ -0,0 +1,354 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown -mattr=+gfni,+avx512vl,+avx512bw --show-encoding < %s | FileCheck %s
+
+// CHECK: vgf2p8affineinvqb $7, %xmm2, %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x00,0xcf,0xca,0x07]
+ vgf2p8affineinvqb $7, %xmm2, %xmm20, %xmm1
+
+// CHECK: vgf2p8affineqb $7, %xmm2, %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x00,0xce,0xca,0x07]
+ vgf2p8affineqb $7, %xmm2, %xmm20, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, %xmm2, %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x02,0xcf,0xca,0x07]
+ vgf2p8affineinvqb $7, %xmm2, %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, %xmm2, %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x02,0xce,0xca,0x07]
+ vgf2p8affineqb $7, %xmm2, %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x00,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, -64(%rsp), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x00,0xcf,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineinvqb $7, -64(%rsp), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, 64(%rsp), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x00,0xcf,0x4c,0x24,0x04,0x07]
+ vgf2p8affineinvqb $7, 64(%rsp), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x00,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x00,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x00,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineqb $7, (%rcx), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x00,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineqb $7, -64(%rsp), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x00,0xce,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineqb $7, -64(%rsp), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineqb $7, 64(%rsp), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x00,0xce,0x4c,0x24,0x04,0x07]
+ vgf2p8affineqb $7, 64(%rsp), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x00,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x00,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x00,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x02,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -64(%rsp), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x02,0xcf,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineinvqb $7, -64(%rsp), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, 64(%rsp), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x02,0xcf,0x4c,0x24,0x04,0x07]
+ vgf2p8affineinvqb $7, 64(%rsp), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x02,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x02,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x02,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, (%rcx), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x02,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -64(%rsp), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x02,0xce,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineqb $7, -64(%rsp), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, 64(%rsp), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x02,0xce,0x4c,0x24,0x04,0x07]
+ vgf2p8affineqb $7, 64(%rsp), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x02,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x02,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x02,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, %ymm2, %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x20,0xcf,0xca,0x07]
+ vgf2p8affineinvqb $7, %ymm2, %ymm20, %ymm1
+
+// CHECK: vgf2p8affineqb $7, %ymm2, %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x20,0xce,0xca,0x07]
+ vgf2p8affineqb $7, %ymm2, %ymm20, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, %ymm2, %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x22,0xcf,0xca,0x07]
+ vgf2p8affineinvqb $7, %ymm2, %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, %ymm2, %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x22,0xce,0xca,0x07]
+ vgf2p8affineqb $7, %ymm2, %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x20,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, -128(%rsp), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x20,0xcf,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineinvqb $7, -128(%rsp), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, 128(%rsp), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x20,0xcf,0x4c,0x24,0x04,0x07]
+ vgf2p8affineinvqb $7, 128(%rsp), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x20,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x20,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x20,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineqb $7, (%rcx), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x20,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineqb $7, -128(%rsp), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x20,0xce,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineqb $7, -128(%rsp), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineqb $7, 128(%rsp), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x20,0xce,0x4c,0x24,0x04,0x07]
+ vgf2p8affineqb $7, 128(%rsp), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x20,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x20,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb3,0xdd,0x20,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x22,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -128(%rsp), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x22,0xcf,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineinvqb $7, -128(%rsp), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, 128(%rsp), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x22,0xcf,0x4c,0x24,0x04,0x07]
+ vgf2p8affineinvqb $7, 128(%rsp), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x22,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x22,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x22,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, (%rcx), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x22,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -128(%rsp), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x22,0xce,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineqb $7, -128(%rsp), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, 128(%rsp), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf3,0xdd,0x22,0xce,0x4c,0x24,0x04,0x07]
+ vgf2p8affineqb $7, 128(%rsp), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x22,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x22,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb3,0xdd,0x22,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8mulb %xmm2, %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x00,0xcf,0xca]
+ vgf2p8mulb %xmm2, %xmm20, %xmm1
+
+// CHECK: vgf2p8mulb %xmm2, %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x02,0xcf,0xca]
+ vgf2p8mulb %xmm2, %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8mulb (%rcx), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x00,0xcf,0x09]
+ vgf2p8mulb (%rcx), %xmm20, %xmm1
+
+// CHECK: vgf2p8mulb -64(%rsp), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x00,0xcf,0x4c,0x24,0xfc]
+ vgf2p8mulb -64(%rsp), %xmm20, %xmm1
+
+// CHECK: vgf2p8mulb 64(%rsp), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x00,0xcf,0x4c,0x24,0x04]
+ vgf2p8mulb 64(%rsp), %xmm20, %xmm1
+
+// CHECK: vgf2p8mulb 268435456(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x00,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ vgf2p8mulb 268435456(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8mulb -536870912(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x00,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ vgf2p8mulb -536870912(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8mulb -536870910(%rcx,%r14,8), %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x00,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ vgf2p8mulb -536870910(%rcx,%r14,8), %xmm20, %xmm1
+
+// CHECK: vgf2p8mulb (%rcx), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x02,0xcf,0x09]
+ vgf2p8mulb (%rcx), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8mulb -64(%rsp), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x02,0xcf,0x4c,0x24,0xfc]
+ vgf2p8mulb -64(%rsp), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8mulb 64(%rsp), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x02,0xcf,0x4c,0x24,0x04]
+ vgf2p8mulb 64(%rsp), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8mulb 268435456(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x02,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ vgf2p8mulb 268435456(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8mulb -536870912(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x02,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ vgf2p8mulb -536870912(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8mulb -536870910(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x02,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ vgf2p8mulb -536870910(%rcx,%r14,8), %xmm20, %xmm1 {%k2}
+
+// CHECK: vgf2p8mulb %ymm2, %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x20,0xcf,0xca]
+ vgf2p8mulb %ymm2, %ymm20, %ymm1
+
+// CHECK: vgf2p8mulb %ymm2, %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x22,0xcf,0xca]
+ vgf2p8mulb %ymm2, %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8mulb (%rcx), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x20,0xcf,0x09]
+ vgf2p8mulb (%rcx), %ymm20, %ymm1
+
+// CHECK: vgf2p8mulb -128(%rsp), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x20,0xcf,0x4c,0x24,0xfc]
+ vgf2p8mulb -128(%rsp), %ymm20, %ymm1
+
+// CHECK: vgf2p8mulb 128(%rsp), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf2,0x5d,0x20,0xcf,0x4c,0x24,0x04]
+ vgf2p8mulb 128(%rsp), %ymm20, %ymm1
+
+// CHECK: vgf2p8mulb 268435456(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x20,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ vgf2p8mulb 268435456(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8mulb -536870912(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x20,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ vgf2p8mulb -536870912(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8mulb -536870910(%rcx,%r14,8), %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xb2,0x5d,0x20,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ vgf2p8mulb -536870910(%rcx,%r14,8), %ymm20, %ymm1
+
+// CHECK: vgf2p8mulb (%rcx), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x22,0xcf,0x09]
+ vgf2p8mulb (%rcx), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8mulb -128(%rsp), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x22,0xcf,0x4c,0x24,0xfc]
+ vgf2p8mulb -128(%rsp), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8mulb 128(%rsp), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xf2,0x5d,0x22,0xcf,0x4c,0x24,0x04]
+ vgf2p8mulb 128(%rsp), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8mulb 268435456(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x22,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ vgf2p8mulb 268435456(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8mulb -536870912(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x22,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ vgf2p8mulb -536870912(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8mulb -536870910(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+// CHECK: encoding: [0x62,0xb2,0x5d,0x22,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ vgf2p8mulb -536870910(%rcx,%r14,8), %ymm20, %ymm1 {%k2}
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx){1to2}, %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x10,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx){1to2}, %xmm20, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx){1to4}, %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x30,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx){1to4}, %ymm20, %ymm1
+
+// CHECK: vgf2p8affineqb $7, (%rcx){1to2}, %xmm20, %xmm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x10,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx){1to2}, %xmm20, %xmm1
+
+// CHECK: vgf2p8affineqb $7, (%rcx){1to4}, %ymm20, %ymm1
+// CHECK: encoding: [0x62,0xf3,0xdd,0x30,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx){1to4}, %ymm20, %ymm1
+
diff --git a/llvm/test/MC/X86/gfni-encoding.s b/llvm/test/MC/X86/gfni-encoding.s
new file mode 100644
index 00000000000..754220471a3
--- /dev/null
+++ b/llvm/test/MC/X86/gfni-encoding.s
@@ -0,0 +1,254 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown -mattr=+gfni --show-encoding < %s | FileCheck %s
+
+// CHECK: gf2p8affineinvqb $7, %xmm2, %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0xcf,0xca,0x07]
+ gf2p8affineinvqb $7, %xmm2, %xmm1
+
+// CHECK: gf2p8affineqb $7, %xmm2, %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0xce,0xca,0x07]
+ gf2p8affineqb $7, %xmm2, %xmm1
+
+// CHECK: gf2p8affineinvqb $7, (%rcx), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0xcf,0x09,0x07]
+ gf2p8affineinvqb $7, (%rcx), %xmm1
+
+// CHECK: gf2p8affineinvqb $7, -4(%rsp), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0xcf,0x4c,0x24,0xfc,0x07]
+ gf2p8affineinvqb $7, -4(%rsp), %xmm1
+
+// CHECK: gf2p8affineinvqb $7, 4(%rsp), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0xcf,0x4c,0x24,0x04,0x07]
+ gf2p8affineinvqb $7, 4(%rsp), %xmm1
+
+// CHECK: gf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x3a,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ gf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %xmm1
+
+// CHECK: gf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x3a,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ gf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %xmm1
+
+// CHECK: gf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x3a,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ gf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %xmm1
+
+// CHECK: gf2p8affineqb $7, (%rcx), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0xce,0x09,0x07]
+ gf2p8affineqb $7, (%rcx), %xmm1
+
+// CHECK: gf2p8affineqb $7, -4(%rsp), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0xce,0x4c,0x24,0xfc,0x07]
+ gf2p8affineqb $7, -4(%rsp), %xmm1
+
+// CHECK: gf2p8affineqb $7, 4(%rsp), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x3a,0xce,0x4c,0x24,0x04,0x07]
+ gf2p8affineqb $7, 4(%rsp), %xmm1
+
+// CHECK: gf2p8affineqb $7, 268435456(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x3a,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ gf2p8affineqb $7, 268435456(%rcx,%r14,8), %xmm1
+
+// CHECK: gf2p8affineqb $7, -536870912(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x3a,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ gf2p8affineqb $7, -536870912(%rcx,%r14,8), %xmm1
+
+// CHECK: gf2p8affineqb $7, -536870910(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x3a,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ gf2p8affineqb $7, -536870910(%rcx,%r14,8), %xmm1
+
+// CHECK: gf2p8mulb %xmm2, %xmm1
+// CHECK: encoding: [0x66,0x0f,0x38,0xcf,0xca]
+ gf2p8mulb %xmm2, %xmm1
+
+// CHECK: gf2p8mulb (%rcx), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x38,0xcf,0x09]
+ gf2p8mulb (%rcx), %xmm1
+
+// CHECK: gf2p8mulb -4(%rsp), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x38,0xcf,0x4c,0x24,0xfc]
+ gf2p8mulb -4(%rsp), %xmm1
+
+// CHECK: gf2p8mulb 4(%rsp), %xmm1
+// CHECK: encoding: [0x66,0x0f,0x38,0xcf,0x4c,0x24,0x04]
+ gf2p8mulb 4(%rsp), %xmm1
+
+// CHECK: gf2p8mulb 268435456(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x38,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ gf2p8mulb 268435456(%rcx,%r14,8), %xmm1
+
+// CHECK: gf2p8mulb -536870912(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x38,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ gf2p8mulb -536870912(%rcx,%r14,8), %xmm1
+
+// CHECK: gf2p8mulb -536870910(%rcx,%r14,8), %xmm1
+// CHECK: encoding: [0x66,0x42,0x0f,0x38,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ gf2p8mulb -536870910(%rcx,%r14,8), %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, %xmm2, %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe3,0xa9,0xcf,0xca,0x07]
+ vgf2p8affineinvqb $7, %xmm2, %xmm10, %xmm1
+
+// CHECK: vgf2p8affineqb $7, %xmm2, %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe3,0xa9,0xce,0xca,0x07]
+ vgf2p8affineqb $7, %xmm2, %xmm10, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe3,0xa9,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, -4(%rsp), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe3,0xa9,0xcf,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineinvqb $7, -4(%rsp), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, 4(%rsp), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe3,0xa9,0xcf,0x4c,0x24,0x04,0x07]
+ vgf2p8affineinvqb $7, 4(%rsp), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa3,0xa9,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa3,0xa9,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa3,0xa9,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineqb $7, (%rcx), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe3,0xa9,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineqb $7, -4(%rsp), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe3,0xa9,0xce,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineqb $7, -4(%rsp), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineqb $7, 4(%rsp), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe3,0xa9,0xce,0x4c,0x24,0x04,0x07]
+ vgf2p8affineqb $7, 4(%rsp), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa3,0xa9,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa3,0xa9,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa3,0xa9,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8affineinvqb $7, %ymm2, %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe3,0xad,0xcf,0xca,0x07]
+ vgf2p8affineinvqb $7, %ymm2, %ymm10, %ymm1
+
+// CHECK: vgf2p8affineqb $7, %ymm2, %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe3,0xad,0xce,0xca,0x07]
+ vgf2p8affineqb $7, %ymm2, %ymm10, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, (%rcx), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe3,0xad,0xcf,0x09,0x07]
+ vgf2p8affineinvqb $7, (%rcx), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, -4(%rsp), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe3,0xad,0xcf,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineinvqb $7, -4(%rsp), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, 4(%rsp), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe3,0xad,0xcf,0x4c,0x24,0x04,0x07]
+ vgf2p8affineinvqb $7, 4(%rsp), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa3,0xad,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineinvqb $7, 268435456(%rcx,%r14,8), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa3,0xad,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870912(%rcx,%r14,8), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa3,0xad,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineinvqb $7, -536870910(%rcx,%r14,8), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineqb $7, (%rcx), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe3,0xad,0xce,0x09,0x07]
+ vgf2p8affineqb $7, (%rcx), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineqb $7, -4(%rsp), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe3,0xad,0xce,0x4c,0x24,0xfc,0x07]
+ vgf2p8affineqb $7, -4(%rsp), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineqb $7, 4(%rsp), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe3,0xad,0xce,0x4c,0x24,0x04,0x07]
+ vgf2p8affineqb $7, 4(%rsp), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa3,0xad,0xce,0x8c,0xf1,0x00,0x00,0x00,0x10,0x07]
+ vgf2p8affineqb $7, 268435456(%rcx,%r14,8), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa3,0xad,0xce,0x8c,0xf1,0x00,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870912(%rcx,%r14,8), %ymm10, %ymm1
+
+// CHECK: vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa3,0xad,0xce,0x8c,0xf1,0x02,0x00,0x00,0xe0,0x07]
+ vgf2p8affineqb $7, -536870910(%rcx,%r14,8), %ymm10, %ymm1
+
+// CHECK: vgf2p8mulb %xmm2, %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe2,0x29,0xcf,0xca]
+ vgf2p8mulb %xmm2, %xmm10, %xmm1
+
+// CHECK: vgf2p8mulb (%rcx), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe2,0x29,0xcf,0x09]
+ vgf2p8mulb (%rcx), %xmm10, %xmm1
+
+// CHECK: vgf2p8mulb -4(%rsp), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe2,0x29,0xcf,0x4c,0x24,0xfc]
+ vgf2p8mulb -4(%rsp), %xmm10, %xmm1
+
+// CHECK: vgf2p8mulb 4(%rsp), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xe2,0x29,0xcf,0x4c,0x24,0x04]
+ vgf2p8mulb 4(%rsp), %xmm10, %xmm1
+
+// CHECK: vgf2p8mulb 268435456(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa2,0x29,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ vgf2p8mulb 268435456(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8mulb -536870912(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa2,0x29,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ vgf2p8mulb -536870912(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8mulb -536870910(%rcx,%r14,8), %xmm10, %xmm1
+// CHECK: encoding: [0xc4,0xa2,0x29,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ vgf2p8mulb -536870910(%rcx,%r14,8), %xmm10, %xmm1
+
+// CHECK: vgf2p8mulb %ymm2, %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x2d,0xcf,0xca]
+ vgf2p8mulb %ymm2, %ymm10, %ymm1
+
+// CHECK: vgf2p8mulb (%rcx), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x2d,0xcf,0x09]
+ vgf2p8mulb (%rcx), %ymm10, %ymm1
+
+// CHECK: vgf2p8mulb -4(%rsp), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x2d,0xcf,0x4c,0x24,0xfc]
+ vgf2p8mulb -4(%rsp), %ymm10, %ymm1
+
+// CHECK: vgf2p8mulb 4(%rsp), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xe2,0x2d,0xcf,0x4c,0x24,0x04]
+ vgf2p8mulb 4(%rsp), %ymm10, %ymm1
+
+// CHECK: vgf2p8mulb 268435456(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x2d,0xcf,0x8c,0xf1,0x00,0x00,0x00,0x10]
+ vgf2p8mulb 268435456(%rcx,%r14,8), %ymm10, %ymm1
+
+// CHECK: vgf2p8mulb -536870912(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x2d,0xcf,0x8c,0xf1,0x00,0x00,0x00,0xe0]
+ vgf2p8mulb -536870912(%rcx,%r14,8), %ymm10, %ymm1
+
+// CHECK: vgf2p8mulb -536870910(%rcx,%r14,8), %ymm10, %ymm1
+// CHECK: encoding: [0xc4,0xa2,0x2d,0xcf,0x8c,0xf1,0x02,0x00,0x00,0xe0]
+ vgf2p8mulb -536870910(%rcx,%r14,8), %ymm10, %ymm1
+
OpenPOWER on IntegriCloud