@@ -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.
@@ -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:
new file mode 100644
@@ -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
new file mode 100644
@@ -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'
new file mode 100644
@@ -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
new file mode 100644
@@ -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
new file mode 100644
@@ -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]
@@ -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"
new file mode 100644
@@ -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
new file mode 100644
@@ -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'
new file mode 100644
@@ -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
new file mode 100644
@@ -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
new file mode 100644
@@ -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]
@@ -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"
@@ -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 },
@@ -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 */
@@ -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;
@@ -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