diff --git a/gas/NEWS b/gas/NEWS
index 90a83c83ea2..20216dc6d59 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,7 @@
 -*- text -*-
 
+* Add support for the x86 Intel SM4 EVEX instructions.
+
 * Add support for the x86 Intel Diamond Rapids AMX instructions,
   including AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32 and AMX-TRANSPOSE.
 
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index d54813c451e..19466c10529 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1873,6 +1873,7 @@ _is_cpu (const i386_cpu_attr *a, enum i386_cpu cpu)
     case CpuAVX512VL: return a->bitfield.cpuavx512vl;
     case CpuAPX_F:    return a->bitfield.cpuapx_f;
     case CpuAMX_TRANSPOSE:  return a->bitfield.cpuamx_transpose;
+    case CpuAVX10_2:  return a->bitfield.cpuavx10_2;
     case Cpu64:       return a->bitfield.cpu64;
     case CpuNo64:     return a->bitfield.cpuno64;
     default:
diff --git a/gas/testsuite/gas/i386/avx10_2sm4-intel.d b/gas/testsuite/gas/i386/avx10_2sm4-intel.d
new file mode 100644
index 00000000000..ae69a169eef
--- /dev/null
+++ b/gas/testsuite/gas/i386/avx10_2sm4-intel.d
@@ -0,0 +1,41 @@
+#objdump: -dw -Mintel
+#name: i386 AVX10_2, SM4 insns (Intel disassembly)
+#source: avx10_2sm4.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+#...
+[a-f0-9]+ <_intel>:
+\s*[a-f0-9]+:\s*62 f2 56 48 da f4\s+vsm4key4 zmm6,zmm5,zmm4
+\s*[a-f0-9]+:\s*62 f2 56 28 da f4\s+{evex} vsm4key4 ymm6,ymm5,ymm4
+\s*[a-f0-9]+:\s*62 f2 56 08 da f4\s+{evex} vsm4key4 xmm6,xmm5,xmm4
+\s*[a-f0-9]+:\s*62 f2 56 48 da b4 f4 00 00 00 10\s+vsm4key4 zmm6,zmm5,ZMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 f2 56 48 da 31\s+vsm4key4 zmm6,zmm5,ZMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*62 f2 56 48 da 71 7f\s+vsm4key4 zmm6,zmm5,ZMMWORD PTR \[ecx\+0x1fc0\]
+\s*[a-f0-9]+:\s*62 f2 56 48 da 72 80\s+vsm4key4 zmm6,zmm5,ZMMWORD PTR \[edx-0x2000\]
+\s*[a-f0-9]+:\s*62 f2 56 28 da b4 f4 00 00 00 10\s+{evex} vsm4key4 ymm6,ymm5,YMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 f2 56 28 da 31\s+{evex} vsm4key4 ymm6,ymm5,YMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*62 f2 56 28 da 71 7f\s+{evex} vsm4key4 ymm6,ymm5,YMMWORD PTR \[ecx\+0xfe0\]
+\s*[a-f0-9]+:\s*62 f2 56 28 da 72 80\s+{evex} vsm4key4 ymm6,ymm5,YMMWORD PTR \[edx-0x1000\]
+\s*[a-f0-9]+:\s*62 f2 56 08 da b4 f4 00 00 00 10\s+{evex} vsm4key4 xmm6,xmm5,XMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 f2 56 08 da 31\s+{evex} vsm4key4 xmm6,xmm5,XMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*62 f2 56 08 da 71 7f\s+{evex} vsm4key4 xmm6,xmm5,XMMWORD PTR \[ecx\+0x7f0\]
+\s*[a-f0-9]+:\s*62 f2 56 08 da 72 80\s+{evex} vsm4key4 xmm6,xmm5,XMMWORD PTR \[edx-0x800\]
+\s*[a-f0-9]+:\s*62 f2 57 48 da f4\s+vsm4rnds4 zmm6,zmm5,zmm4
+\s*[a-f0-9]+:\s*62 f2 57 28 da f4\s+{evex} vsm4rnds4 ymm6,ymm5,ymm4
+\s*[a-f0-9]+:\s*62 f2 57 08 da f4\s+{evex} vsm4rnds4 xmm6,xmm5,xmm4
+\s*[a-f0-9]+:\s*62 f2 57 48 da b4 f4 00 00 00 10\s+vsm4rnds4 zmm6,zmm5,ZMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 f2 57 48 da 31\s+vsm4rnds4 zmm6,zmm5,ZMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*62 f2 57 48 da 71 7f\s+vsm4rnds4 zmm6,zmm5,ZMMWORD PTR \[ecx\+0x1fc0\]
+\s*[a-f0-9]+:\s*62 f2 57 48 da 72 80\s+vsm4rnds4 zmm6,zmm5,ZMMWORD PTR \[edx-0x2000\]
+\s*[a-f0-9]+:\s*62 f2 57 28 da b4 f4 00 00 00 10\s+{evex} vsm4rnds4 ymm6,ymm5,YMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 f2 57 28 da 31\s+{evex} vsm4rnds4 ymm6,ymm5,YMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*62 f2 57 28 da 71 7f\s+{evex} vsm4rnds4 ymm6,ymm5,YMMWORD PTR \[ecx\+0xfe0\]
+\s*[a-f0-9]+:\s*62 f2 57 28 da 72 80\s+{evex} vsm4rnds4 ymm6,ymm5,YMMWORD PTR \[edx-0x1000\]
+\s*[a-f0-9]+:\s*62 f2 57 08 da b4 f4 00 00 00 10\s+{evex} vsm4rnds4 xmm6,xmm5,XMMWORD PTR \[esp\+esi\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 f2 57 08 da 31\s+{evex} vsm4rnds4 xmm6,xmm5,XMMWORD PTR \[ecx\]
+\s*[a-f0-9]+:\s*62 f2 57 08 da 71 7f\s+{evex} vsm4rnds4 xmm6,xmm5,XMMWORD PTR \[ecx\+0x7f0\]
+\s*[a-f0-9]+:\s*62 f2 57 08 da 72 80\s+{evex} vsm4rnds4 xmm6,xmm5,XMMWORD PTR \[edx-0x800\]
+#pass
diff --git a/gas/testsuite/gas/i386/avx10_2sm4-inval.l b/gas/testsuite/gas/i386/avx10_2sm4-inval.l
new file mode 100644
index 00000000000..b5410c2770f
--- /dev/null
+++ b/gas/testsuite/gas/i386/avx10_2sm4-inval.l
@@ -0,0 +1,5 @@
+.* Assembler messages:
+.*:6: Error: operand size mismatch for `vsm4key4'
+.*:7: Error: operand size mismatch for `vsm4rnds4'
+.*:8: Error: no EVEX encoding for `vsm4key4'
+.*:9: Error: no EVEX encoding for `vsm4rnds4'
diff --git a/gas/testsuite/gas/i386/avx10_2sm4-inval.s b/gas/testsuite/gas/i386/avx10_2sm4-inval.s
new file mode 100644
index 00000000000..8bd6aea3637
--- /dev/null
+++ b/gas/testsuite/gas/i386/avx10_2sm4-inval.s
@@ -0,0 +1,9 @@
+# Check Illegal 32bit SM4 instructions
+
+	.text
+	.arch .noavx10.2
+_start:
+	vsm4key4	%zmm4, %zmm5, %zmm6 
+	vsm4rnds4	%zmm4, %zmm5, %zmm6
+	{evex} vsm4key4	%ymm4, %ymm5, %ymm6 
+	{evex} vsm4rnds4	%xmm4, %xmm5, %xmm6
diff --git a/gas/testsuite/gas/i386/avx10_2sm4.d b/gas/testsuite/gas/i386/avx10_2sm4.d
new file mode 100644
index 00000000000..227662f6fd5
--- /dev/null
+++ b/gas/testsuite/gas/i386/avx10_2sm4.d
@@ -0,0 +1,39 @@
+#objdump: -dw
+#name: i386 AVX10_2, SM4 insns
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+ <_start>:
+\s*[a-f0-9]+:\s*62 f2 56 48 da f4\s+vsm4key4 %zmm4,%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 56 28 da f4\s+{evex} vsm4key4 %ymm4,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 56 08 da f4\s+{evex} vsm4key4 %xmm4,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 56 48 da b4 f4 00 00 00 10\s+vsm4key4 0x10000000\(%esp,%esi,8\),%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 56 48 da 31\s+vsm4key4 \(%ecx\),%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 56 48 da 71 7f\s+vsm4key4 0x1fc0\(%ecx\),%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 56 48 da 72 80\s+vsm4key4 -0x2000\(%edx\),%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 56 28 da b4 f4 00 00 00 10\s+{evex} vsm4key4 0x10000000\(%esp,%esi,8\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 56 28 da 31\s+{evex} vsm4key4 \(%ecx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 56 28 da 71 7f\s+{evex} vsm4key4 0xfe0\(%ecx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 56 28 da 72 80\s+{evex} vsm4key4 -0x1000\(%edx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 56 08 da b4 f4 00 00 00 10\s+{evex} vsm4key4 0x10000000\(%esp,%esi,8\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 56 08 da 31\s+{evex} vsm4key4 \(%ecx\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 56 08 da 71 7f\s+{evex} vsm4key4 0x7f0\(%ecx\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 56 08 da 72 80\s+{evex} vsm4key4 -0x800\(%edx\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 57 48 da f4\s+vsm4rnds4 %zmm4,%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 57 28 da f4\s+{evex} vsm4rnds4 %ymm4,%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 57 08 da f4\s+{evex} vsm4rnds4 %xmm4,%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 57 48 da b4 f4 00 00 00 10\s+vsm4rnds4 0x10000000\(%esp,%esi,8\),%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 57 48 da 31\s+vsm4rnds4 \(%ecx\),%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 57 48 da 71 7f\s+vsm4rnds4 0x1fc0\(%ecx\),%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 57 48 da 72 80\s+vsm4rnds4 -0x2000\(%edx\),%zmm5,%zmm6
+\s*[a-f0-9]+:\s*62 f2 57 28 da b4 f4 00 00 00 10\s+{evex} vsm4rnds4 0x10000000\(%esp,%esi,8\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 57 28 da 31\s+{evex} vsm4rnds4 \(%ecx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 57 28 da 71 7f\s+{evex} vsm4rnds4 0xfe0\(%ecx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 57 28 da 72 80\s+{evex} vsm4rnds4 -0x1000\(%edx\),%ymm5,%ymm6
+\s*[a-f0-9]+:\s*62 f2 57 08 da b4 f4 00 00 00 10\s+{evex} vsm4rnds4 0x10000000\(%esp,%esi,8\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 57 08 da 31\s+{evex} vsm4rnds4 \(%ecx\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 57 08 da 71 7f\s+{evex} vsm4rnds4 0x7f0\(%ecx\),%xmm5,%xmm6
+\s*[a-f0-9]+:\s*62 f2 57 08 da 72 80\s+{evex} vsm4rnds4 -0x800\(%edx\),%xmm5,%xmm6
+#pass
diff --git a/gas/testsuite/gas/i386/avx10_2sm4.s b/gas/testsuite/gas/i386/avx10_2sm4.s
new file mode 100644
index 00000000000..24ffa597a1b
--- /dev/null
+++ b/gas/testsuite/gas/i386/avx10_2sm4.s
@@ -0,0 +1,67 @@
+# Check 32bit SM4 instructions
+
+	.text
+_start:
+	vsm4key4	%zmm4, %zmm5, %zmm6
+	{evex} vsm4key4	%ymm4, %ymm5, %ymm6
+	{evex} vsm4key4	%xmm4, %xmm5, %xmm6
+	vsm4key4	0x10000000(%esp, %esi, 8), %zmm5, %zmm6
+	vsm4key4	(%ecx), %zmm5, %zmm6
+	vsm4key4	8128(%ecx), %zmm5, %zmm6
+	vsm4key4	-8192(%edx), %zmm5, %zmm6
+	{evex} vsm4key4	0x10000000(%esp, %esi, 8), %ymm5, %ymm6
+	{evex} vsm4key4	(%ecx), %ymm5, %ymm6
+	{evex} vsm4key4	4064(%ecx), %ymm5, %ymm6
+	{evex} vsm4key4	-4096(%edx), %ymm5, %ymm6
+	{evex} vsm4key4	0x10000000(%esp, %esi, 8), %xmm5, %xmm6
+	{evex} vsm4key4	(%ecx), %xmm5, %xmm6
+	{evex} vsm4key4	2032(%ecx), %xmm5, %xmm6
+	{evex} vsm4key4	-2048(%edx), %xmm5, %xmm6
+	vsm4rnds4	%zmm4, %zmm5, %zmm6
+	{evex} vsm4rnds4	%ymm4, %ymm5, %ymm6
+	{evex} vsm4rnds4	%xmm4, %xmm5, %xmm6
+	vsm4rnds4	0x10000000(%esp, %esi, 8), %zmm5, %zmm6
+	vsm4rnds4	(%ecx), %zmm5, %zmm6
+	vsm4rnds4	8128(%ecx), %zmm5, %zmm6
+	vsm4rnds4	-8192(%edx), %zmm5, %zmm6
+	{evex} vsm4rnds4	0x10000000(%esp, %esi, 8), %ymm5, %ymm6
+	{evex} vsm4rnds4	(%ecx), %ymm5, %ymm6
+	{evex} vsm4rnds4	4064(%ecx), %ymm5, %ymm6
+	{evex} vsm4rnds4	-4096(%edx), %ymm5, %ymm6
+	{evex} vsm4rnds4	0x10000000(%esp, %esi, 8), %xmm5, %xmm6
+	{evex} vsm4rnds4	(%ecx), %xmm5, %xmm6
+	{evex} vsm4rnds4	2032(%ecx), %xmm5, %xmm6
+	{evex} vsm4rnds4	-2048(%edx), %xmm5, %xmm6
+
+_intel:
+	.intel_syntax noprefix
+	vsm4key4	zmm6, zmm5, zmm4
+	{evex} vsm4key4	ymm6, ymm5, ymm4
+	{evex} vsm4key4	xmm6, xmm5, xmm4
+	vsm4key4	zmm6, zmm5, ZMMWORD PTR [esp+esi*8+0x10000000]
+	vsm4key4	zmm6, zmm5, [ecx]
+	vsm4key4	zmm6, zmm5, ZMMWORD PTR [ecx+8128]
+	vsm4key4	zmm6, zmm5, [edx-8192]
+	{evex} vsm4key4	ymm6, ymm5, [esp+esi*8+0x10000000]
+	{evex} vsm4key4	ymm6, ymm5, YMMWORD PTR [ecx] 
+	{evex} vsm4key4	ymm6, ymm5, [ecx+4064]
+	{evex} vsm4key4	ymm6, ymm5, YMMWORD PTR [edx-4096]
+	{evex} vsm4key4	xmm6, xmm5, XMMWORD PTR [esp+esi*8+0x10000000]
+	{evex} vsm4key4	xmm6, xmm5, [ecx] 
+	{evex} vsm4key4	xmm6, xmm5, [ecx+2032]
+	{evex} vsm4key4	xmm6, xmm5, XMMWORD PTR [edx-2048]
+	vsm4rnds4	zmm6, zmm5, zmm4
+	{evex} vsm4rnds4	ymm6, ymm5, ymm4
+	{evex} vsm4rnds4	xmm6, xmm5, xmm4
+	vsm4rnds4	zmm6, zmm5, [esp+esi*8+0x10000000]
+	vsm4rnds4	zmm6, zmm5, ZMMWORD PTR [ecx]
+	vsm4rnds4	zmm6, zmm5, ZMMWORD PTR [ecx+8128]
+	vsm4rnds4	zmm6, zmm5, [edx-8192]
+	{evex} vsm4rnds4	ymm6, ymm5, YMMWORD PTR [esp+esi*8+0x10000000]
+	{evex} vsm4rnds4	ymm6, ymm5, [ecx]
+	{evex} vsm4rnds4	ymm6, ymm5, [ecx+4064]
+	{evex} vsm4rnds4	ymm6, ymm5, YMMWORD PTR [edx-4096]
+	{evex} vsm4rnds4	xmm6, xmm5, [esp+esi*8+0x10000000]
+	{evex} vsm4rnds4	xmm6, xmm5, XMMWORD PTR [ecx]
+	{evex} vsm4rnds4	xmm6, xmm5, XMMWORD PTR [ecx+2032]
+	{evex} vsm4rnds4	xmm6, xmm5, [edx-2048]
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index f66c61eed11..4d41be2ce4b 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -535,6 +535,9 @@ if [gas_32_check] then {
     run_dump_test "avx10_2-512-miscs-intel"
     run_dump_test "avx10_2-256-miscs"
     run_dump_test "avx10_2-256-miscs-intel"
+    run_dump_test "avx10_2sm4"
+    run_dump_test "avx10_2sm4-intel"
+    run_list_test "avx10_2sm4-inval"
     run_list_test "sg"
     run_dump_test "clzero"
     run_dump_test "invlpgb"
diff --git a/gas/testsuite/gas/i386/x86-64-avx10_2sm4-intel.d b/gas/testsuite/gas/i386/x86-64-avx10_2sm4-intel.d
new file mode 100644
index 00000000000..b5623ab037b
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-avx10_2sm4-intel.d
@@ -0,0 +1,41 @@
+#objdump: -dw -Mintel
+#name: x86_64 AVX10_2, SM4 insns (Intel disassembly)
+#source: x86-64-avx10_2sm4.s
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+#pass
+[a-f0-9]+ <_intel>:
+\s*[a-f0-9]+:\s*62 02 16 40 da f4\s+vsm4key4 zmm30,zmm29,zmm28
+\s*[a-f0-9]+:\s*62 02 16 20 da f4\s+vsm4key4 ymm30,ymm29,ymm28
+\s*[a-f0-9]+:\s*62 02 16 00 da f4\s+vsm4key4 xmm30,xmm29,xmm28
+\s*[a-f0-9]+:\s*62 22 16 40 da b4 f5 00 00 00 10\s+vsm4key4 zmm30,zmm29,ZMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 42 16 40 da 31\s+vsm4key4 zmm30,zmm29,ZMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*62 62 16 40 da 71 7f\s+vsm4key4 zmm30,zmm29,ZMMWORD PTR \[rcx\+0x1fc0\]
+\s*[a-f0-9]+:\s*62 62 16 40 da 72 80\s+vsm4key4 zmm30,zmm29,ZMMWORD PTR \[rdx-0x2000\]
+\s*[a-f0-9]+:\s*62 22 16 20 da b4 f5 00 00 00 10\s+vsm4key4 ymm30,ymm29,YMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 42 16 20 da 31\s+vsm4key4 ymm30,ymm29,YMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*62 62 16 20 da 71 7f\s+vsm4key4 ymm30,ymm29,YMMWORD PTR \[rcx\+0xfe0\]
+\s*[a-f0-9]+:\s*62 62 16 20 da 72 80\s+vsm4key4 ymm30,ymm29,YMMWORD PTR \[rdx-0x1000\]
+\s*[a-f0-9]+:\s*62 22 16 00 da b4 f5 00 00 00 10\s+vsm4key4 xmm30,xmm29,XMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 42 16 00 da 31\s+vsm4key4 xmm30,xmm29,XMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*62 62 16 00 da 71 7f\s+vsm4key4 xmm30,xmm29,XMMWORD PTR \[rcx\+0x7f0\]
+\s*[a-f0-9]+:\s*62 62 16 00 da 72 80\s+vsm4key4 xmm30,xmm29,XMMWORD PTR \[rdx-0x800\]
+\s*[a-f0-9]+:\s*62 02 17 40 da f4\s+vsm4rnds4 zmm30,zmm29,zmm28
+\s*[a-f0-9]+:\s*62 02 17 20 da f4\s+vsm4rnds4 ymm30,ymm29,ymm28
+\s*[a-f0-9]+:\s*62 02 17 00 da f4\s+vsm4rnds4 xmm30,xmm29,xmm28
+\s*[a-f0-9]+:\s*62 22 17 40 da b4 f5 00 00 00 10\s+vsm4rnds4 zmm30,zmm29,ZMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 42 17 40 da 31\s+vsm4rnds4 zmm30,zmm29,ZMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*62 62 17 40 da 71 7f\s+vsm4rnds4 zmm30,zmm29,ZMMWORD PTR \[rcx\+0x1fc0\]
+\s*[a-f0-9]+:\s*62 62 17 40 da 72 80\s+vsm4rnds4 zmm30,zmm29,ZMMWORD PTR \[rdx-0x2000\]
+\s*[a-f0-9]+:\s*62 22 17 20 da b4 f5 00 00 00 10\s+vsm4rnds4 ymm30,ymm29,YMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 42 17 20 da 31\s+vsm4rnds4 ymm30,ymm29,YMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*62 62 17 20 da 71 7f\s+vsm4rnds4 ymm30,ymm29,YMMWORD PTR \[rcx\+0xfe0\]
+\s*[a-f0-9]+:\s*62 62 17 20 da 72 80\s+vsm4rnds4 ymm30,ymm29,YMMWORD PTR \[rdx-0x1000\]
+\s*[a-f0-9]+:\s*62 22 17 00 da b4 f5 00 00 00 10\s+vsm4rnds4 xmm30,xmm29,XMMWORD PTR \[rbp\+r14\*8\+0x10000000\]
+\s*[a-f0-9]+:\s*62 42 17 00 da 31\s+vsm4rnds4 xmm30,xmm29,XMMWORD PTR \[r9\]
+\s*[a-f0-9]+:\s*62 62 17 00 da 71 7f\s+vsm4rnds4 xmm30,xmm29,XMMWORD PTR \[rcx\+0x7f0\]
+\s*[a-f0-9]+:\s*62 62 17 00 da 72 80\s+vsm4rnds4 xmm30,xmm29,XMMWORD PTR \[rdx-0x800\]
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-avx10_2sm4-inval.l b/gas/testsuite/gas/i386/x86-64-avx10_2sm4-inval.l
new file mode 100644
index 00000000000..b5410c2770f
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-avx10_2sm4-inval.l
@@ -0,0 +1,5 @@
+.* Assembler messages:
+.*:6: Error: operand size mismatch for `vsm4key4'
+.*:7: Error: operand size mismatch for `vsm4rnds4'
+.*:8: Error: no EVEX encoding for `vsm4key4'
+.*:9: Error: no EVEX encoding for `vsm4rnds4'
diff --git a/gas/testsuite/gas/i386/x86-64-avx10_2sm4-inval.s b/gas/testsuite/gas/i386/x86-64-avx10_2sm4-inval.s
new file mode 100644
index 00000000000..8234412f3db
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-avx10_2sm4-inval.s
@@ -0,0 +1,9 @@
+# Check Illegal 64bit SM4 instructions
+
+	.text
+	.arch .noavx10.2
+_start:
+	vsm4key4	%zmm28, %zmm29, %zmm30 
+	vsm4rnds4	%zmm28, %zmm29, %zmm30
+	vsm4key4	%ymm28, %ymm29, %ymm30 
+	vsm4rnds4	%xmm28, %xmm29, %xmm30
diff --git a/gas/testsuite/gas/i386/x86-64-avx10_2sm4.d b/gas/testsuite/gas/i386/x86-64-avx10_2sm4.d
new file mode 100644
index 00000000000..8319941f0fe
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-avx10_2sm4.d
@@ -0,0 +1,39 @@
+#objdump: -dw
+#name: x86_64 AVX10_2, SM4 insns
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+ <_start>:
+\s*[a-f0-9]+:\s*62 02 16 40 da f4\s+vsm4key4 %zmm28,%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 02 16 20 da f4\s+vsm4key4 %ymm28,%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 02 16 00 da f4\s+vsm4key4 %xmm28,%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 22 16 40 da b4 f5 00 00 00 10\s+vsm4key4 0x10000000\(%rbp,%r14,8\),%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 42 16 40 da 31\s+vsm4key4 \(%r9\),%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 62 16 40 da 71 7f\s+vsm4key4 0x1fc0\(%rcx\),%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 62 16 40 da 72 80\s+vsm4key4 -0x2000\(%rdx\),%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 22 16 20 da b4 f5 00 00 00 10\s+vsm4key4 0x10000000\(%rbp,%r14,8\),%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 42 16 20 da 31\s+vsm4key4 \(%r9\),%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 62 16 20 da 71 7f\s+vsm4key4 0xfe0\(%rcx\),%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 62 16 20 da 72 80\s+vsm4key4 -0x1000\(%rdx\),%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 22 16 00 da b4 f5 00 00 00 10\s+vsm4key4 0x10000000\(%rbp,%r14,8\),%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 42 16 00 da 31\s+vsm4key4 \(%r9\),%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 62 16 00 da 71 7f\s+vsm4key4 0x7f0\(%rcx\),%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 62 16 00 da 72 80\s+vsm4key4 -0x800\(%rdx\),%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 02 17 40 da f4\s+vsm4rnds4 %zmm28,%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 02 17 20 da f4\s+vsm4rnds4 %ymm28,%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 02 17 00 da f4\s+vsm4rnds4 %xmm28,%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 22 17 40 da b4 f5 00 00 00 10\s+vsm4rnds4 0x10000000\(%rbp,%r14,8\),%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 42 17 40 da 31\s+vsm4rnds4 \(%r9\),%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 62 17 40 da 71 7f\s+vsm4rnds4 0x1fc0\(%rcx\),%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 62 17 40 da 72 80\s+vsm4rnds4 -0x2000\(%rdx\),%zmm29,%zmm30
+\s*[a-f0-9]+:\s*62 22 17 20 da b4 f5 00 00 00 10\s+vsm4rnds4 0x10000000\(%rbp,%r14,8\),%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 42 17 20 da 31\s+vsm4rnds4 \(%r9\),%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 62 17 20 da 71 7f\s+vsm4rnds4 0xfe0\(%rcx\),%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 62 17 20 da 72 80\s+vsm4rnds4 -0x1000\(%rdx\),%ymm29,%ymm30
+\s*[a-f0-9]+:\s*62 22 17 00 da b4 f5 00 00 00 10\s+vsm4rnds4 0x10000000\(%rbp,%r14,8\),%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 42 17 00 da 31\s+vsm4rnds4 \(%r9\),%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 62 17 00 da 71 7f\s+vsm4rnds4 0x7f0\(%rcx\),%xmm29,%xmm30
+\s*[a-f0-9]+:\s*62 62 17 00 da 72 80\s+vsm4rnds4 -0x800\(%rdx\),%xmm29,%xmm30
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-avx10_2sm4.s b/gas/testsuite/gas/i386/x86-64-avx10_2sm4.s
new file mode 100644
index 00000000000..5859bc055b8
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-avx10_2sm4.s
@@ -0,0 +1,67 @@
+# Check 64bit SM4 instructions
+
+	.text
+_start:
+	vsm4key4	%zmm28, %zmm29, %zmm30
+	vsm4key4	%ymm28, %ymm29, %ymm30 
+	vsm4key4	%xmm28, %xmm29, %xmm30
+	vsm4key4	0x10000000(%rbp, %r14, 8), %zmm29, %zmm30
+	vsm4key4	(%r9), %zmm29, %zmm30
+	vsm4key4	8128(%rcx), %zmm29, %zmm30
+	vsm4key4	-8192(%rdx), %zmm29, %zmm30
+	vsm4key4	0x10000000(%rbp, %r14, 8), %ymm29, %ymm30
+	vsm4key4	(%r9), %ymm29, %ymm30
+	vsm4key4	4064(%rcx), %ymm29, %ymm30
+	vsm4key4	-4096(%rdx), %ymm29, %ymm30
+	vsm4key4	0x10000000(%rbp, %r14, 8), %xmm29, %xmm30
+	vsm4key4	(%r9), %xmm29, %xmm30
+	vsm4key4	2032(%rcx), %xmm29, %xmm30
+	vsm4key4	-2048(%rdx), %xmm29, %xmm30
+	vsm4rnds4	%zmm28, %zmm29, %zmm30
+	vsm4rnds4	%ymm28, %ymm29, %ymm30
+	vsm4rnds4	%xmm28, %xmm29, %xmm30
+	vsm4rnds4	0x10000000(%rbp, %r14, 8), %zmm29, %zmm30
+	vsm4rnds4	(%r9), %zmm29, %zmm30
+	vsm4rnds4	8128(%rcx), %zmm29, %zmm30
+	vsm4rnds4	-8192(%rdx), %zmm29, %zmm30
+	vsm4rnds4	0x10000000(%rbp, %r14, 8), %ymm29, %ymm30
+	vsm4rnds4	(%r9), %ymm29, %ymm30
+	vsm4rnds4	4064(%rcx), %ymm29, %ymm30
+	vsm4rnds4	-4096(%rdx), %ymm29, %ymm30
+	vsm4rnds4	0x10000000(%rbp, %r14, 8), %xmm29, %xmm30
+	vsm4rnds4	(%r9), %xmm29, %xmm30
+	vsm4rnds4	2032(%rcx), %xmm29, %xmm30
+	vsm4rnds4	-2048(%rdx), %xmm29, %xmm30
+
+_intel:
+	.intel_syntax noprefix
+	vsm4key4	zmm30, zmm29, zmm28
+	vsm4key4	ymm30, ymm29, ymm28
+	vsm4key4	xmm30, xmm29, xmm28
+	vsm4key4	zmm30, zmm29, [rbp+r14*8+0x10000000]
+	vsm4key4	zmm30, zmm29, ZMMWORD PTR [r9]
+	vsm4key4	zmm30, zmm29, [rcx+8128]
+	vsm4key4	zmm30, zmm29, ZMMWORD PTR [rdx-8192]
+	vsm4key4	ymm30, ymm29, [rbp+r14*8+0x10000000]
+	vsm4key4	ymm30, ymm29, YMMWORD PTR [r9]
+	vsm4key4	ymm30, ymm29, [rcx+4064]
+	vsm4key4	ymm30, ymm29, YMMWORD PTR [rdx-4096]
+	vsm4key4	xmm30, xmm29, XMMWORD PTR [rbp+r14*8+0x10000000]
+	vsm4key4	xmm30, xmm29, [r9]
+	vsm4key4	xmm30, xmm29, [rcx+2032]
+	vsm4key4	xmm30, xmm29, XMMWORD PTR [rdx-2048]
+	vsm4rnds4	zmm30, zmm29, zmm28
+	vsm4rnds4	ymm30, ymm29, ymm28
+	vsm4rnds4	xmm30, xmm29, xmm28
+	vsm4rnds4	zmm30, zmm29, [rbp+r14*8+0x10000000]
+	vsm4rnds4	zmm30, zmm29, ZMMWORD PTR [r9]
+	vsm4rnds4	zmm30, zmm29, ZMMWORD PTR [rcx+8128]
+	vsm4rnds4	zmm30, zmm29, [rdx-8192]
+	vsm4rnds4	ymm30, ymm29, [rbp+r14*8+0x10000000]
+	vsm4rnds4	ymm30, ymm29, [r9]
+	vsm4rnds4	ymm30, ymm29, YMMWORD PTR [rcx+4064]
+	vsm4rnds4	ymm30, ymm29, YMMWORD PTR [rdx-4096]
+	vsm4rnds4	xmm30, xmm29, XMMWORD PTR [rbp+r14*8+0x10000000]
+	vsm4rnds4	xmm30, xmm29, XMMWORD PTR [r9]
+	vsm4rnds4	xmm30, xmm29, [rcx+2032]
+	vsm4rnds4	xmm30, xmm29, [rdx-2048]
diff --git a/gas/testsuite/gas/i386/x86-64.exp b/gas/testsuite/gas/i386/x86-64.exp
index b7f5c56c842..44088b92919 100644
--- a/gas/testsuite/gas/i386/x86-64.exp
+++ b/gas/testsuite/gas/i386/x86-64.exp
@@ -534,6 +534,9 @@ run_dump_test "x86-64-amx-avx512-intel"
 run_dump_test "x86-64-amx-movrs"
 run_dump_test "x86-64-amx-movrs-intel"
 run_list_test "x86-64-amx-movrs-inval"
+run_dump_test "x86-64-avx10_2sm4"
+run_dump_test "x86-64-avx10_2sm4-intel"
+run_list_test "x86-64-avx10_2sm4-inval"
 run_dump_test "x86-64-clzero"
 run_dump_test "x86-64-mwaitx-bdver4"
 run_list_test "x86-64-mwaitx-reg"
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
index 368d00051e0..2794e292248 100644
--- a/opcodes/i386-dis-evex.h
+++ b/opcodes/i386-dis-evex.h
@@ -538,7 +538,7 @@ static const struct dis386 evex_table[][256] = {
     /* D8 */
     { Bad_Opcode },
     { Bad_Opcode },
-    { Bad_Opcode },
+    { VEX_W_TABLE (VEX_W_0F38DA) },
     { Bad_Opcode },
     { "%XEvaesencY",	{ XM, Vex, EXx }, PREFIX_DATA },
     { "%XEvaesenclastY", { XM, Vex, EXx }, PREFIX_DATA },
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index f74fb163109..f01c719e5de 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -4271,9 +4271,9 @@ static const struct dis386 prefix_table[][4] = {
   /* PREFIX_VEX_0F38DA_W_0 */
   {
     { VEX_LEN_TABLE (VEX_LEN_0F38DA_W_0_P_0) },
-    { "vsm4key4", { XM, Vex, EXx }, 0 },
+    { "%XEvsm4key4",	{ XM, Vex, EXx }, 0 },
     { VEX_LEN_TABLE (VEX_LEN_0F38DA_W_0_P_2) },
-    { "vsm4rnds4", { XM, Vex, EXx }, 0 },
+    { "%XEvsm4rnds4",	{ XM, Vex, EXx }, 0 },
   },
 
   /* PREFIX_VEX_0F38F2_L_0 */
diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
index 62861520e64..84b057a1190 100644
--- a/opcodes/i386-opc.h
+++ b/opcodes/i386-opc.h
@@ -229,8 +229,6 @@ enum i386_cpu
   CpuUSER_MSR,
   /* Intel MSR_IMM Instructions support required.  */
   CpuMSR_IMM,
-  /* Intel AVX10.2 Instructions support required.  */
-  CpuAVX10_2,
   /* mwaitx instruction required */
   CpuMWAITX,
   /* Clzero instruction required */
@@ -337,6 +335,8 @@ enum i386_cpu
   CpuAPX_F,
   /* Intel AMX-TRANSPOSE Instructions support required.  */
   CpuAMX_TRANSPOSE,
+  /* Intel AVX10.2 Instructions support required.  */
+  CpuAVX10_2,
   /* Not supported in the 64bit mode  */
   CpuNo64,
 
@@ -374,6 +374,7 @@ enum i386_cpu
 		   cpuavx512vl:1, \
 		   cpuapx_f:1, \
 		   cpuamx_transpose:1, \
+		   cpuavx10_2:1, \
       /* NOTE: This field needs to remain last. */ \
 		   cpuno64:1
 
@@ -496,7 +497,6 @@ typedef union i386_cpu_flags
       unsigned int cpulkgs:1;
       unsigned int cpuuser_msr:1;
       unsigned int cpumsr_imm:1;
-      unsigned int cpuavx10_2:1;
       unsigned int cpumwaitx:1;
       unsigned int cpuclzero:1;
       unsigned int cpuospke:1;
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl
index c335f0347a3..75a4c4f672c 100644
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -2196,6 +2196,9 @@ vsm3msg2, 0x66da, SM3, Modrm|Space0F38|Vex128|Src1VVVV|VexW0|NoSuf, { RegXMM|Uns
 vsm4key4, 0xf3da, SM4, Modrm|Space0F38|Vex|Src1VVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM }
 vsm4rnds4, 0xf2da, SM4, Modrm|Space0F38|Vex|Src1VVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM }
 
+vsm4key4, 0xf3da, SM4&AVX10_2, Modrm|Space0F38|Src1VVVV|VexW0|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
+vsm4rnds4, 0xf2da, SM4&AVX10_2, Modrm|Space0F38|Src1VVVV|VexW0|Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM }
+
 // SM4 instructions end.
 
 // VAES
