aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorHaochen Jiang <haochen.jiang@intel.com>2023-07-24 11:09:57 +0800
committerHaochen Jiang <haochen.jiang@intel.com>2023-07-27 20:52:46 +0800
commit2bced1684b3636d4c7607b7ec57e34d2d71b74cb (patch)
tree6cf61ac248321b80cb1acb5b58402a2b9112569d /gas
parentc55ba32b7a7a3cf2ba8a42310f1c3d0b090af3e2 (diff)
downloadgdb-2bced1684b3636d4c7607b7ec57e34d2d71b74cb.zip
gdb-2bced1684b3636d4c7607b7ec57e34d2d71b74cb.tar.gz
gdb-2bced1684b3636d4c7607b7ec57e34d2d71b74cb.tar.bz2
Support Intel SM4
gas/ChangeLog: * NEWS: Support Intel SM4. * config/tc-i386.c: Add sm4. * doc/c-i386.texi: Document .sm4. * testsuite/gas/i386/i386.exp: Run SM4 tests. * testsuite/gas/i386/x86-64.exp: Ditto. * testsuite/gas/i386/sm4-intel.d: Add SM4 tests. * testsuite/gas/i386/sm4.d: Ditto. * testsuite/gas/i386/sm4.s: Ditto. * testsuite/gas/i386/x86-64-sm4-intel.d: Ditto. * testsuite/gas/i386/x86-64-sm4.d: Ditto. * testsuite/gas/i386/x86-64-sm4.s: Ditto. opcodes/ChangeLog: * i386-dis.c (prefix_table): Add SM4 instructions. * i386-gen.c (isa_dependencies): Add SM4. (cpu_flags): Ditto. * i386-init.h: Regenerated. * i386-mnem.h: Ditto. * i386-opc.h (CpuSM4): New. (i386_cpu_flags): Add cpusm4. * i386-opc.tbl: Add SM4 instructions. * i386-tbl.h: Regenerated.
Diffstat (limited to 'gas')
-rw-r--r--gas/NEWS2
-rw-r--r--gas/config/tc-i386.c1
-rw-r--r--gas/doc/c-i386.texi3
-rw-r--r--gas/testsuite/gas/i386/i386.exp2
-rw-r--r--gas/testsuite/gas/i386/sm4-intel.d33
-rw-r--r--gas/testsuite/gas/i386/sm4.d33
-rw-r--r--gas/testsuite/gas/i386/sm4.s30
-rw-r--r--gas/testsuite/gas/i386/x86-64-sm4-intel.d33
-rw-r--r--gas/testsuite/gas/i386/x86-64-sm4.d33
-rw-r--r--gas/testsuite/gas/i386/x86-64-sm4.s30
-rw-r--r--gas/testsuite/gas/i386/x86-64.exp2
11 files changed, 201 insertions, 1 deletions
diff --git a/gas/NEWS b/gas/NEWS
index 42bda65..26e75bd 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,7 @@
-*- text -*-
+* Add support for Intel SM4 instructions.
+
* Add support for Intel SM3 instructions.
* Add support for Intel SHA512 instructions.
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 7424fa4..686dd4c7 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1154,6 +1154,7 @@ static const arch_entry cpu_arch[] =
SUBARCH (avx_vnni_int16, AVX_VNNI_INT16, ANY_AVX_VNNI_INT16, false),
SUBARCH (sha512, SHA512, ANY_SHA512, false),
SUBARCH (sm3, SM3, ANY_SM3, false),
+ SUBARCH (sm4, SM4, ANY_SM4, false),
};
#undef SUBARCH
diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi
index 6ef1da2..54b0d7d 100644
--- a/gas/doc/c-i386.texi
+++ b/gas/doc/c-i386.texi
@@ -210,6 +210,7 @@ accept various extension mnemonics. For example,
@code{avx_vnni_int16},
@code{sha512},
@code{sm3},
+@code{sm4},
@code{amx_int8},
@code{amx_bf16},
@code{amx_fp16},
@@ -1639,7 +1640,7 @@ supported on the CPU specified. The choices for @var{cpu_type} are:
@item @samp{.prefetchi} @tab @samp{.avx_ifma} @tab @samp{.avx_vnni_int8}
@item @samp{.cmpccxadd} @tab @samp{.wrmsrns} @tab @samp{.msrlist}
@item @samp{.avx_ne_convert} @tab @samp{.rao_int} @tab @samp{.fred} @tab @samp{.lkgs}
-@item @samp{.avx_vnni_int16} @tab @samp{.sha512} @tab @samp{.sm3}
+@item @samp{.avx_vnni_int16} @tab @samp{.sha512} @tab @samp{.sm3} @tab @samp{.sm4}
@item @samp{.wbnoinvd} @tab @samp{.pconfig} @tab @samp{.waitpkg} @tab @samp{.cldemote}
@item @samp{.shstk} @tab @samp{.gfni} @tab @samp{.vaes} @tab @samp{.vpclmulqdq}
@item @samp{.movdiri} @tab @samp{.movdir64b} @tab @samp{.enqcmd} @tab @samp{.tsxldtrk}
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 2fcd3be..e862d41 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -503,6 +503,8 @@ if [gas_32_check] then {
run_list_test "sha512-inval"
run_dump_test "sm3"
run_dump_test "sm3-intel"
+ run_dump_test "sm4"
+ run_dump_test "sm4-intel"
run_list_test "sg"
run_dump_test "clzero"
run_dump_test "invlpgb"
diff --git a/gas/testsuite/gas/i386/sm4-intel.d b/gas/testsuite/gas/i386/sm4-intel.d
new file mode 100644
index 0000000..7e7af2611
--- /dev/null
+++ b/gas/testsuite/gas/i386/sm4-intel.d
@@ -0,0 +1,33 @@
+#objdump: -dw -Mintel
+#name: i386 SM4 insns (Intel disassembly)
+#source: sm4.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+ <_start>:
+\s*[a-f0-9]+:\s*c4 e2 56 da f4\s+vsm4key4 ymm6,ymm5,ymm4
+\s*[a-f0-9]+:\s*c4 e2 52 da f4\s+vsm4key4 xmm6,xmm5,xmm4
+\s*[a-f0-9]+:\s*c4 e2 56 da b4 f4 00 00 00 10\s+vsm4key4 ymm6,ymm5,YMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 e2 56 da 31\s+vsm4key4 ymm6,ymm5,YMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*c4 e2 52 da b4 f4 00 00 00 10\s+vsm4key4 xmm6,xmm5,XMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 e2 52 da 31\s+vsm4key4 xmm6,xmm5,XMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*c4 e2 57 da f4\s+vsm4rnds4 ymm6,ymm5,ymm4
+\s*[a-f0-9]+:\s*c4 e2 53 da f4\s+vsm4rnds4 xmm6,xmm5,xmm4
+\s*[a-f0-9]+:\s*c4 e2 57 da b4 f4 00 00 00 10\s+vsm4rnds4 ymm6,ymm5,YMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 e2 57 da 31\s+vsm4rnds4 ymm6,ymm5,YMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*c4 e2 53 da b4 f4 00 00 00 10\s+vsm4rnds4 xmm6,xmm5,XMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 e2 53 da 31\s+vsm4rnds4 xmm6,xmm5,XMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*c4 e2 56 da f4\s+vsm4key4 ymm6,ymm5,ymm4
+\s*[a-f0-9]+:\s*c4 e2 52 da f4\s+vsm4key4 xmm6,xmm5,xmm4
+\s*[a-f0-9]+:\s*c4 e2 56 da b4 f4 00 00 00 10\s+vsm4key4 ymm6,ymm5,YMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 e2 56 da 31\s+vsm4key4 ymm6,ymm5,YMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*c4 e2 52 da b4 f4 00 00 00 10\s+vsm4key4 xmm6,xmm5,XMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 e2 52 da 31\s+vsm4key4 xmm6,xmm5,XMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*c4 e2 57 da f4\s+vsm4rnds4 ymm6,ymm5,ymm4
+\s*[a-f0-9]+:\s*c4 e2 53 da f4\s+vsm4rnds4 xmm6,xmm5,xmm4
+\s*[a-f0-9]+:\s*c4 e2 57 da b4 f4 00 00 00 10\s+vsm4rnds4 ymm6,ymm5,YMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 e2 57 da 31\s+vsm4rnds4 ymm6,ymm5,YMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*c4 e2 53 da b4 f4 00 00 00 10\s+vsm4rnds4 xmm6,xmm5,XMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 e2 53 da 31\s+vsm4rnds4 xmm6,xmm5,XMMWORD PTR \[ecx\]
diff --git a/gas/testsuite/gas/i386/sm4.d b/gas/testsuite/gas/i386/sm4.d
new file mode 100644
index 0000000..fb14234
--- /dev/null
+++ b/gas/testsuite/gas/i386/sm4.d
@@ -0,0 +1,33 @@
+#objdump: -dw
+#name: i386 SM4 insns
+#source: sm4.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+ <_start>:
+\s*[a-f0-9]+:\s*c4 e2 56 da f4\s+vsm4key4 %ymm4,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 52 da f4\s+vsm4key4 %xmm4,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 56 da b4 f4 00 00 00 10\s+vsm4key4 0x10000000\(%esp,%esi,8\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 56 da 31\s+vsm4key4 \(%ecx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 52 da b4 f4 00 00 00 10\s+vsm4key4 0x10000000\(%esp,%esi,8\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 52 da 31\s+vsm4key4 \(%ecx\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 57 da f4\s+vsm4rnds4 %ymm4,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 53 da f4\s+vsm4rnds4 %xmm4,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 57 da b4 f4 00 00 00 10\s+vsm4rnds4 0x10000000\(%esp,%esi,8\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 57 da 31\s+vsm4rnds4 \(%ecx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 53 da b4 f4 00 00 00 10\s+vsm4rnds4 0x10000000\(%esp,%esi,8\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 53 da 31\s+vsm4rnds4 \(%ecx\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 56 da f4\s+vsm4key4 %ymm4,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 52 da f4\s+vsm4key4 %xmm4,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 56 da b4 f4 00 00 00 10\s+vsm4key4 0x10000000\(%esp,%esi,8\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 56 da 31\s+vsm4key4 \(%ecx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 52 da b4 f4 00 00 00 10\s+vsm4key4 0x10000000\(%esp,%esi,8\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 52 da 31\s+vsm4key4 \(%ecx\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 57 da f4\s+vsm4rnds4 %ymm4,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 53 da f4\s+vsm4rnds4 %xmm4,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 57 da b4 f4 00 00 00 10\s+vsm4rnds4 0x10000000\(%esp,%esi,8\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 57 da 31\s+vsm4rnds4 \(%ecx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 e2 53 da b4 f4 00 00 00 10\s+vsm4rnds4 0x10000000\(%esp,%esi,8\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 e2 53 da 31\s+vsm4rnds4 \(%ecx\),%xmm5,%xmm6
diff --git a/gas/testsuite/gas/i386/sm4.s b/gas/testsuite/gas/i386/sm4.s
new file mode 100644
index 0000000..2c0acb0
--- /dev/null
+++ b/gas/testsuite/gas/i386/sm4.s
@@ -0,0 +1,30 @@
+# Check 32bit SM4 instructions
+
+ .text
+_start:
+ vsm4key4 %ymm4, %ymm5, %ymm6
+ vsm4key4 %xmm4, %xmm5, %xmm6
+ vsm4key4 0x10000000(%esp, %esi, 8), %ymm5, %ymm6
+ vsm4key4 (%ecx), %ymm5, %ymm6
+ vsm4key4 0x10000000(%esp, %esi, 8), %xmm5, %xmm6
+ vsm4key4 (%ecx), %xmm5, %xmm6
+ vsm4rnds4 %ymm4, %ymm5, %ymm6
+ vsm4rnds4 %xmm4, %xmm5, %xmm6
+ vsm4rnds4 0x10000000(%esp, %esi, 8), %ymm5, %ymm6
+ vsm4rnds4 (%ecx), %ymm5, %ymm6
+ vsm4rnds4 0x10000000(%esp, %esi, 8), %xmm5, %xmm6
+ vsm4rnds4 (%ecx), %xmm5, %xmm6
+
+ .intel_syntax noprefix
+ vsm4key4 ymm6, ymm5, ymm4
+ vsm4key4 xmm6, xmm5, xmm4
+ vsm4key4 ymm6, ymm5, YMMWORD PTR [esp+esi*8+0x10000000]
+ vsm4key4 ymm6, ymm5, YMMWORD PTR [ecx]
+ vsm4key4 xmm6, xmm5, XMMWORD PTR [esp+esi*8+0x10000000]
+ vsm4key4 xmm6, xmm5, XMMWORD PTR [ecx]
+ vsm4rnds4 ymm6, ymm5, ymm4
+ vsm4rnds4 xmm6, xmm5, xmm4
+ vsm4rnds4 ymm6, ymm5, YMMWORD PTR [esp+esi*8+0x10000000]
+ vsm4rnds4 ymm6, ymm5, YMMWORD PTR [ecx]
+ vsm4rnds4 xmm6, xmm5, XMMWORD PTR [esp+esi*8+0x10000000]
+ vsm4rnds4 xmm6, xmm5, XMMWORD PTR [ecx]
diff --git a/gas/testsuite/gas/i386/x86-64-sm4-intel.d b/gas/testsuite/gas/i386/x86-64-sm4-intel.d
new file mode 100644
index 0000000..2a5d1c1
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-sm4-intel.d
@@ -0,0 +1,33 @@
+#objdump: -dw -Mintel
+#name: x86_64 SM4 insns (Intel disassembly)
+#source: x86-64-sm4.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+ <_start>:
+\s*[a-f0-9]+:\s*c4 c2 56 da f6\s+vsm4key4 ymm6,ymm5,ymm14
+\s*[a-f0-9]+:\s*c4 c2 52 da f6\s+vsm4key4 xmm6,xmm5,xmm14
+\s*[a-f0-9]+:\s*c4 a2 06 da b4 f5 00 00 00 10\s+vsm4key4 ymm6,ymm15,YMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 c2 06 da 31\s+vsm4key4 ymm6,ymm15,YMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*c4 a2 02 da b4 f5 00 00 00 10\s+vsm4key4 xmm6,xmm15,XMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 c2 02 da 31\s+vsm4key4 xmm6,xmm15,XMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*c4 c2 57 da f6\s+vsm4rnds4 ymm6,ymm5,ymm14
+\s*[a-f0-9]+:\s*c4 c2 53 da f6\s+vsm4rnds4 xmm6,xmm5,xmm14
+\s*[a-f0-9]+:\s*c4 a2 07 da b4 f5 00 00 00 10\s+vsm4rnds4 ymm6,ymm15,YMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 c2 07 da 31\s+vsm4rnds4 ymm6,ymm15,YMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*c4 a2 03 da b4 f5 00 00 00 10\s+vsm4rnds4 xmm6,xmm15,XMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 c2 03 da 31\s+vsm4rnds4 xmm6,xmm15,XMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*c4 c2 56 da f6\s+vsm4key4 ymm6,ymm5,ymm14
+\s*[a-f0-9]+:\s*c4 c2 52 da f6\s+vsm4key4 xmm6,xmm5,xmm14
+\s*[a-f0-9]+:\s*c4 a2 06 da b4 f5 00 00 00 10\s+vsm4key4 ymm6,ymm15,YMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 c2 06 da 31\s+vsm4key4 ymm6,ymm15,YMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*c4 a2 02 da b4 f5 00 00 00 10\s+vsm4key4 xmm6,xmm15,XMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 c2 02 da 31\s+vsm4key4 xmm6,xmm15,XMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*c4 c2 57 da f6\s+vsm4rnds4 ymm6,ymm5,ymm14
+\s*[a-f0-9]+:\s*c4 c2 53 da f6\s+vsm4rnds4 xmm6,xmm5,xmm14
+\s*[a-f0-9]+:\s*c4 a2 07 da b4 f5 00 00 00 10\s+vsm4rnds4 ymm6,ymm15,YMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 c2 07 da 31\s+vsm4rnds4 ymm6,ymm15,YMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*c4 a2 03 da b4 f5 00 00 00 10\s+vsm4rnds4 xmm6,xmm15,XMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*c4 c2 03 da 31\s+vsm4rnds4 xmm6,xmm15,XMMWORD PTR \[r9\]
diff --git a/gas/testsuite/gas/i386/x86-64-sm4.d b/gas/testsuite/gas/i386/x86-64-sm4.d
new file mode 100644
index 0000000..e9ab540
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-sm4.d
@@ -0,0 +1,33 @@
+#objdump: -dw
+#name: x86_64 SM4 insns
+#source: x86-64-sm4.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+ <_start>:
+\s*[a-f0-9]+:\s*c4 c2 56 da f6\s+vsm4key4 %ymm14,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 c2 52 da f6\s+vsm4key4 %xmm14,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 a2 06 da b4 f5 00 00 00 10\s+vsm4key4 0x10000000\(%rbp,%r14,8\),%ymm15,%ymm6
+\s*[a-f0-9]+:\s*c4 c2 06 da 31\s+vsm4key4 \(%r9\),%ymm15,%ymm6
+\s*[a-f0-9]+:\s*c4 a2 02 da b4 f5 00 00 00 10\s+vsm4key4 0x10000000\(%rbp,%r14,8\),%xmm15,%xmm6
+\s*[a-f0-9]+:\s*c4 c2 02 da 31\s+vsm4key4 \(%r9\),%xmm15,%xmm6
+\s*[a-f0-9]+:\s*c4 c2 57 da f6\s+vsm4rnds4 %ymm14,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 c2 53 da f6\s+vsm4rnds4 %xmm14,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 a2 07 da b4 f5 00 00 00 10\s+vsm4rnds4 0x10000000\(%rbp,%r14,8\),%ymm15,%ymm6
+\s*[a-f0-9]+:\s*c4 c2 07 da 31\s+vsm4rnds4 \(%r9\),%ymm15,%ymm6
+\s*[a-f0-9]+:\s*c4 a2 03 da b4 f5 00 00 00 10\s+vsm4rnds4 0x10000000\(%rbp,%r14,8\),%xmm15,%xmm6
+\s*[a-f0-9]+:\s*c4 c2 03 da 31\s+vsm4rnds4 \(%r9\),%xmm15,%xmm6
+\s*[a-f0-9]+:\s*c4 c2 56 da f6\s+vsm4key4 %ymm14,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 c2 52 da f6\s+vsm4key4 %xmm14,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 a2 06 da b4 f5 00 00 00 10\s+vsm4key4 0x10000000\(%rbp,%r14,8\),%ymm15,%ymm6
+\s*[a-f0-9]+:\s*c4 c2 06 da 31\s+vsm4key4 \(%r9\),%ymm15,%ymm6
+\s*[a-f0-9]+:\s*c4 a2 02 da b4 f5 00 00 00 10\s+vsm4key4 0x10000000\(%rbp,%r14,8\),%xmm15,%xmm6
+\s*[a-f0-9]+:\s*c4 c2 02 da 31\s+vsm4key4 \(%r9\),%xmm15,%xmm6
+\s*[a-f0-9]+:\s*c4 c2 57 da f6\s+vsm4rnds4 %ymm14,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*c4 c2 53 da f6\s+vsm4rnds4 %xmm14,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*c4 a2 07 da b4 f5 00 00 00 10\s+vsm4rnds4 0x10000000\(%rbp,%r14,8\),%ymm15,%ymm6
+\s*[a-f0-9]+:\s*c4 c2 07 da 31\s+vsm4rnds4 \(%r9\),%ymm15,%ymm6
+\s*[a-f0-9]+:\s*c4 a2 03 da b4 f5 00 00 00 10\s+vsm4rnds4 0x10000000\(%rbp,%r14,8\),%xmm15,%xmm6
+\s*[a-f0-9]+:\s*c4 c2 03 da 31\s+vsm4rnds4 \(%r9\),%xmm15,%xmm6
diff --git a/gas/testsuite/gas/i386/x86-64-sm4.s b/gas/testsuite/gas/i386/x86-64-sm4.s
new file mode 100644
index 0000000..5ea6e5a
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-sm4.s
@@ -0,0 +1,30 @@
+# Check 64bit SM4 instructions
+
+ .text
+_start:
+ vsm4key4 %ymm14, %ymm5, %ymm6
+ vsm4key4 %xmm14, %xmm5, %xmm6
+ vsm4key4 0x10000000(%rbp, %r14, 8), %ymm15, %ymm6
+ vsm4key4 (%r9), %ymm15, %ymm6
+ vsm4key4 0x10000000(%rbp, %r14, 8), %xmm15, %xmm6
+ vsm4key4 (%r9), %xmm15, %xmm6
+ vsm4rnds4 %ymm14, %ymm5, %ymm6
+ vsm4rnds4 %xmm14, %xmm5, %xmm6
+ vsm4rnds4 0x10000000(%rbp, %r14, 8), %ymm15, %ymm6
+ vsm4rnds4 (%r9), %ymm15, %ymm6
+ vsm4rnds4 0x10000000(%rbp, %r14, 8), %xmm15, %xmm6
+ vsm4rnds4 (%r9), %xmm15, %xmm6
+
+ .intel_syntax noprefix
+ vsm4key4 ymm6, ymm5, ymm14
+ vsm4key4 xmm6, xmm5, xmm14
+ vsm4key4 ymm6, ymm15, YMMWORD PTR [rbp+r14*8+0x10000000]
+ vsm4key4 ymm6, ymm15, YMMWORD PTR [r9]
+ vsm4key4 xmm6, xmm15, XMMWORD PTR [rbp+r14*8+0x10000000]
+ vsm4key4 xmm6, xmm15, XMMWORD PTR [r9]
+ vsm4rnds4 ymm6, ymm5, ymm14
+ vsm4rnds4 xmm6, xmm5, xmm14
+ vsm4rnds4 ymm6, ymm15, YMMWORD PTR [rbp+r14*8+0x10000000]
+ vsm4rnds4 ymm6, ymm15, YMMWORD PTR [r9]
+ vsm4rnds4 xmm6, xmm15, XMMWORD PTR [rbp+r14*8+0x10000000]
+ vsm4rnds4 xmm6, xmm15, XMMWORD PTR [r9]
diff --git a/gas/testsuite/gas/i386/x86-64.exp b/gas/testsuite/gas/i386/x86-64.exp
index ec3d6dc..eb6a369 100644
--- a/gas/testsuite/gas/i386/x86-64.exp
+++ b/gas/testsuite/gas/i386/x86-64.exp
@@ -446,6 +446,8 @@ run_dump_test "x86-64-sha512-intel"
run_list_test "x86-64-sha512-inval"
run_dump_test "x86-64-sm3"
run_dump_test "x86-64-sm3-intel"
+run_dump_test "x86-64-sm4"
+run_dump_test "x86-64-sm4-intel"
run_dump_test "x86-64-clzero"
run_dump_test "x86-64-mwaitx-bdver4"
run_list_test "x86-64-mwaitx-reg"